# Stats from current release

Default Server Mode (Decrease detected ✓)

General Overall increase ⚠

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| buildDuration | 12.7s | 12.9s | ⚠ +218ms |
| nodeModulesSize | 49 MB | 49 MB | ⚠ +483 B |

Client Bundles (main, webpack, commons) Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| main-HASH.js gzip | 6.43 kB | 5.12 kB | -1.31 kB |
| webpack-HASH.js gzip | 746 B | 746 B | ✓ |
| 4952ddcd88e7..54d3.js gzip | 4.68 kB | 4.68 kB | ✓ |
| commons.HASH.js gzip | 4.06 kB | 4.06 kB | ✓ |
| de003c3a9d30..6ef5.js gzip | 13.8 kB | 13.7 kB | -133 B |
| framework.HASH.js gzip | 39.5 kB | 39.1 kB | -311 B |
| Overall change | 69.2 kB | 67.5 kB | -1.76 kB |

Client Bundles (main, webpack, commons) Modern Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| main-HASH.module.js gzip | 5.41 kB | 4.18 kB | -1.23 kB |
| webpack-HASH..dule.js gzip | 746 B | 746 B | ✓ |
| 4952ddcd88e7..dule.js gzip | 5.56 kB | 5.56 kB | ✓ |
| de003c3a9d30..dule.js gzip | 12.6 kB | 12.5 kB | -113 B |
| framework.HA..dule.js gzip | 39.4 kB | 39.1 kB | -310 B |
| Overall change | 63.7 kB | 62.1 kB | -1.66 kB |

Legacy Client Bundles (polyfills)

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| polyfills-HASH.js gzip | 4.76 kB | 4.76 kB | ✓ |
| Overall change | 4.76 kB | 4.76 kB | ✓ |

Client Pages Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| _app.js gzip | 1.33 kB | 1.33 kB | ✓ |
| _error.js gzip | 4.07 kB | 4.07 kB | ✓ |
| hooks.js gzip | 779 B | 779 B | ✓ |
| index.js gzip | 222 B | 222 B | ✓ |
| link.js gzip | 2.93 kB | 2.9 kB | -28 B |
| routerDirect.js gzip | 283 B | 283 B | ✓ |
| withRouter.js gzip | 282 B | 282 B | ✓ |
| Overall change | 9.89 kB | 9.87 kB | -28 B |

Client Pages Modern Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| _app.module.js gzip | 757 B | 757 B | ✓ |
| _error.module.js gzip | 3.06 kB | 3.06 kB | ✓ |
| hooks.module.js gzip | 371 B | 371 B | ✓ |
| index.module.js gzip | 212 B | 212 B | ✓ |
| link.module.js gzip | 2.49 kB | 2.47 kB | -22 B |
| routerDirect..dule.js gzip | 273 B | 273 B | ✓ |
| withRouter.m..dule.js gzip | 272 B | 272 B | ✓ |
| Overall change | 7.43 kB | 7.41 kB | -22 B |

Client Build Manifests

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| _buildManifest.js gzip | 61 B | 61 B | ✓ |
| _buildManife..dule.js gzip | 61 B | 61 B | ✓ |
| Overall change | 122 B | 122 B | ✓ |

Rendered Page Sizes Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| index.html gzip | 1.04 kB | 1.02 kB | -15 B |
| link.html gzip | 1.04 kB | 1.03 kB | -14 B |
| withRouter.html gzip | 1.03 kB | 1.02 kB | -17 B |
| Overall change | 3.11 kB | 3.07 kB | -46 B |

#### Diffs

Diff for link.js

```diff
@@ -445,12 +445,8 @@

       var _react = _interopRequireWildcard(__webpack_require__('q1tI'))

-      var _propTypes = _interopRequireDefault(__webpack_require__('17x9'))
-
       var _router = _interopRequireDefault(__webpack_require__('nOHt'))

-      var _rewriteUrlForExport = __webpack_require__('P5f7')
-
       var _utils = __webpack_require__('g/15')

       function isLocal(href) {
@@ -492,6 +488,7 @@
       var observer
       var listeners = new _map['default']()
       var IntersectionObserver = true ? window.IntersectionObserver : undefined
+      var prefetched = {}

       function getObserver() {
         // Return shared instance of IntersectionObserver if already created
@@ -658,10 +655,7 @@
               value: function handleRef(ref) {
                 var _this2 = this

-                var isPrefetched =
-                  _router['default'].router.pageLoader.prefetched[
-                    this.getHref()
-                  ]
+                var isPrefetched = prefetched[this.getHref()]

                 if (this.p && IntersectionObserver && ref && ref.tagName) {
                   this.cleanUpListeners()
@@ -683,7 +677,11 @@
               value: function prefetch() {
                 if (!this.p || false) return // Prefetch the JSON page if asked (only in the client)

-                _router['default'].prefetch(this.getHref())
+                var href = this.getHref()
+
+                _router['default'].prefetch(href)
+
+                prefetched[href] = true
               },
             },
             {
@@ -755,6 +753,7 @@
                 // "<page>/index.html" directly.

                 if (false) {
+                  var rewriteUrlForNextExport
                 }

                 return _react['default'].cloneElement(child, props)
@@ -765,10 +764,8 @@
           return Link
         })(_react.Component)

-      Link.propTypes = void 0
-
       if (false) {
-        var exact, warn
+        var exact, PropTypes, warn
       }

       var _default = Link
```

Diff for link.module.js

```diff
@@ -320,12 +320,8 @@

       var _react = _interopRequireWildcard(__webpack_require__('q1tI'))

-      var _propTypes = _interopRequireDefault(__webpack_require__('17x9'))
-
       var _router = _interopRequireDefault(__webpack_require__('nOHt'))

-      var _rewriteUrlForExport = __webpack_require__('P5f7')
-
       var _utils = __webpack_require__('g/15')

       function isLocal(href) {
@@ -367,6 +363,7 @@
       var observer
       var listeners = new _map.default()
       var IntersectionObserver = true ? window.IntersectionObserver : undefined
+      var prefetched = {}

       function getObserver() {
         // Return shared instance of IntersectionObserver if already created
@@ -500,8 +497,7 @@
         }

         handleRef(ref) {
-          var isPrefetched =
-            _router.default.router.pageLoader.prefetched[this.getHref()]
+          var isPrefetched = prefetched[this.getHref()]

           if (this.p && IntersectionObserver && ref && ref.tagName) {
             this.cleanUpListeners()
@@ -518,7 +514,11 @@
         prefetch() {
           if (!this.p || false) return // Prefetch the JSON page if asked (only in the client)

-          _router.default.prefetch(this.getHref())
+          var href = this.getHref()
+
+          _router.default.prefetch(href)
+
+          prefetched[href] = true
         }

         render() {
@@ -573,16 +573,15 @@
           // "<page>/index.html" directly.

           if (false) {
+            var rewriteUrlForNextExport
           }

           return _react.default.cloneElement(child, props)
         }
       }

-      Link.propTypes = void 0
-
       if (false) {
-        var exact, warn
+        var exact, PropTypes, warn
       }

       var _default = Link
```

Diff for de003c3a9d30..9a.module.js

```diff
@@ -1126,32 +1126,6 @@
       /***/
     },

-    /***/ P5f7: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var _Object$defineProperty = __webpack_require__('hfKm')
-
-      _Object$defineProperty(exports, '__esModule', {
-        value: true,
-      })
-
-      function rewriteUrlForNextExport(url) {
-        var [pathname, hash] = url.split('#') // tslint:disable-next-line
-
-        var [path, qs] = pathname.split('?')
-        path = path.replace(/\/$/, '') // Append a trailing slash if this path does not have an extension
-
-        if (!/\.[^/]+\/?$/.test(path)) path += '/'
-        if (qs) path += '?' + qs
-        if (hash) path += '#' + hash
-        return path
-      }
-
-      exports.rewriteUrlForNextExport = rewriteUrlForNextExport
-
-      /***/
-    },
-
     /***/ PBE1: /***/ function(module, exports, __webpack_require__) {
       'use strict'
       // https://github.com/tc39/proposal-promise-finally
@@ -1811,8 +1785,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI

       var utils_1 = __webpack_require__('g/15')

-      var rewrite_url_for_export_1 = __webpack_require__('P5f7')
-
       var is_dynamic_1 = __webpack_require__('/jkW')

       var route_matcher_1 = __webpack_require__('gguc')
@@ -1970,7 +1942,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
         } // @deprecated backwards compatibility even though it's a private method.

         static _rewriteUrlForNextExport(url) {
-          return rewrite_url_for_export_1.rewriteUrlForNextExport(url)
+          if (false) {
+            var rewriteUrlForNextExport
+          } else {
+            return url
+          }
         }

         update(route, mod) {
@@ -2050,7 +2026,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
               this.isSsr = false
             } // marking route changes as a navigation start entry

-            if (utils_1.SUPPORTS_PERFORMANCE_USER_TIMING) {
+            if (utils_1.ST) {
               performance.mark('routeChange')
             } // If url and as provided as an object representation,
             // we'll format them into the string version here.
@@ -2064,6 +2040,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
             // "<page>/index.html" directly for the SSR page.

             if (false) {
+              var rewriteUrlForNextExport
             }

             this.abortComponentLoad(as) // If the url change is only related to a hash change
@@ -2226,7 +2203,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
               }

               return this._getData(() =>
-                Component.__NEXT_SPR
+                Component.__N_SSG
                   ? this._getStaticData(as)
                   : this.getInitialProps(
                       Component, // we provide AppTree later so this needs to be `any`
@@ -2377,13 +2354,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
               }

               return
-            } // @ts-ignore pathname is always defined
-
-            var route = toRoute(pathname) // Prefetch is not supported in development mode because it would trigger on-demand-entries
+            } // Prefetch is not supported in development mode because it would trigger on-demand-entries

             if (false) {
-            }
+            } // @ts-ignore pathname is always defined

+            var route = toRoute(pathname)
             this.pageLoader.prefetch(route).then(resolve, reject)
           })
         }
@@ -2545,6 +2521,8 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       exports.isResSent = isResSent

       async function loadGetInitialProps(App, ctx) {
+        var _a
+
         if (false) {
           var message
         } // when called from _app `ctx` is nested in `ctx`
@@ -2609,9 +2587,9 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       }

       exports.formatWithValidation = formatWithValidation
-      exports.SUPPORTS_PERFORMANCE = typeof performance !== 'undefined'
-      exports.SUPPORTS_PERFORMANCE_USER_TIMING =
-        exports.SUPPORTS_PERFORMANCE &&
+      exports.SP = typeof performance !== 'undefined'
+      exports.ST =
+        exports.SP &&
         typeof performance.mark === 'function' &&
         typeof performance.measure === 'function'
```

Diff for de003c3a9d30..5fa7da92f.js

```diff
@@ -765,41 +765,6 @@
       /***/
     },

-    /***/ P5f7: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var _slicedToArray = __webpack_require__('8+Nu')
-
-      var _Object$defineProperty = __webpack_require__('hfKm')
-
-      _Object$defineProperty(exports, '__esModule', {
-        value: true,
-      })
-
-      function rewriteUrlForNextExport(url) {
-        var _url$split = url.split('#'),
-          _url$split2 = _slicedToArray(_url$split, 2),
-          pathname = _url$split2[0],
-          hash = _url$split2[1] // tslint:disable-next-line
-
-        var _pathname$split = pathname.split('?'),
-          _pathname$split2 = _slicedToArray(_pathname$split, 2),
-          path = _pathname$split2[0],
-          qs = _pathname$split2[1]
-
-        path = path.replace(/\/$/, '') // Append a trailing slash if this path does not have an extension
-
-        if (!/\.[^/]+\/?$/.test(path)) path += '/'
-        if (qs) path += '?' + qs
-        if (hash) path += '#' + hash
-        return path
-      }
-
-      exports.rewriteUrlForNextExport = rewriteUrlForNextExport
-
-      /***/
-    },
-
     /***/ PBE1: /***/ function(module, exports, __webpack_require__) {
       'use strict'
       // https://github.com/tc39/proposal-promise-finally
@@ -1475,8 +1440,6 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI

       var utils_1 = __webpack_require__('g/15')

-      var rewrite_url_for_export_1 = __webpack_require__('P5f7')
-
       var is_dynamic_1 = __webpack_require__('/jkW')

       var route_matcher_1 = __webpack_require__('gguc')
@@ -1740,7 +1703,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                       _this2.isSsr = false
                     } // marking route changes as a navigation start entry

-                    if (utils_1.SUPPORTS_PERFORMANCE_USER_TIMING) {
+                    if (utils_1.ST) {
                       performance.mark('routeChange')
                     } // If url and as provided as an object representation,
                     // we'll format them into the string version here.
@@ -1756,6 +1719,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                     // "<page>/index.html" directly for the SSR page.

                     if (false) {
+                      var rewriteUrlForNextExport
                     }

                     _this2.abortComponentLoad(as) // If the url change is only related to a hash change
@@ -1939,7 +1903,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI

                       return _this3
                         ._getData(function() {
-                          return Component.__NEXT_SPR
+                          return Component.__N_SSG
                             ? _this3._getStaticData(as)
                             : _this3.getInitialProps(
                                 Component, // we provide AppTree later so this needs to be `any`
@@ -2125,12 +2089,12 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                       }

                       return
-                    } // @ts-ignore pathname is always defined
-
-                    var route = toRoute(pathname) // Prefetch is not supported in development mode because it would trigger on-demand-entries
+                    } // Prefetch is not supported in development mode because it would trigger on-demand-entries

                     if (false) {
-                    }
+                    } // @ts-ignore pathname is always defined
+
+                    var route = toRoute(pathname)

                     _this4.pageLoader.prefetch(route).then(resolve, reject)
                   })
@@ -2257,7 +2221,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
               {
                 key: '_rewriteUrlForNextExport',
                 value: function _rewriteUrlForNextExport(url) {
-                  return rewrite_url_for_export_1.rewriteUrlForNextExport(url)
+                  if (false) {
+                    var rewriteUrlForNextExport
+                  } else {
+                    return url
+                  }
                 },
               },
             ]
@@ -2414,7 +2382,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       exports.isResSent = isResSent

       function loadGetInitialProps(App, ctx) {
-        var message, res, props, _message
+        var _a, message, res, props, _message

         return _regeneratorRuntime.async(function loadGetInitialProps$(
           _context
@@ -2427,7 +2395,11 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
                   break
                 }

-                if (!(App.prototype && App.prototype.getInitialProps)) {
+                if (
+                  !((_a = App.prototype) === null || _a === void 0
+                    ? void 0
+                    : _a.getInitialProps)
+                ) {
                   _context.next = 4
                   break
                 }
@@ -2532,9 +2504,9 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
       }

       exports.formatWithValidation = formatWithValidation
-      exports.SUPPORTS_PERFORMANCE = typeof performance !== 'undefined'
-      exports.SUPPORTS_PERFORMANCE_USER_TIMING =
-        exports.SUPPORTS_PERFORMANCE &&
+      exports.SP = typeof performance !== 'undefined'
+      exports.ST =
+        exports.SP &&
         typeof performance.mark === 'function' &&
         typeof performance.measure === 'function'
```

Diff for framework.HASH.js

```diff
@@ -432,100 +432,6 @@
       /***/
     },

-    /***/ '16Al': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      /**
-       * Copyright (c) 2013-present, Facebook, Inc.
-       *
-       * This source code is licensed under the MIT license found in the
-       * LICENSE file in the root directory of this source tree.
-       */
-
-      var ReactPropTypesSecret = __webpack_require__('WbBG')
-
-      function emptyFunction() {}
-      function emptyFunctionWithReset() {}
-      emptyFunctionWithReset.resetWarningCache = emptyFunction
-
-      module.exports = function() {
-        function shim(
-          props,
-          propName,
-          componentName,
-          location,
-          propFullName,
-          secret
-        ) {
-          if (secret === ReactPropTypesSecret) {
-            // It is still safe when called from React.
-            return
-          }
-          var err = new Error(
-            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
-              'Use PropTypes.checkPropTypes() to call them. ' +
-              'Read more at http://fb.me/use-check-prop-types'
-          )
-          err.name = 'Invariant Violation'
-          throw err
-        }
-        shim.isRequired = shim
-        function getShim() {
-          return shim
-        }
-        // Important!
-        // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
-        var ReactPropTypes = {
-          array: shim,
-          bool: shim,
-          func: shim,
-          number: shim,
-          object: shim,
-          string: shim,
-          symbol: shim,
-
-          any: shim,
-          arrayOf: getShim,
-          element: shim,
-          elementType: shim,
-          instanceOf: getShim,
-          node: shim,
-          objectOf: getShim,
-          oneOf: getShim,
-          oneOfType: getShim,
-          shape: getShim,
-          exact: getShim,
-
-          checkPropTypes: emptyFunctionWithReset,
-          resetWarningCache: emptyFunction,
-        }
-
-        ReactPropTypes.PropTypes = ReactPropTypes
-
-        return ReactPropTypes
-      }
-
-      /***/
-    },
-
-    /***/ '17x9': /***/ function(module, exports, __webpack_require__) {
-      /**
-       * Copyright (c) 2013-present, Facebook, Inc.
-       *
-       * This source code is licensed under the MIT license found in the
-       * LICENSE file in the root directory of this source tree.
-       */
-
-      if (false) {
-        var throwOnDirectAccess, ReactIs
-      } else {
-        // By explicitly using `prop-types` you are opting into new production behavior.
-        // http://fb.me/prop-types-in-prod
-        module.exports = __webpack_require__('16Al')()
-      }
-
-      /***/
-    },
-
     /***/ QCnb: /***/ function(module, exports, __webpack_require__) {
       'use strict'

@@ -537,22 +443,6 @@
       /***/
     },

-    /***/ WbBG: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      /**
-       * Copyright (c) 2013-present, Facebook, Inc.
-       *
-       * This source code is licensed under the MIT license found in the
-       * LICENSE file in the root directory of this source tree.
-       */
-
-      var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'
-
-      module.exports = ReactPropTypesSecret
-
-      /***/
-    },
-
     /***/ i8i4: /***/ function(module, exports, __webpack_require__) {
       'use strict'
```

Diff for framework.HASH.module.js

```diff
@@ -432,100 +432,6 @@
       /***/
     },

-    /***/ '16Al': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      /**
-       * Copyright (c) 2013-present, Facebook, Inc.
-       *
-       * This source code is licensed under the MIT license found in the
-       * LICENSE file in the root directory of this source tree.
-       */
-
-      var ReactPropTypesSecret = __webpack_require__('WbBG')
-
-      function emptyFunction() {}
-      function emptyFunctionWithReset() {}
-      emptyFunctionWithReset.resetWarningCache = emptyFunction
-
-      module.exports = function() {
-        function shim(
-          props,
-          propName,
-          componentName,
-          location,
-          propFullName,
-          secret
-        ) {
-          if (secret === ReactPropTypesSecret) {
-            // It is still safe when called from React.
-            return
-          }
-          var err = new Error(
-            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
-              'Use PropTypes.checkPropTypes() to call them. ' +
-              'Read more at http://fb.me/use-check-prop-types'
-          )
-          err.name = 'Invariant Violation'
-          throw err
-        }
-        shim.isRequired = shim
-        function getShim() {
-          return shim
-        }
-        // Important!
-        // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
-        var ReactPropTypes = {
-          array: shim,
-          bool: shim,
-          func: shim,
-          number: shim,
-          object: shim,
-          string: shim,
-          symbol: shim,
-
-          any: shim,
-          arrayOf: getShim,
-          element: shim,
-          elementType: shim,
-          instanceOf: getShim,
-          node: shim,
-          objectOf: getShim,
-          oneOf: getShim,
-          oneOfType: getShim,
-          shape: getShim,
-          exact: getShim,
-
-          checkPropTypes: emptyFunctionWithReset,
-          resetWarningCache: emptyFunction,
-        }
-
-        ReactPropTypes.PropTypes = ReactPropTypes
-
-        return ReactPropTypes
-      }
-
-      /***/
-    },
-
-    /***/ '17x9': /***/ function(module, exports, __webpack_require__) {
-      /**
-       * Copyright (c) 2013-present, Facebook, Inc.
-       *
-       * This source code is licensed under the MIT license found in the
-       * LICENSE file in the root directory of this source tree.
-       */
-
-      if (false) {
-        var throwOnDirectAccess, ReactIs
-      } else {
-        // By explicitly using `prop-types` you are opting into new production behavior.
-        // http://fb.me/prop-types-in-prod
-        module.exports = __webpack_require__('16Al')()
-      }
-
-      /***/
-    },
-
     /***/ QCnb: /***/ function(module, exports, __webpack_require__) {
       'use strict'

@@ -537,22 +443,6 @@
       /***/
     },

-    /***/ WbBG: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-      /**
-       * Copyright (c) 2013-present, Facebook, Inc.
-       *
-       * This source code is licensed under the MIT license found in the
-       * LICENSE file in the root directory of this source tree.
-       */
-
-      var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'
-
-      module.exports = ReactPropTypesSecret
-
-      /***/
-    },
-
     /***/ i8i4: /***/ function(module, exports, __webpack_require__) {
       'use strict'
```

Diff for main-HASH.js

```diff
@@ -95,87 +95,6 @@
       /***/
     },

-    /***/ '/h46': /***/ function(module, exports, __webpack_require__) {
-      // https://tc39.github.io/proposal-setmap-offrom/#sec-map.of
-      __webpack_require__('cHUd')('Map')
-
-      /***/
-    },
-
-    /***/ '0IRE': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var _Map = __webpack_require__('LX0d')
-
-      var _classCallCheck = __webpack_require__('/HRN')
-
-      var _createClass = __webpack_require__('WaGi')
-
-      var _Object$defineProperty = __webpack_require__('hfKm')
-
-      _Object$defineProperty(exports, '__esModule', {
-        value: true,
-      })
-
-      var DataManager =
-        /*#__PURE__*/
-        (function() {
-          function DataManager(data) {
-            _classCallCheck(this, DataManager)
-
-            this.data = new _Map(data)
-          }
-
-          _createClass(DataManager, [
-            {
-              key: 'getData',
-              value: function getData() {
-                return this.data
-              },
-            },
-            {
-              key: 'get',
-              value: function get(key) {
-                return this.data.get(key)
-              },
-            },
-            {
-              key: 'set',
-              value: function set(key, value) {
-                this.data.set(key, value)
-              },
-            },
-            {
-              key: 'overwrite',
-              value: function overwrite(data) {
-                this.data = new _Map(data)
-              },
-            },
-          ])
-
-          return DataManager
-        })()
-
-      exports.DataManager = DataManager
-
-      /***/
-    },
-
-    /***/ '8iia': /***/ function(module, exports, __webpack_require__) {
-      // https://github.com/DavidBruant/Map-Set.prototype.toJSON
-      var classof = __webpack_require__('QMMT')
-      var from = __webpack_require__('RRc/')
-      module.exports = function(NAME) {
-        return function toJSON() {
-          if (classof(this) != NAME)
-            throw TypeError(NAME + "#toJSON isn't generic")
-          return from(this)
-        }
-      }
-
-      /***/
-    },
-
     /***/ ApPD: /***/ function(module, exports, __webpack_require__) {
       // 19.1.2.9 Object.getPrototypeOf(O)
       var toObject = __webpack_require__('JB68')
@@ -428,7 +347,7 @@
       exports.renderError = renderError
       exports[
         'default'
-      ] = exports.emitter = exports.ErrorComponent = exports.router = exports.dataManager = exports.version = void 0
+      ] = exports.emitter = exports.router = exports.version = void 0

       var _asyncToGenerator2 = _interopRequireDefault(
         __webpack_require__('+oT+')
@@ -460,12 +379,8 @@

       var _headManagerContext = __webpack_require__('FYa8')

-      var _dataManagerContext = __webpack_require__('qArv')
-
       var _routerContext = __webpack_require__('qOIg')

-      var _dataManager = __webpack_require__('0IRE')
-
       var _querystring = __webpack_require__('s4NR')

       var _isDynamic = __webpack_require__('/jkW')
@@ -479,7 +394,7 @@
         document.getElementById('__NEXT_DATA__').textContent
       )
       window.__NEXT_DATA__ = data
-      var version = '9.1.7'
+      var version = '9.1.8-canary.16'
       exports.version = version
       var props = data.props,
         err = data.err,
@@ -489,9 +404,6 @@
         assetPrefix = data.assetPrefix,
         runtimeConfig = data.runtimeConfig,
         dynamicIds = data.dynamicIds
-      var d = JSON.parse(window.__NEXT_DATA__.dataManager)
-      var dataManager = new _dataManager.DataManager(d)
-      exports.dataManager = dataManager
       var prefix = assetPrefix || '' // With dynamic assetPrefix it's no longer possible to set assetPrefix at the build time
       // So, this is how we do it in the client side at runtime

@@ -526,7 +438,6 @@
       var router
       exports.router = router
       var ErrorComponent
-      exports.ErrorComponent = ErrorComponent
       var Component
       var App, onPerfEntry

@@ -564,7 +475,7 @@
                   (data.nextExport &&
                     ((0, _isDynamic.isDynamicRoute)(router.pathname) ||
                       location.search)) ||
-                  (Component.__NEXT_SPR && location.search)
+                  (Component && Component.__N_SSG && location.search)
                 ) {
                   // update query on mount for exported pages
                   router.replace(
@@ -584,6 +495,7 @@
                       // client-side hydration. Your app should _never_ use this property.
                       // It may change at any time without notice.
                       _h: 1,
+                      shallow: true,
                     }
                   )
                 }
@@ -749,7 +661,6 @@
                                 Component: Component,
                                 props: props,
                                 err: err,
-                                emitter: emitter,
                               })
                             },
                           }
@@ -763,7 +674,6 @@
                           Component: Component,
                           props: props,
                           err: initialErr,
-                          emitter: emitter,
                         }
                         render(renderCtx)
                         return _context.abrupt('return', emitter)
@@ -885,7 +795,7 @@
                     return pageLoader.loadPage('/_error')

                   case 7:
-                    exports.ErrorComponent = ErrorComponent = _context3.sent
+                    ErrorComponent = _context3.sent
                     // In production we do a normal render with the `ErrorComponent` as component.
                     // If we've gotten here upon initial render, we can use the props from the server.
                     // Otherwise, we need to call `getInitialProps` on `App` before mounting.
@@ -945,15 +855,14 @@
       var reactRoot = null

       function renderReactElement(reactEl, domEl) {
-        // mark start of hydrate/render
-        if (_utils.SUPPORTS_PERFORMANCE_USER_TIMING) {
-          performance.mark('beforeRender')
-        }
-
         if (false) {
-          var opts, callback
+          var opts
         } else {
-          // The check for `.hydrate` is there to support React alternatives like preact
+          // mark start of hydrate/render
+          if (_utils.ST) {
+            performance.mark('beforeRender')
+          } // The check for `.hydrate` is there to support React alternatives like preact
+
           if (isInitialRender) {
             _reactDom['default'].hydrate(reactEl, domEl, markHydrateComplete)

@@ -963,12 +872,15 @@
           }
         }

-        if (onPerfEntry && _utils.SUPPORTS_PERFORMANCE_USER_TIMING) {
-          if (!(PerformanceObserver in window)) {
+        if (onPerfEntry && _utils.ST) {
+          if (!('PerformanceObserver' in window)) {
             window.addEventListener('load', function() {
               performance.getEntriesByType('paint').forEach(onPerfEntry)
             })
           } else {
+            performance.getEntriesByType('paint').forEach(onPerfEntry) // Start an observer to catch any paint metrics which may fire _after_
+            // the load event is fired on the window
+
             var observer = new PerformanceObserver(function(list) {
               list.getEntries().forEach(onPerfEntry)
             })
@@ -980,7 +892,7 @@
       }

       function markHydrateComplete() {
-        if (!_utils.SUPPORTS_PERFORMANCE_USER_TIMING) return
+        if (!_utils.ST) return
         performance.mark('afterHydrate') // mark end of hydration

         performance.measure(
@@ -999,7 +911,7 @@
       }

       function markRenderComplete() {
-        if (!_utils.SUPPORTS_PERFORMANCE_USER_TIMING) return
+        if (!_utils.ST) return
         performance.mark('afterRender') // mark end of render

         var navStartEntries = performance.getEntriesByName(
@@ -1064,17 +976,11 @@
               value: (0, _router.makePublicRouterInstance)(router),
             },
             _react['default'].createElement(
-              _dataManagerContext.DataManagerContext.Provider,
+              _headManagerContext.HeadManagerContext.Provider,
               {
-                value: dataManager,
+                value: headManager.updateHead,
               },
-              _react['default'].createElement(
-                _headManagerContext.HeadManagerContext.Provider,
-                {
-                  value: headManager.updateHead,
-                },
-                children
-              )
+              children
             )
           )
         )
@@ -1219,12 +1125,6 @@
       /***/
     },

-    /***/ LX0d: /***/ function(module, exports, __webpack_require__) {
-      module.exports = __webpack_require__('UDep')
-
-      /***/
-    },
-
     /***/ N9n2: /***/ function(module, exports, __webpack_require__) {
       var _Object$create = __webpack_require__('SqZg')

@@ -1255,217 +1155,6 @@
       /***/
     },

-    /***/ 'RRc/': /***/ function(module, exports, __webpack_require__) {
-      var forOf = __webpack_require__('oioR')
-
-      module.exports = function(iter, ITERATOR) {
-        var result = []
-        forOf(iter, false, result.push, result, ITERATOR)
-        return result
-      }
-
-      /***/
-    },
-
-    /***/ UDep: /***/ function(module, exports, __webpack_require__) {
-      __webpack_require__('wgeU')
-      __webpack_require__('FlQf')
-      __webpack_require__('bBy9')
-      __webpack_require__('g33z')
-      __webpack_require__('XLbu')
-      __webpack_require__('/h46')
-      __webpack_require__('dVTT')
-      module.exports = __webpack_require__('WEpk').Map
-
-      /***/
-    },
-
-    /***/ Wu5q: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var dP = __webpack_require__('2faE').f
-      var create = __webpack_require__('oVml')
-      var redefineAll = __webpack_require__('XJU/')
-      var ctx = __webpack_require__('2GTP')
-      var anInstance = __webpack_require__('EXMj')
-      var forOf = __webpack_require__('oioR')
-      var $iterDefine = __webpack_require__('MPFp')
-      var step = __webpack_require__('UO39')
-      var setSpecies = __webpack_require__('TJWN')
-      var DESCRIPTORS = __webpack_require__('jmDH')
-      var fastKey = __webpack_require__('6/1s').fastKey
-      var validate = __webpack_require__('n3ko')
-      var SIZE = DESCRIPTORS ? '_s' : 'size'
-
-      var getEntry = function(that, key) {
-        // fast case
-        var index = fastKey(key)
-        var entry
-        if (index !== 'F') return that._i[index]
-        // frozen object case
-        for (entry = that._f; entry; entry = entry.n) {
-          if (entry.k == key) return entry
-        }
-      }
-
-      module.exports = {
-        getConstructor: function(wrapper, NAME, IS_MAP, ADDER) {
-          var C = wrapper(function(that, iterable) {
-            anInstance(that, C, NAME, '_i')
-            that._t = NAME // collection type
-            that._i = create(null) // index
-            that._f = undefined // first entry
-            that._l = undefined // last entry
-            that[SIZE] = 0 // size
-            if (iterable != undefined)
-              forOf(iterable, IS_MAP, that[ADDER], that)
-          })
-          redefineAll(C.prototype, {
-            // 23.1.3.1 Map.prototype.clear()
-            // 23.2.3.2 Set.prototype.clear()
-            clear: function clear() {
-              for (
-                var that = validate(this, NAME),
-                  data = that._i,
-                  entry = that._f;
-                entry;
-                entry = entry.n
-              ) {
-                entry.r = true
-                if (entry.p) entry.p = entry.p.n = undefined
-                delete data[entry.i]
-              }
-              that._f = that._l = undefined
-              that[SIZE] = 0
-            },
-            // 23.1.3.3 Map.prototype.delete(key)
-            // 23.2.3.4 Set.prototype.delete(value)
-            delete: function(key) {
-              var that = validate(this, NAME)
-              var entry = getEntry(that, key)
-              if (entry) {
-                var next = entry.n
-                var prev = entry.p
-                delete that._i[entry.i]
-                entry.r = true
-                if (prev) prev.n = next
-                if (next) next.p = prev
-                if (that._f == entry) that._f = next
-                if (that._l == entry) that._l = prev
-                that[SIZE]--
-              }
-              return !!entry
-            },
-            // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
-            // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
-            forEach: function forEach(callbackfn /* , that = undefined */) {
-              validate(this, NAME)
-              var f = ctx(
-                callbackfn,
-                arguments.length > 1 ? arguments[1] : undefined,
-                3
-              )
-              var entry
-              while ((entry = entry ? entry.n : this._f)) {
-                f(entry.v, entry.k, this)
-                // revert to the last existing entry
-                while (entry && entry.r) entry = entry.p
-              }
-            },
-            // 23.1.3.7 Map.prototype.has(key)
-            // 23.2.3.7 Set.prototype.has(value)
-            has: function has(key) {
-              return !!getEntry(validate(this, NAME), key)
-            },
-          })
-          if (DESCRIPTORS)
-            dP(C.prototype, 'size', {
-              get: function() {
-                return validate(this, NAME)[SIZE]
-              },
-            })
-          return C
-        },
-        def: function(that, key, value) {
-          var entry = getEntry(that, key)
-          var prev, index
-          // change existing entry
-          if (entry) {
-            entry.v = value
-            // create new entry
-          } else {
-            that._l = entry = {
-              i: (index = fastKey(key, true)), // <- index
-              k: key, // <- key
-              v: value, // <- value
-              p: (prev = that._l), // <- previous entry
-              n: undefined, // <- next entry
-              r: false, // <- removed
-            }
-            if (!that._f) that._f = entry
-            if (prev) prev.n = entry
-            that[SIZE]++
-            // add to index
-            if (index !== 'F') that._i[index] = entry
-          }
-          return that
-        },
-        getEntry: getEntry,
-        setStrong: function(C, NAME, IS_MAP) {
-          // add .keys, .values, .entries, [@@iterator]
-          // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
-          $iterDefine(
-            C,
-            NAME,
-            function(iterated, kind) {
-              this._t = validate(iterated, NAME) // target
-              this._k = kind // kind
-              this._l = undefined // previous
-            },
-            function() {
-              var that = this
-              var kind = that._k
-              var entry = that._l
-              // revert to the last existing entry
-              while (entry && entry.r) entry = entry.p
-              // get next entry
-              if (
-                !that._t ||
-                !(that._l = entry = entry ? entry.n : that._t._f)
-              ) {
-                // or finish the iteration
-                that._t = undefined
-                return step(1)
-              }
-              // return step by kind
-              if (kind == 'keys') return step(0, entry.k)
-              if (kind == 'values') return step(0, entry.v)
-              return step(0, [entry.k, entry.v])
-            },
-            IS_MAP ? 'entries' : 'values',
-            !IS_MAP,
-            true
-          )
-
-          // add [@@species], 23.1.2.2, 23.2.2.2
-          setSpecies(NAME)
-        },
-      }
-
-      /***/
-    },
-
-    /***/ XLbu: /***/ function(module, exports, __webpack_require__) {
-      // https://github.com/DavidBruant/Map-Set.prototype.toJSON
-      var $export = __webpack_require__('Y7ZC')
-
-      $export($export.P + $export.R, 'Map', {
-        toJSON: __webpack_require__('8iia')('Map'),
-      })
-
-      /***/
-    },
-
     /***/ ZDA2: /***/ function(module, exports, __webpack_require__) {
       var _typeof = __webpack_require__('iZP3')

@@ -1487,75 +1176,6 @@
       /***/
     },

-    /***/ dVTT: /***/ function(module, exports, __webpack_require__) {
-      // https://tc39.github.io/proposal-setmap-offrom/#sec-map.from
-      __webpack_require__('aPfg')('Map')
-
-      /***/
-    },
-
-    /***/ g33z: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var strong = __webpack_require__('Wu5q')
-      var validate = __webpack_require__('n3ko')
-      var MAP = 'Map'
-
-      // 23.1 Map Objects
-      module.exports = __webpack_require__('raTm')(
-        MAP,
-        function(get) {
-          return function Map() {
-            return get(this, arguments.length > 0 ? arguments[0] : undefined)
-          }
-        },
-        {
-          // 23.1.3.6 Map.prototype.get(key)
-          get: function get(key) {
-            var entry = strong.getEntry(validate(this, MAP), key)
-            return entry && entry.v
-          },
-          // 23.1.3.9 Map.prototype.set(key, value)
-          set: function set(key, value) {
-            return strong.def(validate(this, MAP), key === 0 ? 0 : key, value)
-          },
-        },
-        strong,
-        true
-      )
-
-      /***/
-    },
-
-    /***/ qArv: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var _Object$defineProperty = __webpack_require__('hfKm')
-
-      var __importStar =
-        (this && this.__importStar) ||
-        function(mod) {
-          if (mod && mod.__esModule) return mod
-          var result = {}
-          if (mod != null)
-            for (var k in mod) {
-              if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]
-            }
-          result['default'] = mod
-          return result
-        }
-
-      _Object$defineProperty(exports, '__esModule', {
-        value: true,
-      })
-
-      var React = __importStar(__webpack_require__('q1tI'))
-
-      exports.DataManagerContext = React.createContext(null)
-
-      /***/
-    },
-
     /***/ yLiY: /***/ function(module, exports, __webpack_require__) {
       'use strict'

@@ -1583,8 +1203,6 @@
     /***/ zmvN: /***/ function(module, exports, __webpack_require__) {
       'use strict'

-      var _regeneratorRuntime = __webpack_require__('ln6h')
-
       var _classCallCheck = __webpack_require__('/HRN')

       var _createClass = __webpack_require__('WaGi')
@@ -1594,10 +1212,6 @@
       exports.__esModule = true
       exports['default'] = void 0

-      var _asyncToGenerator2 = _interopRequireDefault(
-        __webpack_require__('+oT+')
-      )
-
       var _promise = _interopRequireDefault(__webpack_require__('eVuF'))

       var _mitt = _interopRequireDefault(__webpack_require__('dZ6Y'))
@@ -1617,6 +1231,18 @@
             'prefetch'
       var hasNoModule = 'noModule' in document.createElement('script')

+      function normalizeRoute(route) {
+        if (route[0] !== '/') {
+          throw new Error(
+            'Route name should start with a "/", got "' + route + '"'
+          )
+        }
+
+        route = route.replace(/\/index$/, '/')
+        if (route === '/') return route
+        return route.replace(/\/$/, '')
+      }
+
       function appendLink(href, rel, as) {
         return new _promise['default'](function(res, rej, link) {
           link = document.createElement('link')
@@ -1639,7 +1265,6 @@
             this.buildId = buildId
             this.assetPrefix = assetPrefix
             this.pageCache = {}
-            this.prefetched = {}
             this.pageRegisterEvents = (0, _mitt['default'])()
             this.loadingRoutes = {}

@@ -1662,31 +1287,19 @@
             {
               key: 'getDependencies',
               value: function getDependencies(route) {
+                var _this = this
+
                 return this.promisedBuildManifest.then(function(man) {
                   return (
                     (man[route] &&
                       man[route].map(function(url) {
-                        return '/_next/' + encodeURI(url)
+                        return _this.assetPrefix + '/_next/' + encodeURI(url)
                       })) ||
                     []
                   )
                 })
               },
             },
-            {
-              key: 'normalizeRoute',
-              value: function normalizeRoute(route) {
-                if (route[0] !== '/') {
-                  throw new Error(
-                    'Route name should start with a "/", got "' + route + '"'
-                  )
-                }
-
-                route = route.replace(/\/index$/, '/')
-                if (route === '/') return route
-                return route.replace(/\/$/, '')
-              },
-            },
             {
               key: 'loadPage',
               value: function loadPage(route) {
@@ -1698,18 +1311,18 @@
             {
               key: 'loadPageScript',
               value: function loadPageScript(route) {
-                var _this3 = this
+                var _this2 = this

-                route = this.normalizeRoute(route)
+                route = normalizeRoute(route)
                 return new _promise['default'](function(resolve, reject) {
                   var fire = function fire(_ref) {
                     var error = _ref.error,
                       page = _ref.page,
                       mod = _ref.mod

-                    _this3.pageRegisterEvents.off(route, fire)
+                    _this2.pageRegisterEvents.off(route, fire)

-                    delete _this3.loadingRoutes[route]
+                    delete _this2.loadingRoutes[route]

                     if (error) {
                       reject(error)
@@ -1721,7 +1334,7 @@
                     }
                   } // If there's a cached version of the page, let's use it.

-                  var cachedPage = _this3.pageCache[route]
+                  var cachedPage = _this2.pageCache[route]

                   if (cachedPage) {
                     var error = cachedPage.error,
@@ -1736,7 +1349,7 @@
                     return
                   } // Register a listener to get the page

-                  _this3.pageRegisterEvents.on(route, fire) // If the page is loading via SSR, we need to wait for it
+                  _this2.pageRegisterEvents.on(route, fire) // If the page is loading via SSR, we need to wait for it
                   // rather downloading it again.

                   if (
@@ -1747,17 +1360,17 @@
                     return
                   }

-                  if (!_this3.loadingRoutes[route]) {
-                    _this3.loadingRoutes[route] = true
+                  if (!_this2.loadingRoutes[route]) {
+                    _this2.loadingRoutes[route] = true

                     if (true) {
-                      _this3.getDependencies(route).then(function(deps) {
+                      _this2.getDependencies(route).then(function(deps) {
                         deps.forEach(function(d) {
                           if (
                             /\.js$/.test(d) &&
                             !document.querySelector('script[src^="' + d + '"]')
                           ) {
-                            _this3.loadScript(d, route, false)
+                            _this2.loadScript(d, route, false)
                           }

                           if (
@@ -1773,7 +1386,7 @@
                           }
                         })

-                        _this3.loadRoute(route)
+                        _this2.loadRoute(route)
                       })
                     } else {
                     }
@@ -1784,45 +1397,21 @@
             {
               key: 'loadRoute',
               value: function loadRoute(route) {
-                var _this = this
-
-                return (0, _asyncToGenerator2['default'])(
-                  /*#__PURE__*/
-                  _regeneratorRuntime.mark(function _callee() {
-                    var scriptRoute, url
-                    return _regeneratorRuntime.wrap(function _callee$(
-                      _context
-                    ) {
-                      while (1) {
-                        switch ((_context.prev = _context.next)) {
-                          case 0:
-                            route = _this.normalizeRoute(route)
-                            scriptRoute =
-                              route === '/' ? '/index.js' : route + '.js'
-                            url =
-                              _this.assetPrefix +
-                              '/_next/static/' +
-                              encodeURIComponent(_this.buildId) +
-                              '/pages' +
-                              encodeURI(scriptRoute)
-
-                            _this.loadScript(url, route, true)
-
-                          case 4:
-                          case 'end':
-                            return _context.stop()
-                        }
-                      }
-                    },
-                    _callee)
-                  })
-                )()
+                route = normalizeRoute(route)
+                var scriptRoute = route === '/' ? '/index.js' : route + '.js'
+                var url =
+                  this.assetPrefix +
+                  '/_next/static/' +
+                  encodeURIComponent(this.buildId) +
+                  '/pages' +
+                  encodeURI(scriptRoute)
+                this.loadScript(url, route, true)
               },
             },
             {
               key: 'loadScript',
               value: function loadScript(url, route, isPage) {
-                var _this4 = this
+                var _this3 = this

                 var script = document.createElement('script')

@@ -1840,7 +1429,7 @@
                   var error = new Error('Error loading script ' + url)
                   error.code = 'PAGE_LOAD_ERROR'

-                  _this4.pageRegisterEvents.emit(route, {
+                  _this3.pageRegisterEvents.emit(route, {
                     error: error,
                   })
                 }
@@ -1851,7 +1440,7 @@
             {
               key: 'registerPage',
               value: function registerPage(route, regFn) {
-                var _this5 = this
+                var _this4 = this

                 var register = function register() {
                   try {
@@ -1860,15 +1449,15 @@
                       page: mod['default'] || mod,
                       mod: mod,
                     }
-                    _this5.pageCache[route] = pageData
+                    _this4.pageCache[route] = pageData

-                    _this5.pageRegisterEvents.emit(route, pageData)
+                    _this4.pageRegisterEvents.emit(route, pageData)
                   } catch (error) {
-                    _this5.pageCache[route] = {
+                    _this4.pageCache[route] = {
                       error: error,
                     }

-                    _this5.pageRegisterEvents.emit(route, {
+                    _this4.pageRegisterEvents.emit(route, {
                       error: error,
                     })
                   }
@@ -1884,110 +1473,72 @@
             {
               key: 'prefetch',
               value: function prefetch(route, isDependency) {
-                var _this2 = this
+                var _this5 = this

-                return (0, _asyncToGenerator2['default'])(
-                  /*#__PURE__*/
-                  _regeneratorRuntime.mark(function _callee2() {
-                    var cn, url, scriptRoute
-                    return _regeneratorRuntime.wrap(function _callee2$(
-                      _context2
-                    ) {
-                      while (1) {
-                        switch ((_context2.prev = _context2.next)) {
-                          case 0:
-                            if (!(cn = navigator.connection)) {
-                              _context2.next = 3
-                              break
-                            }
-
-                            if (!(cn.saveData || /2g/.test(cn.effectiveType))) {
-                              _context2.next = 3
-                              break
-                            }
-
-                            return _context2.abrupt('return')
-
-                          case 3:
-                            url = _this2.assetPrefix
-
-                            if (isDependency) {
-                              url += route
-                            } else {
-                              route = _this2.normalizeRoute(route)
-                              _this2.prefetched[route] = true
-                              scriptRoute =
-                                (route === '/' ? '/index' : route) + '.js'
-
-                              if (true && hasNoModule) {
-                                scriptRoute = scriptRoute.replace(
-                                  /\.js$/,
-                                  '.module.js'
-                                )
-                              }
-
-                              url +=
-                                '/_next/static/' +
-                                encodeURIComponent(_this2.buildId) +
-                                '/pages' +
-                                encodeURI(scriptRoute)
-                            }
-
-                            if (
-                              !document.querySelector(
-                                'link[rel="' +
-                                  relPrefetch +
-                                  '"][href^="' +
-                                  url +
-                                  '"], script[data-next-page="' +
-                                  route +
-                                  '"]'
-                              )
-                            ) {
-                              _context2.next = 7
-                              break
-                            }
-
-                            return _context2.abrupt('return')
-
-                          case 7:
-                            return _context2.abrupt(
-                              'return',
-                              _promise['default']
-                                .all([
-                                  appendLink(
-                                    url,
-                                    relPrefetch,
-                                    url.match(/\.css$/) ? 'style' : 'script'
-                                  ),
-                                  true &&
-                                    !isDependency &&
-                                    _this2
-                                      .getDependencies(route)
-                                      .then(function(urls) {
-                                        return _promise['default'].all(
-                                          urls.map(function(url) {
-                                            return _this2.prefetch(url, true)
-                                          })
-                                        )
-                                      }),
-                                ])
-                                .then(
-                                  // do not return any data
-                                  function() {}, // swallow prefetch errors
-                                  function() {}
-                                )
-                            )
+                // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118
+                // License: Apache 2.0
+                var cn

-                          case 8:
-                          case 'end':
-                            return _context2.stop()
-                        }
-                      }
-                    },
-                    _callee2)
-                  })
-                )()
+                if ((cn = navigator.connection)) {
+                  // Don't prefetch if using 2G or if Save-Data is enabled.
+                  if (cn.saveData || /2g/.test(cn.effectiveType))
+                    return _promise['default'].resolve()
+                }
+
+                var url
+
+                if (isDependency) {
+                  url = route
+                } else {
+                  route = normalizeRoute(route)
+                  var scriptRoute = (route === '/' ? '/index' : route) + '.js'
+
+                  if (true && hasNoModule) {
+                    scriptRoute = scriptRoute.replace(/\.js$/, '.module.js')
+                  }
+
+                  url =
+                    this.assetPrefix +
+                    '/_next/static/' +
+                    encodeURIComponent(this.buildId) +
+                    '/pages' +
+                    encodeURI(scriptRoute)
+                }
+
+                return _promise['default']
+                  .all(
+                    document.querySelector(
+                      'link[rel="' +
+                        relPrefetch +
+                        '"][href^="' +
+                        url +
+                        '"], script[data-next-page="' +
+                        route +
+                        '"]'
+                    )
+                      ? []
+                      : [
+                          appendLink(
+                            url,
+                            relPrefetch,
+                            url.match(/\.css$/) ? 'style' : 'script'
+                          ),
+                          true &&
+                            !isDependency &&
+                            this.getDependencies(route).then(function(urls) {
+                              return _promise['default'].all(
+                                urls.map(function(url) {
+                                  return _this5.prefetch(url, true)
+                                })
+                              )
+                            }),
+                        ]
+                  )
+                  .then(
+                    // do not return any data
+                    function() {}, // swallow prefetch errors
+                    function() {}
+                  )
               },
             },
           ])
```
</details>
<details>
<summary>Diff for <strong>main-HASH.module.js</strong></summary>

```diff
@@ -69,66 +69,6 @@
       /***/
     },

-    /***/ '/h46': /***/ function(module, exports, __webpack_require__) {
-      // https://tc39.github.io/proposal-setmap-offrom/#sec-map.of
-      __webpack_require__('cHUd')('Map')
-
-      /***/
-    },
-
-    /***/ '0IRE': /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var _Map = __webpack_require__('LX0d')
-
-      var _Object$defineProperty = __webpack_require__('hfKm')
-
-      _Object$defineProperty(exports, '__esModule', {
-        value: true,
-      })
-
-      class DataManager {
-        constructor(data) {
-          this.data = new _Map(data)
-        }
-
-        getData() {
-          return this.data
-        }
-
-        get(key) {
-          return this.data.get(key)
-        }
-
-        set(key, value) {
-          this.data.set(key, value)
-        }
-
-        overwrite(data) {
-          this.data = new _Map(data)
-        }
-      }
-
-      exports.DataManager = DataManager
-
-      /***/
-    },
-
-    /***/ '8iia': /***/ function(module, exports, __webpack_require__) {
-      // https://github.com/DavidBruant/Map-Set.prototype.toJSON
-      var classof = __webpack_require__('QMMT')
-      var from = __webpack_require__('RRc/')
-      module.exports = function(NAME) {
-        return function toJSON() {
-          if (classof(this) != NAME)
-            throw TypeError(NAME + "#toJSON isn't generic")
-          return from(this)
-        }
-      }
-
-      /***/
-    },
-
     /***/ BMP1: /***/ function(module, exports, __webpack_require__) {
       'use strict'

@@ -310,7 +250,7 @@
       exports.__esModule = true
       exports.render = render
       exports.renderError = renderError
-      exports.default = exports.emitter = exports.ErrorComponent = exports.router = exports.dataManager = exports.version = void 0
+      exports.default = exports.emitter = exports.router = exports.version = void 0

       var _asyncToGenerator2 = _interopRequireDefault(
         __webpack_require__('+oT+')
@@ -342,12 +282,8 @@

       var _headManagerContext = __webpack_require__('FYa8')

-      var _dataManagerContext = __webpack_require__('qArv')
-
       var _routerContext = __webpack_require__('qOIg')

-      var _dataManager = __webpack_require__('0IRE')
-
       var _querystring = __webpack_require__('s4NR')

       var _isDynamic = __webpack_require__('/jkW')
@@ -361,7 +297,7 @@
         document.getElementById('__NEXT_DATA__').textContent
       )
       window.__NEXT_DATA__ = data
-      var version = '9.1.7'
+      var version = '9.1.8-canary.16'
       exports.version = version
       var {
         props,
@@ -373,9 +309,6 @@
         runtimeConfig,
         dynamicIds,
       } = data
-      var d = JSON.parse(window.__NEXT_DATA__.dataManager)
-      var dataManager = new _dataManager.DataManager(d)
-      exports.dataManager = dataManager
       var prefix = assetPrefix || '' // With dynamic assetPrefix it's no longer possible to set assetPrefix at the build time
       // So, this is how we do it in the client side at runtime

@@ -407,7 +340,6 @@
       var router
       exports.router = router
       var ErrorComponent
-      exports.ErrorComponent = ErrorComponent
       var Component
       var App, onPerfEntry

@@ -427,7 +359,7 @@
             (data.nextExport &&
               ((0, _isDynamic.isDynamicRoute)(router.pathname) ||
                 location.search)) ||
-            (Component.__NEXT_SPR && location.search)
+            (Component && Component.__N_SSG && location.search)
           ) {
             // update query on mount for exported pages
             router.replace(
@@ -447,6 +379,7 @@
                 // client-side hydration. Your app should _never_ use this property.
                 // It may change at any time without notice.
                 _h: 1,
+                shallow: true,
               }
             )
           }
@@ -534,7 +467,6 @@
                     Component,
                     props,
                     err,
-                    emitter,
                   })
                 },
               }
@@ -548,7 +480,6 @@
               Component,
               props,
               err: initialErr,
-              emitter,
             }
             render(renderCtx)
             return emitter
@@ -603,9 +534,7 @@
           } // Make sure we log the error to the console, otherwise users can't track down issues.

           console.error(err)
-          exports.ErrorComponent = ErrorComponent = yield pageLoader.loadPage(
-            '/_error'
-          ) // In production we do a normal render with the `ErrorComponent` as component.
+          ErrorComponent = yield pageLoader.loadPage('/_error') // In production we do a normal render with the `ErrorComponent` as component.
           // If we've gotten here upon initial render, we can use the props from the server.
           // Otherwise, we need to call `getInitialProps` on `App` before mounting.

@@ -640,15 +569,14 @@
       var reactRoot = null

       function renderReactElement(reactEl, domEl) {
-        // mark start of hydrate/render
-        if (_utils.SUPPORTS_PERFORMANCE_USER_TIMING) {
-          performance.mark('beforeRender')
-        }
-
         if (false) {
-          var opts, callback
+          var opts
         } else {
-          // The check for `.hydrate` is there to support React alternatives like preact
+          // mark start of hydrate/render
+          if (_utils.ST) {
+            performance.mark('beforeRender')
+          } // The check for `.hydrate` is there to support React alternatives like preact
+
           if (isInitialRender) {
             _reactDom.default.hydrate(reactEl, domEl, markHydrateComplete)

@@ -658,12 +586,15 @@
           }
         }

-        if (onPerfEntry && _utils.SUPPORTS_PERFORMANCE_USER_TIMING) {
-          if (!(PerformanceObserver in window)) {
+        if (onPerfEntry && _utils.ST) {
+          if (!('PerformanceObserver' in window)) {
             window.addEventListener('load', () => {
               performance.getEntriesByType('paint').forEach(onPerfEntry)
             })
           } else {
+            performance.getEntriesByType('paint').forEach(onPerfEntry) // Start an observer to catch any paint metrics which may fire _after_
+            // the load event is fired on the window
+
             var observer = new PerformanceObserver(list => {
               list.getEntries().forEach(onPerfEntry)
             })
@@ -675,7 +606,7 @@
       }

       function markHydrateComplete() {
-        if (!_utils.SUPPORTS_PERFORMANCE_USER_TIMING) return
+        if (!_utils.ST) return
         performance.mark('afterHydrate') // mark end of hydration

         performance.measure(
@@ -694,7 +625,7 @@
       }

       function markRenderComplete() {
-        if (!_utils.SUPPORTS_PERFORMANCE_USER_TIMING) return
+        if (!_utils.ST) return
         performance.mark('afterRender') // mark end of render

         var navStartEntries = performance.getEntriesByName(
@@ -752,17 +683,11 @@
               value: (0, _router.makePublicRouterInstance)(router),
             },
             _react.default.createElement(
-              _dataManagerContext.DataManagerContext.Provider,
+              _headManagerContext.HeadManagerContext.Provider,
               {
-                value: dataManager,
+                value: headManager.updateHead,
               },
-              _react.default.createElement(
-                _headManagerContext.HeadManagerContext.Provider,
-                {
-                  value: headManager.updateHead,
-                },
-                children
-              )
+              children
             )
           )
         )
@@ -847,292 +772,6 @@
       /***/
     },

-    /***/ LX0d: /***/ function(module, exports, __webpack_require__) {
-      module.exports = __webpack_require__('UDep')
-
-      /***/
-    },
-
-    /***/ 'RRc/': /***/ function(module, exports, __webpack_require__) {
-      var forOf = __webpack_require__('oioR')
-
-      module.exports = function(iter, ITERATOR) {
-        var result = []
-        forOf(iter, false, result.push, result, ITERATOR)
-        return result
-      }
-
-      /***/
-    },
-
-    /***/ UDep: /***/ function(module, exports, __webpack_require__) {
-      __webpack_require__('wgeU')
-      __webpack_require__('FlQf')
-      __webpack_require__('bBy9')
-      __webpack_require__('g33z')
-      __webpack_require__('XLbu')
-      __webpack_require__('/h46')
-      __webpack_require__('dVTT')
-      module.exports = __webpack_require__('WEpk').Map
-
-      /***/
-    },
-
-    /***/ Wu5q: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var dP = __webpack_require__('2faE').f
-      var create = __webpack_require__('oVml')
-      var redefineAll = __webpack_require__('XJU/')
-      var ctx = __webpack_require__('2GTP')
-      var anInstance = __webpack_require__('EXMj')
-      var forOf = __webpack_require__('oioR')
-      var $iterDefine = __webpack_require__('MPFp')
-      var step = __webpack_require__('UO39')
-      var setSpecies = __webpack_require__('TJWN')
-      var DESCRIPTORS = __webpack_require__('jmDH')
-      var fastKey = __webpack_require__('6/1s').fastKey
-      var validate = __webpack_require__('n3ko')
-      var SIZE = DESCRIPTORS ? '_s' : 'size'
-
-      var getEntry = function(that, key) {
-        // fast case
-        var index = fastKey(key)
-        var entry
-        if (index !== 'F') return that._i[index]
-        // frozen object case
-        for (entry = that._f; entry; entry = entry.n) {
-          if (entry.k == key) return entry
-        }
-      }
-
-      module.exports = {
-        getConstructor: function(wrapper, NAME, IS_MAP, ADDER) {
-          var C = wrapper(function(that, iterable) {
-            anInstance(that, C, NAME, '_i')
-            that._t = NAME // collection type
-            that._i = create(null) // index
-            that._f = undefined // first entry
-            that._l = undefined // last entry
-            that[SIZE] = 0 // size
-            if (iterable != undefined)
-              forOf(iterable, IS_MAP, that[ADDER], that)
-          })
-          redefineAll(C.prototype, {
-            // 23.1.3.1 Map.prototype.clear()
-            // 23.2.3.2 Set.prototype.clear()
-            clear: function clear() {
-              for (
-                var that = validate(this, NAME),
-                  data = that._i,
-                  entry = that._f;
-                entry;
-                entry = entry.n
-              ) {
-                entry.r = true
-                if (entry.p) entry.p = entry.p.n = undefined
-                delete data[entry.i]
-              }
-              that._f = that._l = undefined
-              that[SIZE] = 0
-            },
-            // 23.1.3.3 Map.prototype.delete(key)
-            // 23.2.3.4 Set.prototype.delete(value)
-            delete: function(key) {
-              var that = validate(this, NAME)
-              var entry = getEntry(that, key)
-              if (entry) {
-                var next = entry.n
-                var prev = entry.p
-                delete that._i[entry.i]
-                entry.r = true
-                if (prev) prev.n = next
-                if (next) next.p = prev
-                if (that._f == entry) that._f = next
-                if (that._l == entry) that._l = prev
-                that[SIZE]--
-              }
-              return !!entry
-            },
-            // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
-            // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
-            forEach: function forEach(callbackfn /* , that = undefined */) {
-              validate(this, NAME)
-              var f = ctx(
-                callbackfn,
-                arguments.length > 1 ? arguments[1] : undefined,
-                3
-              )
-              var entry
-              while ((entry = entry ? entry.n : this._f)) {
-                f(entry.v, entry.k, this)
-                // revert to the last existing entry
-                while (entry && entry.r) entry = entry.p
-              }
-            },
-            // 23.1.3.7 Map.prototype.has(key)
-            // 23.2.3.7 Set.prototype.has(value)
-            has: function has(key) {
-              return !!getEntry(validate(this, NAME), key)
-            },
-          })
-          if (DESCRIPTORS)
-            dP(C.prototype, 'size', {
-              get: function() {
-                return validate(this, NAME)[SIZE]
-              },
-            })
-          return C
-        },
-        def: function(that, key, value) {
-          var entry = getEntry(that, key)
-          var prev, index
-          // change existing entry
-          if (entry) {
-            entry.v = value
-            // create new entry
-          } else {
-            that._l = entry = {
-              i: (index = fastKey(key, true)), // <- index
-              k: key, // <- key
-              v: value, // <- value
-              p: (prev = that._l), // <- previous entry
-              n: undefined, // <- next entry
-              r: false, // <- removed
-            }
-            if (!that._f) that._f = entry
-            if (prev) prev.n = entry
-            that[SIZE]++
-            // add to index
-            if (index !== 'F') that._i[index] = entry
-          }
-          return that
-        },
-        getEntry: getEntry,
-        setStrong: function(C, NAME, IS_MAP) {
-          // add .keys, .values, .entries, [@@iterator]
-          // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
-          $iterDefine(
-            C,
-            NAME,
-            function(iterated, kind) {
-              this._t = validate(iterated, NAME) // target
-              this._k = kind // kind
-              this._l = undefined // previous
-            },
-            function() {
-              var that = this
-              var kind = that._k
-              var entry = that._l
-              // revert to the last existing entry
-              while (entry && entry.r) entry = entry.p
-              // get next entry
-              if (
-                !that._t ||
-                !(that._l = entry = entry ? entry.n : that._t._f)
-              ) {
-                // or finish the iteration
-                that._t = undefined
-                return step(1)
-              }
-              // return step by kind
-              if (kind == 'keys') return step(0, entry.k)
-              if (kind == 'values') return step(0, entry.v)
-              return step(0, [entry.k, entry.v])
-            },
-            IS_MAP ? 'entries' : 'values',
-            !IS_MAP,
-            true
-          )
-
-          // add [@@species], 23.1.2.2, 23.2.2.2
-          setSpecies(NAME)
-        },
-      }
-
-      /***/
-    },
-
-    /***/ XLbu: /***/ function(module, exports, __webpack_require__) {
-      // https://github.com/DavidBruant/Map-Set.prototype.toJSON
-      var $export = __webpack_require__('Y7ZC')
-
-      $export($export.P + $export.R, 'Map', {
-        toJSON: __webpack_require__('8iia')('Map'),
-      })
-
-      /***/
-    },
-
-    /***/ dVTT: /***/ function(module, exports, __webpack_require__) {
-      // https://tc39.github.io/proposal-setmap-offrom/#sec-map.from
-      __webpack_require__('aPfg')('Map')
-
-      /***/
-    },
-
-    /***/ g33z: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var strong = __webpack_require__('Wu5q')
-      var validate = __webpack_require__('n3ko')
-      var MAP = 'Map'
-
-      // 23.1 Map Objects
-      module.exports = __webpack_require__('raTm')(
-        MAP,
-        function(get) {
-          return function Map() {
-            return get(this, arguments.length > 0 ? arguments[0] : undefined)
-          }
-        },
-        {
-          // 23.1.3.6 Map.prototype.get(key)
-          get: function get(key) {
-            var entry = strong.getEntry(validate(this, MAP), key)
-            return entry && entry.v
-          },
-          // 23.1.3.9 Map.prototype.set(key, value)
-          set: function set(key, value) {
-            return strong.def(validate(this, MAP), key === 0 ? 0 : key, value)
-          },
-        },
-        strong,
-        true
-      )
-
-      /***/
-    },
-
-    /***/ qArv: /***/ function(module, exports, __webpack_require__) {
-      'use strict'
-
-      var _Object$defineProperty = __webpack_require__('hfKm')
-
-      var __importStar =
-        (this && this.__importStar) ||
-        function(mod) {
-          if (mod && mod.__esModule) return mod
-          var result = {}
-          if (mod != null)
-            for (var k in mod) {
-              if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]
-            }
-          result['default'] = mod
-          return result
-        }
-
-      _Object$defineProperty(exports, '__esModule', {
-        value: true,
-      })
-
-      var React = __importStar(__webpack_require__('q1tI'))
-
-      exports.DataManagerContext = React.createContext(null)
-
-      /***/
-    },
-
     /***/ yLiY: /***/ function(module, exports, __webpack_require__) {
       'use strict'

@@ -1165,10 +804,6 @@
       exports.__esModule = true
       exports.default = void 0

-      var _asyncToGenerator2 = _interopRequireDefault(
-        __webpack_require__('+oT+')
-      )
-
       var _promise = _interopRequireDefault(__webpack_require__('eVuF'))

       var _mitt = _interopRequireDefault(__webpack_require__('dZ6Y'))
@@ -1188,6 +823,18 @@
             'prefetch'
       var hasNoModule = 'noModule' in document.createElement('script')

+      function normalizeRoute(route) {
+        if (route[0] !== '/') {
+          throw new Error(
+            'Route name should start with a "/", got "' + route + '"'
+          )
+        }
+
+        route = route.replace(/\/index$/, '/')
+        if (route === '/') return route
+        return route.replace(/\/$/, '')
+      }
+
       function appendLink(href, rel, as) {
         return new _promise.default((res, rej, link) => {
           link = document.createElement('link')
@@ -1206,7 +853,6 @@
           this.buildId = buildId
           this.assetPrefix = assetPrefix
           this.pageCache = {}
-          this.prefetched = {}
           this.pageRegisterEvents = (0, _mitt.default)()
           this.loadingRoutes = {}

@@ -1227,29 +873,19 @@
           return this.promisedBuildManifest.then(
             man =>
               (man[route] &&
-                man[route].map(url => '/_next/' + encodeURI(url))) ||
+                man[route].map(
+                  url => this.assetPrefix + '/_next/' + encodeURI(url)
+                )) ||
               []
           )
         }

-        normalizeRoute(route) {
-          if (route[0] !== '/') {
-            throw new Error(
-              'Route name should start with a "/", got "' + route + '"'
-            )
-          }
-
-          route = route.replace(/\/index$/, '/')
-          if (route === '/') return route
-          return route.replace(/\/$/, '')
-        }
-
         loadPage(route) {
           return this.loadPageScript(route).then(v => v.page)
         }

         loadPageScript(route) {
-          route = this.normalizeRoute(route)
+          route = normalizeRoute(route)
           return new _promise.default((resolve, reject) => {
             var fire = _ref => {
               var { error, page, mod } = _ref
@@ -1322,20 +958,15 @@
         }

         loadRoute(route) {
-          var _this = this
-
-          return (0, _asyncToGenerator2.default)(function*() {
-            route = _this.normalizeRoute(route)
-            var scriptRoute = route === '/' ? '/index.js' : route + '.js'
-            var url =
-              _this.assetPrefix +
-              '/_next/static/' +
-              encodeURIComponent(_this.buildId) +
-              '/pages' +
-              encodeURI(scriptRoute)
-
-            _this.loadScript(url, route, true)
-          })()
+          route = normalizeRoute(route)
+          var scriptRoute = route === '/' ? '/index.js' : route + '.js'
+          var url =
+            this.assetPrefix +
+            '/_next/static/' +
+            encodeURIComponent(this.buildId) +
+            '/pages' +
+            encodeURI(scriptRoute)
+          this.loadScript(url, route, true)
         }

         loadScript(url, route, isPage) {
@@ -1390,39 +1021,38 @@
         }

         prefetch(route, isDependency) {
-          var _this2 = this
-
-          return (0, _asyncToGenerator2.default)(function*() {
-            // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118
-            // License: Apache 2.0
-            var cn
-
-            if ((cn = navigator.connection)) {
-              // Don't prefetch if using 2G or if Save-Data is enabled.
-              if (cn.saveData || /2g/.test(cn.effectiveType)) return
-            }
-
-            var url = _this2.assetPrefix
+          // https://github.com/GoogleChromeLabs/quicklink/blob/453a661fa1fa940e2d2e044452398e38c67a98fb/src/index.mjs#L115-L118
+          // License: Apache 2.0
+          var cn
+
+          if ((cn = navigator.connection)) {
+            // Don't prefetch if using 2G or if Save-Data is enabled.
+            if (cn.saveData || /2g/.test(cn.effectiveType))
+              return _promise.default.resolve()
+          }

-            if (isDependency) {
-              url += route
-            } else {
-              route = _this2.normalizeRoute(route)
-              _this2.prefetched[route] = true
-              var scriptRoute = (route === '/' ? '/index' : route) + '.js'
+          var url

-              if (true && hasNoModule) {
-                scriptRoute = scriptRoute.replace(/\.js$/, '.module.js')
-              }
+          if (isDependency) {
+            url = route
+          } else {
+            route = normalizeRoute(route)
+            var scriptRoute = (route === '/' ? '/index' : route) + '.js'

-              url +=
-                '/_next/static/' +
-                encodeURIComponent(_this2.buildId) +
-                '/pages' +
-                encodeURI(scriptRoute)
+            if (true && hasNoModule) {
+              scriptRoute = scriptRoute.replace(/\.js$/, '.module.js')
             }

-            if (
+            url =
+              this.assetPrefix +
+              '/_next/static/' +
+              encodeURIComponent(this.buildId) +
+              '/pages' +
+              encodeURI(scriptRoute)
+          }
+
+          return _promise.default
+            .all(
               document.querySelector(
                 'link[rel="' +
                   relPrefetch +
@@ -1432,33 +1062,27 @@
                   route +
                   '"]'
               )
-            ) {
-              return
-            }
-
-            return _promise.default
-              .all([
-                appendLink(
-                  url,
-                  relPrefetch,
-                  url.match(/\.css$/) ? 'style' : 'script'
-                ),
-                true &&
-                  !isDependency &&
-                  _this2
-                    .getDependencies(route)
-                    .then(urls =>
-                      _promise.default.all(
-                        urls.map(url => _this2.prefetch(url, true))
-                      )
+                ? []
+                : [
+                    appendLink(
+                      url,
+                      relPrefetch,
+                      url.match(/\.css$/) ? 'style' : 'script'
                     ),
-              ])
-              .then(
-                // do not return any data
-                () => {}, // swallow prefetch errors
-                () => {}
-              )
-          })()
+                    true &&
+                      !isDependency &&
+                      this.getDependencies(route).then(urls =>
+                        _promise.default.all(
+                          urls.map(url => this.prefetch(url, true))
+                        )
+                      ),
+                  ]
+            )
+            .then(
+              // do not return any data
+              () => {}, // swallow prefetch errors
+              () => {}
+            )
         }
       }
```
</details>
<details>
<summary>Diff for <strong>index.html</strong></summary>

```diff
@@ -21,13 +21,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/webpack-7928590be3ef2e55b835.module.js"
+      href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
+      href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -39,13 +39,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.c5cfe57ad45f291e53e4.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
+      href="/_next/static/runtime/main-53129cb44048f8bf9b4a.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -53,7 +53,7 @@

Hello world 👋

```
</details>
<details>
<summary>Diff for <strong>link.html</strong></summary>

```diff
@@ -21,13 +21,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/webpack-7928590be3ef2e55b835.module.js"
+      href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
+      href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -39,13 +39,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.c5cfe57ad45f291e53e4.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
+      href="/_next/static/runtime/main-53129cb44048f8bf9b4a.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -58,7 +58,7 @@

```
</details>
<details>
<summary>Diff for <strong>withRouter.html</strong></summary>

```diff
@@ -21,13 +21,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/webpack-7928590be3ef2e55b835.module.js"
+      href="/_next/static/runtime/webpack-d629b83a65f3e33fa99e.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/framework.9c9aa574c484a7d0240e.module.js"
+      href="/_next/static/chunks/framework.5bb7f30f859f5f31359f.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -39,13 +39,13 @@
     />
     <link
       rel="preload"
-      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.08c4064758778ec3689a.module.js"
+      href="/_next/static/chunks/de003c3a9d308750aa009870a5926f9b18ab31f4.c5cfe57ad45f291e53e4.module.js"
       as="script"
       crossorigin="anonymous"
     />
     <link
       rel="preload"
-      href="/_next/static/runtime/main-6c919dd5a10cd6022375.module.js"
+      href="/_next/static/runtime/main-53129cb44048f8bf9b4a.module.js"
       as="script"
       crossorigin="anonymous"
     />
@@ -53,7 +53,7 @@

I use withRouter

```

Serverless Mode (Decrease detected ✓)

General Overall increase ⚠

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| buildDuration | 13.2s | 13.5s | ⚠ +283ms |
| nodeModulesSize | 49 MB | 49 MB | ⚠ +483 B |

Client Bundles (main, webpack, commons) Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| main-HASH.js gzip | 6.43 kB | 5.12 kB | -1.31 kB |
| webpack-HASH.js gzip | 746 B | 746 B | ✓ |
| 4952ddcd88e7..54d3.js gzip | 4.68 kB | 4.68 kB | ✓ |
| commons.HASH.js gzip | 4.06 kB | 4.06 kB | ✓ |
| de003c3a9d30..6ef5.js gzip | 13.8 kB | N/A | N/A |
| framework.HASH.js gzip | 39.5 kB | 39.1 kB | -311 B |
| de003c3a9d30..e54b.js gzip | N/A | 13.7 kB | N/A |
| Overall change | 69.2 kB | 67.5 kB | -1.62 kB |

Client Bundles (main, webpack, commons) Modern Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| main-HASH.module.js gzip | 5.41 kB | 4.18 kB | -1.23 kB |
| webpack-HASH..dule.js gzip | 746 B | 746 B | ✓ |
| 4952ddcd88e7..dule.js gzip | 5.56 kB | 5.56 kB | ✓ |
| de003c3a9d30..dule.js gzip | 12.6 kB | N/A | N/A |
| framework.HA..dule.js gzip | 39.4 kB | 39.1 kB | -310 B |
| de003c3a9d30..dule.js gzip | N/A | 12.5 kB | N/A |
| Overall change | 63.7 kB | 62.1 kB | -1.54 kB |

Legacy Client Bundles (polyfills)

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| polyfills-HASH.js gzip | 4.76 kB | 4.76 kB | ✓ |
| Overall change | 4.76 kB | 4.76 kB | ✓ |

Client Pages Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| _app.js gzip | 1.33 kB | 1.33 kB | ✓ |
| _error.js gzip | 4.07 kB | 4.07 kB | ✓ |
| hooks.js gzip | 779 B | 779 B | ✓ |
| index.js gzip | 222 B | 222 B | ✓ |
| link.js gzip | 2.93 kB | 2.9 kB | -28 B |
| routerDirect.js gzip | 283 B | 283 B | ✓ |
| withRouter.js gzip | 282 B | 282 B | ✓ |
| Overall change | 9.89 kB | 9.87 kB | -28 B |

Client Pages Modern Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| _app.module.js gzip | 757 B | 757 B | ✓ |
| _error.module.js gzip | 3.06 kB | 3.06 kB | ✓ |
| hooks.module.js gzip | 371 B | 371 B | ✓ |
| index.module.js gzip | 212 B | 212 B | ✓ |
| link.module.js gzip | 2.49 kB | 2.47 kB | -22 B |
| routerDirect..dule.js gzip | 273 B | 273 B | ✓ |
| withRouter.m..dule.js gzip | 272 B | 272 B | ✓ |
| Overall change | 7.43 kB | 7.41 kB | -22 B |

Client Build Manifests

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| _buildManifest.js gzip | 61 B | 61 B | ✓ |
| _buildManife..dule.js gzip | 61 B | 61 B | ✓ |
| Overall change | 122 B | 122 B | ✓ |

Serverless bundles Overall decrease ✓

|  | zeit/next.js canary v9.1.7 | zeit/next.js refs/tags/v9.1.8-canary.16 | Change |
| - | - | - | - |
| _error.js gzip | 78.9 kB | 77.8 kB | -1.12 kB |
| hooks.html gzip | 1.07 kB | 1.05 kB | -18 B |
| index.js gzip | 79.1 kB | 78 kB | -1.16 kB |
| link.js gzip | 81.3 kB | 80.4 kB | -908 B |
| routerDirect.js gzip | 79.2 kB | 78.1 kB | -1.14 kB |
| withRouter.js gzip | 79.3 kB | 78.1 kB | -1.2 kB |
| Overall change | 399 kB | 393 kB | -5.54 kB |


onBackPressed 는 뒤로가기 버튼이 눌렀을때 호출 되는 메소드 입니다 여기서는 딱히 의미가 없어보입니다


Caldrà deixar les dues formes separades, i fer el "LR" en els diccionaris bilingües.


Successfully deployed to following URLs:

* https://pbook-online-e31slg8sg.now.sh
* https://pbook-online.now.sh
* https://pbook-online.opcp.now.sh
* https://pbook-online-git-master.opcp.now.sh


Successfully deployed to following URLs:

* https://national-parks-k1dfvbiz0.now.sh
* https://national-parks.now.sh
* https://national-parks.jsnkng.now.sh
* https://national-parks-git-master.jsnkng.now.sh


Successfully deployed to following URLs:

* https://everyday-5j5ev5a52.now.sh
* https://everyday-five-rose.now.sh
* https://everyday.mariosant.now.sh
* https://everyday-git-master.mariosant.now.sh


This commit is actually obsolete


What does -T2? Did not find it in man make...for cpp it is linker script


whats my error


onCreate에 다 넣어두는건 단일책임의 원칙에 맞지 않네요 역할별로 분리해서 메소드로 만들어주세요