/**
 * @license
 * Cesium - https://github.com/CesiumGS/cesium
 * Version 1.106.1
 *
 * Copyright 2011-2022 Cesium Contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Columbus View (Pat. Pend.)
 *
 * Portions licensed separately.
 * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details.
 */

if (typeof self === "undefined") {
  self = {};
}
self.onmessage = function(event) {
  var data = event.data;
  require(data.loaderConfig, [data.workerModule], function(workerModule) {
    self.onmessage = workerModule;
    self.CESIUM_BASE_URL = data.loaderConfig.baseUrl;
  });
};
function setTimeout(fn) {
  fn();
}
/** vim: et:ts=4:sw=4:sts=4
 * @license RequireJS 2.1.20 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/jrburke/requirejs for details
 */
var requirejs, require, define;
(function(global) {
  var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = "2.1.20", commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, isBrowser = !!(typeof window !== "undefined" && typeof navigator !== "undefined" && window.document), isWebWorker = !isBrowser && typeof importScripts !== "undefined", readyRegExp = isBrowser && navigator.platform === "PLAYSTATION 3" ? /^complete$/ : /^(complete|loaded)$/, defContextName = "_", isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false;
  function isFunction(it) {
    return ostring.call(it) === "[object Function]";
  }
  function isArray(it) {
    return ostring.call(it) === "[object Array]";
  }
  function each(ary, func) {
    if (ary) {
      var i;
      for (i = 0; i < ary.length; i += 1) {
        if (ary[i] && func(ary[i], i, ary)) {
          break;
        }
      }
    }
  }
  function eachReverse(ary, func) {
    if (ary) {
      var i;
      for (i = ary.length - 1; i > -1; i -= 1) {
        if (ary[i] && func(ary[i], i, ary)) {
          break;
        }
      }
    }
  }
  function hasProp(obj, prop) {
    return hasOwn.call(obj, prop);
  }
  function getOwn(obj, prop) {
    return hasProp(obj, prop) && obj[prop];
  }
  function eachProp(obj, func) {
    var prop;
    for (prop in obj) {
      if (hasProp(obj, prop)) {
        if (func(obj[prop], prop)) {
          break;
        }
      }
    }
  }
  function mixin(target, source, force, deepStringMixin) {
    if (source) {
      eachProp(source, function(value, prop) {
        if (force || !hasProp(target, prop)) {
          if (deepStringMixin && typeof value === "object" && value && !isArray(value) && !isFunction(value) && !(value instanceof RegExp)) {
            if (!target[prop]) {
              target[prop] = {};
            }
            mixin(target[prop], value, force, deepStringMixin);
          } else {
            target[prop] = value;
          }
        }
      });
    }
    return target;
  }
  function bind(obj, fn) {
    return function() {
      return fn.apply(obj, arguments);
    };
  }
  function scripts() {
    return document.getElementsByTagName("script");
  }
  function defaultOnError(err) {
    throw err;
  }
  function getGlobal(value) {
    if (!value) {
      return value;
    }
    var g = global;
    each(value.split("."), function(part) {
      g = g[part];
    });
    return g;
  }
  function makeError(id, msg, err, requireModules) {
    var e = new Error(msg + "\nhttp://requirejs.org/docs/errors.html#" + id);
    e.requireType = id;
    e.requireModules = requireModules;
    if (err) {
      e.originalError = err;
    }
    return e;
  }
  if (typeof define !== "undefined") {
    return;
  }
  if (typeof requirejs !== "undefined") {
    if (isFunction(requirejs)) {
      return;
    }
    cfg = requirejs;
    requirejs = void 0;
  }
  if (typeof require !== "undefined" && !isFunction(require)) {
    cfg = require;
    require = void 0;
  }
  function newContext(contextName) {
    var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = {
      //Defaults. Do not set a default for map
      //config to speed up normalize(), which
      //will run faster if there is no default.
      waitSeconds: 7,
      baseUrl: "./",
      paths: {},
      bundles: {},
      pkgs: {},
      shim: {},
      config: {}
    }, registry = {}, enabledRegistry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, bundlesMap = {}, requireCounter = 1, unnormalizedCounter = 1;
    function trimDots(ary) {
      var i, part;
      for (i = 0; i < ary.length; i++) {
        part = ary[i];
        if (part === ".") {
          ary.splice(i, 1);
          i -= 1;
        } else if (part === "..") {
          if (i === 0 || i === 1 && ary[2] === ".." || ary[i - 1] === "..") {
            continue;
          } else if (i > 0) {
            ary.splice(i - 1, 2);
            i -= 2;
          }
        }
      }
    }
    function normalize(name, baseName, applyMap) {
      var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, foundMap, foundI, foundStarMap, starI, normalizedBaseParts, baseParts = baseName && baseName.split("/"), map = config.map, starMap = map && map["*"];
      if (name) {
        name = name.split("/");
        lastIndex = name.length - 1;
        if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
          name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, "");
        }
        if (name[0].charAt(0) === "." && baseParts) {
          normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
          name = normalizedBaseParts.concat(name);
        }
        trimDots(name);
        name = name.join("/");
      }
      if (applyMap && map && (baseParts || starMap)) {
        nameParts = name.split("/");
        outerLoop:
          for (i = nameParts.length; i > 0; i -= 1) {
            nameSegment = nameParts.slice(0, i).join("/");
            if (baseParts) {
              for (j = baseParts.length; j > 0; j -= 1) {
                mapValue = getOwn(map, baseParts.slice(0, j).join("/"));
                if (mapValue) {
                  mapValue = getOwn(mapValue, nameSegment);
                  if (mapValue) {
                    foundMap = mapValue;
                    foundI = i;
                    break outerLoop;
                  }
                }
              }
            }
            if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) {
              foundStarMap = getOwn(starMap, nameSegment);
              starI = i;
            }
          }
        if (!foundMap && foundStarMap) {
          foundMap = foundStarMap;
          foundI = starI;
        }
        if (foundMap) {
          nameParts.splice(0, foundI, foundMap);
          name = nameParts.join("/");
        }
      }
      pkgMain = getOwn(config.pkgs, name);
      return pkgMain ? pkgMain : name;
    }
    function removeScript(name) {
      if (isBrowser) {
        each(scripts(), function(scriptNode) {
          if (scriptNode.getAttribute("data-requiremodule") === name && scriptNode.getAttribute("data-requirecontext") === context.contextName) {
            scriptNode.parentNode.removeChild(scriptNode);
            return true;
          }
        });
      }
    }
    function hasPathFallback(id) {
      var pathConfig = getOwn(config.paths, id);
      if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {
        pathConfig.shift();
        context.require.undef(id);
        context.makeRequire(null, {
          skipMap: true
        })([id]);
        return true;
      }
    }
    function splitPrefix(name) {
      var prefix, index = name ? name.indexOf("!") : -1;
      if (index > -1) {
        prefix = name.substring(0, index);
        name = name.substring(index + 1, name.length);
      }
      return [prefix, name];
    }
    function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
      var url, pluginModule, suffix, nameParts, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = "";
      if (!name) {
        isDefine = false;
        name = "_@r" + (requireCounter += 1);
      }
      nameParts = splitPrefix(name);
      prefix = nameParts[0];
      name = nameParts[1];
      if (prefix) {
        prefix = normalize(prefix, parentName, applyMap);
        pluginModule = getOwn(defined, prefix);
      }
      if (name) {
        if (prefix) {
          if (pluginModule && pluginModule.normalize) {
            normalizedName = pluginModule.normalize(name, function(name2) {
              return normalize(name2, parentName, applyMap);
            });
          } else {
            normalizedName = name.indexOf("!") === -1 ? normalize(name, parentName, applyMap) : name;
          }
        } else {
          normalizedName = normalize(name, parentName, applyMap);
          nameParts = splitPrefix(normalizedName);
          prefix = nameParts[0];
          normalizedName = nameParts[1];
          isNormalized = true;
          url = context.nameToUrl(normalizedName);
        }
      }
      suffix = prefix && !pluginModule && !isNormalized ? "_unnormalized" + (unnormalizedCounter += 1) : "";
      return {
        prefix,
        name: normalizedName,
        parentMap: parentModuleMap,
        unnormalized: !!suffix,
        url,
        originalName,
        isDefine,
        id: (prefix ? prefix + "!" + normalizedName : normalizedName) + suffix
      };
    }
    function getModule(depMap) {
      var id = depMap.id, mod = getOwn(registry, id);
      if (!mod) {
        mod = registry[id] = new context.Module(depMap);
      }
      return mod;
    }
    function on(depMap, name, fn) {
      var id = depMap.id, mod = getOwn(registry, id);
      if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) {
        if (name === "defined") {
          fn(defined[id]);
        }
      } else {
        mod = getModule(depMap);
        if (mod.error && name === "error") {
          fn(mod.error);
        } else {
          mod.on(name, fn);
        }
      }
    }
    function onError(err, errback) {
      var ids = err.requireModules, notified = false;
      if (errback) {
        errback(err);
      } else {
        each(ids, function(id) {
          var mod = getOwn(registry, id);
          if (mod) {
            mod.error = err;
            if (mod.events.error) {
              notified = true;
              mod.emit("error", err);
            }
          }
        });
        if (!notified) {
          req.onError(err);
        }
      }
    }
    function takeGlobalQueue() {
      if (globalDefQueue.length) {
        each(globalDefQueue, function(queueItem) {
          var id = queueItem[0];
          if (typeof id === "string") {
            context.defQueueMap[id] = true;
          }
          defQueue.push(queueItem);
        });
        globalDefQueue = [];
      }
    }
    handlers = {
      require: function(mod) {
        if (mod.require) {
          return mod.require;
        } else {
          return mod.require = context.makeRequire(mod.map);
        }
      },
      exports: function(mod) {
        mod.usingExports = true;
        if (mod.map.isDefine) {
          if (mod.exports) {
            return defined[mod.map.id] = mod.exports;
          } else {
            return mod.exports = defined[mod.map.id] = {};
          }
        }
      },
      module: function(mod) {
        if (mod.module) {
          return mod.module;
        } else {
          return mod.module = {
            id: mod.map.id,
            uri: mod.map.url,
            config: function() {
              return getOwn(config.config, mod.map.id) || {};
            },
            exports: mod.exports || (mod.exports = {})
          };
        }
      }
    };
    function cleanRegistry(id) {
      delete registry[id];
      delete enabledRegistry[id];
    }
    function breakCycle(mod, traced, processed) {
      var id = mod.map.id;
      if (mod.error) {
        mod.emit("error", mod.error);
      } else {
        traced[id] = true;
        each(mod.depMaps, function(depMap, i) {
          var depId = depMap.id, dep = getOwn(registry, depId);
          if (dep && !mod.depMatched[i] && !processed[depId]) {
            if (getOwn(traced, depId)) {
              mod.defineDep(i, defined[depId]);
              mod.check();
            } else {
              breakCycle(dep, traced, processed);
            }
          }
        });
        processed[id] = true;
      }
    }
    function checkLoaded() {
      var err, usingPathFallback, waitInterval = config.waitSeconds * 1e3, expired = waitInterval && context.startTime + waitInterval < (/* @__PURE__ */ new Date()).getTime(), noLoads = [], reqCalls = [], stillLoading = false, needCycleCheck = true;
      if (inCheckLoaded) {
        return;
      }
      inCheckLoaded = true;
      eachProp(enabledRegistry, function(mod) {
        var map = mod.map, modId = map.id;
        if (!mod.enabled) {
          return;
        }
        if (!map.isDefine) {
          reqCalls.push(mod);
        }
        if (!mod.error) {
          if (!mod.inited && expired) {
            if (hasPathFallback(modId)) {
              usingPathFallback = true;
              stillLoading = true;
            } else {
              noLoads.push(modId);
              removeScript(modId);
            }
          } else if (!mod.inited && mod.fetched && map.isDefine) {
            stillLoading = true;
            if (!map.prefix) {
              return needCycleCheck = false;
            }
          }
        }
      });
      if (expired && noLoads.length) {
        err = makeError(
          "timeout",
          "Load timeout for modules: " + noLoads,
          null,
          noLoads
        );
        err.contextName = context.contextName;
        return onError(err);
      }
      if (needCycleCheck) {
        each(reqCalls, function(mod) {
          breakCycle(mod, {}, {});
        });
      }
      if ((!expired || usingPathFallback) && stillLoading) {
        if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
          checkLoadedTimeoutId = setTimeout(function() {
            checkLoadedTimeoutId = 0;
            checkLoaded();
          }, 50);
        }
      }
      inCheckLoaded = false;
    }
    Module = function(map) {
      this.events = getOwn(undefEvents, map.id) || {};
      this.map = map;
      this.shim = getOwn(config.shim, map.id);
      this.depExports = [];
      this.depMaps = [];
      this.depMatched = [];
      this.pluginMaps = {};
      this.depCount = 0;
    };
    Module.prototype = {
      init: function(depMaps, factory, errback, options) {
        options = options || {};
        if (this.inited) {
          return;
        }
        this.factory = factory;
        if (errback) {
          this.on("error", errback);
        } else if (this.events.error) {
          errback = bind(this, function(err) {
            this.emit("error", err);
          });
        }
        this.depMaps = depMaps && depMaps.slice(0);
        this.errback = errback;
        this.inited = true;
        this.ignore = options.ignore;
        if (options.enabled || this.enabled) {
          this.enable();
        } else {
          this.check();
        }
      },
      defineDep: function(i, depExports) {
        if (!this.depMatched[i]) {
          this.depMatched[i] = true;
          this.depCount -= 1;
          this.depExports[i] = depExports;
        }
      },
      fetch: function() {
        if (this.fetched) {
          return;
        }
        this.fetched = true;
        context.startTime = (/* @__PURE__ */ new Date()).getTime();
        var map = this.map;
        if (this.shim) {
          context.makeRequire(this.map, {
            enableBuildCallback: true
          })(
            this.shim.deps || [],
            bind(this, function() {
              return map.prefix ? this.callPlugin() : this.load();
            })
          );
        } else {
          return map.prefix ? this.callPlugin() : this.load();
        }
      },
      load: function() {
        var url = this.map.url;
        if (!urlFetched[url]) {
          urlFetched[url] = true;
          context.load(this.map.id, url);
        }
      },
      /**
       * Checks if the module is ready to define itself, and if so,
       * define it.
       * @private
       */
      check: function() {
        if (!this.enabled || this.enabling) {
          return;
        }
        var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory;
        if (!this.inited) {
          if (!hasProp(context.defQueueMap, id)) {
            this.fetch();
          }
        } else if (this.error) {
          this.emit("error", this.error);
        } else if (!this.defining) {
          this.defining = true;
          if (this.depCount < 1 && !this.defined) {
            if (isFunction(factory)) {
              if (this.events.error && this.map.isDefine || req.onError !== defaultOnError) {
                try {
                  exports = context.execCb(id, factory, depExports, exports);
                } catch (e) {
                  err = e;
                }
              } else {
                exports = context.execCb(id, factory, depExports, exports);
              }
              if (this.map.isDefine && exports === void 0) {
                cjsModule = this.module;
                if (cjsModule) {
                  exports = cjsModule.exports;
                } else if (this.usingExports) {
                  exports = this.exports;
                }
              }
              if (err) {
                err.requireMap = this.map;
                err.requireModules = this.map.isDefine ? [this.map.id] : null;
                err.requireType = this.map.isDefine ? "define" : "require";
                return onError(this.error = err);
              }
            } else {
              exports = factory;
            }
            this.exports = exports;
            if (this.map.isDefine && !this.ignore) {
              defined[id] = exports;
              if (req.onResourceLoad) {
                req.onResourceLoad(context, this.map, this.depMaps);
              }
            }
            cleanRegistry(id);
            this.defined = true;
          }
          this.defining = false;
          if (this.defined && !this.defineEmitted) {
            this.defineEmitted = true;
            this.emit("defined", this.exports);
            this.defineEmitComplete = true;
          }
        }
      },
      callPlugin: function() {
        var map = this.map, id = map.id, pluginMap = makeModuleMap(map.prefix);
        this.depMaps.push(pluginMap);
        on(
          pluginMap,
          "defined",
          bind(this, function(plugin) {
            var load, normalizedMap, normalizedMod, bundleId = getOwn(bundlesMap, this.map.id), name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null, localRequire = context.makeRequire(map.parentMap, {
              enableBuildCallback: true
            });
            if (this.map.unnormalized) {
              if (plugin.normalize) {
                name = plugin.normalize(name, function(name2) {
                  return normalize(name2, parentName, true);
                }) || "";
              }
              normalizedMap = makeModuleMap(
                map.prefix + "!" + name,
                this.map.parentMap
              );
              on(
                normalizedMap,
                "defined",
                bind(this, function(value) {
                  this.init(
                    [],
                    function() {
                      return value;
                    },
                    null,
                    {
                      enabled: true,
                      ignore: true
                    }
                  );
                })
              );
              normalizedMod = getOwn(registry, normalizedMap.id);
              if (normalizedMod) {
                this.depMaps.push(normalizedMap);
                if (this.events.error) {
                  normalizedMod.on(
                    "error",
                    bind(this, function(err) {
                      this.emit("error", err);
                    })
                  );
                }
                normalizedMod.enable();
              }
              return;
            }
            if (bundleId) {
              this.map.url = context.nameToUrl(bundleId);
              this.load();
              return;
            }
            load = bind(this, function(value) {
              this.init(
                [],
                function() {
                  return value;
                },
                null,
                {
                  enabled: true
                }
              );
            });
            load.error = bind(this, function(err) {
              this.inited = true;
              this.error = err;
              err.requireModules = [id];
              eachProp(registry, function(mod) {
                if (mod.map.id.indexOf(id + "_unnormalized") === 0) {
                  cleanRegistry(mod.map.id);
                }
              });
              onError(err);
            });
            load.fromText = bind(this, function(text2, textAlt) {
              var moduleName = map.name, moduleMap = makeModuleMap(moduleName), hasInteractive = useInteractive;
              if (textAlt) {
                text2 = textAlt;
              }
              if (hasInteractive) {
                useInteractive = false;
              }
              getModule(moduleMap);
              if (hasProp(config.config, id)) {
                config.config[moduleName] = config.config[id];
              }
              try {
                req.exec(text2);
              } catch (e) {
                return onError(
                  makeError(
                    "fromtexteval",
                    "fromText eval for " + id + " failed: " + e,
                    e,
                    [id]
                  )
                );
              }
              if (hasInteractive) {
                useInteractive = true;
              }
              this.depMaps.push(moduleMap);
              context.completeLoad(moduleName);
              localRequire([moduleName], load);
            });
            plugin.load(map.name, localRequire, load, config);
          })
        );
        context.enable(pluginMap, this);
        this.pluginMaps[pluginMap.id] = pluginMap;
      },
      enable: function() {
        enabledRegistry[this.map.id] = this;
        this.enabled = true;
        this.enabling = true;
        each(
          this.depMaps,
          bind(this, function(depMap, i) {
            var id, mod, handler;
            if (typeof depMap === "string") {
              depMap = makeModuleMap(
                depMap,
                this.map.isDefine ? this.map : this.map.parentMap,
                false,
                !this.skipMap
              );
              this.depMaps[i] = depMap;
              handler = getOwn(handlers, depMap.id);
              if (handler) {
                this.depExports[i] = handler(this);
                return;
              }
              this.depCount += 1;
              on(
                depMap,
                "defined",
                bind(this, function(depExports) {
                  if (this.undefed) {
                    return;
                  }
                  this.defineDep(i, depExports);
                  this.check();
                })
              );
              if (this.errback) {
                on(depMap, "error", bind(this, this.errback));
              } else if (this.events.error) {
                on(
                  depMap,
                  "error",
                  bind(this, function(err) {
                    this.emit("error", err);
                  })
                );
              }
            }
            id = depMap.id;
            mod = registry[id];
            if (!hasProp(handlers, id) && mod && !mod.enabled) {
              context.enable(depMap, this);
            }
          })
        );
        eachProp(
          this.pluginMaps,
          bind(this, function(pluginMap) {
            var mod = getOwn(registry, pluginMap.id);
            if (mod && !mod.enabled) {
              context.enable(pluginMap, this);
            }
          })
        );
        this.enabling = false;
        this.check();
      },
      on: function(name, cb) {
        var cbs = this.events[name];
        if (!cbs) {
          cbs = this.events[name] = [];
        }
        cbs.push(cb);
      },
      emit: function(name, evt) {
        each(this.events[name], function(cb) {
          cb(evt);
        });
        if (name === "error") {
          delete this.events[name];
        }
      }
    };
    function callGetModule(args) {
      if (!hasProp(defined, args[0])) {
        getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);
      }
    }
    function removeListener(node, func, name, ieName) {
      if (node.detachEvent && !isOpera) {
        if (ieName) {
          node.detachEvent(ieName, func);
        }
      } else {
        node.removeEventListener(name, func, false);
      }
    }
    function getScriptData(evt) {
      var node = evt.currentTarget || evt.srcElement;
      removeListener(node, context.onScriptLoad, "load", "onreadystatechange");
      removeListener(node, context.onScriptError, "error");
      return {
        node,
        id: node && node.getAttribute("data-requiremodule")
      };
    }
    function intakeDefines() {
      var args;
      takeGlobalQueue();
      while (defQueue.length) {
        args = defQueue.shift();
        if (args[0] === null) {
          return onError(
            makeError(
              "mismatch",
              "Mismatched anonymous define() module: " + args[args.length - 1]
            )
          );
        } else {
          callGetModule(args);
        }
      }
      context.defQueueMap = {};
    }
    context = {
      config,
      contextName,
      registry,
      defined,
      urlFetched,
      defQueue,
      defQueueMap: {},
      Module,
      makeModuleMap,
      nextTick: req.nextTick,
      onError,
      /**
       * @private
       * Set a configuration for the context.
       * @param {object} cfg config object to integrate.
       */
      configure: function(cfg2) {
        if (cfg2.baseUrl) {
          if (cfg2.baseUrl.charAt(cfg2.baseUrl.length - 1) !== "/") {
            cfg2.baseUrl += "/";
          }
        }
        var shim = config.shim, objs = {
          paths: true,
          bundles: true,
          config: true,
          map: true
        };
        eachProp(cfg2, function(value, prop) {
          if (objs[prop]) {
            if (!config[prop]) {
              config[prop] = {};
            }
            mixin(config[prop], value, true, true);
          } else {
            config[prop] = value;
          }
        });
        if (cfg2.bundles) {
          eachProp(cfg2.bundles, function(value, prop) {
            each(value, function(v) {
              if (v !== prop) {
                bundlesMap[v] = prop;
              }
            });
          });
        }
        if (cfg2.shim) {
          eachProp(cfg2.shim, function(value, id) {
            if (isArray(value)) {
              value = {
                deps: value
              };
            }
            if ((value.exports || value.init) && !value.exportsFn) {
              value.exportsFn = context.makeShimExports(value);
            }
            shim[id] = value;
          });
          config.shim = shim;
        }
        if (cfg2.packages) {
          each(cfg2.packages, function(pkgObj) {
            var location, name;
            pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj;
            name = pkgObj.name;
            location = pkgObj.location;
            if (location) {
              config.paths[name] = pkgObj.location;
            }
            config.pkgs[name] = pkgObj.name + "/" + (pkgObj.main || "main").replace(currDirRegExp, "").replace(jsSuffixRegExp, "");
          });
        }
        eachProp(registry, function(mod, id) {
          if (!mod.inited && !mod.map.unnormalized) {
            mod.map = makeModuleMap(id, null, true);
          }
        });
        if (cfg2.deps || cfg2.callback) {
          context.require(cfg2.deps || [], cfg2.callback);
        }
      },
      makeShimExports: function(value) {
        function fn() {
          var ret;
          if (value.init) {
            ret = value.init.apply(global, arguments);
          }
          return ret || value.exports && getGlobal(value.exports);
        }
        return fn;
      },
      makeRequire: function(relMap, options) {
        options = options || {};
        function localRequire(deps, callback, errback) {
          var id, map, requireMod;
          if (options.enableBuildCallback && callback && isFunction(callback)) {
            callback.__requireJsBuild = true;
          }
          if (typeof deps === "string") {
            if (isFunction(callback)) {
              return onError(
                makeError("requireargs", "Invalid require call"),
                errback
              );
            }
            if (relMap && hasProp(handlers, deps)) {
              return handlers[deps](registry[relMap.id]);
            }
            if (req.get) {
              return req.get(context, deps, relMap, localRequire);
            }
            map = makeModuleMap(deps, relMap, false, true);
            id = map.id;
            if (!hasProp(defined, id)) {
              return onError(
                makeError(
                  "notloaded",
                  'Module name "' + id + '" has not been loaded yet for context: ' + contextName + (relMap ? "" : ". Use require([])")
                )
              );
            }
            return defined[id];
          }
          intakeDefines();
          context.nextTick(function() {
            intakeDefines();
            requireMod = getModule(makeModuleMap(null, relMap));
            requireMod.skipMap = options.skipMap;
            requireMod.init(deps, callback, errback, {
              enabled: true
            });
            checkLoaded();
          });
          return localRequire;
        }
        mixin(localRequire, {
          isBrowser,
          /**
           * Converts a module name + .extension into an URL path.
           * *Requires* the use of a module name. It does not support using
           * plain URLs like nameToUrl.
           */
          toUrl: function(moduleNamePlusExt) {
            var ext, index = moduleNamePlusExt.lastIndexOf("."), segment = moduleNamePlusExt.split("/")[0], isRelative = segment === "." || segment === "..";
            if (index !== -1 && (!isRelative || index > 1)) {
              ext = moduleNamePlusExt.substring(
                index,
                moduleNamePlusExt.length
              );
              moduleNamePlusExt = moduleNamePlusExt.substring(0, index);
            }
            return context.nameToUrl(
              normalize(moduleNamePlusExt, relMap && relMap.id, true),
              ext,
              true
            );
          },
          defined: function(id) {
            return hasProp(defined, makeModuleMap(id, relMap, false, true).id);
          },
          specified: function(id) {
            id = makeModuleMap(id, relMap, false, true).id;
            return hasProp(defined, id) || hasProp(registry, id);
          }
        });
        if (!relMap) {
          localRequire.undef = function(id) {
            takeGlobalQueue();
            var map = makeModuleMap(id, relMap, true), mod = getOwn(registry, id);
            mod.undefed = true;
            removeScript(id);
            delete defined[id];
            delete urlFetched[map.url];
            delete undefEvents[id];
            eachReverse(defQueue, function(args, i) {
              if (args[0] === id) {
                defQueue.splice(i, 1);
              }
            });
            delete context.defQueueMap[id];
            if (mod) {
              if (mod.events.defined) {
                undefEvents[id] = mod.events;
              }
              cleanRegistry(id);
            }
          };
        }
        return localRequire;
      },
      /**
       * @private
       * Called to enable a module if it is still in the registry
       * awaiting enablement. A second arg, parent, the parent module,
       * is passed in for context, when this method is overridden by
       * the optimizer. Not shown here to keep code compact.
       */
      enable: function(depMap) {
        var mod = getOwn(registry, depMap.id);
        if (mod) {
          getModule(depMap).enable();
        }
      },
      /**
       * Internal method used by environment adapters to complete a load event.
       * A load event could be a script load or just a load pass from a synchronous
       * load call.
       * @param {string} moduleName the name of the module to potentially complete.
       * @private
       */
      completeLoad: function(moduleName) {
        var found, args, mod, shim = getOwn(config.shim, moduleName) || {}, shExports = shim.exports;
        takeGlobalQueue();
        while (defQueue.length) {
          args = defQueue.shift();
          if (args[0] === null) {
            args[0] = moduleName;
            if (found) {
              break;
            }
            found = true;
          } else if (args[0] === moduleName) {
            found = true;
          }
          callGetModule(args);
        }
        context.defQueueMap = {};
        mod = getOwn(registry, moduleName);
        if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) {
          if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {
            if (hasPathFallback(moduleName)) {
              return;
            } else {
              return onError(
                makeError(
                  "nodefine",
                  "No define call for " + moduleName,
                  null,
                  [moduleName]
                )
              );
            }
          } else {
            callGetModule([moduleName, shim.deps || [], shim.exportsFn]);
          }
        }
        checkLoaded();
      },
      /**
       * @private
       * Converts a module name to a file path. Supports cases where
       * moduleName may actually be just an URL.
       * Note that it **does not** call normalize on the moduleName,
       * it is assumed to have already been normalized. This is an
       * internal API, not a public one. Use toUrl for the public API.
       */
      nameToUrl: function(moduleName, ext, skipExt) {
        var paths, syms, i, parentModule, url, parentPath, bundleId, pkgMain = getOwn(config.pkgs, moduleName);
        if (pkgMain) {
          moduleName = pkgMain;
        }
        bundleId = getOwn(bundlesMap, moduleName);
        if (bundleId) {
          return context.nameToUrl(bundleId, ext, skipExt);
        }
        if (req.jsExtRegExp.test(moduleName)) {
          url = moduleName + (ext || "");
        } else {
          paths = config.paths;
          syms = moduleName.split("/");
          for (i = syms.length; i > 0; i -= 1) {
            parentModule = syms.slice(0, i).join("/");
            parentPath = getOwn(paths, parentModule);
            if (parentPath) {
              if (isArray(parentPath)) {
                parentPath = parentPath[0];
              }
              syms.splice(0, i, parentPath);
              break;
            }
          }
          url = syms.join("/");
          url += ext || (/^data\:|\?/.test(url) || skipExt ? "" : ".js");
          url = (url.charAt(0) === "/" || url.match(/^[\w\+\.\-]+:/) ? "" : config.baseUrl) + url;
        }
        return config.urlArgs ? url + ((url.indexOf("?") === -1 ? "?" : "&") + config.urlArgs) : url;
      },
      //Delegates to req.load. Broken out as a separate function to
      //allow overriding in the optimizer.
      load: function(id, url) {
        req.load(context, id, url);
      },
      /**
       * Executes a module callback function. Broken out as a separate function
       * solely to allow the build system to sequence the files in the built
       * layer in the right sequence.
       *
       * @private
       */
      execCb: function(name, callback, args, exports) {
        return callback.apply(exports, args);
      },
      /**
       * callback for script loads, used to check status of loading.
       * @private
       * @param {Event} evt the event from the browser for the script
       * that was loaded.
       */
      onScriptLoad: function(evt) {
        if (evt.type === "load" || readyRegExp.test((evt.currentTarget || evt.srcElement).readyState)) {
          interactiveScript = null;
          var data = getScriptData(evt);
          context.completeLoad(data.id);
        }
      },
      /**
       * @private
       * Callback for script errors.
       */
      onScriptError: function(evt) {
        var data = getScriptData(evt);
        if (!hasPathFallback(data.id)) {
          return onError(
            makeError("scripterror", "Script error for: " + data.id, evt, [
              data.id
            ])
          );
        }
      }
    };
    context.require = context.makeRequire();
    return context;
  }
  req = requirejs = function(deps, callback, errback, optional) {
    var context, config, contextName = defContextName;
    if (!isArray(deps) && typeof deps !== "string") {
      config = deps;
      if (isArray(callback)) {
        deps = callback;
        callback = errback;
        errback = optional;
      } else {
        deps = [];
      }
    }
    if (config && config.context) {
      contextName = config.context;
    }
    context = getOwn(contexts, contextName);
    if (!context) {
      context = contexts[contextName] = req.s.newContext(contextName);
    }
    if (config) {
      context.configure(config);
    }
    return context.require(deps, callback, errback);
  };
  req.config = function(config) {
    return req(config);
  };
  req.nextTick = typeof setTimeout !== "undefined" ? function(fn) {
    setTimeout(fn, 4);
  } : function(fn) {
    fn();
  };
  if (!require) {
    require = req;
  }
  req.version = version;
  req.jsExtRegExp = /^\/|:|\?|\.js$/;
  req.isBrowser = isBrowser;
  s = req.s = {
    contexts,
    newContext
  };
  req({});
  each(["toUrl", "undef", "defined", "specified"], function(prop) {
    req[prop] = function() {
      var ctx = contexts[defContextName];
      return ctx.require[prop].apply(ctx, arguments);
    };
  });
  if (isBrowser) {
    head = s.head = document.getElementsByTagName("head")[0];
    baseElement = document.getElementsByTagName("base")[0];
    if (baseElement) {
      head = s.head = baseElement.parentNode;
    }
  }
  req.onError = defaultOnError;
  req.createNode = function(config, moduleName, url) {
    var node = config.xhtml ? document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : document.createElement("script");
    node.type = config.scriptType || "text/javascript";
    node.charset = "utf-8";
    node.async = true;
    return node;
  };
  req.load = function(context, moduleName, url) {
    var config = context && context.config || {}, node;
    if (isBrowser) {
      node = req.createNode(config, moduleName, url);
      if (config.onNodeCreated) {
        config.onNodeCreated(node, config, moduleName, url);
      }
      node.setAttribute("data-requirecontext", context.contextName);
      node.setAttribute("data-requiremodule", moduleName);
      if (node.attachEvent && //Check if node.attachEvent is artificially added by custom script or
      //natively supported by browser
      //read https://github.com/jrburke/requirejs/issues/187
      //if we can NOT find [native code] then it must NOT natively supported.
      //in IE8, node.attachEvent does not have toString()
      //Note the test for "[native code" with no closing brace, see:
      //https://github.com/jrburke/requirejs/issues/273
      !(node.attachEvent.toString && node.attachEvent.toString().indexOf("[native code") < 0) && !isOpera) {
        useInteractive = true;
        node.attachEvent("onreadystatechange", context.onScriptLoad);
      } else {
        node.addEventListener("load", context.onScriptLoad, false);
        node.addEventListener("error", context.onScriptError, false);
      }
      node.src = url;
      currentlyAddingScript = node;
      if (baseElement) {
        head.insertBefore(node, baseElement);
      } else {
        head.appendChild(node);
      }
      currentlyAddingScript = null;
      return node;
    } else if (isWebWorker) {
      try {
        importScripts(url);
        context.completeLoad(moduleName);
      } catch (e) {
        context.onError(
          makeError(
            "importscripts",
            "importScripts failed for " + moduleName + " at " + url,
            e,
            [moduleName]
          )
        );
      }
    }
  };
  function getInteractiveScript() {
    if (interactiveScript && interactiveScript.readyState === "interactive") {
      return interactiveScript;
    }
    eachReverse(scripts(), function(script) {
      if (script.readyState === "interactive") {
        return interactiveScript = script;
      }
    });
    return interactiveScript;
  }
  if (isBrowser && !cfg.skipDataMain) {
    eachReverse(scripts(), function(script) {
      if (!head) {
        head = script.parentNode;
      }
      dataMain = script.getAttribute("data-main");
      if (dataMain) {
        mainScript = dataMain;
        if (!cfg.baseUrl) {
          src = mainScript.split("/");
          mainScript = src.pop();
          subPath = src.length ? src.join("/") + "/" : "./";
          cfg.baseUrl = subPath;
        }
        mainScript = mainScript.replace(jsSuffixRegExp, "");
        if (req.jsExtRegExp.test(mainScript)) {
          mainScript = dataMain;
        }
        cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript];
        return true;
      }
    });
  }
  define = function(name, deps, callback) {
    var node, context;
    if (typeof name !== "string") {
      callback = deps;
      deps = name;
      name = null;
    }
    if (!isArray(deps)) {
      callback = deps;
      deps = null;
    }
    if (!deps && isFunction(callback)) {
      deps = [];
      if (callback.length) {
        callback.toString().replace(commentRegExp, "").replace(cjsRequireRegExp, function(match, dep) {
          deps.push(dep);
        });
        deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps);
      }
    }
    if (useInteractive) {
      node = currentlyAddingScript || getInteractiveScript();
      if (node) {
        if (!name) {
          name = node.getAttribute("data-requiremodule");
        }
        context = contexts[node.getAttribute("data-requirecontext")];
      }
    }
    if (context) {
      context.defQueue.push([name, deps, callback]);
      context.defQueueMap[name] = true;
    } else {
      globalDefQueue.push([name, deps, callback]);
    }
  };
  define.amd = {
    jQuery: true
  };
  req.exec = function(text) {
    return eval(text);
  };
  req(cfg);
})(this);
