public void mungeSymboltree(boolean analyzed) {

    if (!munge) {
      return;
    }

    // One problem with obfuscation resides in the use of undeclared
    // and un-namespaced global symbols that are 3 characters or less
    // in length. Here is an example:
    //
    // var declaredGlobalVar;
    //
    // function declaredGlobalFn() {
    // var localvar;
    // localvar = abc; // abc is an undeclared global symbol
    // }
    //
    // In the example above, there is a slim chance that localvar may be
    // munged to 'abc', conflicting with the undeclared global symbol
    // abc, creating a potential bug. The following code detects such
    // global symbols. This must be done AFTER the entire file has been
    // parsed, and BEFORE munging the symbol tree. Note that declaring
    // extra symbols in the global scope won't hurt.
    //
    // Note: Since we go through all the tokens to do this, we also use
    // the opportunity to count how many times each identifier is used.

    offset = 0;
    braceNesting = 0;
    scopes.clear();
    mode = CHECKING_SYMBOL_TREE;
    parseScope(globalScope);

    if (analyzed) { // 进行了分析,说明用户想主动输入混淆变量,优先使用用户输入的混淆变量
      manMung();
    }
    globalScope.munge();
  }