diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart
index 9c95b41..d6c650f 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart
@@ -1371,7 +1371,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/9yaPWzbRhTHSUqyJVmy5a9EbdNUBRLULWrT+UAgdFKRunDRDEYTFPGkMNJFYiGRKkkVaaeMHTtmzNgxY8eOGTtmTLeMWQJkc++qR/l8vjudCIU6iMDD6cxLeO/H/717d8eqMboqUO5Dyf49LvNMybZ7CeUOtiy2GtQbUD6A8gmUV7Bdwnbv+Oig+f3B8VdtJ4iakd9sDQZ7tweDu24bkXZXsX0savcN/g0Npe0OWl3/66AT4vufY/t0Urs7bhhBPw/BH+JnBlud8pvUX66c1k1szy6ere/snnIxKC7jyzxbbTC34/cSP/cErkODf61hW8YWI/wI/97EJsB77j0SjkVsDrZjbPYwDOye33J6dsf3Oz1kd/0+sn8LHLvv/+TbYdAa/SAPsIeeG0UojEIb9R+idhsFTVJFgU0/n7TvC3RUo/5OuNd/vJM7efU2Z/z7NmdiY/V1aI3KQXZUPl3i837DcCL/r4w3225fwHsdWwHb3Qg7eA+NdcP69Rk2K0WuNaYfb5hykt+xzuoCvz8A38d+7wbo56HY//hKy/+8cXYcsnHLYNpN0sv/GlThhtuZEr1sYSuR+IO7/63ruWEXtXm8vlgwvVwC32m/acksml5IvFLlZino5cj1Oj+gcOB7IeLx2l1QvdB+L7JezCn0klHQC0llZHrZ00QvA2u2eqH91kkvrE4aTF5H7hMBvDPULhVetO7YqwR5VM/l89kDpmnrwxDkg7Su6RR92nxeNl5N6rlp5esV6Eu8lIl1LFjmnHtP1zTJ17dgPRQjsqj7GerfPYdGL3KK8+iUep+Yp6Pods9FnihPva5JXHxgzThPj/3WLE/XLS7G6+cWrJF5+tjSIC5WBet91X2VpHHwtSAcqnA3FeYjku/xdHljzuPyNVOqjkuVvH6R8lpWH9YUvCwFfZApncfppib6eJyZrT6Ivzrpowqcx/O/KY7bBsTuWcZtEa9tbGVs3rD/He6/E7l4BSDQSTlFXtPOZ/kEXGRxdQXyLyfoGKJxc1Wj+SzOh+PUXXVfXxavLKrOjtt4Aru/Pdt8Pu4aL5+nun3ufRRgPk/rfTzFtoHtj7gOPJ5B4P4T4tlz2F//Cwb037DP/mJ5VP4D4F8VII8tUoGb+FcG/qvAdQ3278Hx39fheRvyeLKU8vo4dG/d5L2nIrznecYRWXyddRw55XHjOo/HiiY8spL+T8vDUuJx7RaPR0kTHhlB/1cT8MgozDOhW+fOM+WU45qIR1ESt6flkVXQx1AQP1Yh1s+bR0HQ/2oCHjklHvz4saYJj7xkf3laHktKPPjxo6IJj2XJPsm0PJYV4sdQED/WNYmnlqD/tQQ88gr7lY96vhM1f3F6gv26Dc25XEnApaDMxfUeCbhsas5lJwGXojIXz/EEXLY04WIK/NhPwGVFwmUD5vy2P3zYQ6cDieWyrUm8FXGpJ+BSUucyHkgslwuac2kk4FJW5zIeSCyXixpwMSX7SIcJuKwq5Cue0+eeQ1ZTPoesCM4faD6WRDhHCfisKXx3EUaB63WaThA4v/I4xedxae+3meADu08mWvfQHLMSjl8m4FiRcLwAa6M+CkOng5pdx2v30HmOHwLbeejNTMDpfgJO6xJOm5Azt53IGUPi6I18/3t5TpysCfuyJNZ2BfuyeeD4bsJ5SoPZlz1SOE+hPwmpwTNFn42wPC+nvI/Bnrc8MfX6fshDj7nnUp/A73nEuff5/dC8z3Ni7m6E+qLvcUoacE/rPOe/AAAA//9qGb5tyDIAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/9yaz2/bNhTHJdlObMdOnMTNvK3rPKDFsmKN0x8ojJ08dBkyrBiMtSjak6vGrK3Blj1JHrJbjjvu2D9lf8L+hByz2467FNitJdtHh6VJmRIs0YmAB1oxY/H74ePT45NqxvujAu0+tPzfaZvnWr7fKbS72LLY6nDegvY5tCfQXsd2FdvjZ+2Dzo8Hz77p2l7QCUado/F478F4/MjpItLvBrbPZP2+w5+hY2i/g6P+6Fuv5+Pvv8L2xbx+Dx0/gHEegh6iM4Otyeh+d752fm4SnTsfnv9185yLwXChx3/ceYs7p/NCr/sGjkNDfGxgW8VGEX6KP29jk+CdmUfCsYjtCbafsDX6oyFqeJPuaOi4yGsMR7+MGr539P4D+dXGxHWCAPmB30DDF6jbRV6HnOLO7EVJ/+Hs9eqMPxHOzScPc2/OXueMf17nTGy8P+1awCULXFbEfM84LuR3w/jy/fYlfDexFbA9CrC2x2jqJ7yuL7FZCXKsc9c949p5OqkfNSU6PwatU523PPTrRK6XHknpzRsfris+DhlcfJrnD+98TIUT7meG+EMVW4nEEzzy7x3X8fuoK+Jz84L7w1XQyupkXeKi+wOJN6qcLAV/aDtu72fkj0euj0R8bl0Sf2B1XiZ/MCP4Q0bBH0hqEeYPe5r8oW0t1h9YnTr9gfeDFpdHke/JBP9rqB0qfFi/4o8S5DEDR8xjDxgmPf+GJP9i/ZRNgaPmy2Hrz2Sum1Y+XIGx0K0C9VPJNmJmXm5ryoersL+g3Czm+wwzzhPodJxTvM9F9Oe5eTAKHgwc5Mrywjua4lrLWnAeTHVqzoOXLa7R/eYR7ClF81/VENdqkv2wat0hbhw75fOICJxNhfsHybdEfnc35XV2yrWq60wlb77IeSQ//1YEPpbC/JNbrojLPU3zf5hZ7PwTfTrnvwYcp/VPUx5nDYi1i4yzMj5XsJWxuZPhD3joduDgDFviB+UE+US93+RjcAiLg2uQ/9hez5Ctgxsa7zc036SpsWpdOizeWMw5vw5pvrxbXWy+TIcmypeZYc/wL8D9Nin+r/BvbmH7E673B6zPEwi0xxCPxlAf7sMCfQ514qersO8F0O0CtEVooZ7fLkFbhnYd/n8DrguCX22Gx4eVlPeXvnP/nmheijCvacaFsPi46Lhwrv/uHZH+NU36syHjjarfUtJ/+75If0mT/oxkvOsx9GcU7gu+0xTeF8oJxyWZ/mJInI2qP6sw/xPJ+l+H2Jy2/oJkvLUY+nNK+sXrf0OT/nxIvTSq/hUl/eL1X9GkfzWkbhBV/6rC+p9I1v+mpvhnScZbj6E/r1CPezkY2UHnN3sgqU9tLRmH6zE4FJQ5OO5LCYftJeOwG4NDUZmDa7sSDlVNHEzJuPdjcFgL4bAF9+DuaPJigM4XBs/hiqb4KOPQjMGhpM5hujB4DjtLxqEVg0NZncN0YfAcPtLAwQypoxzG4LCukC+49lD43KuW8HOviqQ+zvKwBM8D6dGOwWND4Tm9H3iO2+vYnmf/LuJCnwclXV8yYcx8XUi2b2C5ZUO4fR2DWyWE2w7sLYbI9+0e6vRttztAs9w+AZZp+JMZg8vTGFw2Q7hsQ07atQN7CkXgT+T9zGspcbHm1BlJbOxL6oz/Q/v3nHp/i6szthXq/ewrBHW4puw1A57ftYT39fzzgLG5XO+TuOhY+Jzkc/icRpxK8n0S3c8bKGcnQEMR5zr0SZtzWs8b3gYAAP//ZmL1wygwAAA=";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart
index d9896c5..0c962c5 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart
@@ -562,7 +562,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/9SYzW7TThDA18m/f9I2LQH6kX4AKRQwIGKOEadWJSIRFYraHNoDatPUNEZJbGxXKjxBH4Mjj8EjcOTII/TYG6zr2dge76Y2pMasNFrbu7Znfjv7MVMkbilA/Rxq/JzVOVTjfkTyvjNGRYbHNagNqE+h/gz1Qyp3qDR3G9W919XdF1rP0E1bPSyv93W7o5rbnZahEvKU9rnP7VeHi3rfVs13rbZ68d27VOa5/Ru61reHtLs/fEzbVrjtu6odVO2i7IDdBWS3c5917B/z7h1U57kgv0Y+eP/t5nDOayRY2Pix5z+hNAi/zFBxfolNuU1llopgGEL63AK7nba3VJRjy1S6ervVVY50/airKh29pyqfzJbS09/rimW23Qvj+KCrtRWNjZqlHGj9Q61/ZCm2atmWYrV6RlfdcxUpO+/06PdLwJPpcQI8vmaCHJj/laSgvhW4nyDxOO4ION6gMk5lq7rRXH/zarMKzx+BD3I5lr3emKczLpkEeUadf8yPJwifc1Hi85m8hHMlor9OU/mfykZ9a8OBvEqvl4V8Wa+wv86mlG9UnvkR8SzAWt7cql84ItOTz5P1CvOcSynPwfxHdmOuIo41xHFfwHEB1gD+LkTIPSqLfq6CjpjrKsy1pLji/xd9/iYhv5F85wDM+UzAScSZ+DjznhPfPuOsJS/1bWq33aEGcbk9SNgfS4jXGaqj2O2UisDuJbDdZ/czU/1wTFXinw+gJGV/TuAXRaRPDvkJaz9nfpSNt66tCXhNwXnEPeW569O0f/5BA+bm7NXXEp5vGf98Q+e6CtJvjEQrUeeZLHh/HMbxRHDOL8FYJsUpLo//foOHFIHHRwGPlYR5DJtnGc76XYi4HsWdXyweCM0vaMD/n0w4TpDBF9h6Y8D8+gJxwo/s8HMs01uWAmHXH8ddonihBGMW5OgFCphnPuF97rJ4mcUHkiA+KAjOs5mYflmLGB+E4lgUGGCeUynjGZVfdkT8cDzA9EP8BoEA5jf9j/Bj6yfLC4yKXx7Wm8317ab/3Ib4seYQv+sp4yeKB7CfyLB2Cb4zcJirymPNAzuclQutp6gD1mfhL+exToHHd0EeS0b7Uk3y8kVxOO7H3JeeQAwr4lhGL2Cuiwn7ddy8Ldu3ZmLmtWavKK8Vyhti3tARc15KOWdRXhaXuZhcdyLuZ0xfIVcvxcX14+WU8/0VAAD//41PNDrQGQAA";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yYzW7TQBCA10kLKU2LEf1vARcKBBBxjxWnViUiERWK2hxSLv2LIUb1D7YjwRvwGDwKj9Mjx95gHc9ie7yb2ChxutJoY+84u/PtzHi8KyRoMvTb0OP7rC+hHusRKfyfaSoVuF2H3ob+B/Q/oX9G5SGV1nGzdvK+dvxGN2zL8bROdc+0vK7mHHXPbI2QV1TnCVevAT8apqc5n84utP7/PqKyzNVvWrrpDRgPJnxBxza548eaF19av7XBbhnZ7V8XqfyaCq99VNulOD97Nn5ducfnfA39Lom3bXT/D7Qm4bcFKmUq2JQHVBapCLYhsZ77YPdHKodU1K5laKrT61iGbmqOalhfLNV1LoIfdu/8Ur9QdbZVrnqumx3d/OyqnuZ6ruqeGfaldhLMXvWfMYJ5FODI5t8Ff2sWgBcJ9WJ+C3p3MnJrC7j52zLj21rbb+19eHdQg/vPwee43KqhNubn70MhB37MDxkHzAu32SG8dlL62TyVW1T2G4f7Pqwt+ntDyIlpJf1sMSdOw7iUR8RFhlzaOmz0HYPlQT4XppXksjRhLrIUvxZxqSMupwIuqxBj/KxOyGMqa1FOAkXMaQt8f9yc8LwrEb+R0P5Lkfcp5nsl4CPiSyJ8efdJJF/7sf3WOqIAvC61ibvupzn5lYI4XaE+jb1+2xHYuw42R+x97Whfe3RV/DoG2rjtLgn8YAWto0T4nH6z54vZ8tGugNMcvMeD6ijIK/PROIMBzMt/593OKa4K0bpUitu9g9Y1TdK1tPFUETw/A/v3TVAXK7CH4+aTlcPUf3CQUnD4LuCwmROHQfFU4ORlOWW+yRpHrF5OxBEM4Plnc6qjK7D3Cqqj61BHN4uD62n2EpNG9B0iqqcV2KM4t7CQxvzKOdfRUso6upDRr+op6+jEdxoqoDGfuRtSPxdHxAPXz+x7HvH4VzhjHvMT4iHDvNcj5lGGuD7YO2pF6x7Egw0neNydUL2noDgR7avonGZc5yPLwASf9iTyElLA61md0PlIHRJUe8j5CKujFjJyO82Yz1/Ct5uIWxU9gDmu5ZzfF1Lm98UxnZMkzpMwL1DEnNZvSJ5fysilnTLPs3NZIZfwqITrRxs58fkbAAD//3QI2/tgFwAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart
index 9f6547a..cb39b5d 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart
@@ -288,7 +288,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yXzW7TQBCA101DgoASaKGh/IUDUrlkEaeIU0uIiNQKVTSXXqhSx42N7GxkuwL1CXgcHq1HbjDuzkbO2Gu7Uep2pdHU2fV655vZmWmTydFA/R41/V3pOtF03W/ULZBKbF7t20f9GmQTZHB00Dve6x19dLyp8ENr1O4KV/jsFcw9TZ0/dM6trPcHtjMZsw5+X51rO3ZOA+RPZf65Xku35wL1Dpsfyp4O6n846Do1HoBUQaR10rY1EGJ24vvqvVOQ7yD8LPC5K8yhy8dCjF2L28Kz+Lk/5J74IXjgm/KP6dmJ65jcmYSWfzo0rYCfOJMRoAl4aAVhwIOhN3WtY3mAD+3oJU9+fyX2/b4xb++Mo8EyR1Fefc3799B/33qfL5+3QB4neLXVdILbGtpRFre8eC7Kz1gSPxU3n/Z3u3ugX4BsJPmp6QS/h7eMX4vkm7+KZ2U59/M+yCqIzC6MPUGGJO0kOEUxWbvB+9k05u3vkPNVWbGh48di/OLxq4u3n84otFM4rWPNKIvTVXmsLsDDyOAR5Z87ILbljO0wyWOjZB6zOkfuESPxpLtnv2rLrYOySqfUQZygvDZLvmfbGBOKxwXeM9U31Kv6e1eNcVPn3zGu994F9nCalp+i50clcmuR89G4Svj7UB5cn//lAl380v0jW+9e9g3dwe7XL/s9/P0dyBv9/m26vqhfO8b15A/lVxP7RWrvs5Lzh86vTU1/m1fPi/pzHXtB0q6wtyAv9fvPVub5kY76An5cyfBjA/eMXBM6YkLt3LqlfjwQsHOmH+WKq/JtLMC3ksFX9W0B9m2U7/OS60YeX9pn5v2fm1W34/XpfwAAAP//Xi3pisgPAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yXzW7TQBCA101CgwolQKGhIMixp7jiFHGihIhIrVBFcqk4VKmz1Itib2S7QuIJ+gg8HsceeQNYZ2fAGXvtNEpMVxpNnbV3d77Z+WmT6dEAfQCa/o66TjR97wp0S0klMY/r9kG/UrKrZHh60js76p2+Ed5UBhEft7tyIgP2Us09zZwfiO887/uhK/wL1oH98Vz7iXNa8Tkq889Xd7LtuQb9ls0PtKcD+jcM+h6O+0pqSrR12rZtJcTs1P743WclAyW2Kz1uB5dj6QmfB7Ynv0o7DBz9x/TyfCIcW/gRD76MHB7a58IfKx6hHfEwCu1w5E0n/Ezv+rodf+T9tXsjsW/TmufWYvljUT59w/db4K9Pvfez5z0lj1J82jid4rQN5183pyIe1op4oN/fHR92j5R+oWQnzQOnUzwelMSjRfLALzxHZTVxc09JNbZhFvWMPQE2JB2k7I/vzuZ/iJuGNW93h5yrxhYbJm4swS15H03355sYR24Gn8eQw9fN56YcqktwsHI4xHkhTu0uFxdulOawUxIHrDO0bjJyf0zx1N9cbR3SVTKjDsEE5bRbUjztwx1ADj8hnn5APrmumuOrlsw/OG+tN75CdzTNyj/x88MS8y8j++PvKf8O9IHN/ZN+oQH3sm64l5RLbOvdWf3uDg8/fjjuFfZ5ep9F/XhgrSc/oB8d6MuoH5+VlB9Mfmwa+sei/nlR/1mJerCF6/9rKwr3KfIfHfUl/LeR478GrDmRzigS0qf+27tl/juRavFcrvqNm3JtLMG1ksMV+64Q+i7K9XlJ9aCIK+0Pi/5vzKvDybrzJwAA//8GIg9dGA8AAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart
index 3de2bb2..9546dd4 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart
@@ -810,7 +810,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xXTY/TMBBtU5CyLR/lc8OtEpdeWO9xxWkRWgkJIXHgsqfKm5pskBOHOEGCX8uxR/4BOGTcOtOYflDasMpIo2kcW5n3+ual9TplDKGeQsXrurqo4n1nxnXX2DeCvR8u319M3l5cvoxodn3ymnI/5zQTqQf7i3M949zYOF+JbvXyHN0+Res/Id506uOhyr7KRUfl+rHK+ypRu0u4XTgfqJyoJLlMCRc+5SQQIuCMXIuIkW8pJZH4JIhM/fJDkl/x0CdhnLH0I/WZJFdhPA3jQJKMyUyS4skTf/7kk+JUtPR8zc9j4E9T5Bj3e8b3ldwq6/ejep5nGpezHs84xpb1uypvFzxzRtMa/RxBz/vicYR0PEN1FV6tKxsPTwDzb7wvUvY5V83U4NaxL9yuZU491I+LdIF50gL7W56eqrxn8CQTEUt2eJ4wP+c1PldjR9bY1fx8oTxnlvk5PiA/HrLoYefP/jLqVflbxU8X0sbPAHzu1XRa+37qN8RfdjU3jwCzwmu4Szs3m85NH97zTZubf62f4vfCnbl+tOu2+tlGP8//Q9911uTHgbTxM4Re3uU8CxP+FfMzuGG+6wE2jVebbzs3m83NADyo6b77A/0fWlc/ZxZenql8UNXPwnxb/91KR+MG6uhXAAAA//+Vb42mYBEAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xXTWvyQBA2+r4Q9f3w/WhNb0IvXup6lJ4sRSiUgodehILEZFtT8mHzUeg/6c/z2GOPvbWbZlbXaRYjKNqSgWGa7Q6Z5+GZJ6gVkqhBbUPF57yqqOJ7HeFZEe414O7loN8bnvcGx44ejlunum1Eth56vgb3476S0NcU+sV4Qc9d9NxG568QZ4X0+MuywnI+UXJeZ/mbJRr3A24V+q9ijCzJ2HMo8SPTcyyX+sTxbj0S+EbyxyQa2ZZBLDek/rVu0ICMLNe03JuAhDQIAxK/bmjMXteKu5w0vjkv/4G3AvBYFP5fEvr635L6WE7nd8r5VbLxi6MpOf/J8nvMr011PwVHGWbeNH8NpNspqstwch3J8O8B1necRz69i9g8KXh5bBqvKtlHDc2hIh1gfp6V9fCzz/KXwE8w8dyAbo8fzEs3xcf4TmWJde3JvW5HVLIn9S3wIupFEeaR+YdaWuRtGS8KpIyXKvjYiWmmfncqW/aPde3HP8DKcAruke9H1v2owPd6V/Zj03qJv/s/ZnrhbprrZRW9HH4iPy1m5KUIKeOlBrNcRHZoTewHzEv1i/ipBpg4Tm6q+X5k248qeMyu+ukT+r2SVS8dCR8HLP8s6mVuqrmvrqSb5g7p5i0AAP//5ns7IOgQAAA=";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart
index 5874496..6689a76 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart
@@ -426,7 +426,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKN0BpdHFLZD4jEDMAeXLALEIEOfmZ+VbWaVWJOYW5KQWW1m5JmfkY1OvDMTSQBwSGeAa7+0aaQXSqAfTpwfThmG/Aw77STGPEaqfGUm/BpRWgNIBjBA6A0ozoNkPC4cZUHoBlP4PBRsYsAN0dytgCWd2JHFhIOYG4uDUorLM5FS/xNxUosKbB4hZgBjGlwJiIah6LMGCEc6cQMwFxC5AbAPE+qXFRfo5+cmJOfrp+fnpOan6Gfm5qfpVRYn6ICP1i4uS9WHG6qcCjQUTeiC5XGLci24/jM8DDS9c4Ycebxeg9AMm7PEGAwZofFCcYROHASFoeIDcG1xSlJmXjj3cQGqYqBhu6OkD5r8bjMT7CwQscPgLli4Q/tItSi0sTS0uwe4/GKCW/9Dj0wFHOXODgThAbDxr4NDPC8SsQFyWmFOaiiN+RansfwakNI4eHhJIbmNEUk/rdCENLXtQ0kVxQX5ecepousCRLjQGQboABAAA///YBJ9/yAcAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKN0BpdHFLZD4jEDMAeXLALEIEOfmZ+VbWaVWJOYW5KQWW1m5JmfkY1OvDMTSQBwSGeAa7+0aaQXSqAfTpwfThmG/Aw77STGPEaqfGUm/BpRWgNIejBA6AUozoNkPC4cZUHoBlP4PBRsYsAN0dytgCWd2JHFhIOYG4uDUorLM5FS/xNxUosKbB4hZgBjGlwJiIah6LMGCEc6cQMwFxJZAbAjE+hn5uan6RaUp+bmZealF+iBz9IuLkvVhZumnAs0CE3oguVwi0wW6vTA+DzSccIUbenydgNFM2OMLBgzQ+KC4wiYOA0LQcAC5N7ikKDMvHXt4gdQwUSG80NMD3F+MxPsHBCxw+AeWDhD+0S1KLSxNLS7B7i8YoNRf6PHngKM8ucBAHCA2XjVw6OcFYlYgLkvMKU3FEZ+iVPI3A1JaRg8HCSQ3MSKpp3U6kIaWLSjpoLggP684dTQdoKUDjQFMB4AAAAD//1YHjLGYBwAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart
index d432bee..a6111e7 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart
@@ -139,7 +139,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKG0ApdHFYTQHGo2uzgKJz4ikTh6IxYE4JDLANd7bNdIqNz8rX68ktbhELyg1uQRsDiMWfQpo9nyAuZMVQjswoAIDNHf8hwJ0dTDAA8QsQAx2BBCIATEfEKM5D8OfIPexA3EMyE9ArF9aXKSfk5+cmKOfnp+fnpOqn5Gfm6pfVZSoDzJKv7goGcIoKE3KyUzWz8wrSS1KS0xOLdZPysxLycxLL9YHWVesXwS0Tw+kNBdkjwbUfbBwUGCE0kxQmhk1HCzQ3MnKQBzAFY4MSOEIcw82wAmNtwoc6YITGma0Di9Sw4GFjHBgJCIcKnGEA9cgDQcOMsKBCU848ELtKs9MKcnAEg7cgzQceMgIB2Y84QAqS9iAOCM1Mz0DSznCQ6dwQC9XJdDyAIwPCAAA//9Y6fq5EAYAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKG0ApdHFYTQHGo2uzgKJz4ikTh6IxYE4JDLANd7bNdIqNz8rX68ktbhELyg1uQRsDiMWfQpo9ryA2c8KoR0YUIEBmjv+QwG6OhjgAWIWIAY7AgjEgJgPiNGch+FPkPvYgTgQiD2BWD8jPzdVv6g0JT83My+1SB+kX7+4KBnCKChNyslM1s/MK0ktSktMTi3WT8rMS8nMSy/WB9lRrF8EtEQPpDQXar4G1F1w/zNC7WeC2s+M6n8LNPexMhAHcIUfA1L4wdyDDXBC46sCR3rghIYVrcKJVP+zkOF/RiL8X4nD/1yDzP8cZPifCY//eaF2lWemlGRg8T/3IPM/Dxn+Z8bjf1BZwQbEGamZ6RlYygkeGvsfvbyUQEvrMD4gAAD///PaA+DoBQAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart
index 8ece68d..c6c0948 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart
@@ -588,7 +588,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+yYzW7TQBDH7ZQobmlFkEBK+ZBCy6EHlKX5UsQpl0qRkAAJDvQUNo6bbLWJK68joT4FRx6DI4/AkSOPwCNwg108hvWyG5mExA4w0mi8ztgZ/+eX3XUqVmRliA8hqufj6ChRzRvbUexyL3HvwPmXEF9DfAvxPcRPEL9APOB+i/uL02cn/ccnp48m/rlfCz0W1p6HwcwNj1Pm1VPmNVLmNVPmtVLmtaO8B9zvz8t7evZkRikeUI/FOpZAdyH5WOqDGH8sJMe9YnLsOMnx553k+MNectyFBlfVvkO/O4WffZct5inm4CtYz9LbNXiuuMn7/Pg6d0P7f+HPgesD7ufc0YwFiPoupmjk+yPqobE/8dBlgJG4JWKBGx1czAaUuIhMQy84w67H0IBMh2Q6Ykh8LUPMCwim5BKHxJ/2xbk++14Kq4kbTBR9raQeHaXOkpXOTHpakp4iHhmu34Z6iEGvbag1L3pVpNptqU4Td72VcFc3clc36Li7AdxdEZ/b6+HuKvctMS8NqVavPWAvS71kW5bDNyvhsGHksDFnnc47h8U1cliGWqJS+8eqXkLbnQz1qmrqlfuqrodp90XL8vxuJTw3jTw3DTzf2ACeC2vkeRfm8SEOsU6vm6BvHngWz/Lj9279i7y3jLy3DLxX/vOu5f0Ck0Cn1z7MEXngvSCvbznnfTX75raR97aB9zsbwLudwb6Zl6rV6+5fsm8+Aj0rxfm69RQOXxl0i7nT/lnC7ZD7bQ2XaqaqdzVjPqvAQ1xX17Be5fU9717G++uyxOIi7yPOAnrZS7yPHICmWa9n9h9er353Xi0voHthiXn1MGeczptXt6Q+fQsAAP//9zy6HcAXAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+yYzW7TQBDHbbdV3NKqQQLJ5UMKLYccUNzmSxUnLpUqIQESHOjJOInbLHLsyOtIiBOPwJFH4MiRR+mjcIPdeqyuF0/kxvgDwUqj8Vpje/yfn2c3MZRoNMEfgpfPx16XvBw3VSP/jFmD2TGcfwv+A/gv4L+DvwT/A/w+s3vM3py9OrGen5w9nfnv/U7o0LDzOgwW4/AoY1w3Y1wvY1w/Y9wgY9wwinvC7PGyuJfnLxaua49ch8Y6NkB3LvlUqAOff9OSc30jOf/aSM6nW8l5eyc5/7QbzVtS3RWot6Fd110cMU8xBz9hnCrpYxfeKy7yHju+zQwp/2/86XD9BTOLmTn1Z44ZLCb+jHhOYPL7mDQYRwfzxcglY5N4oROc22OHmiPiTYh3QU3+LGpSJyC2Sz7aIfE9i5+z6NXzaYffYHatr5J8/2Mpr4aSbWD6KYJ+3LeR6zchH4Loswm5VqWPIeSqCnlhXLUL4aqLctVFdNuuIVfrQr8smqtbzNZ4n5i4qfrsAFtl6iOOvJzNC+Gsh3LWW7LO1o2zjRI5a0IuUZbWkawP13KrRH1aKfmJdZPXq6z7lry8fi6E1z7Kax/h9U4NedVK5HUb+vDEDu00fe6CnlXwynOPv19d4unf4HmA8jxAeDb+83zF89wmQZo+e/DNV8GzJqxHdee5mH3rEOV5iPD8oIY8qxXsW1mWqfo8/Ev3rQZwdrm+XKdTibN3iE4xV6l/NrBxwOx+CndypKxvq2T+WlDvOI9DZH2p6++oRyXvb5vJtnXj/b++gj5qjv3/PmhY9vqj/uH15aZ9sbmCzlqOvnhQMYfL+uKa0A9/BQAA//9CnCj5wBYAAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart
index a57b993..ae7a3c6 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart
@@ -157,7 +157,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yWy07yQBTHabl8n4IG78YriS5YdQwr4wpNakxcQLQhwQ1CrVhTWtLCxifxMXwEH8udnmlPEzpOucQGZpJ/T2dynPn76ymnu6lgFDGeYWTXw/ifiWxef2Rd5ux7AtoHac262rpVmxc959VRBoY3UDS4qPaw5+edgg7G51VoXpk5h/XznuOvf2GspqIj9HmO8RvHTYo/isgiNLUH9+ugmH/rl480KAvqgB5AZOi5xHL0tkW6jtO1DPLi9Azy5rYJ3ZJ4rh7c9Icdy9SJaQ8M97mtGx7pmPaTaXc9Qo8Nri0DDvYU+gd4PuWVAZXC5yUF8VNGX5koh3LoV4r6LktRDn/lWEBfmnqv0fkxaIfLUfFTWI4ZrIN5cZy2jov4jFkuk7hKCXFdwr0aOKfv1Cafa4NXn1nBuUozcpUT4prH869rNX9+BNrmc/VTWK45wbnKM3JNJ8z16vJuElc/heX6T3Cu6Zg+FRZyHL8qw68ew28N3/lIk0SPG1yOFa6f5QX3pUfk8SGP/MCPqce4kXRfKiErDke/MbEc83Oux2m/mxbdhw5BWzEcG5x6LAjKUbQ+FP/dVPEbEct1RXCuovShcVxpDst1VXCuIaefAAAA//9EmEpVAA4AAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+SVTU/yQBDHoYXnUUGD78bXJnrg1BJOxhOa1Jh4gGiD4UQEqtbYlrTwHfyoHvkGOrudJjLuAomlHpjk32mXYXf21+nsXiayEvoKejoe+yXiaVz/27gimPcUdACyWg2zfWu2Llz/1dcHdjjQLbiY3tDlcWegw8lxVRZXJuvQfN7z4vEP9LXMuMV5nqP/RLvJiK2ELOKk9uF+AyTZ1o88VBBL8QFUBxkvvmsbwbDnu45nBwabxwiDbnTTH3benK7heAM7eHrs2qHRcbye4z2HBlsrurZtWC3U2R9czicH0uL9ZXHfSuQbauTL+LtG8huR/f6WVxHzscx7iz2fgHaFvHQeQnnl8H3Pi1cJ30ls07hkE+KyjHM18ZnV/paYS1NUR/mUuGRn5KIkxKWA617X6/z5GLQj5sJDKJd/KXFRZuSiJszl6vJuGhceQrn8T4mLKunLoykcaoRDQ8JhHb+dsUMBz5hNIY+qMJ+VlPuwhh9SBQunJunDMku6D2vIRMCLN2LKqzDn+vmrvnsE2pZwaArqprggfVd+Tld546VcVhek707iwmIol7WU++5XAAAA//9rPPmt4AsAAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart
index d29e13f..edb6f59 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart
@@ -104,7 +104,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/7yRsU/FIBDGeZroczBxMb5NR6ees5PLG4zLG3To1FDAiqFgoCz+83qk14SiOHrJr1cIx/f1647NdUH9jnq5v/Rt0ctzD9l6k527RW6Q5/aw75727f3o3l0zqTA1j1aYKJV8sdrZHc2l+aM/dLabtR4r/C/7X1QH9ntdIufIygSur5ErpGLzh59T5AQxiEQgBg/GCW5gcG4wCt7cqODTc0hXQvBifvmIvdECtJ2Uf+VCBei1ldoOAZLs/Ow0iXcxqYcmjY61nBllnfs7Lr67lhvLcsvvK+uMdHnt/1Am/53HdwAAAP//oYyvYtACAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKG0ApdHFYTQHGo2uzgGJz4ikTgOIFYA4JDLANd7bNdIqNz8rX68ktbhEzzMvOac0JTUlNC8zP08Cqg+knwmPPWBFSPYxoLkfJv4fCgIYsANRIOYFYhRHAPnyQCwOxDicieEediBmA+JEII4EYv2M/NxU/aLSlPzczLzUIn2QOfrFRckQRkFpUk5msn5mXklqUVpicmqxflJmXkpmXnqxPsguCBmfCbUxvhRkZbEeSGsunvBlgIYxsruY0fyLK7wYkMIL2Tx0wAm1NxFHvHBAw4Je4QAIAAD//8B6whbAAgAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
index f9a7236..3b81529 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
@@ -6254,7 +6254,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
index b2af3f1..ea6ee4c 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
@@ -3481,7 +3481,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart
index ca300b6..f860b31 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart
@@ -4578,7 +4578,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart
index 41ed26d..31930de 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart
@@ -1220,7 +1220,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaT2/jRBS3nUCzXVZb9l8NC10XBEQLG1cgpCh7aUWDilhQoGjFniLXmbZGiR1sp+py2iNHPgZHjvsR+Bh75MixN5hZv1lPxjO2k7ixI+1IT1O7jmfeb977vd9MoitR24D+OfT8/R5zrWJrwPWX2B5gG3m/eJ1OiIKw0zlDfuB4ruOedDoHk5Hl/ogCb+LbaN8KrSMrQIL3PMT2BbafnvS6/W+7TzrkhS3yvlb8upbsbcn5/g29ga3G/H8X+lPod7A1M8fdR2PLD0fIDVv42Y8zn++OxkPvKUKL+9WG+VO/mtw6GPX4mjx3cEW8fhvqtP8K4z97/z9oPyvidgPbOrYYkej+J9juQRykwJeY11Vsb2BzsR1jMyeBbw492xqaJ553MkTmqTdC5m++ZZJXm4FvR3+MJ0dDxzYdN0T+sWWjwDxy3AEeLTDJ8IEZj98nN/r20CHrRz48ivDRmHmM1Wk8KM5NVUltMjzbOfG8Bv4f7j3qHkIufZSNY4s+z+P5Fvi1bDxnzaO8OKsF4XwV8mO/+/jl9afYPsyBM32ex/naiuBs8HwOgF7UZ8O1J8F1AzicMh6J3fdluMa0mOQnbGsl4MnXhx3Ap6dN49Pm5ruu5GsyfBUGX9F92m5C7CKAru8MhPH4NrYrJeAnwkdlE5drjTnwURme4BvhOxLKrjVCIlxulITLhsRPFifC+w1Vnlez4qSlxBGt2wOubvN43QRuKyMPRf4bGbpjVj7kdafOjFljxmty4z+HdfoHek2yrn9x+pPy578p/MnOxxDo7zXmPuWDQ+SfOTb6HsJ+bh1OuPo20Y2S/3+O7b6Mz+WyNRFXm7B+y46reXHRJXGoA99QitMgbppwnz6382bU/3496l/cEcfVBfR/1i6nbuwNBkzVTfqll6Rj+DinOJxr+f0nrS3x/y5gwPj/wEe/TvBMhDjQVkadYPNfVicUtVi90czQc1RviOJls0L1QZfo0Fn36Wl1QZXwABu3ekFx+x62W4m4DcaeG6BVi9tZ2qJxex3qZDCxsS+BkOfuVwAnWVzJ6sKLer59MK+XZXXhNui7HybIf5qyH3u3YnXhj1ox+UX1zpT/TGWoSn7x51OGutz9qCzP1mFesA0Vxs1mRfahaa0hOV+inz+X5NWzBXR8jRmP7me+c9zHkWPT8emj0HfQGeofY4eR3x/7jhtK8DarEJ8Z/KZzmlnPqKeNejH5voXtjiDfaUWtar4/U1dDD94FvVJWnVAvSQ+KcCfr01OL5ZPzS+aTW3BGxtGIIlrHhyWvI8GEzmeN258uyjO8vjqg5zn1+DxHzblu2hLqwDtwprsXhpZ9+vXL1evRxROs31ZF9Bp17HRGvbYrwXMbsEjgMLWbf63bFtVtW8ABVdBtWsq5+LzfH8j2Q3n5keDzWcnnHiJ+TNtfpuksmqeGVkyefgBaVJSn8enF6/OLec8vSPx9tULnF7sQX2Mt/m5Fy1lfawXoIi2jvm4C5o+cIKSq75tBEvftip2DXCjF7IvuAQac/6+qalXytJGD55SUeKB4tQs6nzXg3UncIpZbJX7TlriPpL+/cXCOierANvyGrCr7j/Ucccfy3/8BAAD//9CpxZ1IKQAA";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaT4/bRBS3nS1rtlRd+i+GwjYLAqJC4wqEFKWXXbFBRRQUWFRRcQheZ0qM1nawnVV64yNw5MhH6JEjx34EjnyEPfZGZ5o39WQ8YzuJ106kHenJa8eZmfeb937ze7MxlGnbhuvfcOWf95h7FZsO959ju4PN9X/1O50IhVGnc4KC0PE9x/ul07k/di3vexT648BGB1ZkHVkhEvRzD9tn2H541Ov2v+4+6pAOW6S/VtxdS9Zbcr7P4NrAVmM+34PrEK53sTUzxz1AIyuIXORFLfzuh5nvd93Rsf8EoeX9asP8qV9Nbh3+rMX35M+/dPH66eqs/wrjP/v8f2g/KuJ2BdsWthiR6fOPsN2COEiBLzGvi9guYLOx/YTNHPouMoPxwHcdDwUm6c8MA3v6x2h8dOzYpuNFKHhs2Sg0jxxvgIcITTJmaMaD9smDvn3skEUjX3Zf4aIx499VZ3FtKOlNhl87J36XwN/D/QfdQ8idD7Jxa9H3efzeAH/Kwi8LJ7UgnC5CPB90H768/xjb+zlwou/zOF0qGacGx6M0//7dmA+fngSfbeBOyjQkht6V4RPTUQIXct0sGReWj5uUl7RZXNrcPLeUfE2Gq8LgKnpO21WIPQSQ9Z2BMJ7exPZ6ibiJcCHQPZf4oS+Ai8rkN98Iz5DQ9SwXifC4UjIe2xL/WHwusIQkyJ958dFS4obuiwNuX+RxugpcVDYP8X43MvbzeXURr+cMZswaMx6/fzyF9fkPrppkPZ9yuo7y42kKP7LzaQh07SbznOb9IQpOHBt9C2G+sL4lXHwdm+zzT7HdlvG1XA4m4qkO61dWPC2KhyGJPwN4haaqBvHShOf0Pf01iJ/LUI/cEMcTjYc/amezL+wPBsxumvTLqFhnUP+HWn6/SWtL/L4JvjN+3wnQb2M8GaH/tJW5D7B5LtsHnhesH5oZuozqB1F81FeA/w2Jjpy3vk3jfVWS72yc6gXF6TvYriXiNBz5XojWJU7nacvG6WXY/8Kxjd0JhTx2u0J8ZHEk4/t/NvLVn7zelfH9ddBp341R8CSlfnp7Rfh+Uismj6humfGbYfyq84g/vzHUcutGWT5twbygXBTGSb3iejGt6ZLzG/r9iSR/fl9Cf9eY8Wgd8o3jPZz6NhuPAYoCB52g/mPsMwr6o8DxIgnOZoXx2MjgL4PTukbG/nhaUF7vYLshyGu6Q65aXk/U9dBzN0F3lM3/6hnpORHeZF3uq8XyxuSMeeManFlxdKGI1u9eRetHsKDz2OTqx2X5hNdJewDYs434nEXNuV5aCTz/Fpyp7keRZQ+/fLlqPbpognXbqVh3Uf7pzcnPexIcdwGDhP8z1fa5/lpUf+1Arlepv7SU8+hFz+tl9Ute/iO4fFLReYSI/9LqwDS9RPNxWysmH98DLSnKx/hU4fxcYd5zBRJvX6zBuUIb8vRnLf4fhpZzv6wVoG+0jP2yDlg/cMKIqrevBkm8d1fkfOJUKaaOuQW+c36/2iWrzkc9B48pKetPcWoWdC7agL6TeE1ZbB34Syux3qO/O3FwLon4fRd+61R1vbCVI85YfnsRAAD//xqidsPoJwAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
index 9adfad5..fad2213 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
@@ -3412,7 +3412,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart
index 2b1f0d2..46a28ba 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart
@@ -1804,7 +1804,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaT3PbRBTXH4eaf6nTDI0oberQNrgwRKYcyOTUGShNhhnIEA7kQkZ21omDbQlJZgwnjjlyzEfgI+Rj8DFy5MgNVtFbe73alSxHltYZ78zOWooU7fu93/uzu89QwlaB8RxG9v42da3iXobrD3Bfxd2zuk4H7ex8a3XR8XeNM9T0uc8/gXd+ONx/dfTNq8Od8MUt9j32+5cw1nAv4V5l5vUjjA6Mj3Ff43zna6vp2+5vE89D9H++R7/0kedfz8Pg/t1z7J6HdmG+gRw6g2NwfVEdx7X28fi1Ux/JrVByk/Yvc/2Sua4zOP0HjX2OtLu438Gd4HQf/14e6ncIX0Q/G7i/hXsL959wN/uea3bsptUxT2z7pIPMU7uLzN9dy+zaZ7bpuc3wh9NvdNpNs93zkduymsgzG+3ecbt34pk+Btgzwy8ftcIvbwUvdaPfJ/g8xH0Jfgf4aYBzicJjiXr+HIhZXQ7Hv1fC8dTg434F40VpMtwVCnf6/4lw/8o+8PutVkS+D0GWvPCtMn6AyD3QJ5c3aHWBvGsgM8j7qQv2xMpNWp680qjvn6rj8tL2u8SxP1HLih8inAJ+3CuAHwozD4OZL/GTSX6Uh28pBt/yFPiqMfi+A99z2g7ixZ8A389yxLdC+TCVE0cNau4adT1ruzVgLiO7DePcwm75rQI6E+H0BPInWeyWzJfkL0n5zUtBfpi33fpo4PPsNsD3aQF2qwjyZZHdivKMuj7yA1ngRfQL9vuCxeupJHlGRZuJv3pBEo2i/RXLi7TxL2s/lRT/Al5sFmRHWoIdqdQ8WT79Q65T8mlbgNP7uK+M8yl0hIJ1s4y8Ugvglcg/B7z6QlL/rHLWl1XBultLgZdG6UPEry9dZPmI3Y2I4vesYH9NcHBS2pdo/2EDMIjIP1whzo+d5Zlnvg37HHbjTMiTjQJ4ojHzIPdXYc4swyfdl7up3V5CXqWnwF+PsVuSJ8N6dq/r2K6PjvcIbKw+NiWx2/OM7LYGGIjkn6e8Sya73cw5Porstk7tgzzAvQ0K3opoOnzuE7DloR0nvDBtfkcWRn+m5PGuQB/PwU/G8Hju8j2Z+PxRzusI2fmcFJ9KKfRSiolPj3B/L5i/9TPizZh3nnKb4tMzwIArP5VbLuw5nT0H730uwf6lrPEpax4HvnM9hsckOC14nI7Hz8FHLHjMj0sDkmepfL0QvV7A+BfD58uY/Wh6PlVOXnWHs248QO6v7eb1BsFEdSii9eYDODcVLDMjPHmYc51DklxGzDmORumVPR/b1+PPHWZ1fn2A/GudsfN+dMvOHUh9A8grTX2DrPvDPTBkHi9W5nB/mPCprGV7fkfs6LXAjtYlsaMrJVs7ei2ZHZUn4IcSE9dmdc45wkmOuox58zfrwDnZ/Y1onWG8EY9T2jpQUp/F1IGS2xH83oX38sKPrQeukbofsKs/dDHvFGVUKzpr3r0J+hsI9g2XQed54Za23qCUc73dXbhXVL0dDx+NDuQZ1DVpnPuk3YN1Rtd20VEAksfnTTA+LiDeqyAD4U2ZE2fUKdb9lSlw1G+w7l8Fn18EfrKs+2n/KYor23o2cYWtLyT5HVNWGNHT/ZzjCrteNtT5iCNrizgS2Q8pMo4k1X+S5/8PAAD//wmWKGaINQAA";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaSZPbRBTW4qmYJYknU8QiJDMekgyZohiZcMA1p1RBSFJUQQpzIMVhxkubaIgsIcmUuXHMT+DIkZ+QI8f8jBw55pgbtKzXdrvVrcXR5mBVdbWlkab7ff19771eNCm4GlA/hZp93qHuZVzqcP8BLju4uD3TfoKOj7/pmWj4bf8MDTzu+9fhm+8fPbx78vXdR8fBh0fsd2z7z6C+hUsNlxbTrx+gtqHew6XJaeer3sCznN8S90P0f75Dv0yQ6836oXH/7trW2EX3ob++HSqDo3//fG8ZV+1w+b6jL+yWKLvJ9ZK5v8Pctxmc/oWLfY9cF3E5hwvB6TL+fWE+vnP4QuOzj8vbuPyISxcX/bFlIt2ZDC3TGCNHN60zS3edQfDDnvSfGAPdGHvIGfUGyNX7xnhojH9ydQ+j6upBcyejoLkj/yOTywuCy1VctuC3j5sC+NYoHLao9x8CIf8+D/zZDurnTT7eL6Ce1pLhLVF40/9PhPeXVtebjEYh+z4EW/LGtcXonth7qia307/aAjubYCvY+YkD+mHtJVcRPFKodk/lZTtpnW5xdCa6suKDCB+fD5cK5IPEtK8x/SR+MM5P8nCtReBaXwFXOQLXd6E927ARz4/4uH5aAK4NykfJnPioUX1WqPu89alBXxb6DOLXRp9hHdRn+uTjcx3yobL1SfpJ8pC4POWOIM8rWp8emno8ffq43ihQn5Ig3xXpU5QvaOpC71ngRMYVdHqbxelGyfnCrPHs/dFtkjCU5Y9YHqSNZ1n7obh45vPgoGC9KDF6kan3Wf78Q/xKSv50BPi8j8v2Mn8CRyeY31aJR3IJPBL5XZ9Hn1fM78qc+V9LMB9WUuCkUOMg4tMXDup5iF0lCON2syQ/TOw/Takj0XrAPtgesns+g6u+norMD9+BdQerfybkxX6BvFCY9snzHegry+Sk62Kvq88/IS9SU+CuRuiT5Lcw33xg2pbjoeEDghw7Dgcl63OakT5vQRsiu9chb6qSPg8Kincifbap9YgruBgwoEehkQ3e+xg0O9drzAer5mevoP49JW/vC8bhEPxgBG/XJl+rEn8/Kijvrzp/4+JOLcV41CLizjVc3vP73/sZ8XrM2694E+LOTbCdazeVG250m0y3/neflbhuWNW4kzVvfd+4G8FbEnQ2vE3G20PwBf933rLxxoYF36cyfzzIeP4B9V8Mf59FrP/S/Wlx8qNznHleFzm/GoPZBD7RuQ3R/PAK7D8KpoUhflwt6FxAnD1axD6JQo0nu+/UUaPX9/Pa/+0ibzZWbL+vvSHr++Q8ANhZ+nmAqq7LjkGwPB5sr9G6LOHPKznb/TCil3sCveyWrJcXUrZ6uVcRvdQT8EGKiFN57Rcu8Cn3/MK6+ZNd4FhV/YloXvByKxqftOceyXkl5twjeRzC7Tx8lzdu7LnXFjjQNujnsSrmmSQtzkbmzbO3YNymgnW7CzDWeeOVdn++ltN5FtH+/EV4VvR5Mx4uCrW+m8U5H4XznFyXYD5gWg468cFx+Tzx670C47YMfSc8qXPihrzCfLyxAn7qa8zHd8CXF4lbVebjS/5REC9aajbxgj1fR/Iz5lhdaHwuFxQv2HlsQ16P+NDcxIc5LmXEh7jzjuT9/wIAAP//4cQFxDg0AAA=";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart
index 72ac689..59da5b9 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart
@@ -2392,7 +2392,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+yb3W7jRBTH7Thdyi4L3W0K6X5mFy3kpnVSJKi4Si8iUkGlSIVV92pxkyExSuxgO6jwBPsIPAaPwCPso3DZO7Cbc5rxZMYfidOM2440mvornvn5f86Zr5aVSdqAsgYlex7LdaZk7/sHyqqfi36uwPE+lCdQjqB84ueSn398026+/b755lvXGI4GZLdpjYfB9S/9/Jxz/dDySI84B50OcV3buXhPmXNf27F/N7vEEf3O8UUR/Jrzi9EhSgvqvcHUOzjW/PyuED5+/0n4uFrnczmHsqGEU415z3+Q2PswfQT1Qz6bfr7nZwbbzPuD59b8bPrZ8LM+dh19YHeMgd6z7d6A6H17SPQ/HUMf2r/auut0Jn+MxqcDs6ObSMjVT02ra1o9V/eI67n65M1vpzfsBs8NqferlF5qlD4u6qkqkSkpr5bg+fvQ7tcHP/zU9MttPz8I89rFazxuwfOFFXCLswvkV2HauwE8tRh+DYZfW8DvMz8HEmft7Zl/7tMpR/byDMfg+O4KOPLqgcdgyhf6LMMx3nd2J6zTCmPH1UIynSoUZ955TA+Bz3fEA5b8+m+vSI8Vht95Qr+mMDrbF7T/ETCYtn/HIb+N/ZrxOWC6ag7rAr9WZuq1HsPtvZYNt8cQA0Lc3JFtuUQqbqx9VdRw+/eZet5RkqWkdleNiaddwzNE9ra9Al48LkEcawniJeqtIHj+jMNFpfphbGL1XeH4T416H/qvI9N6TRzXtK0wX++PERHx/WqF/kwRxAe2nxUXj2f0zfELKuc9BchlhR9vGsz3ViEn/b5nC35fNeb74vnjmLj1WLK4lZX/xbh1LHncyqv/xfiWF/+rXbH/1Rb0vwHfnRvsf7UY/xt6eI5xaSPi+wbfFucncJzFTFtw52FkGEdVqXHqGoWoAEyLFJc16v5zuLn6MfxeaVK2H0WPt0605Yy3mp2+few5Pgd+Ox9IFrdw3JlV3Jq2X864xfpBnl9WOfa5rHj1IbzKUMR6Ka2IU1T8EPnBZesM43dIZxKOT/Oos5c50pnIr78rhsNrEm5qhF/H+fCp3lwuv4eS+fUTbVn25oYcu6zjkZqaD7sLdLMlgd2l5bQ+Byc1AafTCE7PJfdPdL9/2XaJ45ewXU4D4a1dLm6XO7d2mcguv8mRXc6Mx4FjX+PPd0dxK1DfhU1Pwa8H9nlEXNfokbY5Ii3D6g4Ih+OmJP0H5FFL2V8XzUu8AhZcDlRPIk/99qJEfmpTAj+lLjA+zFpvX/j5WYTeMELe6m1+vR3mSG+sv/8Xx4lasn0tNDctghvOvwa6C+aQWW4lSfw7tv/nlPYmGh+XoY3YbnTpebKvNYnsqwR/5339ZNH5wn5G84W4P4/SJzVbmK84IJtOn9wgnYriyD4EkGIK7sUI7sGa3Qeg10PLm+G+JVkc2cgojuB6JbT7cmSQJ/tUqLXLVdvn1oriyLx+P2s90f2SiZ4mbv9WT/Pr6anEeorbvx7HqcHoKm7/Ovt/Hsz+dfbyDM+KJPsuKlQ815h9F3hdo55rw4W/70avw6XVJ75XZM+B/u5fcj8iXt/u1jjtealcz/3sOJ8Yar+E82dp97OL9HOWch1XjdCVSD91DrcXkumnpS1PP3UJ9ZN2X+lVxcd74AdNq871oy/gnAz7Sq9yfWjKZU/I5dUK5wvVjNZt/8rIDrGfwNqhbPPSsq7b4vjeHnt1kd6+lkBvaedvsrZLitOeiNPBNZ+/iVr3ZfupSdd98f9r0vQz9jj8P79B/dS9a9BP/T8AAP//qXbi1dhAAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xb3W7jRBT2xOkSdil0ty2k7F920UJu2qRFgoir9CIiFVSqVKjYG1ZpMjRGjR1sBy13PAqXPAaPwmUv9w1gvDmnGU9m/NM69qTbkUZT/2V8Pn/nOzNnplVjWtagbUIrnse2IrTiff9AW2e1zGoNjlvQ/gTtGNpHrG6w+sPLo86r7zovv/F6o/E53enYk1Fw/QtWn0quH9g+PaPufr9PPc9x3/ZTldx35Dq/WwPqqn7n+G0T/Jr7S69PjS6895rw3sGxyWq7FD6++DB8/OeOHJcLaNtGuDSFfv6DIt6H5QN4P8RnndV7rAqwzfUfPLfC6s+snrDaGDoj2nAnA2dk2dRtjJxfnYbn9qd/jCen51a/YSEsXuPUsgeWfeY1fOr5XmPa3avZDTvBc6Npf4TjRx3amhFdkuLSVTy/Cvad7H//Y4e1W6zeD+Oyg9dk+ATPl3LAR4kHmTZmDB5tAY8jBR6fsPoRq6KfPGHnPp7hIl6ewyU4vpsDLrJ+8bjEQVSFY7yvfkfOM/S3SikZzwwOV9l5LA8Aj2+pD9jJ+bSVE59qAl4XCfXGEHjUUtj7Kdg8s3fbpb9N2EvJ7cayaLsrXL9EEo8MIU6pcPrLzAanh6DFIZy8sWN7tFCcRH9ZI2F7W8J73TGSlaR+VI+JY4Oe31P5z1YO+MhwCOJIi8jfG/lUMuQ4vpbgQLjxjlhE/tYk+mdy/aH+HFr2CXU9y7HDePp/jKkKzy9z1CNDoefi+CVu/CfytybxcyLppwS1qhiHNMl8+CUpvufra35PEvM98fxxTJx5WHCcyUo/Mc4caxZnllU/MR7pqp9mzvppXlM/Azy33yH9NGP0E8ubK87j2hHfM/iWOG/HeYwwnZfmJ4qYp9S5PMYKh2cJMCxzOKxw9/8NNw9X4cQ64FmNns/UzcXMZzr9oXPsuwwCud7eLzjO4Dwuqzgzs1ePOCPqmExXicTfFhVf3of+eoaaDxs54RKl9yodWzSPML6GeKTBfG8ZefRcYx6pdLhbDqXtEuFEInQY87gzPnlSvB4UrMN1c1H+44WEWJfxfo0shx8FvNgswI/S4lK5Ai4kAS6nEbg81Uxf+HH1ov0M5wdhP5sFqls/S+9n27d+JsXla439TIzjiFvLlOdzo3Aqcd9BLI9BhwN/O6Se1zujR9aYdnv24JxKcFsvKJ6j/Wspx8OqefsLsF1qNxfZdR4XlzXSmfUCdIZcY36VNZ8+Z/VJBJ8wgt3yKTmfDjTmk6jP/+J+ITPZvggeJzMCJ8wvBrwKcqQiThsF6THa207pP6r5ZBVsQjtRgnX2lxWN/GUD/l62fP9182PdjPJjuP+K4x+XHdNbt3Xj4aMbzEOV7ldA8MspcC5H4BysIb0HfDyw/TmcNwvW/TckG93H9TKw83LkrbO/GdzaWdH+tpmT7l9Vp7PmCz9OmPJlKtO3fEnOl8ca8SVuf3EcLm2BN3H7i8X988L+YvHyHH61gtbta1x8NYV1e7xucjg34ULtbvS6UFr+Yb8q/wz4tXqJ8yH1h86gKeHhc+Nm7DfG/FnIXg3yR2n3G6v40Uq5bkgieKPix64Ep2cF86NqLo4fuxrwI+0+wbzi1z3QMcvelcavZ3CuiH2Cea5fzHDYU+LwIsf8GMlonXCYkV9h3Bb9qug8q67rhDgfdib+ropPXxXAp7T5jKz9jMNlT4XL/g3LZ0StM4rjwqTrjPj/C2ni/p4E789u8LhwbwnHhf8HAAD//+5ePoRwPQAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
index 071f106..c99caf0 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
@@ -2235,7 +2235,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart
index 4a3be3c..2c539f4 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart
@@ -785,7 +785,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xYvY4TMRDenwPCXUD8SstPEahCwZkyioSUglRICHQ01xBZe75k0W52WW8OwRPwCJSUlJQ8Ao9yJSUd2OwYnIkdNtGR1Z5upLmJfZnY3+dvxpsETmlXIH6AiOd72tgV3oLxLeFXhReMF/3+MJykeyw/ikJmef89yHm5/3w4ejrc78vE3cU8vP7gBD7PhXxfy+9C7EDMXOABooPWVzx8hPgZ4k+wL47Z8L47BpwXtPnrwneEA4pnNGGV+FZ5+D8BrIHpwTzL/W0LPxT+SjiZ8ZzEaUhjMk7TcczIJE0YeZ9TkqSvU8LzsHxxQPOC0CyTC3Ai/47EiJNoWrD8kIaMEyaWHfFy3V2ZlPwbD96fztsWvJa8enCuXZhX7/t2royf2mX8etl87t/VOfvmc1f2CI3lmZvmlV0DPn8jK/JoOjbjuggYNsU71p/CH3jVcUvrWXDfBux/cT/M2ZuZ2J4Zv7JN4cf1OLD0uR9ONauqk64l/5JwKdUjGs+YRR83N8yPqi1T/wq0vbuW+vwfuroDPW5OVzxLp5yd6WpNXXUboCvcrxV/k635z6vCl6udBzZ1Hz1hMX3HDnDbXuBvu+a+rXjo+avV18CCXz1PLeCfb9+111kAvP/Rh9uMepN6uVtjvZn4cWDPJmutwY+7hB/5+HVeeBLFccTN/DyosV/r/cfTxra663gnU3f34ZnJVHfa9XZ2v61Rb48beL8dI5zeCnx5S/hqw/ejvbc0M+lpp+b77BjFqnVl+/51AzBLvPoVVncdtSrow1nyOwXWh78CX34FfbyYRUae2qdUHxJvk/XxKwAA///0GO/NyBMAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xYS28TMRDeR4HQBlReUngcAqdwoOZYRULKgUiVkFBRuVQcolViyKLsA3u3iBtHfgJHjhz5ST1y5B+AzY7BmdiRFzUsQRlpOvE2s/b3+ZvxbjpeZbsQP0DE1/e1sS+8BeObwq8ILygv+v3heJodUXYSj6nl+3ch5/nx4XD0ZHjcl4l7i3l4/sEZ3M+H/FDL70HsQpz6VXwP0UPzKx4+QvwM8TvYF89seN1dA84L2vVrwneEA4qnUUKd+FZ5+D8dmAPTg3mW69sW/kLOLZxMs4QSVk6yJE4pI0n2OiOcjasPk4gVJMpzeVdO5N+RGHESpwVlL6Mx5YSKuUa8mmxPJiVOOPC6dL624LPkM4D97MF19b1P56p40K7i4WXzfn9VOgjN+63sIRrLvTZdV3YVePyJrGBx+sqM6yJgWDXfWG8Kdytwxytt34L3FmD+jfcBo29KsUIzbmWrxo3rbmDpZ988N3PVRc+Sf0m4lOZJNCupRQ83/hIvqoZMPHW0NfuWOlyFjm5DD5vTEc+zlNONjmrqqPcP6wj3YcXbwdb8/Vx48rV9wKbOmcd0Fr2jE9yOF3jbbqgfK/zdsF4dDSy41XPRAu75ttxYPXWA5199xV+PupL6uNNAXZl48WCtJmv9AS/+El7k49N54Uk8m8XczMv9Bvqw3l8CbWyrr93gbOrrHjzzmOpLO64251WNunq0RufVKcIX1OApWMJTG95jjt5GuUk/Ow2dT6coutaP7f3oOmCVOPUjqal6aTnowVvyuwHWQ1iDp9BBD8/K2MhP+z/Tg8S5jnr4EQAA//+qos9XSBMAAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart
index 0de3b90..2ca1bab 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart
@@ -1358,7 +1358,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xZz1PTThRPUgr9wpdfarX8nILo4AHCjB4YTswIIzM6TlU8cGJiWUswbWqSMuqJI38CR4/+CR79M/wzOHrTXfoWt5vdNumEduN0Zx5ht033vc++9z5vdwtas03B8xye/Pgm09ex5KC/gCWPJUB+sLVVsmuVklurvEHeqV1Ggu8/gHf2D0q7h893D7bIi+vh9/j564xeBjO+Ac8VLPPS333q2KgWxJl/lZknw+lD+j+Gmv1VGC9qrW1Kb+1vc59vcOO/oZU0cbuLZQILb9EcHrsN+AvMDeG4hGUUywmWd1jMhu+Zjlu2HLPiuhUHmcduFZlfPMusuieu6Xvl5j9HlheYVr1OJvJN8vcQ93zTrgXIe2+VkW/W8fR1PP2h34RxnbxYFfsT7f8P/qFJ/IvH91KCjwxfjcGX/T2+ET3IkhL4RPougz/0Grcihxe1v2BEt5u0DYndd8B2Yveahz42sIIi+2nrtf28P2wL8pHGfN6pRfUTGV63IH6u9D21nAYS+/cyxGu/8SowuuuMfnxcnUEQXkjyFsX7Ap7fOP/6LsGL16co4JcRZpzksjEskIlfWlUUiWfuYZlk8iP9ZB58XJLmQ+uW61N+7GQfryfLeyPM+hrATySXZbEMM+s4wqzjZQbG4eXiRPN5nIffnwE8FsT+8uuG4msay39X6x8wLBa2f1SRfExx+BQzH29K7J8BDK7tZ5NyyvJyVuPIPYG8LOPvCfD1MjiNyF/m+ugvGqdPsUNdF7We7Tbf83WUHmMd9Ch1lC2uo8b/9TrKHtRRseoou30dNZ6yOuqaD2B/aMTAy2iDVx6wIP61b3kVFLx9/UKA17RivLiXSYYXaX3UYj8TaKrEWeh8QpfHm95DfhyDurDhOcI4m4Yauh9x1m6/0Skv5brAqR1/jUPdUnYbtUCC033F8pHB9GVxWEioPl2EmoWPQx8r7qP08Z2m9Sb+6H7F/aBJ4+9xiniO5q2fwHOZGDhlmHWQ7X/++hezWRfglleE7ygeX2Py3bYEhyXAIoSDovtBnvfOdDX2hZNw7gEqC/1nRcF9oew8K+r9heo8SnB/kiIepf5aNJKJb3I+PCuJb8qladw/qsKnxL92UsintA3FwGmoDZ/Owl77GQoEp9/iezmV+PQs4XgL49BKqIPz1e54lPQf9tFvjBvi0W7jOcetSzbGOmQF3+PrwrAf7yDH+oyOJHXhnCJxTXE5jxnXexI8HgEmUjwG9yeJxDfxn7VBfEvvT4ZjrMNwhPuTVw1beH+wqNj9yaWW7P0JsVvF+5Oc1rm+Y7/3JwAA///Y0/jDWCcAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xZTU/bTBB2HD7ywhs+3hdKSigKlFb0AEZqD4gTUkFFalWlLVXLKVhhC26T2LUdpN565CfwE/oTeuxP4dgjR27tLpltl/VOYkeJbVpWGsyuP3bn2Zl5ZicFrdUm4HoCV3l8XehnqOSgf4fKNBWfeP7GRtlqHJbtxuEr4h5bVaJ4/h68s7tX3q483d7bYC+uBt+T53eEdenC+Bpcl6jMod99XLNIw48y/7IwT1ZaD+t/Hmj1l2G8pEktc7W7Kd1ek8Z/QCtr6naLyhgVWaMiHfsf8FeoG8BxgcoIlQqVN1SMI7tODLd5YNetBnGNuv3eNjy32vrnwHR9w3Qc9nXPYH8rtOcZVsMn7juzSjzDoXM6dM6K18Julb1YD8zL+/9K0Mj2IeN5huCB4akJeIrfkxtbB9tCBpcKp0XY/37jVJLw4fpeZMLrydoaoucU6Mr0XHHJxyZdm0pf3vqtr7zfm4r4ogn3O7WwdoDh8x/4w+VSj81ak6jj3yL4X9z4FKSQMoH4iQP2coLEHY7vKVy/SPbzFcFHXk9JwQ/DwjiLRaNUIJI+N+skFE/MUBkX4hu/Mwc2jITpwD7lYopvnfSR1yXy1LCwnzrwCYtFg1SGhH0bFvbtWxbiAzywn29dd6ZgfAb2v6i2j+998p9JKv9c7rcvsE5Q/5GE4inX+60eLZ6uI/reBp1/6SsG1ZTHVWZf5z2Oqxi/joEtV8EoVPZQjNEeNGn+Uoe8Kmw+2W28PkPSxTC4Z8LkNZY6r8n/aXmNdZPXtM1rrPZ5TT7leQ2P3+tw3tIj4KO3wWcadGf2s2u6h8R//fKZAp/JhHmrkO0Nb/F85Yq+guMk5Tfyeb6Uwf0nEyN/jUJe1nRrSr+ZhJw1Dr9pl893iiu5LnBpxy95yCOqdrPhI7jcTTie6EIf86uoPIT51TzkELJfeXTNHkk/H2kx+RPP/+0PGupPD1PMQzzunAIPZSPgkhVwx84Tv+1HONwqcJpOiI+4/k5EPtpE9F4A3QN6p+Q8JfOSk0nHuWoc6gKwWqV9LKXgXIXVc8LW39POcwznRynmuXPxoR74K6t/ziL+yrnuOpy/0sJ3zH62rgHf8TYQAZeBNnw3C2fTJ8RXVHM15e9GSfLdfo/9J6j3VcK7qR+G4znWvx+jXeh94rlu/fNCwmswAu6DiufkvCxop1ukZn4iB0heVkzITzkORxH9dAfR/wFggOp/U+/vyl+Zfaz8xf4q1/uHIuA+FKLe/6JpKevf8wnX+8+03tb7mZ5pqPfnkN/HC8i55GcAAAD//zW0L99oJQAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
index bccd039..ade7eb4 100644
--- a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
+++ b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
@@ -207,7 +207,7 @@
   ];
   Map<String, MojomFile> files = null;
   Map<String, mojom_types_mojom.UserDefinedType> resolvedTypes = null;
-  Map<String, mojom_types_mojom.UserDefinedValue> resolvedValues = null;
+  Map<String, mojom_types_mojom.DeclaredConstant> resolvedConstants = null;
 
   MojomFileGraph() : super(kVersions.last.size);
 
@@ -325,7 +325,7 @@
       {
         decoder1.decodeDataHeaderForMap();
         List<String> keys0;
-        List<mojom_types_mojom.UserDefinedValue> values0;
+        List<mojom_types_mojom.DeclaredConstant> values0;
         {
           
           var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize, false);
@@ -342,19 +342,16 @@
           
           var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, false);
           {
-            var si2 = decoder2.decodeDataHeaderForUnionArray(keys0.length);
-            values0 = new List<mojom_types_mojom.UserDefinedValue>(si2.numElements);
+            var si2 = decoder2.decodeDataHeaderForPointerArray(keys0.length);
+            values0 = new List<mojom_types_mojom.DeclaredConstant>(si2.numElements);
             for (int i2 = 0; i2 < si2.numElements; ++i2) {
               
-                values0[i2] = mojom_types_mojom.UserDefinedValue.decode(decoder2, bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i2);
-                if (values0[i2] == null) {
-                  throw new bindings.MojoCodecError(
-                    'Trying to decode null union for non-nullable mojom_types_mojom.UserDefinedValue.');
-                }
+              var decoder3 = decoder2.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
+              values0[i2] = mojom_types_mojom.DeclaredConstant.decode(decoder3);
             }
           }
         }
-        result.resolvedValues = new Map<String, mojom_types_mojom.UserDefinedValue>.fromIterables(
+        result.resolvedConstants = new Map<String, mojom_types_mojom.DeclaredConstant>.fromIterables(
             keys0, values0);
       }
     }
@@ -418,12 +415,12 @@
       rethrow;
     }
     try {
-      if (resolvedValues == null) {
+      if (resolvedConstants == null) {
         encoder0.encodeNullPointer(24, false);
       } else {
         var encoder1 = encoder0.encoderForMap(24);
-        var keys0 = resolvedValues.keys.toList();
-        var values0 = resolvedValues.values.toList();
+        var keys0 = resolvedConstants.keys.toList();
+        var values0 = resolvedConstants.values.toList();
         
         {
           var encoder2 = encoder1.encodePointerArray(keys0.length, bindings.ArrayDataHeader.kHeaderSize, bindings.kUnspecifiedArrayLength);
@@ -433,15 +430,15 @@
         }
         
         {
-          var encoder2 = encoder1.encodeUnionArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
+          var encoder2 = encoder1.encodePointerArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
           for (int i1 = 0; i1 < values0.length; ++i1) {
-            encoder2.encodeUnion(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i1, false);
+            encoder2.encodeStruct(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
           }
         }
       }
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
-          "resolvedValues of struct MojomFileGraph: $e";
+          "resolvedConstants of struct MojomFileGraph: $e";
       rethrow;
     }
   }
@@ -450,14 +447,14 @@
     return "MojomFileGraph("
            "files: $files" ", "
            "resolvedTypes: $resolvedTypes" ", "
-           "resolvedValues: $resolvedValues" ")";
+           "resolvedConstants: $resolvedConstants" ")";
   }
 
   Map toJson() {
     Map map = new Map();
     map["files"] = files;
     map["resolvedTypes"] = resolvedTypes;
-    map["resolvedValues"] = resolvedValues;
+    map["resolvedConstants"] = resolvedConstants;
     return map;
   }
 }
diff --git a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
index f98a5a6..4ef15b2 100644
--- a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
+++ b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
@@ -1414,10 +1414,9 @@
 
 class EnumValue extends bindings.Struct {
   static const List<bindings.StructDataHeader> kVersions = const [
-    const bindings.StructDataHeader(48, 0)
+    const bindings.StructDataHeader(40, 0)
   ];
   DeclarationData declData = null;
-  String enumTypeKey = null;
   Value initializerValue = null;
   int intValue = 0;
 
@@ -1463,15 +1462,11 @@
     }
     if (mainDataHeader.version >= 0) {
       
-      result.enumTypeKey = decoder0.decodeString(16, false);
+        result.initializerValue = Value.decode(decoder0, 16);
     }
     if (mainDataHeader.version >= 0) {
       
-        result.initializerValue = Value.decode(decoder0, 24);
-    }
-    if (mainDataHeader.version >= 0) {
-      
-      result.intValue = decoder0.decodeInt32(40);
+      result.intValue = decoder0.decodeInt32(32);
     }
     return result;
   }
@@ -1486,21 +1481,14 @@
       rethrow;
     }
     try {
-      encoder0.encodeString(enumTypeKey, 16, false);
-    } on bindings.MojoCodecError catch(e) {
-      e.message = "Error encountered while encoding field "
-          "enumTypeKey of struct EnumValue: $e";
-      rethrow;
-    }
-    try {
-      encoder0.encodeUnion(initializerValue, 24, true);
+      encoder0.encodeUnion(initializerValue, 16, true);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
           "initializerValue of struct EnumValue: $e";
       rethrow;
     }
     try {
-      encoder0.encodeInt32(intValue, 40);
+      encoder0.encodeInt32(intValue, 32);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
           "intValue of struct EnumValue: $e";
@@ -1511,7 +1499,6 @@
   String toString() {
     return "EnumValue("
            "declData: $declData" ", "
-           "enumTypeKey: $enumTypeKey" ", "
            "initializerValue: $initializerValue" ", "
            "intValue: $intValue" ")";
   }
@@ -1519,7 +1506,6 @@
   Map toJson() {
     Map map = new Map();
     map["declData"] = declData;
-    map["enumTypeKey"] = enumTypeKey;
     map["initializerValue"] = initializerValue;
     map["intValue"] = intValue;
     return map;
@@ -1914,16 +1900,16 @@
 }
 
 
-class UserValueReference extends bindings.Struct {
+class ConstantReference extends bindings.Struct {
   static const List<bindings.StructDataHeader> kVersions = const [
     const bindings.StructDataHeader(24, 0)
   ];
   String identifier = null;
-  String valueKey = null;
+  String constantKey = null;
 
-  UserValueReference() : super(kVersions.last.size);
+  ConstantReference() : super(kVersions.last.size);
 
-  static UserValueReference deserialize(bindings.Message message) {
+  static ConstantReference deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
     if (decoder.excessHandles != null) {
@@ -1932,11 +1918,11 @@
     return result;
   }
 
-  static UserValueReference decode(bindings.Decoder decoder0) {
+  static ConstantReference decode(bindings.Decoder decoder0) {
     if (decoder0 == null) {
       return null;
     }
-    UserValueReference result = new UserValueReference();
+    ConstantReference result = new ConstantReference();
 
     var mainDataHeader = decoder0.decodeStructDataHeader();
     if (mainDataHeader.version <= kVersions.last.version) {
@@ -1962,7 +1948,7 @@
     }
     if (mainDataHeader.version >= 0) {
       
-      result.valueKey = decoder0.decodeString(16, true);
+      result.constantKey = decoder0.decodeString(16, false);
     }
     return result;
   }
@@ -1973,28 +1959,128 @@
       encoder0.encodeString(identifier, 8, false);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
-          "identifier of struct UserValueReference: $e";
+          "identifier of struct ConstantReference: $e";
       rethrow;
     }
     try {
-      encoder0.encodeString(valueKey, 16, true);
+      encoder0.encodeString(constantKey, 16, false);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
-          "valueKey of struct UserValueReference: $e";
+          "constantKey of struct ConstantReference: $e";
       rethrow;
     }
   }
 
   String toString() {
-    return "UserValueReference("
+    return "ConstantReference("
            "identifier: $identifier" ", "
-           "valueKey: $valueKey" ")";
+           "constantKey: $constantKey" ")";
   }
 
   Map toJson() {
     Map map = new Map();
     map["identifier"] = identifier;
-    map["valueKey"] = valueKey;
+    map["constantKey"] = constantKey;
+    return map;
+  }
+}
+
+
+class EnumValueReference extends bindings.Struct {
+  static const List<bindings.StructDataHeader> kVersions = const [
+    const bindings.StructDataHeader(32, 0)
+  ];
+  String identifier = null;
+  String enumTypeKey = null;
+  int enumValueIndex = 0;
+
+  EnumValueReference() : super(kVersions.last.size);
+
+  static EnumValueReference deserialize(bindings.Message message) {
+    var decoder = new bindings.Decoder(message);
+    var result = decode(decoder);
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
+    return result;
+  }
+
+  static EnumValueReference decode(bindings.Decoder decoder0) {
+    if (decoder0 == null) {
+      return null;
+    }
+    EnumValueReference result = new EnumValueReference();
+
+    var mainDataHeader = decoder0.decodeStructDataHeader();
+    if (mainDataHeader.version <= kVersions.last.version) {
+      // Scan in reverse order to optimize for more recent versions.
+      for (int i = kVersions.length - 1; i >= 0; --i) {
+        if (mainDataHeader.version >= kVersions[i].version) {
+          if (mainDataHeader.size == kVersions[i].size) {
+            // Found a match.
+            break;
+          }
+          throw new bindings.MojoCodecError(
+              'Header size doesn\'t correspond to known version size.');
+        }
+      }
+    } else if (mainDataHeader.size < kVersions.last.size) {
+      throw new bindings.MojoCodecError(
+        'Message newer than the last known version cannot be shorter than '
+        'required by the last known version.');
+    }
+    if (mainDataHeader.version >= 0) {
+      
+      result.identifier = decoder0.decodeString(8, false);
+    }
+    if (mainDataHeader.version >= 0) {
+      
+      result.enumTypeKey = decoder0.decodeString(16, false);
+    }
+    if (mainDataHeader.version >= 0) {
+      
+      result.enumValueIndex = decoder0.decodeUint32(24);
+    }
+    return result;
+  }
+
+  void encode(bindings.Encoder encoder) {
+    var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
+    try {
+      encoder0.encodeString(identifier, 8, false);
+    } on bindings.MojoCodecError catch(e) {
+      e.message = "Error encountered while encoding field "
+          "identifier of struct EnumValueReference: $e";
+      rethrow;
+    }
+    try {
+      encoder0.encodeString(enumTypeKey, 16, false);
+    } on bindings.MojoCodecError catch(e) {
+      e.message = "Error encountered while encoding field "
+          "enumTypeKey of struct EnumValueReference: $e";
+      rethrow;
+    }
+    try {
+      encoder0.encodeUint32(enumValueIndex, 24);
+    } on bindings.MojoCodecError catch(e) {
+      e.message = "Error encountered while encoding field "
+          "enumValueIndex of struct EnumValueReference: $e";
+      rethrow;
+    }
+  }
+
+  String toString() {
+    return "EnumValueReference("
+           "identifier: $identifier" ", "
+           "enumTypeKey: $enumTypeKey" ", "
+           "enumValueIndex: $enumValueIndex" ")";
+  }
+
+  Map toJson() {
+    Map map = new Map();
+    map["identifier"] = identifier;
+    map["enumTypeKey"] = enumTypeKey;
+    map["enumValueIndex"] = enumValueIndex;
     return map;
   }
 }
@@ -3285,7 +3371,8 @@
 
 enum ValueTag {
   literalValue,
-  userValueReference,
+  constantReference,
+  enumValueReference,
   builtinValue,
   unknown
 }
@@ -3293,14 +3380,16 @@
 class Value extends bindings.Union {
   static final _tagToInt = const {
     ValueTag.literalValue: 0,
-    ValueTag.userValueReference: 1,
-    ValueTag.builtinValue: 2,
+    ValueTag.constantReference: 1,
+    ValueTag.enumValueReference: 2,
+    ValueTag.builtinValue: 3,
   };
 
   static final _intToTag = const {
     0: ValueTag.literalValue,
-    1: ValueTag.userValueReference,
-    2: ValueTag.builtinValue,
+    1: ValueTag.constantReference,
+    2: ValueTag.enumValueReference,
+    3: ValueTag.builtinValue,
   };
 
   var _data;
@@ -3318,15 +3407,26 @@
     _tag = ValueTag.literalValue;
     _data = value;
   }
-  UserValueReference get userValueReference {
-    if (_tag != ValueTag.userValueReference) {
-      throw new bindings.UnsetUnionTagError(_tag, ValueTag.userValueReference);
+  ConstantReference get constantReference {
+    if (_tag != ValueTag.constantReference) {
+      throw new bindings.UnsetUnionTagError(_tag, ValueTag.constantReference);
     }
     return _data;
   }
 
-  set userValueReference(UserValueReference value) {
-    _tag = ValueTag.userValueReference;
+  set constantReference(ConstantReference value) {
+    _tag = ValueTag.constantReference;
+    _data = value;
+  }
+  EnumValueReference get enumValueReference {
+    if (_tag != ValueTag.enumValueReference) {
+      throw new bindings.UnsetUnionTagError(_tag, ValueTag.enumValueReference);
+    }
+    return _data;
+  }
+
+  set enumValueReference(EnumValueReference value) {
+    _tag = ValueTag.enumValueReference;
     _data = value;
   }
   BuiltinConstantValue get builtinValue {
@@ -3355,10 +3455,15 @@
         var decoder1 = decoder0.decodePointer(offset + 8, false);
         result.literalValue = LiteralValue.decode(decoder1, 0);
         break;
-      case ValueTag.userValueReference:
+      case ValueTag.constantReference:
         
         var decoder1 = decoder0.decodePointer(offset + 8, false);
-        result.userValueReference = UserValueReference.decode(decoder1);
+        result.constantReference = ConstantReference.decode(decoder1);
+        break;
+      case ValueTag.enumValueReference:
+        
+        var decoder1 = decoder0.decodePointer(offset + 8, false);
+        result.enumValueReference = EnumValueReference.decode(decoder1);
         break;
       case ValueTag.builtinValue:
         
@@ -3383,8 +3488,11 @@
       case ValueTag.literalValue:
         encoder0.encodeNestedUnion(literalValue, offset + 8, false);
         break;
-      case ValueTag.userValueReference:
-        encoder0.encodeStruct(userValueReference, offset + 8, false);
+      case ValueTag.constantReference:
+        encoder0.encodeStruct(constantReference, offset + 8, false);
+        break;
+      case ValueTag.enumValueReference:
+        encoder0.encodeStruct(enumValueReference, offset + 8, false);
         break;
       case ValueTag.builtinValue:
         encoder0.encodeEnum(builtinValue, offset + 8);
@@ -3400,8 +3508,11 @@
       case ValueTag.literalValue:
         result += "literalValue";
         break;
-      case ValueTag.userValueReference:
-        result += "userValueReference";
+      case ValueTag.constantReference:
+        result += "constantReference";
+        break;
+      case ValueTag.enumValueReference:
+        result += "enumValueReference";
         break;
       case ValueTag.builtinValue:
         result += "builtinValue";
@@ -3758,108 +3869,3 @@
 }
 
 
-enum UserDefinedValueTag {
-  enumValue,
-  declaredConstant,
-  unknown
-}
-
-class UserDefinedValue extends bindings.Union {
-  static final _tagToInt = const {
-    UserDefinedValueTag.enumValue: 0,
-    UserDefinedValueTag.declaredConstant: 1,
-  };
-
-  static final _intToTag = const {
-    0: UserDefinedValueTag.enumValue,
-    1: UserDefinedValueTag.declaredConstant,
-  };
-
-  var _data;
-  UserDefinedValueTag _tag = UserDefinedValueTag.unknown;
-
-  UserDefinedValueTag get tag => _tag;
-  EnumValue get enumValue {
-    if (_tag != UserDefinedValueTag.enumValue) {
-      throw new bindings.UnsetUnionTagError(_tag, UserDefinedValueTag.enumValue);
-    }
-    return _data;
-  }
-
-  set enumValue(EnumValue value) {
-    _tag = UserDefinedValueTag.enumValue;
-    _data = value;
-  }
-  DeclaredConstant get declaredConstant {
-    if (_tag != UserDefinedValueTag.declaredConstant) {
-      throw new bindings.UnsetUnionTagError(_tag, UserDefinedValueTag.declaredConstant);
-    }
-    return _data;
-  }
-
-  set declaredConstant(DeclaredConstant value) {
-    _tag = UserDefinedValueTag.declaredConstant;
-    _data = value;
-  }
-
-  static UserDefinedValue decode(bindings.Decoder decoder0, int offset) {
-    int size = decoder0.decodeUint32(offset);
-    if (size == 0) {
-      return null;
-    }
-    UserDefinedValue result = new UserDefinedValue();
-
-    
-    UserDefinedValueTag tag = _intToTag[decoder0.decodeUint32(offset + 4)];
-    switch (tag) {
-      case UserDefinedValueTag.enumValue:
-        
-        var decoder1 = decoder0.decodePointer(offset + 8, false);
-        result.enumValue = EnumValue.decode(decoder1);
-        break;
-      case UserDefinedValueTag.declaredConstant:
-        
-        var decoder1 = decoder0.decodePointer(offset + 8, false);
-        result.declaredConstant = DeclaredConstant.decode(decoder1);
-        break;
-      default:
-        throw new bindings.MojoCodecError("Bad union tag: $tag");
-    }
-
-    return result;
-  }
-
-  void encode(bindings.Encoder encoder0, int offset) {
-    
-    encoder0.encodeUint32(16, offset);
-    encoder0.encodeUint32(_tagToInt[_tag], offset + 4);
-    switch (_tag) {
-      case UserDefinedValueTag.enumValue:
-        encoder0.encodeStruct(enumValue, offset + 8, false);
-        break;
-      case UserDefinedValueTag.declaredConstant:
-        encoder0.encodeStruct(declaredConstant, offset + 8, false);
-        break;
-      default:
-        throw new bindings.MojoCodecError("Bad union tag: $_tag");
-    }
-  }
-
-  String toString() {
-    String result = "UserDefinedValue(";
-    switch (_tag) {
-      case UserDefinedValueTag.enumValue:
-        result += "enumValue";
-        break;
-      case UserDefinedValueTag.declaredConstant:
-        result += "declaredConstant";
-        break;
-      default:
-        result += "unknown";
-    }
-    result += ": $_data)";
-    return result;
-  }
-}
-
-
diff --git a/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart b/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
index 80cd0d4..efc3bf7 100644
--- a/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
+++ b/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
@@ -453,8 +453,7 @@
     Expect.isNotNull(ev.declData);
     Expect.isNotNull(labelMap[ev.declData.shortName]);
 
-    // Check that the enumTypeKey matches the enumID.
-    Expect.equals(ev.enumTypeKey, enumID);
+    // Check that the enum value's intValue is as expected.
     Expect.equals(ev.intValue, labelMap[ev.declData.shortName]);
   });
 }
diff --git a/mojo/go/tests/validation_type_test.go b/mojo/go/tests/validation_type_test.go
index bb2ba6f..d95cff4 100644
--- a/mojo/go/tests/validation_type_test.go
+++ b/mojo/go/tests/validation_type_test.go
@@ -71,22 +71,6 @@
 		if _, ok := labelMap[*label.DeclData.ShortName]; !ok {
 			t.Fatalf("Declaration Data's ShortName for BasicEnum's label %s is unknown ", *label.DeclData.ShortName)
 		}
-		// label's EnumTypeKey must be correct.
-		if label.EnumTypeKey == "" {
-			t.Fatalf("EnumTypeKey for BasicEnum's label %s was empty.", *label.DeclData.ShortName)
-		}
-		userDefinedType := test.GetAllMojomTypeDefinitions()[label.EnumTypeKey]
-		if userDefinedType == nil {
-			t.Fatalf("EnumTypeKey for BasicEnum's label %s was invalid:.", *label.DeclData.ShortName, label.EnumTypeKey)
-		}
-		enumType, ok := userDefinedType.(*mojom_types.UserDefinedTypeEnumType)
-		if !ok {
-			t.Fatalf("UserDefinedType for the EnumTypeKey for BasicEnum's label %s was not a EnumType", *label.DeclData.ShortName)
-		}
-		if *enumType.Value.DeclData.FullIdentifier != fullIdentifier {
-			t.Fatalf("EnumTypeKey for BasicEnum's label %s was %s.", *label.DeclData.ShortName, label.EnumTypeKey)
-		}
-
 		// Check that the label's IntValue matches the expected one.
 		if expectedOrdinal := labelMap[*label.DeclData.ShortName]; label.IntValue != expectedOrdinal {
 			t.Fatalf("IntValue for Enum BasicEnum's label %s was %d but expected %d",
diff --git a/mojo/public/interfaces/bindings/mojom_files.mojom b/mojo/public/interfaces/bindings/mojom_files.mojom
index 6914434..823f4e3 100644
--- a/mojo/public/interfaces/bindings/mojom_files.mojom
+++ b/mojo/public/interfaces/bindings/mojom_files.mojom
@@ -17,8 +17,8 @@
  * code generators passing them data derived from the MojomFileGraph.
  *
  * A MojomFile represents the data parsed from a single .mojom file. Mojom
- * modules form a directed acyclic graph via the "imports" relation.
- * That is, if Module A imports Module B then there is a directed edge in the
+ * files form a directed acyclic graph via the "imports" relation.
+ * That is, if file A imports file B then there is a directed edge in the
  * graph from A to B. A MojomFileGraph represents the whole Graph.
 
  * The Mojom structures represented here have been fully resolved, meaning that
@@ -81,27 +81,26 @@
   // All the files in this graph. The keys are |file_name|s.
   map<string, MojomFile> files;
 
-  // All the resolved user-defined types known to this structure. The keys are
+  // All the resolved user-defined types in all the files in the graph. The keys are
   // the |type_key|s.
   map<string, UserDefinedType> resolved_types;
 
-  // All the resolved user-defined values known to this structure. The keys are
-  // the |value_key|s.
-  map<string, UserDefinedValue> resolved_values;
+  // All the resolved DeclaredConstants in all the files in the graph. The keys are
+  // the |constant_key|s.
+  map<string, DeclaredConstant> resolved_constants;
 };
 
-// A KeysByType struct organizes by type all of the type and constant keys known
-// to an associated MojomFileGraph.
+// A KeysByType struct organizes by type the keys of all types and consants in
+// a MojomFile
 struct KeysByType {
-  // All the type_keys known to the owning MojomFileGraph, organized by
-  // type;
+  // The type keys of the types in the MojomFile.
   array<string>? interfaces;
   array<string>? structs;
   array<string>? unions;
   array<string>? top_level_enums;
   array<string>? embedded_enums;
 
-  // All the constant_keys known to the owning MojomFileGraph.
+  // The constant keys of the constants in the MojomFile.
   array<string>? top_level_constants;
   array<string>? embedded_constants;
 };
diff --git a/mojo/public/interfaces/bindings/mojom_types.mojom b/mojo/public/interfaces/bindings/mojom_types.mojom
index bc79282..4b68fbb 100644
--- a/mojo/public/interfaces/bindings/mojom_types.mojom
+++ b/mojo/public/interfaces/bindings/mojom_types.mojom
@@ -38,14 +38,11 @@
  * We refer to this higher-layer context as the *owning context.*
  *
  * In addition to types, Mojom values are also representd by structures in this
- * file. A |Value| may be a LiteralValue, a UserValueReference or a
- * BuiltinConstantValue. Similarly to the situation with TypeReferences,
- * UserValueReferences contain a |value_key| which may be used to lookup
- * a UserDefinedValue (an EnumValue or a DeclaredConstant) in
- * the owning context. For example the |MojomFileGraph| struct in
- * mojom_files.mojom contains the map:
- *     map<string, UserDefinedValue> resolved_values;
- * for this purpose.
+ * file. A |Value| may be a LiteralValue, a ConstantReference, 
+ * an EnumValueReference or a BuiltinConstantValue. Similarly to the situation 
+ * with TypeReferences, ConstantReferences and EnumValueReferences contain a 
+ * key which may be used to lookup user-defined value (an EnumValue or a
+ * DeclaredConstant) in the owning context. 
  */
 
 // The different kinds of types. We divide the types into five categories:
@@ -239,14 +236,11 @@
 struct EnumValue {
   DeclarationData? decl_data;
 
-  // The type key of the enum that this value belongs to.
-  string enum_type_key;
-
   // This is the value specified in the right-hand-side of the optional
   // initializer of an enum value declaration. The value must be a literal value
-  // of integer type or a UserValueReference that resolves to a different
-  // EnumValue from the same enum that was defined earlier lexically,
-  // or a UserValueReference that resolves to
+  // of integer type or an EnumValueReference that resolves to a different
+  // EnumValue from the same MojomEnum that was defined earlier lexically,
+  // or a ConstantReference that resolves to
   // a DeclaredConstant whose |resolved_concrete_value| is one of those.
   Value? initializer_value;
 
@@ -259,6 +253,7 @@
 struct MojomEnum {
   DeclarationData? decl_data;  // Some implementations may not provide this.
 
+  // The enum values in declaration order.
   array<EnumValue> values;
 };
 
@@ -316,8 +311,11 @@
   // A literal number, boolean or string
   LiteralValue literal_value;
 
-  // A reference to a user-defined value (a declared constant or enum value.)
-  UserValueReference user_value_reference;
+  // A reference to a DeclaredConstant.
+  ConstantReference constant_reference;
+
+  // A reference to an EnumValue
+  EnumValueReference enum_value_reference;
 
   // A built-in numeric constant.
   BuiltinConstantValue builtin_value;
@@ -348,20 +346,29 @@
   FLOAT_NAN,
 };
 
-// A reference to a user-defined value (a declared constant or enum value.)
-struct UserValueReference {
+// A reference to a DeclaredConstant.
+struct ConstantReference {
   // The identifier, as it appears at the reference site.
   string identifier;
 
-  // The key to the resolved value of this identifier. It refers to
-  // an instance of |UserDefinedValue| and so an EnumValue or
-  // DeclaredConstant.
-  string? value_key;
+  // The DeclaredConstant to which this reference has resolved can be looked up 
+  // using this key in the appropriate map in the owning context.
+  string constant_key;
 };
 
-union UserDefinedValue {
-  EnumValue enum_value;
-  DeclaredConstant declared_constant;
+// A reference to an EnumValue
+struct EnumValueReference {
+  // The identifier, as it appears at the reference site.
+  string identifier;
+
+  // The type key of the MojomEnum containing the EnumValue to which this
+  // reference has resolved. The MojomEnum can be looked up using this key in
+  // the appropriate map in the owning context. 
+  string enum_type_key;
+
+  // The 0-based index into the |values| array within the MojomEnum specified 
+  // by |enum_type_key| of the EnumValue to which this reference has resolved.
+  uint32 enum_value_index;
 };
 
 // This represents a Mojom constant declaration.
@@ -375,34 +382,33 @@
   // This is the value specified in the right-hand-side of the constant
   // declaration. The value must be one of the following:
   // (a) a LiteralValue or a BuiltinConstantValue of the same type as |type|
-  // (b) a UserValueReference whose resolved value is an EnumValue of the same
-  // type as |type|, or
-  // (c) a UserValueReference whose resolved value is a different
+  // (b) an EnumValueReference that resolves to an EnumValue of the same
+  // enum type as |type|, or
+  // (c) a ConstantReference that resolves to a different
   // DeclaredConstant whose |resolved_concrete_value| is one of (a) or (b)
   Value value;
 
 
   // The resolved concrete value. This must be a LiteralValue, a
-  // BuiltinConstantValue, or UserValueReference that resolves to an
-  // EnumValue. It may not be a UserValueReference that resolves
-  // to a DeclaredConstant.
+  // BuiltinConstantValue, or an EnumValueReference. It may not be a 
+  // ConstantReference.
   //
   // The resolved concrete value is defined as follows:
-  // If |value| is a LiteralValue, a BuiltinConstantValue or a
-  // UserValueReference that refers to an EnumValue then the resolved
+  // If |value| is a LiteralValue, a BuiltinConstantValue or an
+  // EnunValueReference then the resolved
   // concrete value is conceptually equal to |value| and this will
   // be indicated by setting the |resolved_concrete_value| field to null.
   //
-  // Otherwise |value| is a UserValueReference that refers to a different
+  // Otherwise |value| is a ConstantReference that refers to a different
   // DeclaredConstant and in this case |resolved_concrete_value| will be
   // non-null. It will be set to the conceptual resolved concrete value of that
   // other DeclaredConstant (even if that other declared constant has its own
   // |resolved_concrete_value| field set to null.) This chain of references
   // must terminate in well-formed Mojom.
   //
-  // In the case that |resolved_concrete_value| is set to a UserValueReference,
-  // only the |value_key| field of the UserValueReference is meaningful. The
-  // other fields should be ignored.
+  // In the case that |resolved_concrete_value| is set to an EnumValueReference
+  // only the |enum_type_key| and |enum_value_index| fields of the 
+  // EnumValueReference are meaningful. The other fields should be ignored.
   Value? resolved_concrete_value;
 };
 
diff --git a/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1 b/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1
index ad2de1d..6315bc3 100644
--- a/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1
+++ b/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1
@@ -1 +1 @@
-98f6e516f4fbabd421f6090632783f117f7dc687
\ No newline at end of file
+d84f07bd0b75a4ebf505375238e6bb7e23c894b3
\ No newline at end of file
diff --git a/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1 b/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1
index 4c36fff..8b19cd4 100644
--- a/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1
+++ b/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1
@@ -1 +1 @@
-cc88ce85a04fa888ad6322a71695aba30774a1b1
\ No newline at end of file
+629a131f79909f9e77eda82253cee731427f6e9e
\ No newline at end of file
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
index 6bd12d2..f14bda7 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
@@ -27,7 +27,7 @@
     'fields': [
       _descriptor.SingleFieldGroup('files', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.StructType(lambda: MojomFile)), 0, 0),
       _descriptor.SingleFieldGroup('resolved_types', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.UnionType(lambda: mojom_types_mojom.UserDefinedType)), 1, 0),
-      _descriptor.SingleFieldGroup('resolved_values', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.UnionType(lambda: mojom_types_mojom.UserDefinedValue)), 2, 0),
+      _descriptor.SingleFieldGroup('resolved_constants', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.StructType(lambda: mojom_types_mojom.DeclaredConstant)), 2, 0),
     ],
   }
 
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
index dae6e6a..3ca0cba 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
@@ -150,9 +150,8 @@
   DESCRIPTOR = {
     'fields': [
       _descriptor.SingleFieldGroup('decl_data', _descriptor.StructType(lambda: DeclarationData, nullable=True), 0, 0),
-      _descriptor.SingleFieldGroup('enum_type_key', _descriptor.TYPE_STRING, 1, 0),
-      _descriptor.SingleFieldGroup('initializer_value', _descriptor.UnionType(lambda: Value, nullable=True), 2, 0),
-      _descriptor.SingleFieldGroup('int_value', _descriptor.TYPE_INT32, 3, 0),
+      _descriptor.SingleFieldGroup('initializer_value', _descriptor.UnionType(lambda: Value, nullable=True), 1, 0),
+      _descriptor.SingleFieldGroup('int_value', _descriptor.TYPE_INT32, 2, 0),
     ],
   }
 
@@ -188,12 +187,22 @@
     ],
   }
 
-class UserValueReference(object):
+class ConstantReference(object):
   __metaclass__ = _reflection.MojoStructType
   DESCRIPTOR = {
     'fields': [
       _descriptor.SingleFieldGroup('identifier', _descriptor.TYPE_STRING, 0, 0),
-      _descriptor.SingleFieldGroup('value_key', _descriptor.TYPE_NULLABLE_STRING, 1, 0),
+      _descriptor.SingleFieldGroup('constant_key', _descriptor.TYPE_STRING, 1, 0),
+    ],
+  }
+
+class EnumValueReference(object):
+  __metaclass__ = _reflection.MojoStructType
+  DESCRIPTOR = {
+    'fields': [
+      _descriptor.SingleFieldGroup('identifier', _descriptor.TYPE_STRING, 0, 0),
+      _descriptor.SingleFieldGroup('enum_type_key', _descriptor.TYPE_STRING, 1, 0),
+      _descriptor.SingleFieldGroup('enum_value_index', _descriptor.TYPE_UINT32, 2, 0),
     ],
   }
 
@@ -298,8 +307,9 @@
   DESCRIPTOR = {
     'fields': [
       _descriptor.SingleFieldGroup('literal_value', _descriptor.UnionType(lambda: LiteralValue), 0, 0),
-      _descriptor.SingleFieldGroup('user_value_reference', _descriptor.StructType(lambda: UserValueReference), 1, 0),
-      _descriptor.SingleFieldGroup('builtin_value', _descriptor.TYPE_INT32, 2, 0),
+      _descriptor.SingleFieldGroup('constant_reference', _descriptor.StructType(lambda: ConstantReference), 1, 0),
+      _descriptor.SingleFieldGroup('enum_value_reference', _descriptor.StructType(lambda: EnumValueReference), 2, 0),
+      _descriptor.SingleFieldGroup('builtin_value', _descriptor.TYPE_INT32, 3, 0),
     ],
    }
 
@@ -322,12 +332,3 @@
     ],
    }
 
-class UserDefinedValue(object):
-  __metaclass__ = _reflection.MojoUnionType
-  DESCRIPTOR = {
-    'fields': [
-      _descriptor.SingleFieldGroup('enum_value', _descriptor.StructType(lambda: EnumValue), 0, 0),
-      _descriptor.SingleFieldGroup('declared_constant', _descriptor.StructType(lambda: DeclaredConstant), 1, 0),
-    ],
-   }
-
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
index 222261d..ed117c0 100755
--- a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
@@ -73,7 +73,7 @@
     if mojom_file.declared_mojom_objects:
       if mojom_file.declared_mojom_objects.top_level_constants:
         mod.constants = [
-            self.ConstantFromValueKey(key)
+            self.ConstantFromKey(key)
             for key in mojom_file.declared_mojom_objects.top_level_constants]
 
       user_defined_types = ['interfaces', 'structs', 'unions']
@@ -336,7 +336,7 @@
 
     if contained_declarations.constants:
       for const_key in contained_declarations.constants:
-        const = self.ConstantFromValueKey(const_key)
+        const = self.ConstantFromKey(const_key)
         parent_kind.constants.append(const)
 
   def EnumFromMojom(self, enum, mojom_type):
@@ -511,22 +511,23 @@
 
     return method
 
-  def ConstantFromValueKey(self, value_key):
-    """Takes a value key into a graph.resolved_values referring to a constant
-    and returns the module equivalent.
+  def ConstantFromKey(self, constant_key):
+    """Takes a key into the map graph.resolved_constants and returns the module
+    equivalent constant.
 
     Args:
-      value_key: {str} the value key referring to the value to be returned.
+      constant_key: {str} the key referring to the constant whose translation
+        is to be returned.
 
     Returns:
       {module.Constant} translated.
     """
-    if value_key in self._constant_cache:
-      return self._constant_cache[value_key]
+    if constant_key in self._constant_cache:
+      return self._constant_cache[constant_key]
 
-    mojom_const = self._graph.resolved_values[value_key].declared_constant
+    mojom_const = self._graph.resolved_constants[constant_key]
     const = module.Constant()
-    self._constant_cache[value_key] = const
+    self._constant_cache[constant_key] = const
 
     self.ConstantFromMojom(const, mojom_const)
     return const
@@ -598,75 +599,82 @@
         mojom_types_mojom.BuiltinConstantValue.FLOAT_NAN: 'float.NAN',
           }
       return module.BuiltinValue(mojom_to_builtin[value.builtin_value])
+    return self.FromUserValueReference(value)
 
-    assert value.tag == mojom_types_mojom.Value.Tags.user_value_reference
-    return self.UserDefinedFromValueKey(value.user_value_reference.value_key)
-
-  def UserDefinedFromValueKey(self, value_key):
-    """Takes a value key into graph.resolved_values and returns the module
-    equivalent.
+  def FromUserValueReference(self, value):
+    """Translates a mojom_types.EnumValueReference or ConstantReference into the
+    module equivalent.
 
     Args:
-      value_key: {str} the value key referring to the value to be returned.
+      value: {mojom_types_mojom.Value} the value ref to be translated. It
+      must be of type EnumValueReference or ConstantReference.
 
     Returns:
       {module.EnumValue|module.ConstantValue} translated.
     """
-    if value_key in self._value_cache:
-      return self._value_cache[value_key]
+    if value.tag == mojom_types_mojom.Value.Tags.constant_reference:
+      return self.ConstantValueFromKey(value.constant_reference.constant_key)
+    assert value.tag == mojom_types_mojom.Value.Tags.enum_value_reference
+    return self.EnumValueFromKey(value.enum_value_reference.enum_type_key,
+        value.enum_value_reference.enum_value_index)
 
-    value = self._graph.resolved_values[value_key]
-    if value.tag == mojom_types_mojom.UserDefinedValue.Tags.enum_value:
-      return self.EnumValueFromMojom(value.enum_value)
-    return self.ConstantValueFromValueKey(value_key)
-
-  def ConstantValueFromValueKey(self, value_key):
-    """Takes a value key into graph.resolved_values referring to a declared
-    constant and returns the module equivalent.
+  def ConstantValueFromKey(self, constant_key):
+    """Takes a key into graph.resolved_constants referring to a
+    mojom declared_constant and returns a module.ConstantValue referring to the
+    module equivalent constant.
 
     Args:
-      value_key: {str} the value key referring to the value to be returned.
+      constant_key: {str} the constant key referring to a constant.
 
     Returns:
       {module.ConstantValue} translated.
     """
-    const_value = module.ConstantValue()
-    self._value_cache[value_key] = const_value
+    if constant_key in self._value_cache:
+      return self._value_cache[constant_key]
 
-    const = self.ConstantFromValueKey(value_key)
+    const_value = module.ConstantValue()
+    self._value_cache[constant_key] = const_value
+
+    const = self.ConstantFromKey(constant_key)
     const_value.constant = const
     const_value.name = const.name
     const_value.parent_kind = const.parent_kind
     self.PopulateModuleOrImportedFrom(const_value,
-        self._graph.resolved_values[value_key].declared_constant)
+        self._graph.resolved_constants[constant_key])
     const_value.namespace = const_value.module.namespace
     return const_value
 
-  def EnumValueFromMojom(self, mojom_enum_value):
-    """Translates an mojom_types_mojom.EnumValue to a module.EnumValue.
+  def EnumValueFromKey(self, enum_type_key, enum_value_index):
+    """Takes an enum type key and an enum value index (together these
+    form a key to a mojom_enum_value) and returns a module.EnumValue referring
+    the module equivalent enum value
 
-    mojom_enum_value: {mojom_types_mojom.EnumValue} to be translated.
+    Args:
+      enum_type_key: {str} the type key of a mojom_enum
+      enum_value_index: {int} the 0-based index into the |values| array of
+        the mojom_enum
 
     Returns:
       {module.EnumValue} translated from mojom_enum_value.
     """
-    enum_type_key = mojom_enum_value.enum_type_key
-    name = mojom_enum_value.decl_data.short_name
-    value_key = (enum_type_key, name)
-    if value_key in self._value_cache:
-      return self._value_cache[value_key]
+    enum_value_key = (enum_type_key, enum_value_index)
+    if enum_value_key in self._value_cache:
+      return self._value_cache[enum_value_key]
+
+    mojom_enum = self._graph.resolved_types[enum_type_key].enum_type
+    mojom_enum_value = mojom_enum.values[enum_value_index]
 
     # We need to create and cache the EnumValue object just in case later calls
     # require the creation of that same EnumValue object.
     enum_value = module.EnumValue()
-    self._value_cache[value_key] = enum_value
+    self._value_cache[enum_value_key] = enum_value
 
     enum = self.UserDefinedFromTypeKey(enum_type_key)
     enum_value.enum = enum
     self.PopulateModuleOrImportedFrom(enum_value, mojom_enum_value)
     enum_value.namespace = enum_value.module.namespace
     enum_value.parent_kind = enum.parent_kind
-    enum_value.name = name
+    enum_value.name = mojom_enum_value.decl_data.short_name
 
     return enum_value
 
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
index 03e20c7..5999305 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
@@ -115,16 +115,14 @@
         value=mojom_types_mojom.Value(
           literal_value=mojom_types_mojom.LiteralValue(
             int64_value=30)))
-    user_defined_value = mojom_types_mojom.UserDefinedValue()
-    user_defined_value.declared_constant = mojom_const
-    graph.resolved_values = {'value_key': user_defined_value}
+    graph.resolved_constants = {'constant_key': mojom_const}
 
     mojom_file.declared_mojom_objects = mojom_files_mojom.KeysByType(
         interfaces=['interface_key'],
         structs=['struct_key'],
         unions=['union_key'],
         top_level_enums=['enum_key'],
-        top_level_constants=['value_key']
+        top_level_constants=['constant_key']
         )
 
     mod = mojom_translator.FileTranslator(graph, file_name).Translate()
@@ -367,13 +365,11 @@
         source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name))
     value1 = mojom_types_mojom.EnumValue(
         decl_data=mojom_types_mojom.DeclarationData(short_name='val1'),
-        enum_type_key='AnEnum',
         initializer_value=mojom_types_mojom.Value(
             literal_value=mojom_types_mojom.LiteralValue(uint64_value=20)),
         int_value=20)
     value2 = mojom_types_mojom.EnumValue(
         decl_data=mojom_types_mojom.DeclarationData(short_name='val2'),
-        enum_type_key='AnEnum',
         int_value=70)
     mojom_enum.values = [value1, value2]
 
@@ -757,12 +753,10 @@
         value=mojom_types_mojom.Value(
           literal_value=mojom_types_mojom.LiteralValue(
             int64_value=30)))
-    user_defined_value = mojom_types_mojom.UserDefinedValue()
-    user_defined_value.declared_constant = mojom_const
-    graph.resolved_values = {'value_key': user_defined_value}
+    graph.resolved_constants = {'constant_key': mojom_const}
 
     contained_declarations = mojom_types_mojom.ContainedDeclarations(
-        enums=['enum_key'], constants=['value_key'])
+        enums=['enum_key'], constants=['constant_key'])
 
     translator = mojom_translator.FileTranslator(graph, file_name)
     struct = module.Struct(name='parent')
@@ -838,28 +832,23 @@
           short_name='val1',
           source_file_info=mojom_types_mojom.SourceFileInfo(
             file_name=file_name)),
-        enum_type_key='enum_key',
         initializer_value=mojom_types_mojom.Value(
             literal_value=mojom_types_mojom.LiteralValue(uint64_value=20)),
         int_value=20)
     value2 = mojom_types_mojom.EnumValue(
         decl_data=mojom_types_mojom.DeclarationData(short_name='val2'),
-        enum_type_key='enum_key',
         int_value=70)
     mojom_enum.values = [value1, value2]
 
     graph = mojom_files_mojom.MojomFileGraph()
     graph.resolved_types = {
         'enum_key': mojom_types_mojom.UserDefinedType(enum_type=mojom_enum)}
-    graph.resolved_values = {
-        'enum_value1': mojom_types_mojom.UserDefinedValue(enum_value=value1),
-        'enum_value2': mojom_types_mojom.UserDefinedValue(enum_value=value2),
-        }
 
     mojom = mojom_types_mojom.Value(
-        user_value_reference=mojom_types_mojom.UserValueReference(
+        enum_value_reference=mojom_types_mojom.EnumValueReference(
           identifier='SOMEID',
-          value_key='enum_value1'))
+          enum_type_key='enum_key',
+          enum_value_index=0))
 
     translator = mojom_translator.FileTranslator(graph, file_name)
     enum_value = translator.ValueFromMojom(mojom)
@@ -880,21 +869,19 @@
         value=mojom_types_mojom.Value(
           literal_value=mojom_types_mojom.LiteralValue(
             int64_value=30)))
-    user_defined_value = mojom_types_mojom.UserDefinedValue()
-    user_defined_value.declared_constant = mojom_const
 
     graph = mojom_files_mojom.MojomFileGraph()
-    graph.resolved_values = {'value_key': user_defined_value}
+    graph.resolved_constants = {'constant_key': mojom_const}
 
     mojom = mojom_types_mojom.Value(
-        user_value_reference=mojom_types_mojom.UserValueReference(
+        constant_reference=mojom_types_mojom.ConstantReference(
           identifier='SOMEID',
-          value_key='value_key'))
+          constant_key='constant_key'))
 
     translator = mojom_translator.FileTranslator(graph, file_name)
     const_value = translator.ValueFromMojom(mojom)
     self.assertIs(
-        translator.ConstantFromValueKey('value_key'), const_value.constant)
+        translator.ConstantFromKey('constant_key'), const_value.constant)
     self.assertIs(mojom_const.decl_data.short_name, const_value.name)
 
 
diff --git a/mojom/generated/mojom_files/mojom_files.mojom.go b/mojom/generated/mojom_files/mojom_files.mojom.go
index 98471af..9aba8d8 100644
--- a/mojom/generated/mojom_files/mojom_files.mojom.go
+++ b/mojom/generated/mojom_files/mojom_files.mojom.go
@@ -287,9 +287,9 @@
 }
 
 type MojomFileGraph struct {
-	Files          map[string]MojomFile
-	ResolvedTypes  map[string]mojom_types.UserDefinedType
-	ResolvedValues map[string]mojom_types.UserDefinedValue
+	Files             map[string]MojomFile
+	ResolvedTypes     map[string]mojom_types.UserDefinedType
+	ResolvedConstants map[string]mojom_types.DeclaredConstant
 }
 
 func (s *MojomFileGraph) Encode(encoder *bindings.Encoder) error {
@@ -412,18 +412,18 @@
 	encoder.StartMap()
 	{
 		var keys0 []string
-		var values0 []mojom_types.UserDefinedValue
+		var values0 []mojom_types.DeclaredConstant
 		if encoder.Deterministic() {
-			for key0, _ := range s.ResolvedValues {
+			for key0, _ := range s.ResolvedConstants {
 				keys0 = append(keys0, key0)
 			}
 			bindings.SortMapKeys(&keys0)
-			values0 = make([]mojom_types.UserDefinedValue, len(keys0))
+			values0 = make([]mojom_types.DeclaredConstant, len(keys0))
 			for i, key := range keys0 {
-				values0[i] = s.ResolvedValues[key]
+				values0[i] = s.ResolvedConstants[key]
 			}
 		} else {
-			for key0, value0 := range s.ResolvedValues {
+			for key0, value0 := range s.ResolvedConstants {
 				keys0 = append(keys0, key0)
 				values0 = append(values0, value0)
 			}
@@ -446,10 +446,10 @@
 		if err := encoder.WritePointer(); err != nil {
 			return err
 		}
-		encoder.StartArray(uint32(len(values0)), 128)
+		encoder.StartArray(uint32(len(values0)), 64)
 		for _, elem1 := range values0 {
-			if elem1 == nil {
-				return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
+			if err := encoder.WritePointer(); err != nil {
+				return err
 			}
 			if err := elem1.Encode(encoder); err != nil {
 				return err
@@ -719,7 +719,7 @@
 					}
 				}
 			}
-			var values0 []mojom_types.UserDefinedValue
+			var values0 []mojom_types.DeclaredConstant
 			{
 				pointer1, err := decoder.ReadPointer()
 				if err != nil {
@@ -728,19 +728,22 @@
 				if pointer1 == 0 {
 					return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
 				} else {
-					len1, err := decoder.StartArray(128)
+					len1, err := decoder.StartArray(64)
 					if err != nil {
 						return err
 					}
-					values0 = make([]mojom_types.UserDefinedValue, len1)
+					values0 = make([]mojom_types.DeclaredConstant, len1)
 					for i1 := uint32(0); i1 < len1; i1++ {
-						var err error
-						values0[i1], err = mojom_types.DecodeUserDefinedValue(decoder)
+						pointer2, err := decoder.ReadPointer()
 						if err != nil {
 							return err
 						}
-						if values0[i1] == nil {
-							return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
+						if pointer2 == 0 {
+							return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+						} else {
+							if err := values0[i1].Decode(decoder); err != nil {
+								return err
+							}
 						}
 					}
 					if err := decoder.Finish(); err != nil {
@@ -757,11 +760,11 @@
 				return err
 			}
 			len0 := len(keys0)
-			map0 := make(map[string]mojom_types.UserDefinedValue)
+			map0 := make(map[string]mojom_types.DeclaredConstant)
 			for i0 := 0; i0 < len0; i0++ {
 				map0[keys0[i0]] = values0[i0]
 			}
-			s.ResolvedValues = map0
+			s.ResolvedConstants = map0
 		}
 	}
 	if err := decoder.Finish(); err != nil {
diff --git a/mojom/generated/mojom_types/mojom_types.mojom.go b/mojom/generated/mojom_types/mojom_types.mojom.go
index 5db8a33..b66e55f 100644
--- a/mojom/generated/mojom_types/mojom_types.mojom.go
+++ b/mojom/generated/mojom_types/mojom_types.mojom.go
@@ -20,7 +20,7 @@
 type SimpleType int32
 
 const (
-	SimpleType_Bool = 0
+	SimpleType_Bool SimpleType = 0
 	SimpleType_Double = SimpleType_Bool + 1;
 	SimpleType_Float = SimpleType_Double + 1;
 	SimpleType_Int8 = SimpleType_Float + 1;
@@ -37,7 +37,7 @@
 type BuiltinConstantValue int32
 
 const (
-	BuiltinConstantValue_DoubleInfinity = 0
+	BuiltinConstantValue_DoubleInfinity BuiltinConstantValue = 0
 	BuiltinConstantValue_DoubleNegativeInfinity = BuiltinConstantValue_DoubleInfinity + 1;
 	BuiltinConstantValue_DoubleNan = BuiltinConstantValue_DoubleNegativeInfinity + 1;
 	BuiltinConstantValue_FloatInfinity = BuiltinConstantValue_DoubleNan + 1;
@@ -49,7 +49,7 @@
 type HandleType_Kind int32
 
 const (
-	HandleType_Kind_Unspecified = 0
+	HandleType_Kind_Unspecified HandleType_Kind = 0
 	HandleType_Kind_MessagePipe = HandleType_Kind_Unspecified + 1;
 	HandleType_Kind_DataPipeConsumer = HandleType_Kind_MessagePipe + 1;
 	HandleType_Kind_DataPipeProducer = HandleType_Kind_DataPipeConsumer + 1;
@@ -1075,14 +1075,13 @@
 
 type EnumValue struct {
 	DeclData *DeclarationData
-	EnumTypeKey string
 	InitializerValue Value
 	IntValue int32
 }
 
 
 func (s *EnumValue) Encode(encoder *bindings.Encoder) error {
-	encoder.StartStruct(40, 0)
+	encoder.StartStruct(32, 0)
 	if s.DeclData == nil {
 		encoder.WriteNullPointer()
 	} else {
@@ -1093,12 +1092,6 @@
 			return err
 		}
 	}
-	if err := encoder.WritePointer(); err != nil {
-		return err
-	}
-	if err := encoder.WriteString(s.EnumTypeKey); err != nil {
-		return err
-	}
 	if s.InitializerValue == nil {
 		encoder.WriteNullUnion()
 	} else {
@@ -1116,7 +1109,7 @@
 }
 
 var enumValue_Versions []bindings.DataHeader = []bindings.DataHeader{
-	bindings.DataHeader{48, 0},
+	bindings.DataHeader{40, 0},
 }
 
 func (s *EnumValue) Decode(decoder *bindings.Decoder) error {
@@ -1153,21 +1146,6 @@
 		}
 	}
 	if header.ElementsOrVersion >= 0 {
-		pointer0, err := decoder.ReadPointer()
-		if err != nil {
-			return err
-		}
-		if pointer0 == 0 {
-			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
-		} else {
-			value0, err := decoder.ReadString()
-			if err != nil {
-				return err
-			}
-			s.EnumTypeKey = value0
-		}
-	}
-	if header.ElementsOrVersion >= 0 {
 		var err error
 		s.InitializerValue, err = DecodeValue(decoder)
 		if err != nil {
@@ -1676,13 +1654,13 @@
 	return nil
 }
 
-type UserValueReference struct {
+type ConstantReference struct {
 	Identifier string
-	ValueKey *string
+	ConstantKey string
 }
 
 
-func (s *UserValueReference) Encode(encoder *bindings.Encoder) error {
+func (s *ConstantReference) Encode(encoder *bindings.Encoder) error {
 	encoder.StartStruct(16, 0)
 	if err := encoder.WritePointer(); err != nil {
 		return err
@@ -1690,15 +1668,11 @@
 	if err := encoder.WriteString(s.Identifier); err != nil {
 		return err
 	}
-	if s.ValueKey == nil {
-		encoder.WriteNullPointer()
-	} else {
-		if err := encoder.WritePointer(); err != nil {
-			return err
-		}
-		if err := encoder.WriteString((*s.ValueKey)); err != nil {
-			return err
-		}
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := encoder.WriteString(s.ConstantKey); err != nil {
+		return err
 	}
 	if err := encoder.Finish(); err != nil {
 		return err
@@ -1706,23 +1680,23 @@
 	return nil
 }
 
-var userValueReference_Versions []bindings.DataHeader = []bindings.DataHeader{
+var constantReference_Versions []bindings.DataHeader = []bindings.DataHeader{
 	bindings.DataHeader{24, 0},
 }
 
-func (s *UserValueReference) Decode(decoder *bindings.Decoder) error {
+func (s *ConstantReference) Decode(decoder *bindings.Decoder) error {
 	header, err := decoder.StartStruct()
 	if err != nil {
 		return err
 	}
-	index := sort.Search(len(userValueReference_Versions), func(i int) bool {
-		return userValueReference_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
+	index := sort.Search(len(constantReference_Versions), func(i int) bool {
+		return constantReference_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
 	})
-	if index < len(userValueReference_Versions) {
-		if userValueReference_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
+	if index < len(constantReference_Versions) {
+		if constantReference_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
 			index--
 		}
-		expectedSize := userValueReference_Versions[index].Size
+		expectedSize := constantReference_Versions[index].Size
 		if expectedSize != header.Size {
 			return &bindings.ValidationError{bindings.UnexpectedStructHeader,
 				fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
@@ -1750,14 +1724,13 @@
 			return err
 		}
 		if pointer0 == 0 {
-			s.ValueKey = nil
+			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
 		} else {
-			s.ValueKey = new(string)
 			value0, err := decoder.ReadString()
 			if err != nil {
 				return err
 			}
-			(*s.ValueKey) = value0
+			s.ConstantKey = value0
 		}
 	}
 	if err := decoder.Finish(); err != nil {
@@ -1766,6 +1739,102 @@
 	return nil
 }
 
+type EnumValueReference struct {
+	Identifier string
+	EnumTypeKey string
+	EnumValueIndex uint32
+}
+
+
+func (s *EnumValueReference) Encode(encoder *bindings.Encoder) error {
+	encoder.StartStruct(24, 0)
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := encoder.WriteString(s.Identifier); err != nil {
+		return err
+	}
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := encoder.WriteString(s.EnumTypeKey); err != nil {
+		return err
+	}
+	if err := encoder.WriteUint32(s.EnumValueIndex); err != nil {
+		return err
+	}
+	if err := encoder.Finish(); err != nil {
+		return err
+	}
+	return nil
+}
+
+var enumValueReference_Versions []bindings.DataHeader = []bindings.DataHeader{
+	bindings.DataHeader{32, 0},
+}
+
+func (s *EnumValueReference) Decode(decoder *bindings.Decoder) error {
+	header, err := decoder.StartStruct()
+	if err != nil {
+		return err
+	}
+	index := sort.Search(len(enumValueReference_Versions), func(i int) bool {
+		return enumValueReference_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
+	})
+	if index < len(enumValueReference_Versions) {
+		if enumValueReference_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
+			index--
+		}
+		expectedSize := enumValueReference_Versions[index].Size
+		if expectedSize != header.Size {
+			return &bindings.ValidationError{bindings.UnexpectedStructHeader,
+				fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
+			}
+		}
+	}
+	if header.ElementsOrVersion >= 0 {
+		pointer0, err := decoder.ReadPointer()
+		if err != nil {
+			return err
+		}
+		if pointer0 == 0 {
+			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+		} else {
+			value0, err := decoder.ReadString()
+			if err != nil {
+				return err
+			}
+			s.Identifier = value0
+		}
+	}
+	if header.ElementsOrVersion >= 0 {
+		pointer0, err := decoder.ReadPointer()
+		if err != nil {
+			return err
+		}
+		if pointer0 == 0 {
+			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+		} else {
+			value0, err := decoder.ReadString()
+			if err != nil {
+				return err
+			}
+			s.EnumTypeKey = value0
+		}
+	}
+	if header.ElementsOrVersion >= 0 {
+		value0, err := decoder.ReadUint32()
+		if err != nil {
+			return err
+		}
+		s.EnumValueIndex = value0
+	}
+	if err := decoder.Finish(); err != nil {
+		return err
+	}
+	return nil
+}
+
 type DeclaredConstant struct {
 	DeclData DeclarationData
 	Type Type
@@ -3442,7 +3511,8 @@
 
 type __ValueReflect struct {
 	LiteralValue LiteralValue
-	UserValueReference UserValueReference
+	ConstantReference ConstantReference
+	EnumValueReference EnumValueReference
 	BuiltinValue BuiltinConstantValue
 }
 
@@ -3466,13 +3536,20 @@
 		decoder.FinishReadingUnionValue()
 		return &value, nil
 	case 1:
-		var value ValueUserValueReference
+		var value ValueConstantReference
 		if err := value.decodeInternal(decoder); err != nil {
 			return nil, err
 		}
 		decoder.FinishReadingUnionValue()
 		return &value, nil
 	case 2:
+		var value ValueEnumValueReference
+		if err := value.decodeInternal(decoder); err != nil {
+			return nil, err
+		}
+		decoder.FinishReadingUnionValue()
+		return &value, nil
+	case 3:
 		var value ValueBuiltinValue
 		if err := value.decodeInternal(decoder); err != nil {
 			return nil, err
@@ -3546,12 +3623,12 @@
 
 
 
-type ValueUserValueReference struct { Value UserValueReference }
-func (u *ValueUserValueReference) Tag() uint32 { return 1 }
-func (u *ValueUserValueReference) Interface() interface{} { return u.Value }
-func (u *ValueUserValueReference) __Reflect(__ValueReflect) {}
+type ValueConstantReference struct { Value ConstantReference }
+func (u *ValueConstantReference) Tag() uint32 { return 1 }
+func (u *ValueConstantReference) Interface() interface{} { return u.Value }
+func (u *ValueConstantReference) __Reflect(__ValueReflect) {}
 
-func (u *ValueUserValueReference) Encode(encoder *bindings.Encoder) error {
+func (u *ValueConstantReference) Encode(encoder *bindings.Encoder) error {
 	encoder.WriteUnionHeader(u.Tag())
 	if err := encoder.WritePointer(); err != nil {
 		return err
@@ -3564,7 +3641,43 @@
 	return nil
 }
 
-func (u *ValueUserValueReference) decodeInternal(decoder *bindings.Decoder) error {
+func (u *ValueConstantReference) decodeInternal(decoder *bindings.Decoder) error {
+	pointer0, err := decoder.ReadPointer()
+	if err != nil {
+		return err
+	}
+	if pointer0 == 0 {
+		return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+	} else {
+		if err := u.Value.Decode(decoder); err != nil {
+			return err
+		}
+	}
+	
+	return nil
+}
+
+
+
+type ValueEnumValueReference struct { Value EnumValueReference }
+func (u *ValueEnumValueReference) Tag() uint32 { return 2 }
+func (u *ValueEnumValueReference) Interface() interface{} { return u.Value }
+func (u *ValueEnumValueReference) __Reflect(__ValueReflect) {}
+
+func (u *ValueEnumValueReference) Encode(encoder *bindings.Encoder) error {
+	encoder.WriteUnionHeader(u.Tag())
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := u.Value.Encode(encoder); err != nil {
+		return err
+	}
+	
+	encoder.FinishWritingUnionValue()
+	return nil
+}
+
+func (u *ValueEnumValueReference) decodeInternal(decoder *bindings.Decoder) error {
 	pointer0, err := decoder.ReadPointer()
 	if err != nil {
 		return err
@@ -3583,7 +3696,7 @@
 
 
 type ValueBuiltinValue struct { Value BuiltinConstantValue }
-func (u *ValueBuiltinValue) Tag() uint32 { return 2 }
+func (u *ValueBuiltinValue) Tag() uint32 { return 3 }
 func (u *ValueBuiltinValue) Interface() interface{} { return u.Value }
 func (u *ValueBuiltinValue) __Reflect(__ValueReflect) {}
 
@@ -4081,131 +4194,3 @@
 
 
 
-type UserDefinedValue interface {
-	Tag() uint32
-	Interface() interface{}
-	__Reflect(__UserDefinedValueReflect)
-	Encode(encoder *bindings.Encoder) error
-}
-
-
-
-type __UserDefinedValueReflect struct {
-	EnumValue EnumValue
-	DeclaredConstant DeclaredConstant
-}
-
-func DecodeUserDefinedValue(decoder *bindings.Decoder) (UserDefinedValue, error) {
-	size, tag, err := decoder.ReadUnionHeader()
-	if err != nil {
-		return nil, err
-	}
-
-	if size == 0 {
-		decoder.SkipUnionValue()
-		return nil, nil
-	}
-
-	switch tag {
-	case 0:
-		var value UserDefinedValueEnumValue
-		if err := value.decodeInternal(decoder); err != nil {
-			return nil, err
-		}
-		decoder.FinishReadingUnionValue()
-		return &value, nil
-	case 1:
-		var value UserDefinedValueDeclaredConstant
-		if err := value.decodeInternal(decoder); err != nil {
-			return nil, err
-		}
-		decoder.FinishReadingUnionValue()
-		return &value, nil
-	}
-
-	decoder.SkipUnionValue()
-	return &UserDefinedValueUnknown{tag: tag}, nil
-}
-
-type UserDefinedValueUnknown struct { tag uint32 }
-func (u *UserDefinedValueUnknown) Tag() uint32 { return u.tag }
-func (u *UserDefinedValueUnknown) Interface() interface{} { return nil }
-func (u *UserDefinedValueUnknown) __Reflect(__UserDefinedValueReflect) {}
-
-func (u *UserDefinedValueUnknown) Encode(encoder *bindings.Encoder) error {
-	return fmt.Errorf("Trying to serialize an unknown UserDefinedValue. There is no sane way to do that!");
-}
-
-type UserDefinedValueEnumValue struct { Value EnumValue }
-func (u *UserDefinedValueEnumValue) Tag() uint32 { return 0 }
-func (u *UserDefinedValueEnumValue) Interface() interface{} { return u.Value }
-func (u *UserDefinedValueEnumValue) __Reflect(__UserDefinedValueReflect) {}
-
-func (u *UserDefinedValueEnumValue) Encode(encoder *bindings.Encoder) error {
-	encoder.WriteUnionHeader(u.Tag())
-	if err := encoder.WritePointer(); err != nil {
-		return err
-	}
-	if err := u.Value.Encode(encoder); err != nil {
-		return err
-	}
-	
-	encoder.FinishWritingUnionValue()
-	return nil
-}
-
-func (u *UserDefinedValueEnumValue) decodeInternal(decoder *bindings.Decoder) error {
-	pointer0, err := decoder.ReadPointer()
-	if err != nil {
-		return err
-	}
-	if pointer0 == 0 {
-		return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
-	} else {
-		if err := u.Value.Decode(decoder); err != nil {
-			return err
-		}
-	}
-	
-	return nil
-}
-
-
-
-type UserDefinedValueDeclaredConstant struct { Value DeclaredConstant }
-func (u *UserDefinedValueDeclaredConstant) Tag() uint32 { return 1 }
-func (u *UserDefinedValueDeclaredConstant) Interface() interface{} { return u.Value }
-func (u *UserDefinedValueDeclaredConstant) __Reflect(__UserDefinedValueReflect) {}
-
-func (u *UserDefinedValueDeclaredConstant) Encode(encoder *bindings.Encoder) error {
-	encoder.WriteUnionHeader(u.Tag())
-	if err := encoder.WritePointer(); err != nil {
-		return err
-	}
-	if err := u.Value.Encode(encoder); err != nil {
-		return err
-	}
-	
-	encoder.FinishWritingUnionValue()
-	return nil
-}
-
-func (u *UserDefinedValueDeclaredConstant) decodeInternal(decoder *bindings.Decoder) error {
-	pointer0, err := decoder.ReadPointer()
-	if err != nil {
-		return err
-	}
-	if pointer0 == 0 {
-		return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
-	} else {
-		if err := u.Value.Decode(decoder); err != nil {
-			return err
-		}
-	}
-	
-	return nil
-}
-
-
-
-
diff --git a/mojom/mojom_tool/mojom/user_defined_types.go b/mojom/mojom_tool/mojom/user_defined_types.go
index a3019ad..9cd5513 100644
--- a/mojom/mojom_tool/mojom/user_defined_types.go
+++ b/mojom/mojom_tool/mojom/user_defined_types.go
@@ -1123,6 +1123,7 @@
 func (e *MojomEnum) AddEnumValue(declData DeclarationData, valueRef ValueRef) DuplicateNameError {
 	enumValue := new(EnumValue)
 	enumValue.Init(declData, UserDefinedValueKindEnumValue, enumValue, valueRef)
+	enumValue.valueIndex = uint32(len(e.Values))
 	e.Values = append(e.Values, enumValue)
 	e.DeclaredObjects = append(e.DeclaredObjects, enumValue)
 	enumValue.enumType = e
@@ -1154,6 +1155,8 @@
 	UserDefinedValueBase
 
 	enumType *MojomEnum
+	// The 0-based index of this EnumValue in the |values| slice of |enumType|.
+	valueIndex uint32
 
 	// After all values in the MojomDescriptor have been resolved,
 	// MojomDescriptor.ComputeEnumValueIntegers() should be invoked. This
@@ -1168,6 +1171,10 @@
 	return ev.enumType
 }
 
+func (ev *EnumValue) ValueIndex() uint32 {
+	return ev.valueIndex
+}
+
 // EnumValue implements ConcreteValue
 func (ev *EnumValue) ValueType() ConcreteType {
 	return ev.enumType
diff --git a/mojom/mojom_tool/serialization/serialization.go b/mojom/mojom_tool/serialization/serialization.go
index d330de6..2c47971 100644
--- a/mojom/mojom_tool/serialization/serialization.go
+++ b/mojom/mojom_tool/serialization/serialization.go
@@ -87,10 +87,20 @@
 		fileGraph.ResolvedTypes[key] = translateUserDefinedType(userDefinedType)
 	}
 
-	// Add |resolved_values| field.
-	fileGraph.ResolvedValues = make(map[string]mojom_types.UserDefinedValue)
+	// Add |resolved_constants| field.
+	fileGraph.ResolvedConstants = make(map[string]mojom_types.DeclaredConstant)
 	for key, userDefinedValue := range d.ValuesByKey {
-		fileGraph.ResolvedValues[key] = translateUserDefinedValue(userDefinedValue)
+		switch c := userDefinedValue.(type) {
+		// Note that our representation of values in mojom_types.mojom is a little different than our
+		// pure Go representation. In the latter we use value keys to refer to both constants and
+		// enum values but in the former we only use value keys to refer to constants. Enum values
+		// are stored as part of their enum types and they are are referred to  not directly using
+		// value keyes but rather via the type key of their enum and an index into the |values| array
+		// of that enum. For this reason we are only looking for the constants here and ignoring the
+		// enum values. Thos will get translated when the
+		case *mojom.UserDefinedConstant:
+			fileGraph.ResolvedConstants[key] = translateUserDefinedConstant(c)
+		}
 	}
 
 	// Add |files| field.
@@ -407,45 +417,23 @@
 	return outUnionField
 }
 
-// WARNING: Do not invoke this function on a UserDefinedValue of type BuiltInConstantValue because
-// objects of those types do not have a type_key and do not correspond to a mojom_types.UserDefinedValue.
-func translateUserDefinedValue(v mojom.UserDefinedValue) mojom_types.UserDefinedValue {
-	switch t := v.(type) {
-	case *mojom.UserDefinedConstant:
-		return translateUserDefinedConstant(t)
-	case *mojom.EnumValue:
-		return &mojom_types.UserDefinedValueEnumValue{translateEnumValue(t)}
-	case *mojom.BuiltInConstantValue:
-		panic("Do not invoke translateUserDefinedValue on BuiltInConstantValue.")
-	default:
-		panic(fmt.Sprintf("Unexpected UserDefinedValue type %T", v))
-
-	}
-}
-
-func translateUserDefinedConstant(t *mojom.UserDefinedConstant) *mojom_types.UserDefinedValueDeclaredConstant {
-	declaredConstant := mojom_types.UserDefinedValueDeclaredConstant{}
-	declaredConstant.Value.Type = translateTypeRef(t.DeclaredType())
-	declaredConstant.Value.DeclData = *translateDeclarationData(&t.DeclarationData)
-	declaredConstant.Value.Value = translateValueRef(t.ValueRef())
-	// We set the |resolved_concrete_value| field only in the following situation.
-	// See the comments in mojom_types.mojom.
-	if _, ok := declaredConstant.Value.Value.(*mojom_types.ValueUserValueReference); ok {
-		// If the type of the |value| field is a UserValueReference...
-		userValueRef := t.ValueRef().(*mojom.UserValueRef)
-		if _, ok := userValueRef.ResolvedDeclaredValue().(*mojom.UserDefinedConstant); ok {
-			// and if that reference resolves to a user-defined constant.
-			declaredConstant.Value.ResolvedConcreteValue = translateConcreteValue(t.ValueRef().ResolvedConcreteValue())
-		}
+func translateUserDefinedConstant(t *mojom.UserDefinedConstant) mojom_types.DeclaredConstant {
+	declaredConstant := mojom_types.DeclaredConstant{}
+	declaredConstant.Type = translateTypeRef(t.DeclaredType())
+	declaredConstant.DeclData = *translateDeclarationData(&t.DeclarationData)
+	declaredConstant.Value = translateValueRef(t.ValueRef())
+	// We set the |resolved_concrete_value| field only in the case that the |value| field is a ConstantReference.
+	// See the comments for this field in mojom_types.mojom.
+	if _, ok := declaredConstant.Value.(*mojom_types.ValueConstantReference); ok {
+		declaredConstant.ResolvedConcreteValue = translateConcreteValue(t.ValueRef().ResolvedConcreteValue())
 	}
 
-	return &declaredConstant
+	return declaredConstant
 }
 
 func translateEnumValue(v *mojom.EnumValue) mojom_types.EnumValue {
 	enumValue := mojom_types.EnumValue{}
 	enumValue.DeclData = translateDeclarationData(&v.DeclarationData)
-	enumValue.EnumTypeKey = v.EnumType().TypeKey()
 	if v.ValueRef() != nil {
 		enumValue.InitializerValue = translateValueRef(v.ValueRef())
 	}
@@ -573,13 +561,13 @@
 	// value, not a value reference. In the case of a LiteralValue or a
 	// BuiltInConstantValue the distinction is immaterial. But in the case of an
 	// enum value the distinction is important. Here we are building and returning
-	// a synthetic mojom_types.UserValueReference to represent the enum value.
-	// It is only the |value_key| field that needs to be populated. It does not
-	// make sense to populate the |identifier| field for example because we
+	// a synthetic mojom_types.EnumValueReference to represent the enum value.
+	// It does not make sense to populate the |identifier| field for because we
 	// aren't representing any actual occrence in the .mojom file.
 	case *mojom.EnumValue:
-		return &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-			ValueKey: stringPointer(cv.ValueKey())}}
+		return &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+			EnumTypeKey:    cv.EnumType().TypeKey(),
+			EnumValueIndex: cv.ValueIndex()}}
 	case mojom.BuiltInConstantValue:
 		return translateBuiltInConstantValue(cv)
 	default:
@@ -642,14 +630,20 @@
 }
 
 func translateUserValueRef(r *mojom.UserValueRef) mojom_types.Value {
-	switch t := r.ResolvedConcreteValue().(type) {
+	switch t := r.ResolvedDeclaredValue().(type) {
 	case mojom.BuiltInConstantValue:
 		return translateBuiltInConstantValue(t)
+	case *mojom.UserDefinedConstant:
+		return &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+			Identifier:  r.Identifier(),
+			ConstantKey: t.ValueKey()}}
+	case *mojom.EnumValue:
+		return &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+			Identifier:     r.Identifier(),
+			EnumTypeKey:    t.EnumType().TypeKey(),
+			EnumValueIndex: t.ValueIndex()}}
 	default:
-		valueKey := stringPointer(r.ResolvedDeclaredValue().ValueKey())
-		return &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-			Identifier: r.Identifier(),
-			ValueKey:   valueKey}}
+		panic(fmt.Sprintf("Unrecognized UserDefinedValueType %T", r.ResolvedDeclaredValue()))
 	}
 }
 
diff --git a/mojom/mojom_tool/serialization/serialization_test.go b/mojom/mojom_tool/serialization/serialization_test.go
index c71adb0..8d390fd 100644
--- a/mojom/mojom_tool/serialization/serialization_test.go
+++ b/mojom/mojom_tool/serialization/serialization_test.go
@@ -64,7 +64,7 @@
 	test.expectedFile().ModuleNamespace = &moduleNameSpace
 
 	test.expectedGraph().ResolvedTypes = make(map[string]mojom_types.UserDefinedType)
-	test.expectedGraph().ResolvedValues = make(map[string]mojom_types.UserDefinedValue)
+	test.expectedGraph().ResolvedConstants = make(map[string]mojom_types.DeclaredConstant)
 }
 
 // endTestCase() should be invoked at the end of a case in
@@ -530,48 +530,33 @@
 		// DeclaredMojomObjects
 		test.expectedFile().DeclaredMojomObjects.TopLevelEnums = &[]string{"TYPE_KEY:Foo"}
 
-		// Resolved Values
-
-		// Foo.X0
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X0"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("X0", "Foo.X0"),
-			EnumTypeKey: "TYPE_KEY:Foo",
-			IntValue:    0,
-		}}
-
-		// Foo.X1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X1"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:         test.newDeclData("X1", "Foo.X1"),
-			EnumTypeKey:      "TYPE_KEY:Foo",
-			InitializerValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-			IntValue:         42,
-		}}
-
-		// Foo.X2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X2"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("X2", "Foo.X2"),
-			EnumTypeKey: "TYPE_KEY:Foo",
-			InitializerValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "X1",
-				ValueKey:   stringPointer("TYPE_KEY:Foo.X1"),
-			}},
-			IntValue: 42,
-		}}
-
 		// ResolvedTypes
 
 		// enum Foo
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:Foo"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newDeclData("Foo", "Foo"),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value X1
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X0"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("X0", "Foo.X0"),
+					IntValue: 0,
+				},
 				// value X1
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X1"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData:         test.newDeclData("X1", "Foo.X1"),
+					InitializerValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
+					IntValue:         42,
+				},
 				// value X2
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X2"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("X2", "Foo.X2"),
+					InitializerValue: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+						Identifier:     "X1",
+						EnumTypeKey:    "TYPE_KEY:Foo",
+						EnumValueIndex: 1,
+					}},
+					IntValue: 42,
+				},
 			},
 		}}
 
@@ -600,32 +585,19 @@
 		test.expectedFile().DeclaredMojomObjects.TopLevelEnums = &[]string{"TYPE_KEY:Color"}
 		test.expectedFile().DeclaredMojomObjects.Structs = &[]string{"TYPE_KEY:MyStruct"}
 
-		// Resolved Values
-
-		// Color.RED
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("RED", "Color.RED"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    0,
-		}}
-
-		// Color.BLUE
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("BLUE", "Color.BLUE"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    1,
-		}}
+		// Resolved Constants
 
 		// MyStruct.RED
-		test.expectedGraph().ResolvedValues["TYPE_KEY:MyStruct.RED"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:MyStruct.RED"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newContainedDeclData("RED", "MyStruct.RED", stringPointer("TYPE_KEY:MyStruct")),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{
-				mojom_types.UserValueReference{
-					Identifier: "BLUE",
-					ValueKey:   stringPointer("TYPE_KEY:Color.BLUE")}},
-		}}
+			Value: &mojom_types.ValueEnumValueReference{
+				mojom_types.EnumValueReference{
+					Identifier:     "BLUE",
+					EnumTypeKey:    "TYPE_KEY:Color",
+					EnumValueIndex: 1}},
+		}
 
 		// ResolvedTypes
 
@@ -633,12 +605,16 @@
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:Color"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newDeclData("Color", "Color"),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value RED
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("RED", "Color.RED"),
+					IntValue: 0,
+				},
 				// value BLUE
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("BLUE", "Color.BLUE"),
+					IntValue: 1,
+				},
 			},
 		}}
 
@@ -661,10 +637,10 @@
 					DeclData: test.newShortDeclDataO(0, -1, "a_color"),
 					Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 						false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-					DefaultValue: &mojom_types.DefaultFieldValueValue{&mojom_types.ValueUserValueReference{
-						mojom_types.UserValueReference{
-							Identifier: "RED",
-							ValueKey:   stringPointer("TYPE_KEY:MyStruct.RED")}}}, // Note this refers to MyStruct.RED and not Color.RED.
+					DefaultValue: &mojom_types.DefaultFieldValueValue{&mojom_types.ValueConstantReference{
+						mojom_types.ConstantReference{
+							Identifier:  "RED",
+							ConstantKey: "TYPE_KEY:MyStruct.RED"}}}, // Note this refers to MyStruct.RED and not Color.RED.
 				},
 			},
 		}}
@@ -869,60 +845,60 @@
 		// Resolved Values
 
 		// xu8
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu8"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu8"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu8", "xu8"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint8},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint8Value{255}},
-		}}
+		}
 
 		// x8
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x8"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x8"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x8", "x8"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int8},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{-127}},
-		}}
+		}
 
 		// xu16
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu16"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu16"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu16", "xu16"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint16},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint16Value{0xFFFF}},
-		}}
+		}
 
 		// x16
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x16"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x16"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x16", "x16"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int16},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt16Value{-0x7FFF}},
-		}}
+		}
 
 		// xu32
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu32"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu32"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu32", "xu32"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint32},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint32Value{4294967295}},
-		}}
+		}
 
 		// x32
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x32"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x32"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x32", "x32"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt32Value{-2147483647}},
-		}}
+		}
 
 		// xu64
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu64"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu64"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu64", "xu64"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint64},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint64Value{0xFFFFFFFFFFFFFFFF}},
-		}}
+		}
 
 		// x64
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x64"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x64"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x64", "x64"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int64},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt64Value{-0x7FFFFFFFFFFFFFFF}},
-		}}
+		}
 
 		test.endTestCase()
 	}
@@ -950,46 +926,46 @@
 		// Resolved Values
 
 		// f1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:f1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:f1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("f1", "f1"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Float},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_FloatInfinity},
-		}}
+		}
 
 		// f2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:f2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:f2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("f2", "f2"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Float},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_FloatNegativeInfinity},
-		}}
+		}
 
 		// f3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:f3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:f3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("f3", "f3"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Float},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_FloatNan},
-		}}
+		}
 
 		// d1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:d1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:d1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("d1", "d1"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Double},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_DoubleInfinity},
-		}}
+		}
 
 		// d2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:d2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:d2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("d2", "d2"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Double},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_DoubleNegativeInfinity},
-		}}
+		}
 
 		// d3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:d3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:d3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("d3", "d3"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Double},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_DoubleNan},
-		}}
+		}
 
 		test.endTestCase()
 	}
@@ -1019,82 +995,71 @@
 		test.expectedFile().DeclaredMojomObjects.TopLevelConstants = &[]string{"TYPE_KEY:x1", "TYPE_KEY:x2",
 			"TYPE_KEY:x3", "TYPE_KEY:c1", "TYPE_KEY:c2", "TYPE_KEY:c3"}
 
-		// Resolved Values
-
-		// Color.RED
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("RED", "Color.RED"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    0,
-		}}
-
-		// Color.BLUE
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("BLUE", "Color.BLUE"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    1,
-		}}
+		// Resolved Constants
 
 		// x1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x1", "x1"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-		}}
+		}
 
 		// x2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x2", "x2"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "x1",
-				ValueKey:   stringPointer("TYPE_KEY:x1")}},
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "x1",
+				ConstantKey: "TYPE_KEY:x1"}},
 			ResolvedConcreteValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-		}}
+		}
 
 		// x3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x3", "x3"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "x2",
-				ValueKey:   stringPointer("TYPE_KEY:x2")}},
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "x2",
+				ConstantKey: "TYPE_KEY:x2"}},
 			ResolvedConcreteValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-		}}
+		}
 
 		// c1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:c1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:c1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("c1", "c1"),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "RED",
-				ValueKey:   stringPointer("TYPE_KEY:Color.RED")}},
-		}}
+			Value: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+				Identifier:     "RED",
+				EnumTypeKey:    "TYPE_KEY:Color",
+				EnumValueIndex: 0}},
+		}
 
 		// c2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:c2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:c2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("c2", "c2"),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "c1",
-				ValueKey:   stringPointer("TYPE_KEY:c1")}},
-			ResolvedConcreteValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				ValueKey: stringPointer("TYPE_KEY:Color.RED")}},
-		}}
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "c1",
+				ConstantKey: "TYPE_KEY:c1"}},
+			ResolvedConcreteValue: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+				EnumTypeKey:    "TYPE_KEY:Color",
+				EnumValueIndex: 0}},
+		}
 
 		// c3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:c3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:c3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("c3", "c3"),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "c2",
-				ValueKey:   stringPointer("TYPE_KEY:c2")}},
-			ResolvedConcreteValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				ValueKey: stringPointer("TYPE_KEY:Color.RED")}},
-		}}
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "c2",
+				ConstantKey: "TYPE_KEY:c2"}},
+			ResolvedConcreteValue: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+				EnumTypeKey:    "TYPE_KEY:Color",
+				EnumValueIndex: 0}},
+		}
 
 		// ResolvedTypes
 
@@ -1102,12 +1067,16 @@
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:Color"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newDeclData("Color", "Color"),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value RED
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("RED", "Color.RED"),
+					IntValue: 0,
+				},
 				// value BLUE
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("BLUE", "Color.BLUE"),
+					IntValue: 1,
+				},
 			},
 		}}
 
@@ -1161,39 +1130,14 @@
 		test.expectedFile().DeclaredMojomObjects.Structs = &[]string{"TYPE_KEY:mojom.test.Foo"}
 		test.expectedFile().DeclaredMojomObjects.TopLevelConstants = &[]string{"TYPE_KEY:mojom.test.NUM_MAGI"}
 
-		// Resolved Values
+		// Resolved Constants
 
 		// NUM_MAGI
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.NUM_MAGI"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:mojom.test.NUM_MAGI"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("NUM_MAGI", "mojom.test.NUM_MAGI"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint16},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{3}},
-		}}
-
-		// Hats.TOP
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.TOP"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("TOP", "mojom.test.Foo.Hats.TOP"),
-			EnumTypeKey: "TYPE_KEY:mojom.test.Foo.Hats",
-			IntValue:    0,
-		}}
-
-		// Hats.COWBOY
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.COWBOY"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("COWBOY", "mojom.test.Foo.Hats.COWBOY"),
-			EnumTypeKey: "TYPE_KEY:mojom.test.Foo.Hats",
-			IntValue:    3,
-			InitializerValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "NUM_MAGI",
-				ValueKey:   stringPointer("TYPE_KEY:mojom.test.NUM_MAGI"),
-			}},
-		}}
-
-		// Hats.HARD
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.HARD"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("HARD", "mojom.test.Foo.Hats.HARD"),
-			EnumTypeKey: "TYPE_KEY:mojom.test.Foo.Hats",
-			IntValue:    4,
-		}}
+		}
 
 		// ResolvedTypes
 
@@ -1234,14 +1178,25 @@
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:mojom.test.Foo.Hats"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newContainedDeclData("Hats", "mojom.test.Foo.Hats", stringPointer("TYPE_KEY:mojom.test.Foo")),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value TOP
-				test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.TOP"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("TOP", "mojom.test.Foo.Hats.TOP"),
+					IntValue: 0,
+				},
 				// value COWBOY
-				test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.COWBOY"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("COWBOY", "mojom.test.Foo.Hats.COWBOY"),
+					IntValue: 3,
+					InitializerValue: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+						Identifier:  "NUM_MAGI",
+						ConstantKey: "TYPE_KEY:mojom.test.NUM_MAGI",
+					}},
+				},
 				// value HARD
-				test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.HARD"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("HARD", "mojom.test.Foo.Hats.HARD"),
+					IntValue: 4,
+				},
 			},
 		}}
 
@@ -2645,7 +2600,7 @@
 	}
 
 	test.expectedGraph().ResolvedTypes = make(map[string]mojom_types.UserDefinedType)
-	test.expectedGraph().ResolvedValues = make(map[string]mojom_types.UserDefinedValue)
+	test.expectedGraph().ResolvedConstants = make(map[string]mojom_types.DeclaredConstant)
 }
 
 // endTestCase() should be invoked at the end of a case in
