2023-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  doc/source/conf.py, testsuite/modules.51-scan/020-avail_output-variant.exp,
  version.inc.in: Release of version 5.3.0

  * MIGRATING.rst: doc: desc +/- value prefix for opts/configs in MIGRATING

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modulefiles.3/bar/2.0,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp: No sticky mod unload if
  switched-on mod does not exist  Fix switch sub-command not to unload sticky
  or super-sticky module when switched-on module does not exist.  Fixes #492

2023-05-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: fix SC20{04,28,86} warnings in configure

  * doc/source/module.rst: doc: desc +/- value prefix for opts/configs in man

2023-05-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst: doc: desc +/- value prefix for
  opts/configs in NEWS/CHANGES

2023-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: test -o/--output value
  append/subtract in 70/36{0,1}

2023-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/init.tcl.in, tcl/main.tcl.in: Allow append/subtract value with
  --output option  Allow to append or subtract value on avail_*output and
  list_*output configuration options through --output command line switch. If
  value associated to --output/-o switch starts with '+' or '-', this new
  value is respectively appended or subtracted from existing configuration
  value.

  * tcl/main.tcl.in: Fix duplicate space character in option parsing code

2023-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/220-config.exp: ts: test append/subtract config
  option value in 70/220

  * tcl/main.tcl.in, testsuite/modules.70-maint/220-config.exp: Allow to pass
  value starting with '-' on config subcmd  Allow to pass configuration option
  value starting with minus sign (-) on config sub-command. Was previously
  mistaken with command-line switches. This change allows to subtract a value
  to a configuration option already set.

  * tcl/subcmd.tcl.in: Config option value append or subtract for list option
  Allow to update colon-separated list configuration option with config
  sub-command. If new value starts with '+' or '-', this new value is
  respectively appended or subtracted from existing configuration value.

  * doc/source/design/add-new-config-option.rst, tcl/init.tcl.in,
  tcl/main.tcl.in, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Add
  value kind attribute in config option definition array  Update configuration
  option definition array (g_config_defs) to add value kind attribute as 4th
  entry in definition list. This attribute has following possible values: 'i'
  for integer, 's' for string, 'b' for boolean, 'l' for colon-separated list,
  'o' for other.

2023-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/report.tcl.in: Mention 'variant' as --output example value in usage
  msg

  * doc/source/changes.rst: doc: desc. avail/paths/whatis/list search query
  changes

  * .aspell.en.pws, MIGRATING.rst, NEWS.rst: doc: desc. variantifspec in
  NEWS/MIGRATING

2023-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/370-variant.exp: ts: adapt and add variantifspec
  tests in 70/370

  * testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/360-avail_output.exp: ts: adapt tests for
  variantifspec val in avail_*output cfgs in 70/{220,360}

  * INSTALL.rst, configure, doc/source/changes.rst, doc/source/module.rst:
  install/doc: desc. variantifspec addition to avail_{,terse_}output
  variantifspec new value is also added to the default list of value for these
  configuration options.

  * doc/source/design/output-configuration.rst,
  doc/source/design/variants.rst: doc: desc. variantifspec report on avail in
  design notes

  * .aspell.en.pws, tcl/init.tcl.in, tcl/report.tcl.in: Add variantifspec
  value to avail_{,terse_}output config  Report defined variants on avail
  regular or terse output if some variant is specified in search query.

2023-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/070-homerc.exp: ts: add
  ignore_user_rc/--ignore-user-rc tests in 20/070

  * doc/source/module.rst: doc: desc ignore_user_rc/--ignore-user-rc in man

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test ignore_user_rc config
  option

  * INSTALL.rst, NEWS.rst: doc: desc ignore_user_rc/--ignore-user-rc in
  NEWS/INSTALL

  * doc/source/changes.rst: doc: desc --ignore-user-rc/ignore_user_rc in
  changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add ignore_user_rc/--ignore-user-rc to comp script

  * tcl/modfind.tcl.in: Ignore user rc when ignore_user_rc enabled  Do not
  evaluate user-specific module rc file when ignore_user_rc configuration is
  enabled.  Fixes #479

  * tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in: Add ignore_user_rc
  configuration option  Add ignore_user_rc configuration option that controls
  whether or not the $HOME/.modulerc file should be ignored. Disabled by
  default. When configuration is modified it sets the MODULES_IGNORE_USER_RC
  environment variable.  --ignore-user-rc command line switch can be used to
  enable ignore_user_rc for current execution.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  tcl/mfinterp.tcl.in, testsuite/modulefiles.3/refresh/1.0,
  testsuite/modulefiles.3/refresh/2.0,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/311-puts-prestdout.exp,
  testsuite/modules.70-maint/230-verbosity.exp: Refresh modules that put
  content to stdout/prestdout  Mark modulefile qualified for refresh
  evaluation when puts command is used to send content to stdout or prestdout
  channels.  Such loaded modules where wrongly skipped during refresh unless
  if they declared another volatile environment change.  Choice is made to
  also refresh modules that put content to stdout/prestdout to keep the
  behavior of Modules 3.2  Fixes #488

2023-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst: doc: desc. extra specifier in man

2023-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. extra specifier work in MIGRATING

  * NEWS.rst: doc: desc. extra specifier work in NEWS

2023-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/042-extra_spec-conflict.exp,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add module switch extra
  spec tests in 51/04{2,3}

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/042-extra_spec-conflict.exp: ts: add conflict
  extra spec tests in 51/042

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/042-extra_spec-conflict.exp: ts: add module unload
  extra spec tests in 51/042

2023-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add module
  load-any extra spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add module
  try-load extra spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add module erroneous
  extra spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add module load extra
  spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add always-load
  extra spec tests in 51/043

2023-04-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc. mod
  spec filtering in EMS spec

2023-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add
  prereq-all/depends-on extra spec tests in 51/043

2023-04-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/.modulerc,
  testsuite/modulefiles.4/extra/.modulerc, testsuite/modulefiles.4/extra/1.0,
  testsuite/modulefiles.4/xtbar/1.0, testsuite/modulefiles.4/xtbar/2.0,
  testsuite/modulefiles.4/xtfoo/1.0,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add prereq/prereq-any
  extra specifier tests in 51/043

2023-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl, tcl/modspec.tcl: Parse mod spec in extra specifier value
  with getavails on  For some extra specifier, a module specification is
  expected as value. For them parse this module specification with resolution
  of all matching available modules.  During extra match search process, test
  match of specification against all matching available modules recorded when
  parsing spec.  modEq procedures have been updated to fetch available module
  names recorded in module version spec structure as alternative names for
  spec when ismodlo argument is set to 5.  modVariantCmp procedure has been
  updated to let a missing variant definition of mod be considered as a match.
  As compared pattern and mod are switched on extra specifier context (pattern
  is definition found in modulefile and mod is also a pattern used for extra
  specifier definition on command line).  Note that this methodology is not
  yet perfect as aliases, symbolic versions and modules that do not exist are
  not part of the list of available modules returned.

2023-04-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in,
  tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl,
  tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Record avail mods
  matching mod spec when parsing it  Update module specification parsing
  mechanism to add a getavails argument. It indicates that available modules
  matching spec should be searched in enabled modulepaths to record them in
  module version specification structure.  When searching for available
  matching modules, disable extra match search to avoid an infinite resolution
  loop.

2023-04-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl: Parse extra specifier prior variant  Give more priority
  to extra specifier (name:value) than variant specification (name=value) as
  extra specifier accepting a module specification as value may contain a
  variant specification. For instance: "prereq:mod@1.0 foo=value".

  * tcl/modspec.tcl: Skip arg split when parsing modspec if extra spec
  detected  Update module specification parsing to skip argument split when an
  extra specifier is detected. Value for extra specifier may be a module
  specification, thus argument split on version specifier or variant shortcut
  should be skipped to keep extra specifier value as one string.

2023-04-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: adapt existing tests
  to extra specifier changes

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modfind.tcl.in,
  tcl/modspec.tcl, tcl/report.tcl.in, tcl/util.tcl: Refer to string index with
  M+N notation  As M+N notation is now a valid syntax to refer to a string
  index (starting Tcl 8.5), change code to use this syntax rather using expr
  to compute an index value.

2023-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record conflict
  during scan eval  conflict command is an extra specifier. incompat is an
  alias of it.

  * tcl/modscan.tcl, tcl/modspec.tcl: Record module switch during scan eval
  switch sub-command name is an extra specifier. Switched-on module
  specification also matches switch-on and require extra specifier aliases.
  With two-arg form module switch, switched-off module specification also
  matches switch-off and incompat extra specifier aliases.

2023-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl, tcl/modspec.tcl: Record module unload during scan eval
  unload sub-command name is an extra specifier. incompat is an alias of it.

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record module
  load/load-any/try-load during scan eval  load, try-load and load-any
  sub-command names are an extra specifier. require is an alias of them.

2023-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record always-load
  definitions during scan eval  require is an alias of always-load extra
  specifier.

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record
  prereq-all/depends-on definitions during scan eval  require, prereq-all and
  depends-on are aliases of prereq-all and depends-on extra specifiers.

2023-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl: Match module designation for some extra specifiers
  Update extra specifier query test for those whose value is a module
  specification. Currently prereq, require and prereq-any extra specifiers
  accept a module specification as value.  This module specification is
  matched against the specification passe to the corresponding modulefile Tcl
  command. Match is done with modEq procedure.  LIMITATION: not all module
  specification currently works as modEq is made to compare a module
  specification against a qualified module name and version. Using module
  generic name or advanced version specifiers on extra specifier value will
  not currently work.

2023-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record
  prereq/prereq-any definitions during scan eval  require and prereq-any are
  aliases of prereq and prereq-any extra specifiers.

2023-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/040-extra_spec.exp: ts: test extra spec on
  non-search cmds in 51/040

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/subcmd.tcl.in,
  testsuite/example/siteconfig.tcl-1: Raise error when extra spec on
  non-search cmds  Extra specification in module search query is only allowed
  on search sub-commands (avail, paths, whatis). An error is raised when
  parsing a module specification if it contains an extra specification on a
  non-search context.  xtspec argument is added to parseModuleSpecification
  procedure to know if extra specification is allowed or not.

2023-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc. extra
  specifier in EMS design

2023-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/040-extra_spec.exp,
  testsuite/modules.51-scan/041-extra_spec-env.exp: Raise error when unknown
  extra specifier used

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/042-extra_spec-conflict.exp: ts: add family extra
  specifier tests in 51/042

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record family definitions during
  scan eval

2023-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add setenv duplicate
  definition test in 51/041

  * tcl/modscan.tcl: Rework extra specifier filtering  Update extra match
  search process to filter results with extra specifiers only one after all
  modulefile scan evaluations.  As g_scanModuleElt global structure
  consolidates all modules matching a given extra specifier criteria (element
  > name = list of matching modules), with one test per extra specifier
  criteria result can be obtain. Instead of testing each module against the
  criteria independently.  doesModExtraMatch procedure is removed and replaced
  by getModMatchingExtraSpec to achieve this single global criteria match
  test.

  * tcl/util.tcl: Add getIntersectBetweenList helper procedure  Compute
  intersection of multiple lists with getIntersectBetweenList procedure.

2023-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.51-scan/040-extra_spec.exp: ts: test unknown extra
  specifier and special char in 50/040

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add extra specifier
  tests with source-sh in 51/041

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add erroneous env
  extra specifier tests in 51/041

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add other env extra
  specifier tests in 51/041

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record chdir definitions during scan
  eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unset-function definitions
  during scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record set-function definitions
  during scan eval

2023-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unset-alias definitions
  during scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record set-alias definitions during
  scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record uncomplete definitions during
  scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record complete definitions during
  scan eval

2023-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0, testsuite/modulefiles.4/extra/2.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add envvar extra
  specifier tests in 51/041

  * testsuite/modulefiles.4/extra/1.0, testsuite/modulefiles.4/extra/2.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/040-extra_spec.exp: ts: initial tests for extra
  specifiers in 51/040

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unsetenv definitions during
  scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record pushenv definitions during
  scan eval

2023-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record *-path definitions during
  scan eval

2023-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record setenv definition during scan
  eval

  * tcl/modscan.tcl: Record variant name in scanned mod element  When
  evaluating a variant command in scan mode, record that this module defines a
  variant with its name. This information is saved in g_scanModuleElt global
  structure (Tcl dict).  This structure is then used to test if extra
  specifiers of search query match definition of available modules.  Fixes
  #408

  * tcl/modscan.tcl: Filter avail module based on extra specifier  Update
  extra match search process to allow specification of extra specifiers in
  addition to module name, version and variants. Filter results through extra
  match search to only return modules matching extra specifiers (where
  specified element and name is defined by module).

  * tcl/modscan.tcl: EMS required if mod spec contains extra specifier  During
  avail, paths or whatis sub-commands

  * tcl/modspec.tcl: Parse extra specifiers in module specification  When
  parsing module specification, take into account extra specifiers (elt:name)
  and record them in g_moduleVersSpec structure. Add getExtraListFromVersSpec
  utility procedure to get the extra specifiers of the specification.

2023-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, doc/source/_static/terminal_output.css, doc/source/conf.py:
  doc: desc. Querying available module variants in MIGRATING

2023-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: install new tcl-devel package on
  MSYS2

2023-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in,
  testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: Fix EMS filter against
  alias overriding dir  Directory information override alias in result
  structure if extra match search is required.

2023-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl, testsuite/modules.51-scan/030-scan_eval-avail.exp: Fix
  EMS filter against not matching dot hidden symbol

2023-03-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc extra
  match search query grammar in design

2023-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst: doc: desc extra match search process in
  man

  * doc/source/module.rst: doc: use pattern terminology on whatis/paths desc.

  * NEWS.rst: doc: desc. search variant name/value highlight in NEWS

2023-02-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extra-match-search.rst,
  doc/source/design/source-shell-script-in-modulefile.rst,
  tcl/mfinterp.tcl.in: Interpret source-sh cmd on scan mode as on load mode

  * doc/source/design/extra-match-search.rst: doc: update extra match search
  spec for error entries

2023-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: access issue and EMS
  on avail/whatis/paths

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: special chars and EMS
  on avail/whatis/paths

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: add no-indepth avail
  EMS tests in 51/030

  * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in: Fetch all
  files if no-indepth mode and EMS asked  In case no-indepth mode is asked and
  extra match search should be performed, traditional file lookup (by
  ``findModules``) is made to return all existing files. Not only those
  matching depth level. As extra match filtering process may eliminate some
  entries, all of them should be tested to obtain accurate result.

2023-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: auto symbols and EMS
  on avail/whatis/paths

2023-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: default symbol and
  EMS on avail/whatis/paths

  * testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: adapt wild variant
  avail/whatis/paths tests in 51/03{0,1,2}

  * tcl/modfind.tcl.in, tcl/modspec.tcl: Disable auto symbols on wild search
  with variant  Do not compute auto symbols if search query does not contain a
  module name and version but contain variant specification.  Add
  isSpecWildWithVariant procedure to determine if search query is wild with
  variant specification.  Disabling auto symbols is especially useful for
  sub-commands like 'paths' that take getModules result and try to resolve
  each entry. In this situation it is important not to have any auto symbol
  that indirectly targets an element withdrawn from extra match filter.

  * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in: Correctly
  handle auto symbols during EMS  Move extra match search in getModules from
  phase 3 to phase 4 to proceed after auto symbols computation. Add auto
  symbols defined in versmod_list structure so extra match search filtering
  can unset these elements if their target is filtered out.

2023-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: test alias/sym
  filtering during EMS on paths

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp: ts: test alias/sym
  filtering during EMS on whatis

2023-02-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extra-match-search.rst: doc: update extra match search
  spec for alias/sym

  * testsuite/etc/modulerc.scan, testsuite/modulefiles.4/scan/.modulerc,
  testsuite/modulefiles.4/scan/1.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: test alias filtering
  during extra match search in 51/030

2023-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.scan, testsuite/modulefiles.4/foo/.modulerc,
  testsuite/modulefiles.4/foo/1.0, testsuite/modulefiles.4/scan/.modulerc,
  testsuite/modulefiles.4/scan/1.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: test symbol filtering
  during extra match search in 51/030

2023-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, tcl/modscan.tcl: Filter sym ver if target unset during
  extra match  Unset the symbolic version elements targeting an element
  removed during the extra match search.

  * testsuite/modules.70-maint/370-variant.exp: ts: no mod name/vers but vr
  spec on avail/paths in 70/370

  * testsuite/modules.70-maint/375-variant-whatis.exp: ts: no mod name/vers
  but vr spec on whatis in 70/375

2023-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../021-avail_output-variant-sgr.exp: ts: no mod name/vers but vr spec on
  colored avail in 51/021

  * testsuite/modules.70-maint/370-variant.exp: ts: test variant spec only on
  module list in 70/370

2023-02-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/370-variant.exp: ts: test variant spec
  highlight on module list in 70/370

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp: ts: test free value
  variant spec on av/is-avail/wh/paths

2023-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0, .../021-avail_output-variant-sgr.exp:
  ts: test to color selected variant name and value in 51/021

2023-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../021-avail_output-variant-sgr.exp,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/371-variant-msg.exp,
  .../modules.70-maint/377-variant-shortcut.exp: ts: adapt existing sgr
  variant tests  Take into account sgr output code change due to variant sgr
  highlight feature.

2023-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, tcl/report.tcl.in: Highlight searched variant name and
  value in output

2023-02-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: No error count raise during scan evaluation  If the
  evaluation of a modulefile aborts (due to a break or exit error), do not
  increase error count if evaluation mode is scan.  As scan is a global
  operation, like an avail search, an error on one modulefile should not
  impact the overall result of the scan.

2023-02-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/030-options.exp: ts: fix version module avail
  resolution in install 00/030

  * testsuite/modules.70-maint/376-variant-tag.exp: ts: add hide/forbid tag
  tests applying to variant in 70/376

2023-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl: Inhibit error report during scan mode evaluations
  Disable error reporting to avoid modulefile errors to pollute output. This
  is particularly useful when dealing with modulefile that does not cope with
  scan mode evaluation.

2023-01-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp,
  testsuite/modules.70-maint/376-variant-tag.exp: ts: test variant spec on
  avail/whatis/paths  Adapt existing avail, whatis, is-avail, path and paths
  tests that demonstrate whether sub-command takes variant specification into
  account or not.  Add boolean variant, shortcut variant tests. Add also more
  tests of scan evaluation for avail/whatis/paths when module is forbidden.

2023-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc variant spec on avail/list/paths/whatis in NEWS

2023-01-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/module-selection-contexts.rst,
  doc/source/design/variants.rst: doc: desc extra match search in
  variant/selection notes

2023-01-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/subcmd.tcl.in,
  testsuite/example/siteconfig.tcl-1: Allow module spec without name on
  several subcmds  Allow module specification with variant definition and no
  module name version for avail, list, paths and whatis sub-commands.

2023-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl: Filter avail module based on variant specification
  Update extra match search process to allow specification of module variants
  in addition to module name and version. Filter results through extra match
  search to only return modules matching variant specification (where
  specified variant name and value is defined for module).

2023-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/modulefiles/module-info: contrib: fix module-info example
  modulefile for scan mode

  * tcl/modscan.tcl: Extra match search required if mod spec contains variant
  During avail, paths or whatis sub-commands

2023-01-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: add diverse scan mode
  eval tests in 51/030

2023-01-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/variant1/.modulerc,
  testsuite/modulefiles.4/variant1/1.0, testsuite/modulefiles.4/variant1/2.0,
  .../modules.51-scan/020-avail_output-variant.exp: ts: test scan evaluation
  and output with variants in 51/020

2023-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0, .../021-avail_output-variant-sgr.exp:
  ts: add avail report sgr tests for free-value variant in 51/021

  * tcl/modfind.tcl.in: Adapt report for free-value variant  When reporting
  value list of free-value variant, mention '*' to indicate all kind of values
  are accepted. If a default value is defined or if module is loaded report
  these values among variant value list.

2023-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.51-scan/010-init_ts.exp,
  .../021-avail_output-variant-sgr.exp,
  testsuite/modules.51-scan/999-cleanup.exp: ts: test avail output with
  rendition of default/loaded variant

2023-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/370-variant.exp,
  .../modules.70-maint/377-variant-shortcut.exp: ts: test list output with
  rendition of default variant

2023-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. default/loaded variant value SGR in NEWS

  * tcl/modfind.tcl.in, tcl/report.tcl.in: Adapt loaded variant report to
  loaded kind  To highlight loaded variant value use the sgr key associated to
  the loaded kind (loaded or auto-loaded). Resolve abbreviation used for these
  module tag to apply the correct SGR key.

  * tcl/modfind.tcl.in: Fix boolean variant key report issue on avail output

2023-01-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, tcl/report.tcl.in: Adapt variant report to highlight
  loaded variant value  Update variant report mechanism to highlight variant
  value if it is the loaded one (if this module is currently loaded). Use 'L'
  sgr code highlight loaded variant value, like done for loaded module name
  and version.

  * tcl/modfind.tcl.in, tcl/modscan.tcl, tcl/report.tcl.in: Adapt variant
  report to highlight default variant value  Update variant report mechanism
  to highlight variant value if it is the default one. Use 'de' sgr code
  highlight default variant value, like done for default version.  Both avail
  and list output reports benefit from this highlight enhancement.

  * tcl/modfind.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Adapt
  multiple-value variant report to highlight comma  Update variant report
  mechanism to highlight comma separator when all available values of a
  variant is reported. Use 'se' sgr code to highlight comma, like done for '{'
  and '}'. The link to 'name=value' key entry is this way reinforced.
  Introduce report mechanism #7 in getVariantList procedure to achieve this.
  getVariantList will need refactoring.

2022-12-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/info/mode7, testsuite/modulefiles.4/info/mode8,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp: ts: test scan mode on
  module-info in 50/{083,084}

  * doc/source/modulefile.rst: doc: desc. scan string returned by module-info
  mode

  * testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/360-avail_output.exp: ts: adapt tests for variant
  val in avail_*output cfgs in 70/{220,360}

  * NEWS.rst: doc: desc. extra-match-search and variant report in NEWS

  * INSTALL.rst, configure, doc/source/changes.rst, doc/source/module.rst:
  install/doc: desc. variant addition to avail_{,terse_}output

  * doc/source/design/output-configuration.rst,
  doc/source/design/variants.rst: doc: desc. variant report on avail in design
  notes

  * tcl/init.tcl.in, tcl/modfind.tcl.in, tcl/report.tcl.in: Add variant value
  to avail_{,terse_}output config  Add the ability to report defined variants
  on avail regular or terse output. Variant report is updated to output all
  possible values in the name=value1,value2,... form. This form also applies
  to boolean variant with on,off as possible values.  Fixes #407

2022-12-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modscan.tcl:
  Configure scan evaluation mode for modulefile  Add scan evaluation mode for
  modulefile. It will analyzes modulefile content for extra match search
  process.  To define environment variable in modulefile context during
  evaluation, use whatis-variant of environment variable edition modulefile
  commands.  Setup first specific scan-variant of a modulefile command with
  variant-sc procedure. Reuse code from whatis-variant to initialize variant
  value in environment when evaluating modulefile. Also gather variant
  definition for modules in a global array structure.

  * tcl/modfind.tcl.in, tcl/modscan.tcl: Add extra match search process
  Update getModules procedure to insert extra match search at phase 3.
  filterExtraMatchSearch procedure codes the extra match search process.  As a
  start, all modules in result are evaluated in scan mode.

  * tcl/modscan.tcl: Add isExtraMatchSearchRequired proc  Add
  isExtraMatchSearchRequired procedure that determine if current module search
  requires an extra match search.  Extra match search is required currently if
  variant should be reported in resulting output.

  * .aspell.en.pws, Makefile, tcl/modscan.tcl: Add modscan.tcl code file  Add
  modscan.tcl code file that will host Tcl procedures for the scan modulefile
  evaluation mode and the extra match search process.

  * .aspell.en.pws, doc/source/design/extra-match-search.rst,
  doc/source/design/module-cache.rst: doc: add initial version of
  extra-match-search design

2023-04-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: install: migrate to
  SPDX licence format in RPM spec file

  * NEWS.rst, init/bash_completion.in: init: fix nospace activation in bash
  completion script  Fix bash shell completion script to be able to complete
  full name of available modules.  Fixes #490.

2023-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: clarify python initialization example  Update
  Python initialization example to precise that the init script should be
  exec-ed in the global scope. This is important when init script is executed
  from a function.  This change helps to clarify a question asked on #483.

2023-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, script/gitlog2changelog.py.in: install: fix expected log format
  in gitlog2changelog.py  Update gitlog2changelog.py script to ensure git log
  format is not influenced by user git configuration.  Fixes #487.

2023-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .codespellrc, .github/workflows/windows_tests.yaml: codespell: ignore
  additional generated content

2023-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, NEWS.rst: install: allow to build from short-depth git repo  Fix
  Makefile to allow building Modules from a git repository with short commit
  depth.  Fixes #486

2023-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp: ts: escape shell text output for regexp
  enabled tests

  * .cirrus.yml: cirrus: tcl-tk homebrew pkg now use default location

2023-02-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/410-timer.exp: ts: fix tests when run with Tcl
  9.0

  * testsuite/config/base-config.exp: ts: update procedure to allow tests to
  fail  Provide a way to track tests that are expected to fail. Add failcmd
  argument on all test procedure to indicate the fail command to use to report
  test failure. Use fail command by default. When using xfail command, it
  indicates that test is expected to fail.

2023-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: add new Linux test case for Tcl
  9.0

  * .github/workflows/linux_tests.yaml: gh: add new Linux test case for Tcl
  8.7

  * testsuite/modules.70-maint/451-stashpop.exp,
  testsuite/modules.70-maint/452-stashrm.exp,
  testsuite/modules.70-maint/453-stashshow.exp: ts: fix tests when run with
  Tcl 8.7

2023-01-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, .cirrus.yml: cirrus: fix Codecov run on MacOS M1
  environment  Codecov tool is not available on arm64 platform. Use arch
  utility to run x86_64 codecov binary on MacOS M1 virtual machine.

  * NEWS.rst, tcl/mfinterp.tcl.in: Fix shell alias translation with fish shell
  3.6  A '$argv' string is added in fish 3.6 at the end of shell alias
  definition when reported with functions command.

2023-01-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp: ts: adapt 70/210 test result for
  MSYS platform

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.61-coll/030-save.exp: Catch collection dir error and
  report correct msg  Fixes #482

2023-01-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, .cirrus.yml: cirrus: use new macOS images for M1 instead
  of Intel

  * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles.3/foo/1.0,
  testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: Correctly apply extra tag when
  variant not set  Correctly apply extra tag set when loading a module whose
  variant has no specific value set (default value used).  Fixes #484

2022-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/cookbook/reduce-io-load.rst: doc: update
  reduce-io-load recipe with module cache

  * MIGRATING.rst: doc: desc. Module cache in MIGRATING

2022-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc.
  limited-access & cache in NEWS/man

2022-12-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  .../045-cache-use-misc-inconsistent.exp: ts: add more cache not in sync
  tests in 30/045

2022-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst: doc: desc. in design notes when cache
  is not in sync

  * .../044-cache-use-limited-access-inconsistent.exp: ts: add tests for
  inconsistent limited accesses in 30/044

2022-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  .../modules.20-locate/130-mcookie_check_eval.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/330-large-file.exp,
  testsuite/modules.70-maint/420-lint.exp,
  testsuite/modules.80-deep/080-access-deep.exp: ts: ignore pre-built cache
  for tests changing file access

  * testsuite/modules.70-maint/120-autoinit.exp: ts: fix shell completion
  script file tests in 70/120

  * .cirrus.yml, .github/workflows/linux_tests.yaml, script/mt,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/060-build_cache.exp,
  .../modules.30-cache/051-cache-buffer-bytes.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.99-finish/999-cleanup.exp: ts: optionally build cache
  files to run tests  When TESTSUITE_ENABLE_MODULECACHE environment variable
  is set, cache file is built for all modulepaths of the testsuite. Tests are
  run using the cache files to resolve available modules.

2022-12-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst: doc: additional notes on module cache
  design

  * testsuite/modules.30-cache/010-init_ts.exp,
  .../modules.30-cache/043-cache-use-limited-access.exp: ts: add
  limited-access hidden module tests in 30/043

2022-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/010-init_ts.exp,
  testsuite/modules.30-cache/031-cachebuild-full.exp,
  .../032-cachebuild-limited-access.exp,
  testsuite/modules.30-cache/040-cache-use.exp,
  .../043-cache-use-limited-access.exp: ts: add ignored files and dirs in
  cache test structure

  * .../043-cache-use-limited-access.exp: ts: add tests for limited-access
  cache elt resolution in 30/043

2022-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/040-cache-use.exp: ts: adapt existing tests for
  limited-access resolution

  * .aspell.en.pws, tcl/cache.tcl.in, tcl/modfind.tcl.in: Resolve limited
  access files/dirs when using cache  When searching modules through cache
  files resolve files and directories marked as limited access. First check
  such entries match the search query, then test if these files and
  directories can be accessed by current user.  The access test relies on the
  findModulesFromDirsAndFiles procedure, as if module search was not performed
  with cache file, but just for the limited-access entries.

2022-12-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Create findModulesFromDirsAndFiles from findModules
  Split code from findModules procedure that walk through a list of files and
  directories to find modules. Create a new procedure named
  findModulesFromDirsAndFiles for that purpose.  This new procedure will be
  helpful to resolve limited access files and directories spotted in cache
  file.

2022-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in, tcl/mfinterp.tcl.in: Add limited-access-directory
  cachefile command  Add limited-access-directory cachefile command to record
  all directories with limited access in modulepath.

  * tcl/cache.tcl.in, tcl/mfinterp.tcl.in: Add limited-access-file cachefile
  command  Add limited-access-file cachefile command to record all files with
  limited access in modulepath.

2022-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/010-init_ts.exp,
  .../032-cachebuild-limited-access.exp: ts: add limited-access cachebuild
  tests in 30/032

2022-12-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst: doc: elaborate limited access in
  module cache design

  * testsuite/modules.30-cache/031-cachebuild-full.exp: ts: adapt existing
  tests now limited access are recorded

  * tcl/cache.tcl.in: Register files/dir with limited access in cache  When
  building cache, check all files and directory within modulepath that have
  limited access. Limited access is when user building cache or others cannot
  read file or cannot either read or search directory.  Limited access file or
  directory are recorded in cache file with respectively limited-access-file
  and limited-access-directory cachefile commands.  Limited access commands
  replace modulefile/modulerc definitions in the cache if files or their
  parent directory has limited access.

2022-12-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modules.30-cache/052-cache-expiry-secs.exp: ts: add cache_expiry_secs
  tests in 30/051

  * doc/source/module.rst: doc: desc cache_expiry_secs in man

  * INSTALL.rst, NEWS.rst: doc: desc cache_expiry_secs in NEWS/INSTALL

  * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc
  cache_expiry_secs in design/changes

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.30-cache/040-cache-use.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test cache_expiry_secs config
  option

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add cache_expiry_secs config to completion script

  * tcl/cache.tcl.in, tcl/init.tcl.in: Introduce cache_expiry_secs
  configuration option  Add cache_expiry_secs configuration option to control
  after how many seconds (after last modification) to consider cache file
  expired and ignore it. Set to 0 by default which means cache file never
  expires. Value can vary from 0 to 31536000 which corresponds to the number
  of seconds during one year.  When configuration option is set, it defies the
  MODULES_CACHE_EXPIRY_SECS environment variable.

  * .../modules.30-cache/051-cache-buffer-bytes.exp: ts: add
  cache_buffer_bytes tests in 30/051

2022-12-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test cache_buffer_bytes
  config option

  * doc/source/module.rst: doc: desc cache_buffer_bytes in man

  * INSTALL.rst, NEWS.rst: doc: desc cache_buffer_bytes in NEWS/INSTALL

  * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc
  cache_buffer_bytes in design/changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add cache_buffer_bytes config to completion script

  * tcl/cache.tcl.in, tcl/init.tcl.in, tcl/subcmd.tcl.in: Introduce
  cache_buffer_bytes configuration option  Add cache_buffer_bytes
  configuration option to control the buffer size used when reading or writing
  cache files. A 32 kbytes buffer is set by default. It can vary from 4 kbytes
  to 1 MB. It is useful to have a large buffer when reading or writing large
  files to reduce the number or read or write system calls.  When
  configuration option is set, it defies the MODULES_CACHE_BUFFER_BYTES
  environment variable.

2022-12-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/040-cache-use.exp,
  testsuite/modules.30-cache/041-cache-interp.exp: ts: adapt tests to specific
  cache read code

2022-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in: Add specific proc to read cache file  Introduce
  readCacheContent procedure to specifically read cache file rather using read
  procedure for modulefile. Avoid cache file to be cached in memory. Produce
  more specific error message.

2022-12-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/050-ignore-cache.exp: ts: add
  ignore_cache/--ignore-cache tests in 30/050

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test ignore_cache config
  option

  * doc/source/module.rst: doc: desc ignore_cache/--ignore-cache in man

  * INSTALL.rst, NEWS.rst: doc: desc ignore_cache/--ignore-cache in
  NEWS/INSTALL

  * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc
  --ignore-cache/ignore_cache in design/changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add ignore_cache/--ignore-cache to comp script

  * tcl/cache.tcl.in, tcl/subcmd.tcl.in: Ignore cache file when ignore_cache
  enabled  Do not check or evaluate cache file if ignore_cache option is
  enabled.  Use this new option in cachebuild sub-command to ignore cache when
  building cache files.

  * tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in: Add ignore_cache
  configuration option  Add ignore_cache configuration option that controls
  whether or not module cache file should be considered if available. Disabled
  by default. When configuration is modified it sets the MODULES_IGNORE_CACHE
  environment variable.  --ignore-cache command line switch can be used to
  enable ignore_cache for the current execution.  --ignore_cache is also
  supported for compatibility with Lmod.

2022-11-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc cache in man
  pages

  * NEWS.rst: doc: desc. cache usage work in NEWS

2022-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst,
  testsuite/modules.30-cache/031-cachebuild-full.exp,
  testsuite/modules.30-cache/040-cache-use.exp: doc/ts: cache build & use with
  module header options

  * tcl/subcmd.tcl.in: Enable mcookie_check/mcookie_version_check on
  cachebuild  Enable both mcookie_check and mcookie_version_check
  configuration options when recording cache. These two options are not
  honored when building or using cache.

2022-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/042-cache-error.exp: ts: test erroneous cache
  file in 30/042

  * tcl/cache.tcl.in: Revert optimization filter tries for
  findModulesInCacheFile  As the improvement obtained by either of these
  optimization methods was not perceptible, they are withdrawn to keep
  filtering code simpler.  Gain was also not perceptible since the additional
  cost taken by cache was not perceptible in the first place.

  * tcl/cache.tcl.in: Second optimization filter try for
  findModulesInCacheFile  As first try is not 100% accurate since it does not
  compare element root names. This second attempt first compute the list of
  element root names to compare, same lsearch -glob mechanism for comparison.
  Then unset elements whose root name has been returned by comparison.

2022-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in: Optimize module filtering in findModulesInCacheFile
  Increase filtering performance in findModulesInCacheFile: instead of testing
  for match each module in cache through modEqStatic, gets all module to
  exclude from result at once with lsearch command.

  * script/mb, testsuite/modules.30-cache/040-cache-use.exp: script: skip v5.2
  from bench/profile in mb  Ignore Modules v5.2 when benching or profiling
  releases not to get too much results on output.

  * script/mb: script: add benchmark tests for cache in mb  Add cache version
  of avail, whatis and load benchmark tests in mb tool.

  * testsuite/modules.30-cache/041-cache-interp.exp: ts: test cache file
  interp taint protection

2022-11-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/040-cache-use.exp: ts: add cache usage tests in
  30/040

2022-11-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in, tcl/modfind.tcl.in: Distinguish empty cache result from
  no cache result  Update structure of result returned by
  findModulesInCacheFile to indicate if cache load was successful or not. It
  is possible this way to distinguish between a *there is no cache* result and
  a *no match in cache* or *empty cache* results.

  * tcl/cache.tcl.in: Cache content filer in findModulesInCacheFile  Add code
  in findModulesInCacheFile to filter fetched cache content to tailor it to
  the search query. Proceed following what is done in findModules procedure
  but in a reverse order (we remove elements from a full structure, rather we
  add elements to an empty structure).

  * tcl/report.tcl.in: Set time string as separate arg on reportTimer  Avoid
  evaluating full message string to replace time pattern by execution time
  value. Message could contain string that could be misinterpreted by format
  command as time pattern.

2022-11-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in: Add modulefile-invalid cachefile command  Add
  modulefile-invalid cachefile command used to record a invalid modulefile in
  modulepath.

  * tcl/cache.tcl.in: Add modulerc-content cachefile command  Add
  modulerc-content cachefile command used to record a modulerc available in
  modulepath. Record modulerc information in memory cache variables:
  g_modfileContent.

  * tcl/cache.tcl.in: Add modulefile-content cachefile command  Add
  modulefile-content cachefile command used to record a modulefile available
  in modulepath. Record modulefile information in memory cache variables:
  g_modfileContent and g_fileMtime.

  * .aspell.en.pws, tcl/cache.tcl.in, tcl/mfinterp.tcl.in, tcl/report.tcl.in:
  Core code for execute-cachefile  Add core code for execute-cachefile
  procedure. Initialize an interpreter to evaluate the cache file. Reuse the
  same mechanisms than for modulefile or modulerc evaluation.

  * .aspell.en.pws, tcl/cache.tcl.in, tcl/modfind.tcl.in: Add initial code
  structure to evaluate cache file  Add call to findModulesInCacheFile
  procedure in findModules to retrieve available modulefile and modulerc
  information from modulepath cache file.  findModulesInCacheFile tests a
  cache file is available and evaluate it if not yet done with
  execute-cachefile procedure. Cache file information will then be parsed to
  return the information matching the search query.  Initial code structure is
  inserted with this commit. Code for cache file evaluation and cache
  information tailoring will come next.

2022-11-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/010-init_ts.exp,
  testsuite/modules.30-cache/030-cachebuild.exp,
  testsuite/modules.30-cache/031-cachebuild-full.exp,
  testsuite/modules.30-cache/999-cleanup.exp: ts: add/update cachebuild tests
  with real cache file

2022-11-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, tcl/{cache.tcl => cache.tcl.in}: Add major.minor
  version number in cache files  Append major.minor version number to the
  #%Module header prefix of generated cache files. Cache file can be used only
  if generated for the current release of Modules used.  Change cache.tcl into
  cache.tcl.in to get Modules release number resolved at build time.

2022-11-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Core code for
  formatModuleCacheContent  Implement formatModuleCacheContent procedure.
  findModules procedure is first called to get all files from designated
  modulepath directory. A cache entry is made for each result obtained from
  findModules with cache file commands: modulefile-content, modulerc-content
  and modulefile-invalid.  Goal is to record all information produced by
  findModules to be able to replace findModules processing by cache file
  evaluation. Thus modulefile modification time and validity check issues are
  recorded in cache file.  Modulerc and modulefile content is read and
  recorded as-is in cache file. Error occurring during file read is raised and
  ends cache file creation.

2022-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/030-cachebuild.exp: ts: add initial cachebuild
  sub-cmd tests

  * .aspell.en.pws, tcl/cache.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Core
  code for cmdModuleCachebuild  Implement cachebuild sub-command. For each
  modulepath enabled or passed as argument, if modulepath is writable for user
  build cache content for this modulepath and record it in cache file.  Report
  message block is used to report file creation. Reports are output in normal
  verbosity level or higher. A warning message is emitted if modulepath is not
  writable for user, or if cache content to create is empty.  Provide empty
  skeleton for formatModuleCacheContent procedure.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/010-init_ts.exp,
  testsuite/modules.30-cache/020-cacheclear.exp,
  testsuite/modules.30-cache/999-cleanup.exp: ts: add cacheclear sub-cmd tests

2022-11-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, tcl/cache.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Core code
  for cmdModuleCacheclear  Implement cacheclear sub-command. For each
  modulepath enabled, check module cache file exists. If yes and if modulepath
  is writable for user, try to delete the cache file.  Report message block is
  used to report file deletion. Reports are output in normal verbosity level
  or higher. A warning message is emitted if modulepath is not writable for
  user.  Add tcl/cache.tcl source file to store procedure related to cache
  mechanism. Update Makefile to properly generate modulecmd.tcl with this new
  tcl file.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  cacheclear subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/cacheclear,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for cacheclear sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add cacheclear
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'cacheclear' sub-command  Introduce cacheclear sub-command to delete cache
  file under modulepaths.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleCacheclear.
  Sub-command accepts no option nor argument. Cache files are deleted in every
  enabled modulepaths.

  * .aspell.en.pws, NEWS.rst, doc/source/design/module-cache.rst: doc: add
  module-cache design doc

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  cachebuild subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/cachebuild,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for cachebuild sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add cachebuild
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'cachebuild' sub-command  Introduce cachebuild sub-command to create cache
  file under modulepaths.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleCachebuild.
  Sub-command accepts no option. It may take optional arguments: list of
  modulepath directory where to build cache. When no argument is specified,
  cache is built for all enabled modulepaths.

2022-11-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  doc/source/conf.py, version.inc.in: Release of version 5.2.0

2022-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/module.rst: doc: extend Collections
  desc in module man

2022-11-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, INSTALL-win.rst, INSTALL.rst,
  contrib/vim/syntax/modulefile.vim,
  doc/source/cookbook/log-module-commands.rst: doc/vim: update tcl.tk links
  into tcl-lang.org

  * doc/source/module.rst: doc: desc hooks made with rename in module man

2022-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, MIGRATING.rst: doc: desc. siteconfig hook var in MIGRATING

  * MIGRATING.rst: doc: fix path issue in sticky module examples

2022-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/module.rst, siteconfig.tcl: doc: add
  Site-specific configuration section in man

2022-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1, testsuite/modulefiles.3/.modulerc,
  testsuite/modulefiles.3/interp/.modulerc, testsuite/modulefiles.3/interp/0,
  testsuite/modulefiles.3/interp/1, testsuite/modulefiles.3/interp/2,
  .../modules.50-cmds/560-siteconfig-interp.exp: ts: test specific vars/cmds
  hooks in 50/560

2022-10-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/conf.py: doc: desc. cmds/vars hooks
  in NEWS

  * siteconfig.tcl, tcl/mfinterp.tcl.in: Add hooks for specific vars/cmds in
  modulerc interp ctx  Introduce hooks to define specific variables and
  commands for modulerc interpreter context. It relies on variables defined in
  siteconfig.tcl configuration file:  * modulerc_extra_vars is a list of
  variable name and value pairs * modulerc_extra_cmds is a list of command
  name and procedure pairs  Fixes #286

  * siteconfig.tcl, tcl/mfinterp.tcl.in: Add hooks for specific vars/cmds in
  modulefile interp ctx  Introduce hooks to define specific variables and
  commands for modulefile interpreter context. It relies on variables defined
  in siteconfig.tcl configuration file:  * modulefile_extra_vars is a list of
  variable name and value pairs * modulefile_extra_cmds is a list of command
  name and procedure pairs  Fixes #286

2022-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Remove modvr default value on setLoadedModule proc

2022-10-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/025-autoinit.exp,
  .../modules.20-locate/130-mcookie_check_eval.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/391-function-undo.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/540-complete.exp,
  testsuite/modules.50-cmds/541-uncomplete.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/210-clear.exp: ts: adapt existing tests to
  __MODULES_LMREFRESH

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  refresh only modules requiring it

  * .aspell.en.pws, NEWS.rst, doc/source/changes.rst, doc/source/module.rst:
  doc: desc. __MODULES_LMREFRESH in NEWS/man/changes

  * tcl/subcmd.tcl.in: Only refresh loaded modules requiring it  Use the
  qualified refresh property to only evaluate in refresh mode the loaded
  modules marked with this property.  Fixes #477

  * tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in,
  tcl/subcmd.tcl.in: Track loaded modules qualified for refresh eval  Track
  loaded modules that are qualified for a refresh evaluation. Refresh
  evaluation is only useful if module defines volatile environment changes:
  shell completion, alias or function.  An internal state, named
  refresh_qualified, marks loading modules defining such volatile environment
  changes. Such modules are then added to the __MODULES_LMREFRESH environment
  variable to track this property once module is loaded.  Code is also added
  to remove module from __MODULES_LMREFRESH when it is unloaded.

  * .github/workflows/differential_shellcheck.yml,
  .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml,
  .github/workflows/windows_tests.yaml, CONTRIBUTING.rst, Makefile, NEWS.rst,
  README.md, configure, doc/source/conf.py,
  doc/source/cookbook/modulefiles-in-git.rst, script/mpub, script/mrel: Use
  main as new name for default git branch

2022-10-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: use cygwin-install-action rather
  builtin chocolatey  Chocolatey version 1.2.0 shipped with latest windows
  2022 image does not seem to correctly install packages from Cygwin source.
  So move to cygwin/cygwin-install-action to install Cygwin packages.

  * Makefile: install: use newer version of nagelfar (1.3.3)

2022-10-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  .../modules.20-locate/112-hide-user-group.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/390-state.exp: ts: fix testsuite run when id cmd
  cannot resolve group  Update testsuite to cope with user group whose name
  cannot be resolved.  Fixes #476.

2022-10-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, NEWS.rst, init/Makefile, init/zsh.in, tcl/subcmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Revert "init: setup zsh FPATH
  through autoinit command"  This reverts commit
  59ac24e2431df012d8b22872a0e8fd1e86a20e9f.  FPATH variable cannot be handled
  within autoinit process as this is not an environment variable. Thus when
  modulecmd.tcl is executed, it does not know the current value of FPATH. So
  if it sets FPATH during autoinit, previous value of this variable is lost.
  As a result FPATH must stay defined in initialization script.

2022-10-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/example/log-module-commands/siteconfig.tcl,
  doc/source/cookbook/log-module-commands.rst: doc: fix logging sys on
  log-module-command recipe  Update log-module-command recipe to ensure the
  logging system is not broken by the current user environment.  Fixes #475.

2022-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp: ts: skip basheu tests on bash
  5.2  bash -eu test of install testsuite are skipped on new version of bash
  (5.2) as internal messages currently appear when using module function with
  -eu options on this version.  A bug as been submitted to the bash
  developers:
  https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00073.html

2022-10-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: update to codecov-action v3

  * .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml,
  .github/workflows/windows_tests.yaml: gh: update actions/upload-artifact to
  v3

  * .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml,
  .github/workflows/windows_tests.yaml: gh: update actions/checkout to v3

  * .github/workflows/windows_tests.yaml: gh: move windows tests to
  windows-2022 image

2022-10-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp: ts: fix env of clear subcmd test
  case

  * Makefile: install: correct arg order for date cmd on FreeBSD

2022-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. stash env in MIGRATING

2022-10-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc stash in collection section of man page

  * testsuite/modules.70-maint/457-stash-savelist.exp: ts: test savelist
  subcmd with stash collections

2022-10-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/stash-environment.rst, doc/source/module.rst:
  doc: desc. savelist stash filter in design/NEWS/man doc

  * tcl/subcmd.tcl.in: Filter stash collection on savelist  Update savelist
  sub-command to filter out stash collections unless --all option is set.

  * testsuite/modules.70-maint/456-stash-restore.exp: ts: test restore subcmd
  with stash collections

2022-10-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: update completion with stashlist output
  Update stashpop, stashrm and stashshow completion definition to use
  stashlist output.

2022-10-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear
  MODULES_QUARANTINE_SUPPORT prior tests

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/455-stashlist.exp: ts: add stashlist sub-cmd
  tests

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/021-savelist-search.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/350-term_width.exp: ts: add helper procs for
  collection list header msgs

2022-10-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashlist  Implement 'stashlist'
  sub-command. Rely on cmdModuleSavelist but adapt this procedure to make
  several behavior changes when called by cmdModuleStashlist:  * elements are
  sorted in reverse order * element index starts at 0 * when no collection
  target set, only return collection without a target set

2022-10-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/report.tcl.in, tcl/subcmd.tcl.in, tcl/util.tcl: Add getCallingProcName
  util proc  Return name of calling procedure with getCallingProcName.

  * tcl/report.tcl.in, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1:
  Add start_idx argument on displayElementList  Add start_idx argument on
  displayElementList procedure to define what is the starting index for the
  elements to report.

2022-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashlist subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashlist,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashlist sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashlist
  subcmd to completion scripts

2022-09-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashlist' sub-command  Introduce stashlist sub-command to list stash
  collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashlist.
  Sub-command accepts no argument. It accepts --terse, --long and --json
  options.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashlist in stash-environment design doc

2022-09-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp,
  testsuite/modules.70-maint/454-stashclear.exp: ts: add stashclear sub-cmd
  tests

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashclear  Implement
  'stashclear' sub-command. Fetch all existing stash collection for current
  collection target. Then call 'saverm' sub-command over all of these
  collection obtained.

2022-09-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/modbad/stashclear,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashclear subcmd

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashclear subcmd in NEWS/man/changes

2022-09-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashclear
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashclear' sub-command  Introduce stashclear sub-command to delete all
  stash collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashclear.
  Sub-command accepts no argument nor option.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashclear in stash-environment design doc

  * testsuite/modules.00-init/005-init_ts.exp: ts: accept version name with
  '/' char

  * testsuite/modules.70-maint/453-stashshow.exp: ts: add stashshow sub-cmd
  tests

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashshow  Implement 'stashshow'
  sub-command. Parse stash argument to get corresponding collection, then call
  saveshow over this collection name.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashshow subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashshow,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashshow sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashshow
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashshow' sub-command  Introduce stashshow sub-command to display stash
  collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashshow.
  Sub-command accepts no option. It may take an optional argument: the index
  of the stash collection to display or the name of the stash collection. If
  no argument is provided, stash collection 0 is assumed.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashshow in stash-environment design doc

  * testsuite/config/base-config.exp,
  testsuite/modules.70-maint/452-stashrm.exp: ts: add stashrm sub-cmd tests

2022-09-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashrm  Implement 'stashrm'
  sub-command. Parse stash argument to get corresponding collection, then call
  saverm over this collection name.

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Move collection resolution from stash
  in dedicated proc  Move collection name resolution from stash name from
  cmdModuleStashpop into getCollectionFromStash procedure.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashrm subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashrm,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashrm sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashrm
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashrm' sub-command  Introduce stashrm sub-command to delete stash
  collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashrm.
  Sub-command accepts no option. It may take an optional argument: the index
  of the stash collection to delete or the name of the stash collection. If no
  argument is provided, stash collection 0 is assumed.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashrm in stash-environment design doc

2022-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/451-stashpop.exp: ts: add stashpop sub-cmd tests

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashpop  Implement 'stashpop'
  sub-command. First parse stash argument to determine corresponding stash
  collection name or raise an error if stash value is invalid. Then restore
  stash collection. Afterward delete stash collection.

2022-09-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in: Add no_other_target option to findCollections  Add
  no_other_target option to findCollections procedure to filter when glob
  searching the result from other target. Especially useful when collections
  for specific targets exist but no target is currently set in user
  environment.  This no_other_target is disabled by default. savelist
  sub-command currently returns other targets when no target is set. But the
  option will be enabled for stashpop, to ensure that the popped collection is
  from the current target or from the *no target* if none set.

2022-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashpop subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashpop,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashpop sub-command

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add stashpop
  test/doc on 'module-info command'

  * doc/source/design/stash-environment.rst: doc: desc. stashpop in
  stash-environment design doc

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashpop
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashpop' sub-command  Introduce stashpop sub-command to restore a stash
  collection then delete it.  This sub-command cannot be called from a
  modulefile evaluation context.  Add sub-command empty skeleton:
  cmdModuleStashpop.  Sub-command accepts no option. It may take an optional
  argument: the index of the stash collection to restore or the name of the
  stash collection. If no argument is provided, stash collection 0 is assumed.

2022-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp, testsuite/modulefiles.3/foo/.modulerc,
  testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/450-stash.exp: ts: add stash sub-cmd tests

2022-09-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp: ts: move unsatisfied constraint msg
  to init section

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp: ts: move nothing to save err msg in
  init section

2022-09-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp: ts: put coll not valid msg in a
  proc

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/440-reset.exp: ts: put coll not found msg in a
  proc

2022-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Fix init property unserialization  Update
  getLoadedModulePropertyList to apply unserialization translation map also
  for property not requiring sub-element split, like init.

2022-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Core code for cmdModuleStash  Implement stash
  sub-command. First check that a difference exists between current
  environment and initial one. If so, save current environment in a
  collection, then reset to initial environment.

2022-09-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Reword findCollections to swap default
  coll by __init__  Update findCollections procedure to add swap_by_init
  argument, disabled by default. When enabled if specified collection is not
  found, change it to __init__.  Helps to remove duplicate code from
  cmdModuleSaveshow and cmdModuleRestore.

2022-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Return is_tags_diff from
  getDiffBetweenCurEnvAndColl  Update getDiffBetweenCurEnvAndColl to also
  return is_tags_diff information. is_tags_diff indicates if loaded modules
  that matches modules in collection have different tags set.

  * tcl/util.tcl: Add unordered_lists_compared arg on getDiffBetweenArray
  Update getDiffBetweenArray procedure to add unordered_lists_compared
  argument (disabled by default). When enabled, array elements are considered
  unordered list, so value comparison is adapted to check differences between
  two lists.

  * tcl/util.tcl, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: Add notset_equals_empty arg to
  getDiffBetweenArray  Update getDiffBetweenArray procedure to add
  notset_equals_empty argument (disabled by default). When enabled not-set
  element in array is equivalent to element set to an empty value.

2022-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Create getDiffBetweenCurEnvAndColl
  from cmdModuleRestore  Create getDiffBetweenCurEnvAndColl procedure from
  code of cmdModuleRestore to analyze a collection content and produce
  differences compared to current environment.

2022-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stash
  subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stash,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stash sub-command

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.61-coll/030-save.exp: ts/doc: add stash test/doc on
  'module-info command'

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stash
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stash' sub-command  Introduce stash sub-command to save current environment
  and restore initial one.  This sub-command cannot be called from a
  modulefile evaluation context.  Add sub-command empty skeleton:
  cmdModuleStash.  Sub-command accepts no argument nor option.

  * .aspell.en.pws, doc/source/design/initial-environment.rst,
  doc/source/design/stash-environment.rst: doc: add stash-environment design
  doc

2022-09-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test FreeBSD 13.1 instead of eol 13.0

2022-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/lint.00-init/005-init_ts.exp: ts: do not lint lib/config.guess
  generated file

  * .aspell.en.pws, NEWS.rst, testsuite/lint.00-init/005-init_ts.exp: ts:
  temporarily ignore remaining shellcheck reports  Make 'mt lint' pass with
  remaining shellcheck reports on sh, bash and ksh scripts. Waiting for
  another contribution to fix the remaining warnings and notices.  Related:
  #470

  * NEWS.rst, init/profile.sh.in: init: only source sh or bash init if BASH
  var is set  Update profile script for sh-like shells to only source sh or
  bash initialization script when BASH environment variable is found set.
  Fixes #473

2022-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, NEWS.rst: doc: desc. script/mb in CONTRIBUTING

2022-09-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst: doc: desc lint testsuite in CONTRIBUTING

  * .aspell.en.pws, CONTRIBUTING.rst: doc: desc. script/mt utility in
  CONTRIBUTING

  * CONTRIBUTING.rst: doc: desc. quick testsuite mode in CONTRIBUTING

2022-09-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Update
  autoinit sh code to fix SC2166/SC2086  Apply on auto-generated autoinit code
  for sh-kind shells the same changes than initialization scripts to fix the
  SC2166 and SC2086 issues reported by ShellCheck linter.  Autoinit generated
  code is thus kept in line with initialization script code.

2022-08-31  Lukáš Zaoral <lzaoral@redhat.com>

  * configure: lint(ShellCheck): fix SC2163 warning  According to ShellCheck's
  documentation:  export takes a variable name, but ShellCheck has noticed
  that you give it an expanded variable instead.  Remove $/${} for that, or
  use ${var?} to quiet.  Related: https://www.shellcheck.net/wiki/SC2163
  Related: #470

  * init/profile.sh.in, script/add.modules.in, script/mkroot:
  lint(ShellCheck): fix SC2046 warning  According to ShellCheck's
  documentation:  When command expansions are unquoted, word splitting and
  globbing will occur. This often manifests itself by breaking when filenames
  contain spaces.  Related: https://www.shellcheck.net/wiki/SC2046 Related:
  #470

  * configure, .../example-sessions/bar-defaults.sh,
  .../example-sessions/bar-loads.sh, .../example-sessions/bar-switch.sh,
  .../example-sessions/foo-avail1.sh, .../example-sessions/foo-avail2.sh,
  .../example-sessions/foo-defaults.sh, .../example-sessions/foo-loads.sh,
  .../example-sessions/foo-switch.sh, .../example-sessions/modavail.sh,
  .../example-sessions/modversion.sh, .../example-sessions/ompi-defaults.sh,
  .../example-sessions/ompi-loads1.sh, .../example-sessions/ompi-switch.sh,
  .../example-sessions/ompi-switch.sh.m431, init/bash.in,
  init/bash_completion.in, init/ksh.in, init/sh.in, script/add.modules.in,
  script/commit-msg, script/envml, script/mkroot, script/mt,
  script/pre-commit, testsuite/bin/install_test_sh, testsuite/systest:
  lint(ShellCheck): fix SC2086 info diagnostic  Some variables, that were
  unquoted intentionally were converted to arrays.  According to ShellCheck's
  documentation:  Quoting variables prevents word splitting and glob
  expansion, and prevents the script from breaking when input contains spaces,
  line feeds, glob characters and such.  Related:
  https://www.shellcheck.net/wiki/SC2086 Related: #470

  * configure, doc/example/source-script-in-modulefile/bar-2.1/bar-setup.sh,
  doc/example/source-script-in-modulefile/foo-1.2/foo-setup.sh:
  lint(ShellCheck): fix SC2155 warning  According to ShellCheck's
  documentation:  In the original code, the return value of mycmd in $(mycmd)
  is ignored, and export will instead always return true.  This may prevent
  conditionals, set -e and traps from working correctly.  Related:
  https://www.shellcheck.net/wiki/SC2155 Related: #470

2022-08-26  Lukáš Zaoral <lzaoral@redhat.com>

  * doc/example/source-script-in-modulefile/bar-2.1/bar-setup.sh,
  doc/example/source-script-in-modulefile/foo-1.2/foo-setup.sh:
  lint(ShellCheck): fix SC2128 warning  These occurrences do not cause any
  problems described below but it's better to be verbose that we indeed want
  to access the first array element.  According to ShellCheck's documentation:
  When referencing arrays, $myarray is equivalent to ${myarray[0]} -- it
  results in only the first of multiple elements.  Related:
  https://www.shellcheck.net/wiki/SC2128 Related: #470

  * script/envml, testsuite/cmd.exe: lint(ShellCheck): fix SC2048 warning
  According to ShellCheck's documentation:  Use "$@" (with quotes) to prevent
  whitespace problems.  $* and ${array[*]}, unquoted, is subject to word
  splitting and globbing.  Related: https://www.shellcheck.net/wiki/SC2048
  Related: #470

  * init/bash_completion.in: lint(ShellCheck): fix SC2178 warning  These
  occurrences do not seem to cause any problems described below but let's
  still fix it for the sake of consistency within this script.  According to
  ShellCheck's documentation:  ShellCheck noticed that you have used a
  variable as an array, but then assign it a string.  array=foo is equivalent
  to array[0]=foo, and leaves the rest of the elements unaffected.  Related:
  https://www.shellcheck.net/wiki/SC2178 Related: #470

2022-08-25  Lukáš Zaoral <lzaoral@redhat.com>

  * configure, init/bash.in, init/bash_completion.in, init/ksh.in, init/sh.in,
  script/envml, testsuite/bin/install_test_sh: lint(ShellCheck): fix SC2166
  warning  According to ShellCheck's documentation:  -a and -o  in [ .. ] test
  expressions are not well defined, and can cause incorrect results when
  arguments start with dashes or contain !.  Related:
  https://www.shellcheck.net/wiki/SC2166 Related: #470

  * init/bash_completion.in: lint(ShellCheck): fix SC1035 error  According to
  ShellCheck's documentation:  Bourne shells are very whitespace sensitive.
  Adding or removing spaces can drastically alter the meaning of a script.
  Related: https://www.shellcheck.net/wiki/SC1035 Related: #470

  * script/envml, script/mt: lint(ShellCheck): fix SC2068 error  According to
  ShellCheck's documentation:  Double quotes around $@ and ${array[@]})
  prevent globbing and word splitting of individual elements, while still
  expanding to multiple separate arguments.  Related:
  https://www.shellcheck.net/wiki/SC2068 Related: #470

  * doc/example/compiler-etc-dependencies/example-sessions/common_code.sh,
  init/bash.in, init/bash_completion.in, init/ksh.in, init/profile.sh.in,
  init/sh.in: lint(ShellCheck): fix SC2148 error  According to ShellCheck's
  documentation:  Different shells support different features.  To give
  effective advice, ShellCheck needs to know which shell your script is going
  to run on.  Related: https://www.shellcheck.net/wiki/SC2148 Related: #470

  * init/bash.in, init/ksh.in, init/sh.in: init: add vim modeline to {,b,k}sh
  scripts  ... to enable correct syntax highlighting.

2022-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst: doc: desc. usage and --help work for scripts in
  NEWS

  * script/mtreview: script: add usage msg and --help option on mtreview

  * script/mlprof: script: add usage msg and --help option on mlprof

  * script/mt: script: add usage msg and --help option on mt

2022-08-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp: ts: accept version name with
  '_' char

  * script/mb: script: keep old releases among benched versions in mb  Update
  mb script to skip several releases and be able to run bench or profiling on
  old and recent releases. Versions 4.1, 4.3, 4.5, 4.7 and 5.1 are retained
  for bench mode. 4.5, 4.7 and 5.1 are retained for profile mode.

  * script/mb: script: add usage msg and --help option on mb

  * script/mrel: script: add usage msg and --help option on mrel

  * script/mpub: script: add usage msg and --help option on mpub

2022-08-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in,
  tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modspec.tcl,
  tcl/report.tcl.in, tcl/subcmd.tcl.in,
  testsuite/lint.00-init/005-init_ts.exp: Fix notices reported by linter on
  tcl source files  All linter reports are now fixed. Remove specific linter
  rule for modulecmd.tcl in lint testsuite.

  * .aspell.en.pws, .github/workflows/linux_tests.yaml: gh: migrate linux
  tests to ubuntu-20.04  ubuntu-18.04 is being deprecated and will be removed
  in a few weeks. For Tcl 8.5 jobs, the Tcl version has to be deployed
  manually.

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Fix too long line issues on Tcl source files

  * .github/workflows/lint_tests.yaml: gh: add lint-tests workflow

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Fix warnings reported by linter on tcl source files

2022-08-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modspec.tcl,
  tcl/report.tcl.in, tcl/subcmd.tcl.in, tcl/util.tcl: Fix errors reported by
  linter on tcl source files  Use Nagelfar comments to help linter to
  correctly understand dynamic aspects of the code.

  * init/tcl.in: init: fix too long line issues in tcl

  * script/mb, script/mrel, script/nglfar2ccov: script: fix too long line
  issues in mb/mrel/nglfar2ccov

  * script/mlprof, script/mrel, script/mtreview: script: fix lint issues on
  mrel/mlprof/mtreview

  * testsuite/lint.00-init/030-tcl.exp: ts: add tcl script lint tests

  * Makefile: Remove testsyntax Makefile target  testsyntax Makefile target is
  removed. testlint testsuite has to be used instead.

  * testsuite/lint.00-init/022-ksh.exp: ts: add ksh script lint tests

  * testsuite/lint.00-init/021-bash.exp: ts: add bash script lint tests

  * testsuite/lint.00-init/020-sh.exp: ts: add sh script lint tests

  * .aspell.en.pws, .gitignore, Makefile, NEWS.rst, script/mt,
  testsuite/config/unix.exp, testsuite/lint.00-init/005-init_ts.exp,
  testsuite/lint.00-init/006-procs.exp,
  testsuite/lint.00-init/011-save_test_env.exp: ts: add lint testsuite

2022-08-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/readme.txt, contrib/scripts/resetenv, contrib/scripts/resetgnome,
  contrib/template/.aliases, contrib/template/.bash_profile,
  contrib/template/.bashrc, contrib/template/.cshrc,
  contrib/template/.fvwm2rc, contrib/template/.login,
  contrib/template/.logout, contrib/template/.mailcap,
  contrib/template/.mime.types, contrib/template/README.dotfiles,
  contrib/template/resetenv.conf: contrib: remove unmaintained template/script
  content  Remove the contrib template and scripts files as they are not
  maintained since a long time in this repository and seem to be deprecated.

2022-08-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc initial environment in MIGRATING

2022-08-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst: doc: fix changed/new features dispatch in changes
  doc

2022-08-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/initial-environment.rst,
  doc/source/design/module-tags.rst, doc/source/design/sticky-modules.rst:
  doc: desc. sticky unload on restore in design notes

  * doc/source/changes.rst: doc: use bullet list for concise desc. in change
  doc

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. sticky
  unload on restore in NEWS/man/changes

2022-08-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.70-maint/440-reset.exp: ts: adapt existing tests for
  sticky unload on restore

  * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Allow unload of sticky modules on
  restore sub-cmd  Allow the unload of sticky modules when restoring
  collection. Goal is to be able to restore designated collection as it was
  saved, thus without the loaded sticky modules. If such collections were
  saved without the sticky modules in it, it means that these sticky modules
  can safely be unloaded when moving to the collection state.  As a result,
  using the --force option is of no use for restore sub-command.  This change
  does not impact super-sticky modules. Such modules cannot be unloaded during
  a restore, even if forced.  With this change, behavior of restore
  sub-command with sticky modules is aligned with Lmod.

2022-08-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/initial-environment.rst: doc: add
  initial-environment design notes

2022-08-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/440-reset.exp: ts: add reset_target_state tests
  in 70/440

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  reset_target_state in NEWS/man/changes

2022-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test reset_target_state
  config option

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add reset_target_state config to completion script

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add reset_target_state configuration
  option  Add reset_target_state configuration option that defines the
  environment state restored by the reset sub-command. Equals __init__ by
  default, which means reset restore the initial environment by default.
  Other valid values are __purge__, which means target state is purged
  environment, and any existing collection name.

2022-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  testsuite/modules.61-coll/060-saveshow.exp: doc: desc module saveshow when
  no default in NEWS/man/changes

  * testsuite/modules.61-coll/060-saveshow.exp: ts: update/add tests for
  'module saveshow' behavior

  * tcl/subcmd.tcl.in: Show initial env when no default collection exists
  Update saveshow sub-command to display initial environment when no specific
  collection is asked and default collection does not exist.

  * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp:
  ts: test 'module restore' without arg in initrc

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc module
  restore when no default in NEWS/man/changes

  * testsuite/modules.61-coll/040-restore.exp: ts: update/add tests for
  'module restore' behavior

  * tcl/subcmd.tcl.in: Restore initial env when no default collection exists
  Update restore sub-command to restore initial environment when no specific
  collection is asked and default collection does not exist.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. module
  restore __init__ in NEWS/man/changes

  * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix binpath add
  detection in 70/310

  * tcl/main.tcl.in, tcl/report.tcl.in: Same special treatment for reset than
  restore subcmd  Reports loads/unloads like restore sub-command. No auto
  unload of modules if auto_handling is disabled.

  * testsuite/modulefiles.3/reset/1, testsuite/modulefiles.3/reset/2,
  testsuite/modules.70-maint/440-reset.exp: ts: add auto unload test during
  reset sub-cmd in 70/440

2022-08-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/440-reset.exp: ts: add restore __init__ tests
  in 70/440

  * testsuite/example/initrc.in, testsuite/modulefiles.3/foo/.modulerc,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/440-reset.exp: ts: add reset sub-cmd tests

2022-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/initrc.in, testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.70-maint/120-autoinit.exp: ts: add autoinit tests for
  __MODULES_LMINIT

  * testsuite/modules.70-maint/210-clear.exp: ts: add clear tests for
  __MODULES_LMINIT

  * .github/workflows/linux_tests.yaml: gh: add missing xrdb tool to test
  x-resource on bionic

  * testsuite/modules.00-init/005-init_ts.exp: ts: add X11 setup state info to
  test log

2022-08-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit tests for
  __MODULES_LMINIT  Fix several issues in 70/120 test case on the way.

  * .aspell.en.pws, tcl/coll.tcl.in, tcl/modfind.tcl.in, tcl/subcmd.tcl.in:
  Core code for cmdModuleReset  Implement reset sub-command as a 'module
  restore __init__'. Where __init__ designates the virtual init collection
  made of the initial environment state described in __MODULES_LMINIT.
  readCollectionContent has been split to create parseCollectionContent
  procedure which analyzes collection content passed as argument.  When
  __init__ collection is designated, cmdModuleRestore do not check collection
  files but parseCollectionContent based on value fetched from
  __MODULES_LMINIT environment variable.

  * testsuite/modulefiles.3/modbad/reset,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: add tests for
  mod-to-sh sub-command

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add reset
  test/doc on 'module-info command'

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. reset
  subcmd in NEWS/man/changes

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'reset' sub-command  Introduce reset sub-command to restore initial
  environment state.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleReset.
  Sub-command accepts no argument nor option.

2022-08-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add reset
  subcmd to completion scripts

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  __MODULES_LMINIT in NEWS/man/changes

  * .aspell.en.pws, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record init state
  in __MODULES_LMINIT  During the autoinit sub-command, record the initial
  loaded state (state obtained after evaluating modulespath and initrc
  initialization files) in the __MODULES_LMINIT environment variable.  The
  initial loaded state is formed as a collection content, describing the
  enabled modulepaths and the loaded modules with the tags applied to these
  modules.  __MODULES_LMINIT is a colon-separated list. Each entry
  corresponding to a 'module use' or 'module load' collection line.

2022-08-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/subcmd.tcl.in,
  testsuite/modules.00-init/120-siteconfig.exp: Fetch loaded mod props with
  getLoadedModulePropertyList  Create the getLoadedModulePropertyList
  procedure to fetch the different loaded module properties.
  getLoadedModulePropertyList replaces the specific procedure used for each
  property kind.

2022-08-24  Jan Macku <jamacku@redhat.com>

  * .github/workflows/differential_shellcheck.yml: ci(lint): add shell linter
  - Differential ShellCheck  It performs differential ShellCheck scans and
  report results directly in pull request.  documentation:
  https://github.com/redhat-plumbers-in-action/differential-shellcheck

2022-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: add shell support section in
  modulefile man

2022-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md, doc/source/changes.rst, doc/source/index.rst,
  doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref to
  cmd shell support

2022-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc changes on --all/--force options in man

  * doc/source/module.rst: doc: reword --auto/--no-auto option desc. in man
  --auto and --no-auto options are global to all sub-commands evaluating
  modulefile in load or unload mode. Rewrite the description of these option
  in module(1) man not to update them each time a new load or unload
  sub-command is introduced (as --auto and --no-auto are not changed).

  * testsuite/modules.61-coll/021-savelist-search.exp: ts: add savelist --all
  tests

2022-08-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. --all
  option on savelist in NEWS/man/changes

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  List coll from any target with --all opt on savelist  Add support for --all
  command-line option for savelist sub-command. When set, all collections are
  reported and not only those for currently defined collection target.

2022-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.00-init/140-color.exp:
  Highlight all savelist subcmd search patterns  Refactor on the way a little
  bit cmdModuleSavelist.

  * NEWS.rst, tcl/report.tcl.in, tcl/subcmd.tcl.in,
  testsuite/modules.00-init/140-color.exp: Highlight all list subcmd search
  patterns

  * testsuite/modules.61-coll/021-savelist-search.exp,
  testsuite/modules.70-maint/290-json.exp: ts: test pattern search on savelist
  sub-cmd

2022-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  savelist filtering in NEWS/changes/man

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/350-term_width.exp: ts: adapt existing tests now
  savelist accepts args

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add search capabilities to savelist
  subcmd  When one or multiple strings are passed to the savelist sub-command,
  only output the collections that match at least one of this string (OR
  operation).  Sub-command header message is adapted when strings are passed
  to the sub-command. However same header message is reported if there is no
  saved collection to report from the start.  Search capabilities rely on the
  modEq comparison procedure, so it takes into account the search_match mode
  (starts-with/contains) and the insensitive case search mode.  Icase mode is
  set to search by default for savelist sub-command.

  * tcl/subcmd.tcl.in: Use coll name/file array rather list in
  cmdModuleSavelist

2022-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow search match
  option on savelist subcmd  Allow to pass the search match options (-S/-C) to
  the savelist sub-command.

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow collection
  name as argument to savelist subcmd  Allow the savelist sub-command to
  receive collection name as argument.

2022-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl, tcl/subcmd.tcl.in: Unset mod spec on source subcmd if
  file exists  In case module specification corresponds to a full path name
  file, unset parsed module specification on source sub-command. It is done
  not to confuse specific character in file path name (like '+') with module
  variant specification.

2022-07-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: clarify set-alias only define
  shell alias

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/170-cwd.exp,
  testsuite/modules.70-maint/090-source.exp: ts: add avail modfile source
  tests in 70/090

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. arg
  update on source subcmd in changes/man/news

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Allow module to be specified on source
  subcmd  Update source sub-command to accept module specification as
  argument. File path stay the main specification kind. Which means if a file
  foo/1.0 exists, this file is sourced and not the modulefile foo/1.0 in
  enabled modulepath.  Fixes #424.

2022-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl: Record raw arg with parsed module spec  Update module
  specification parsing to record the raw argument translated by specification
  analysis.  Add getRawArgumentFromVersSpec procedure to fetch this raw spec
  from recorded analyzed module specification.

2022-07-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Check state is defined before unset in unsetState

  * testsuite/config/base-config.exp, testsuite/modulefiles.3/mod-to-sh/1.0,
  testsuite/modulefiles.3/mod-to-sh/1.1,
  testsuite/modulefiles.3/mod-to-sh/2.0,
  testsuite/modulefiles.3/modbad/mod-to-sh,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/430-mod-to-sh.exp: ts: add tests for mod-to-sh
  sub-command

2022-07-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc mod-to-sh in NEWS/MIGRATING

2022-07-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. mod-to-sh subcmd in module man

  * NEWS.rst, doc/source/module.rst: doc: fix subcmd list using
  --auto/--no-auto/--force opts

  * doc/source/design/add-new-config-option.rst,
  doc/source/design/add-new-sub-command.rst,
  .../design/advanced-module-version-specifiers.rst,
  doc/source/design/control-mode-behaviors.rst,
  .../design/default-latest-version-specifiers.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/insensitive-case.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/design/module-selection-contexts.rst,
  doc/source/design/module-tags.rst,
  doc/source/design/output-configuration.rst,
  .../design/source-shell-script-in-modulefile.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst: doc:
  fix indent in design documents

  * doc/source/design/add-new-config-option.rst,
  doc/source/design/add-new-sub-command.rst,
  doc/source/design/advanced-module-version-specifiers.rst,
  doc/source/design/control-mode-behaviors.rst,
  doc/source/design/default-latest-version-specifiers.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/insensitive-case.rst,
  doc/source/design/lint-sub-command.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/design/magic-cookie-check.rst,
  doc/source/design/module-selection-contexts.rst,
  doc/source/design/module-tags.rst,
  doc/source/design/output-configuration.rst,
  doc/source/design/shell-completion.rst,
  doc/source/design/source-shell-script-in-modulefile.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst: doc:
  add vim settings at end of design documents

  * .aspell.en.pws, doc/source/cookbook/compiler-etc-dependencies.rst,
  doc/source/cookbook/ensure-user-qualify-modules.rst,
  doc/source/cookbook/expose-procs-vars-to-modulefiles.rst,
  doc/source/cookbook/hide-and-forbid-modules.rst,
  doc/source/cookbook/inhibit-report-info.rst,
  doc/source/cookbook/log-module-commands.rst,
  doc/source/cookbook/module-info-name-return-basename.rst,
  doc/source/cookbook/modulefiles-in-git.rst,
  doc/source/cookbook/modulepaths-persist-over-sudo.rst,
  doc/source/cookbook/new-features-without-breaking-old-module.rst,
  doc/source/cookbook/reduce-io-load.rst,
  doc/source/cookbook/source-script-in-modulefile.rst,
  doc/source/cookbook/sticky-modules.rst,
  doc/source/cookbook/test-modulefiles.rst,
  doc/source/cookbook/tips-for-code-reuse.rst,
  doc/source/cookbook/top-priority-values.rst,
  doc/source/cookbook/unload-firstly-loaded.rst: doc: add vim settings at end
  of cookbook documents

  * doc/source/cookbook/tips-for-code-reuse.rst: doc: fix trailing wspace &
  list ident in tips-for-code-reuse

2022-07-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/mod-to-sh-sub-command.rst: doc: add mod-to-sh
  subcmd design notes

  * NEWS.rst: doc: desc. lint-sub-command design notes in NEWS

2022-07-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: update clear subcmd tests as only
  set vars are unset

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.70-maint/070-display.exp: ts: adapt existing tests to new
  shelltype state setup

  * tcl/subcmd.tcl.in: Silence message report on mod-to-sh subcmd  When
  performing a mod-to-sh sub-command make message report silent not to mix
  these messages with the produced shell code that will be output on the
  message channel.  If a debugging verbosity is defined (trace mode or above),
  message report is left as is.

  * tcl/envmngt.tcl.in: Filter Modules-specific env var from mod-to-sh result
  When running modulefile evaluation for mod-to-sh sub-command, removes all
  Modules-specific environment variable from result to only report the
  environment changes done by modulefile, not the Modules load context.

2022-07-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Get list of Modules-specific env
  var in glob form  Add getModulesEnvVarGlobList procedure to get all
  Modules-specific environment variable in glob form.  Update clear and state
  sub-command to rely on this procedure.  With this change clear sub-command
  only unset Modules-specific environment variables that are set.

  * NEWS.rst, tcl/subcmd.tcl.in: Clear pushenv stacks on clear subcmd

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Core code for cmdModuleModToSh  Add
  code for mod-to-sh sub-command. Introduce modtosh_real_shell shell to save
  evaluation shell set for modulecmd.tcl. Then shell set for mod-to-sh is set
  as target shell for shell code production.  Modulefiles specified are loaded
  through cmdModuleLoad. Generated shell code is then sent to the report
  message channel (stderr) by renderSettings. Shell code is then cleared and
  modulecmd.tcl evaluation shell is restored to get final evaluation status on
  regular shell code output channel (stdout).

  * tcl/envmngt.tcl.in, tcl/main.tcl.in: Rename cleanupAndExit into
  flushAndExit

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in: Deduce shelltype
  state value from shell state  Add initStateShellType procedure to set
  shelltype state when first retrieving its value (with getState). shelltype
  is set based on value set for shell state.

2022-07-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in: Move report msg flush in dedicated
  proc  Create reportFlush, procedure that output the final report messages,
  flush the message channel and close it. Make cleanupAndExit procedure call
  reportFlush rather implementing these actions locally.

  * tcl/envmngt.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in: Output produced
  shell code in one puts call  Instead of outputting shell code to sdtout for
  each line, collect all produced shell code in a list variable (g_shcode_out)
  and output all the code in a single puts call at the end of module command
  execution.  Create a specific renderFlush procedure to make the puts to
  stdout as output could occur after renderSettings but also after
  reportErrorAndExit and the exit catch branch in the main procedure.
  renderFlush is called in cleanupAndExit procedure, as it is always run in
  the end of the execution whatever if everything goes well or if error
  occurs.  Code of the putsModfileCmd procedure is also adapted to build list
  of message to output to stdout with a flag to know if end-of-line should be
  added at end of message. Previously this procedure was listing arguments to
  directly pass to puts calls.

2022-07-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst, testsuite/modulefiles/info/command,
  testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add mod-to-sh
  test/doc on 'module-info command'

2022-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/add-new-sub-command.rst, doc/source/modulefile.rst: doc:
  desc. subcmd in modulefile(4) if avail from this ctx

  * doc/source/changes.rst: doc: desc. mod-to-sh in changes

  * doc/source/design/add-new-sub-command.rst: doc: add subcmd to linter db if
  callable from modfile

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add mod-to-sh
  subcmd to completion scripts

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'mod-to-sh'
  sub-command  Introduce mod-to-sh sub-command to output shell code
  corresponding to the environment changes of designated modulefiles.  This
  sub-command cannot be called from a modulefile evaluation context.  Add
  sub-command empty skeleton: cmdModuleModToSh.  Sub-command accepts --icase,
  --auto/--no-auto and --force options.  Fixes #447.

  * CONTRIBUTING.rst: doc: fix misplaced anchor in CONTRIBUTING

2022-07-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, Makefile, NEWS.rst, doc/Makefile, init/Makefile: install:
  use install rather mkdir or cp  Use install command rather mkdir or cp to
  apply regular file mode when installing Modules. A specific umask
  configuration set in the current environment will not impact modes set on
  installed files.  Follow same approach than Makefiles generated by
  autotools, with an INSTALL Makefile variable.

2022-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, MIGRATING.rst: doc: desc. lint subcmd and options in
  MIGRATING  Closes #451.

2022-07-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. lint subcmd and options in NEWS

  * Makefile, tcl/subcmd.tcl.in: Disable nagelfar syntaxdb/plugin usage if
  addons disabled

  * .aspell.en.pws, doc/source/design/lint-sub-command.rst: doc: desc. lint
  subcmd in design

2022-07-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: recommends nagelfar
  installation  Now nagelfar is available on Fedora and EPEL, recommends its
  installation to be able to lint modulefiles.

2022-07-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/add-new-sub-command.rst: doc: update linter scripts when
  adding new subcmd

2022-07-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst: doc: desc lint subcmd in
  man/changes

2022-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/030-options.exp,
  testsuite/modules.70-maint/420-lint.exp: ts: add module lint install test

2022-07-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: add rules to deploy global rc linter plugin

  * contrib/nagelfar/plugin_globalrc.tcl, tcl/subcmd.tcl.in: Lint global rc
  file specifically  Global rc file are evaluated as modulefile but it is not
  recommended to use commands that change user environment in such file. When
  linting global rc file, the modulefile syntax database is used but a
  specific plugin is set to warn against non-recommended usages.

2022-07-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Lint global RC
  files  When no argument is provided to lint sub-command, also lint all
  existing and readable global RC files. When arguments are provided to lint,
  test if resolved files are global RC files. If so, lint them as modulerc
  files instead of modulefile.  The getGlobalRcFileList procedure has been
  created from code present in runModulerc procedure. The new procedure return
  the list of existing and readable global RC files.

2022-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Detect whether file to lint is modulefile or modulerc
  When a file path is provided as argument, detect if it is a modulerc or a
  modulefile to accurately lint this file.

  * .aspell.en.pws, INSTALL.rst: doc: desc.
  --nagelfardatadir/--enable-nagelfar-addons

  * contrib/rpm/environment-modules.spec.in: rpm: install Modules-specific
  Nagelfar linter addons

  * Makefile, Makefile.inc.in, configure, tcl/subcmd.tcl.in: install: add
  --nagelfardatadir/--enable-nagelfar-addons  Add --nagelfardatadir and
  --enable-nagelfar-addons installation option to control whether or not
  Modules-specific Nagelfar files need to be installed and in what location.

2022-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lint/.modulerc, testsuite/modulefiles.3/lint/1.0,
  testsuite/modulefiles.3/lint/1.1, testsuite/modulefiles.3/lint/1.2,
  testsuite/modulefiles.3/lint/1.3, testsuite/modulefiles.3/lint/1.4,
  testsuite/modulefiles.3/lint/2.0, testsuite/modulefiles.3/modbad/lint,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/420-lint.exp: ts: add tests for lint sub-command

2022-07-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Use specific-plugin when linting with Nagelfar  Use the
  specific plugin to lint modulefile or the one to lint modulerc when Tcl
  linter is Nagelfar.

  * contrib/nagelfar/plugin_modulefile.tcl,
  contrib/nagelfar/plugin_modulerc.tcl: nagelfar: add plugins to lint
  modulefile/modulerc  Create a Nagelfar plugin to lint modulefile and another
  one to lint modulerc. These plugins help to report usage of deprecated, not
  implemented or not recommended commands or variables. Also help to handle
  --option=value argument form.

2022-06-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/modulefiles/module-git, contrib/modulefiles/use.own: contrib: fix
  lint warning on example modulefiles

  * tcl/subcmd.tcl.in: Use Nagelfar syntax db located in contrib directory

  * contrib/nagelfar/syntaxdb_modulefile.tcl,
  contrib/nagelfar/syntaxdb_modulerc.tcl: Add specific syntaxdb for modulefile
  and modulerc  Add Nagelfar syntax databases to lint modulefile and another
  one to lint modulerc.

2022-06-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Lint modulerc files when no arg provided  In addition
  to the modulefiles available from enabled modulepaths, also lint the
  modulerc files from these modulepaths.  Set specific command for linting
  modulerc files, with a different syntax db file when Nagelfar is used.

  * tcl/subcmd.tcl.in: Use syntax database when linting with Nagelfar  When
  Tcl linter is Nagelfar, use a specific syntax database to lint modulefiles.

  * .aspell.en.pws, tcl/subcmd.tcl.in: Lint all avail modfile when no arg
  provided  When no argument is provided to the lint sub-command, resolve all
  modulefiles that current user has access to and lint all these files.
  Update cmdModuleLint to first gather the list of all files to lint, then
  lint these files.

2022-06-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: add --with-tcl-linter on a test
  case

2022-06-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/report.tcl.in, tcl/subcmd.tcl.in: Move linter output report in
  dedicated proc  Create displayLinterOutput procedure to handle the parsing
  and output of each linter messages. Current code handles specific output
  from Nagelfar linter and generic error report for other programs set as
  linter.

  * configure: install: warning if tcllinter program not found

  * INSTALL.rst, doc/source/module.rst: doc: desc --with-tcl-linter-opts in
  INSTALL/man

  * testsuite/modules.70-maint/220-config.exp: ts: adapt tcl_linter tests for
  --with-tcl-linter-opts

  * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in:
  install: add --with-tcl-linter-opts configure option  Introduce the
  --with-tcl-linter-opts configure option to choose at installation time the
  options to pass to the tcl linter program. Default option is ''.

2022-06-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test tcl_linter config option

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  MODULES_TCL_LINTER in man/changes

  * INSTALL.rst: doc: desc --with-tcl-linter in INSTALL

  * INSTALL.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  tcl_linter config in man/changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add tcl_linter config to completion script

  * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in:
  install: add --with-tcl-linter configure option  Introduce the
  --with-tcl-linter configure option to choose at installation time the
  default program command to use to lint modulefiles. Default Tcl linter is
  'nagelfar.tcl'.

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Introduce tcl_linter configuration
  option  Add tcl_linter option to configure the program to use by lint
  sub-command to lint modulefiles. When configuration is modified it sets the
  MODULES_TCL_LINTER environment variable.

2022-06-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/subcmd.tcl.in: Parse and format linter output  Output
  linter output under a *Linting* message block. Parse each output line to
  produce NOTICE, WARNING or ERROR report messages.

2022-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/subcmd.tcl.in: Lint every modulefile passed as
  argument  Update cmdModuleLint to resolve each argument and find
  corresponding modulefile. Pass these modulefile to Nagelfar to lint them.
  In this initial code, Nagelfar is expected to be found at
  nagelfar/nagelfar.tcl and its execution output is sent to the terminal.

2022-06-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add lint
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Introduce 'lint' sub-command  Add the lint sub-command to check syntax of
  modulefiles.  Initial commit which adds empty cmdModuleLint procedure and
  add code to reach it through module procedure.  General sub-command
  properties: * shortcut name: none * accepted options: --all, --icase *
  expected number of argument: 0 to N * accept boolean variant specification:
  no * parse module version specification: yes * fully read modulefile when
  checking validity: no * only called from top level: yes

2022-07-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc protected_envvars in NEWS  Fixes #429.

2022-07-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: fix missing liblapack0 dep for R
  pkg on Cygwin

  * .cirrus.yml: cirrus: update to python39 on FreeBSD-13

2022-06-08  Adrien Cotte <adrien@cotte.com>

  * testsuite/modulefiles.3/protect/1.0, testsuite/modulefiles.3/protect/2.0,
  .../modules.70-maint/410-protected_envvars.exp: ts: add 70/410
  protected_envvars

2022-03-04  Adrien Cotte <adrien@cotte.com>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test protected_envvars config
  option

2022-02-21  Adrien Cotte <adrien@cotte.com>

  * init/zsh-functions/_module.in: Zsh completion support for
  protected_envvars config

  * init/fish_completion: Fish completion support for protected_envvars config

  * init/Makefile: Bash completion support for protected_envvars config

  * .aspell.en.pws, INSTALL.rst, doc/source/changes.rst,
  doc/source/module.rst: doc: desc. protected_envvars configuration

  * tcl/envmngt.tcl.in, tcl/init.tcl.in: Add protected_envvars configuration
  option  Add the protected_envvars configuration option that prevents choosen
  environment variables to be set or unset by Module commands.

2022-06-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, tcl/mfinterp.tcl.in: Fix source-sh/sh-to-mod
  when fish regex-easyesc is on  Fix source-sh modulefile command and
  sh-to-mod sub-command when used with a fish shell script when the
  regex-easyesc fish option is enabled. This option has been introduced in
  fish 3.1 and is turned on by default starting fish 3.5.  Fixes #463.

  * NEWS.rst: doc: desc. enclose install paths work in NEWS

2022-06-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile: install: create etcdir from init Makefile if used

2022-06-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/_static/literal_block.css,
  doc/source/_static/rtd_literal_block.css, doc/source/conf.py: doc: fix css
  config for sphinx >= 3.5  Use html_css_files configuration option introduced
  in Sphinx 1.8 to setup CSS in a more conventional way. Also fix
  pre.literal-block specific styling as the 'section' div is not used anymore
  in newer Sphinx versions.

2022-06-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test install path containing space char  Transform
  the second FreeBSD test case into a Ubuntu testcase, running on last LTS
  release. For this test case, installation is made over a path containing a
  whitespace character.  No specific quarantine setup with this test case, as
  it is not compatible with installation in path containing a whitespace
  character.

2022-06-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh, testsuite/bin/install_test_fish,
  testsuite/bin/install_test_sh, testsuite/bin/install_test_tcl,
  testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/060-quar.exp,
  testsuite/install.00-init/080-args.exp: ts: fix install tests if space char
  in install path

2022-06-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in: Update autoinit produced code to enclose install path
  Update code generated by the autoinit sub-command to enclose all references
  to installation path to cope with an installation done in a path containing
  whitespace character.  Enclosing modulecmd.tcl installation path this way is
  not effective with the quarantine mechanism that implies a double shell code
  evaluation. So it is advised not to install Modules in a path containing a
  whitespace character if the quarantine mechanism is needed.

2022-06-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/unix.exp, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix tests if space char in
  install location path

  * Makefile, doc/Makefile, init/Makefile: install: enclose install path refs
  in Makefiles

  * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in,
  init/perl.pm.in, init/profile.csh.in, init/profile.sh.in, init/r.R.in,
  init/ruby.rb.in, init/sh.in, init/tcl.in, init/tcsh_completion.in,
  init/zsh.in: init: enclose installation path references  Update
  initialization, profile and completion scripts to enclose all references to
  the installation paths.  Enclosing modulecmd.tcl installation path this way
  is not effective with the quarantine mechanism that implies a double shell
  code evaluation. So it is advised not to install Modules in a path
  containing a whitespace character if the quarantine mechanism is needed.

  * contrib/modulefiles/modules.in, contrib/modulefiles/version.in,
  script/add.modules.in: contrib,script: enclose installation path references
  Update add.modules script and example modulefiles to enclose all references
  to the installation paths.

  * tcl/init.tcl.in, tcl/main.tcl.in, tcl/subcmd.tcl.in: Enclose all
  installation path references  Fix modulecmd.tcl to enclose all references to
  an installation path. These references are thus robust in case a space
  character is part of the installation location.

  * NEWS.rst: doc: desc. init scripts > autoinit migration work

  * .github/workflows/linux_tests.yaml: gh: update test case with disabled
  bin/manpath config

2022-06-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: test source of shell
  completion during autoinit

  * testsuite/modules.70-maint/120-autoinit.exp: ts: add autoinit MANPATH
  setup tests

2022-06-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: use leap 15.3 to get python-Sphinx

2022-06-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * site.exp.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: update tests now autoinit
  sets PATH/MANPATH/etc

  * Makefile, init/Makefile, init/zsh.in, tcl/subcmd.tcl.in: init: setup zsh
  FPATH through autoinit command  Add zsh FPATH setup in autoinit command
  instead of zsh shell initialization script. This way all the shell setup is
  gathered in the autoinit process. What is left in initialization script is
  the code to properly call the autoinit process.  Fixes #462.

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  tcl/subcmd.tcl.in: init: setup shell completion through autoinit command
  Add shell completion setup in autoinit command instead of shell
  initialization scripts. Use this way one modulecmd.tcl internal code instead
  of shell code for every shell having some completion to source (bash, tcsh,
  fish).  Fixes #462.

2022-06-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/sh.in, init/zsh.in, tcl/subcmd.tcl.in: init: setup MANPATH
  through autoinit command  Add MANPATH setup in autoinit command instead of
  shell initialization scripts. Use this way one modulecmd.tcl internal code
  instead of shell code for every shell requiring to setup MANPATH with
  Modules binaries location (sh, bash, ksh, zsh, csh, tcsh, fish).  Fixes
  #462.

2022-06-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/sh.in, init/zsh.in, tcl/subcmd.tcl.in: init: setup PATH
  through autoinit command  Add PATH setup in autoinit command instead of
  shell initialization scripts. Use this way one modulecmd.tcl internal code
  instead of shell code for every shell requiring to setup PATH with Modules
  binaries location (sh, bash, ksh, zsh, csh, tcsh, fish).  Fixes #462.

  * init/bash.in, tcl/envmngt.tcl.in: Export module bash functions directly
  through autoinit  Export the module, _module_raw and ml bash shell functions
  directly through the autoinit sub-command process rather within the bash
  shell initialization script.  Cannot apply the same change to the sh shell
  when it is bash launched as sh, since we cannot tell in the modulecmd.tcl
  execution that the current sh shell is bash (as BASH environment variable is
  not exported to sub-shells).  Fixes #462.

2022-05-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/410-timer.exp: ts: add --timer tests in 70/410

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  --timer option in NEWS/changes/man

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp: ts: adapt existing tests for
  timer state introduction

2022-05-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in: Report duration
  of each proc in timer debug mode  When --timer option is enabled and
  verbosity level is higher or equal to verbose, report trace of each
  procedure executed with their duration. All regular debug messages are
  replaced by these timer trace messages.

2022-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in:
  Introduce --timer option  Add --timer global option to report execution time
  in milliseconds at the end.  Set start time in timer_start global variable
  when --timer is set. Also enable timer state, to know later on that timer
  mode has been asked. Timer report is produced at the and, in last run
  procedure: cleanupAndExit.  Report is shown at any verbosity level.  Timer
  reports are kind of debug information, thus they also use the 'db' sgr key
  to get graphically enhanced.  No need for a dummy reportTimer procedure like
  for reportDebug, to use to gather all messages prior error report
  initialization, as reportTimer is always called after error report being
  initialized.

2022-05-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: describe Optional requirements in MIGRATING

  * testsuite/modulefiles.3/optional/1.0,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/550-optional-opt.exp,
  testsuite/modules.70-maint/240-icase.exp: ts: test misplaced/invalid prereq
  option in 50/550

  * NEWS.rst, tcl/mfinterp.tcl.in: Error on misplaced/invalid options on
  prereq commands  Update prereq command parsing to raise error in case of an
  invalid option or a misplaced one.

  * testsuite/modules.50-cmds/550-optional-opt.exp: ts: adapt optional tests
  as eval failure are not reported

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: No report of eval
  error of optional requirement  Do not report the evaluation error of
  optional requirements. Proceed like on a prereq-any command, when some
  evaluation fails but one succeed.  Update the loadRequirementModuleList
  procedure by adding an argument named 'optional' to know if current load
  attempt is mandatory or not.

2022-05-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Disable auto loading on always-load in DepRe context
  Disable auto-loading on always-load sub-command when evaluated in a
  Dependency Reload context.

2022-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/optional/1.0,
  testsuite/modulefiles.3/optional/2.0,
  testsuite/modules.50-cmds/550-optional-opt.exp: ts: add --optional option
  tests in 50/550

2022-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. --optional and try-load changes in NEWS

  * doc/source/changes.rst, doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/modulefile.rst: doc: desc --optional option in man/changes/design

2022-05-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tryload/2.0,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.50-cmds/518-load-any.exp: ts: add depre tests for
  try-load/load-any mfcmd

2022-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in:
  Change try_modulefile state into a cmdModuleLoad arg  Replace the
  try_modulefile state by the tryload argument on the cmdModuleLoad procedure.
  Update prereqAnyModfileCmd, prereqAllModfileCmd and
  loadRequirementModuleList procedure to pass this tryload argument all along
  toward cmdModuleLoad. This is needed when evaluating module try-load and
  module load-any commands in modulefile.

  * tcl/mfinterp.tcl.in: Allow to pass multiple pre-args on interp cmd alias
  Update initialization of the command aliases on modulefile interpreter to
  allow to pre defined more than one argument to transmit.

2022-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/main.tcl.in: Inhibit autoload in depre ctx for all
  kind of load cmd  Inhibit the auto loading mechanism when module is
  currently evaluated in a Dependency Reload (DepRe) context for load,
  try-load and load-any sub-commands.  This way it avoids to auto reload the
  optional dependency module currently targeted by the main unload order from
  user.

  * testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt existing tests to
  try-load prereq record change

2022-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in: Use optional prereq to record try-load requirements  When
  try-load is used in a modulefile, record implied requirement as optional
  instead of only recording those that are loaded. This way the modulefile
  will get reloaded if requirement is loaded afterward.  Cannot fully rely on
  prereqAllModfileCmd procedure as try-load does not fully correspond to a
  prereq-all --optional: an requirement evaluation error will lead to an error
  of the module try-load command that will abort the modulefile evaluation.

  * tcl/main.tcl.in: Refactor module load/try-load/load-any modulefile code

  * testsuite/modules.70-maint/080-help.exp: ts: adapt existing tests for
  prereq cmds refactoring

  * .aspell.en.pws, tcl/main.tcl.in, tcl/mfinterp.tcl.in: Merge
  prereq-all/prereq-allAH into prereqAllModfileCmd  Merge the prereq-all and
  prereq-allAH procedure into a single prereqAllModfileCmd procedure taking
  current auto_handling option value as first arg to know whether to
  automatically load requirements or not.

  * .aspell.en.pws, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in:
  Merge prereq/prereqAH into prereqAnyModfileCmd proc  Merge the prereq and
  prereqAH procedure into a single prereqAnyModfileCmd procedure taking
  current auto_handling option value as first arg to know whether to
  automatically load requirements or not.

2022-05-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/513-prereq-any.exp,
  testsuite/modules.50-cmds/515-depends-on.exp,
  testsuite/modules.50-cmds/516-prereq-all.exp,
  testsuite/modules.50-cmds/517-always-load.exp: ts: adapt existing tests to
  --optional addition

  * tcl/mfinterp.tcl.in: Add --optional option to prereq commands  Introduce
  the --optional option on prereq commands (prereq, prereq-all, always-load,
  prereq-any and depends-on) to indicate that the prereq list is fully
  optional: if none of these prereqs are loaded, no error occurs.  When
  recording these prereq list in persistency information (__MODULES_LMPREREQ
  variable), the current module name is added as first module in prereq list
  to get this rule always satisfied even if no module from the prereq list is
  loaded.

2022-05-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: Change any_modulefile
  state into a cmdModuleLoad arg  Replace any_modulefile state by the anyload
  argument on cmdModuleLoad procedure.  any_modulefile branch were already not
  in use for 'module load-any' commands used in modulefiles.

  * tcl/mfinterp.tcl.in: Make always-load proc directly use prereq-all  Update
  always-load procedure to make it use directly the auto_handling version of
  prereq-all command.

  * testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.70-maint/080-help.exp: ts: adapt existing tests for prereq
  interp refactoring

  * tcl/subcmd.tcl.in: No need to disable auto_handling to call prereq  Update
  cmdModuleSwitch procedure as it is not anymore needed to disable
  auto_handling option to call a prereq command that does not automatically
  load requirements.

  * tcl/main.tcl.in: Make module load rely on prereq/prereq-all cmds  Update
  module procedure to directly use, when 'module load' is called within a
  modulefile, the prereq/prereq-all commands in their auto_handling or
  non-auto_handling versions.

  * .aspell.en.pws, tcl/mfinterp.tcl.in: Create auto_handling and not version
  of prereq procs  Split prereq and prereq-all procedures into a auto_handling
  version, that attempts to automatically load requirements, and a non
  auto_handling version that raise an error directly if requirement is not
  already loaded.  Adapt Tcl sub-interpreter initialization to make it
  dependent of the auto_handling option enablement. When auto_handling is
  enabled, the auto_handling versions of the prereqs procedure are configured.
  With this change other parts of the code will be able to call either prereq
  or prereqAH directly whether they need a load attempt or not, whatever the
  current status of the auto_handling option.

2022-05-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py,
  version.inc.in: Release of version 5.1.1

  * testsuite/is_module_defined, testsuite/modules.00-init/005-init_ts.exp:
  ts: fix is_modules_defined test  Add bash script to test whether module
  function is defined

  * Makefile, NEWS.rst: install: call git cmds in Makefile only if needed
  Update Makefile to call git command only if the version.inc file needs to
  get rebuilt (if it does not exist or if the git repository has been updated
  after version.inc built).  Include version.inc file in main Makefile only if
  its variables have not been just generated within Makefile flow.

2022-05-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, Makefile, NEWS.rst, lib/.gitignore, lib/Makefile.in:
  install: include generated config.{guess,sub} in dist  Include the
  lib/config.guess and lib/config.sub scripts in distribution tarball if
  generated by autoreconf

  * Makefile, init/Makefile: install: no dependency to version.inc in
  init/Makefile  The Makefile script in the init directory does not depend on
  the definitions stored in the version.inc file. So remove inclusion and
  requirement definition to this version.inc file in init/Makefile.

  * script/mrel: install: locate rpmlint rc file with -r in mrel  Update mrel
  script to locate rpmlint rc file with the -r command-line switch as -f is
  not recognized anymore on rpmlint v2.

  * contrib/rpm/environment-modules.rpmlintrc: install: update rpmlint rc
  config for fc36  Update rpmlint rc file to match the new rpmlint version and
  configuration provided in Fedora 36.

2022-05-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/1.7,
  testsuite/modules.50-cmds/517-always-load.exp: ts: add depre tests for
  always-load command in 50/517

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp:
  Update mod designation with tags set by DepRe modules  Update module
  designation with the tags set by reloading dependent module.  Closes #460.

2022-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/module-tags.rst, tcl/mfinterp.tcl.in,
  tcl/modeval.tcl, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: Update tags set with prereq on
  all loaded mods  Update tags set through prereq command on all already
  loaded requirements.  Closes #459.

2022-05-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/170-cwd.exp:
  ts: test module over a removed current working dir

  * NEWS.rst, tcl/util.tcl: Report known error when cwd cannot be retrieved
  Closes #457.

2022-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/report.tcl.in: Migration conflict error report in
  dedicated proc  Add reportPresentConflictError procedure to report error
  when a conflict is detected.

  * tcl/mfinterp.tcl.in, tcl/report.tcl.in: Migrate prereq error report in
  dedicated proc  Add the reportMissingPrereqError procedure to report error
  when prereq is not satisfied.

  * tcl/mfinterp.tcl.in: Add getCurrentModfileInterpName proc  Add
  getCurrentModfileInterpName procedure to return identifier name of current
  Tcl modulefile interpreter.

2022-05-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modeval.tcl: Return if prereq has been loaded on
  loadRequirementModuleList  Update loadRequirementModuleList procedure to
  also return if one of the requirement from list has been loaded.

2022-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Remove dependency to try_modulefile of cmdModuleUnload
  The try_modulefile state does not impact the cmdModuleUnload procedure as
  the only kind of error reported here is when an empty module name is
  specified. Such error should be reported whatever the try_modulefile state.

  * tcl/main.tcl.in: Clarify {try,any}_modulefile state in ml proc  Clarify
  that the try_modulefile and any_modulefile states cannot be enabled when set
  through the ml procedure: ml shortcut syntax leads to regular load and not
  load-any or try-load.

2022-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Move load-any no load error into
  cmdModuleLoad  Refactor module procedure to move the error raise when no
  error and no module loaded in case of a load-any sub-command. This code is
  moved directly at the end of cmdModuleLoad.

2022-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Refactor setModuleTag call in setLoadedModule  As
  setModuleTag now ensures no duplicate tag are set, no need to check if
  auto-loaded tag is already set. Simplify also the if/else branch as same
  commands are applied whether the loaded or auto-loaded tag need to be set.

2022-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modeval.tcl,
  testsuite/modules.50-cmds/517-always-load.exp: Refactor 'module load' to use
  loadRequirementModuleList  Update module procedure to use
  loadRequirementModuleList procedure when loading modules in load evaluation
  mode when auto_handling is disabled.  Update the loadRequirementModuleList
  to return 0 is everything went well or 1 if an issue occurred.

  * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix 70/310 tests when
  module is defined in env

  * tcl/main.tcl.in: Refactor use of --tag option within module load

  * testsuite/modules.70-maint/350-term_width.exp: ts: add tests to improve
  --width option coverage

  * testsuite/modules.50-cmds/520-pushenv.exp: ts: add pushenv test to improve
  coverage

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: test loaded completion
  not defined in source-sh script

  * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish,
  testsuite/example/sh-to-mod.sh, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: test removal of
  alias/func/comp from source-sh script

2022-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp: No already loaded msg if new tag
  applied  Remove the *already loaded* message displayed when verbosity level
  is higher or equal to 'verbose2', if new tags are applied to the loaded
  module.  Closes #456

2022-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.70-maint/321-tag_abbrev.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp: ts: test module designation with
  tags when loading

  * NEWS.rst, tcl/report.tcl.in: Fix module designation rendering when no 'hi'
  color key  Fix rendering of loading or unloading module designation when
  configured color palette does not set the 'hi' color key.  Closes #455

2022-05-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp: ts: test space in module name on
  list/avail outputs

2022-05-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: add readCollectionContent
  coverage test

2022-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test FreeBSD 13.0 instead of eol 11.4

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: add
  unsetModuleTag/unsetModuleExtraTag coverage test

  * testsuite/modules.00-init/120-siteconfig.exp: ts: no tcl ext lib err call
  tests if test libs not there

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: rpm: install lib in
  specific directory  Move libtclenvmodules in an environment-modules
  directory under libdir, as it is a private library.

  * NEWS.rst, configure: install: fix libdir64/32 guess in configure script
  Update configure script to better guess the libdir64 and libdir32 directory
  locations based on specified libdir.  Correctly guess these directories when
  libdir does not end with '64' but contains '64' like in
  '/usr/lib64/environment-modules'.

  * .aspell.en.pws, NEWS.rst, contrib/rpm/environment-modules.rpmlintrc,
  script/mrel: install: add rpmlint rc config file  Add rpmlint rc
  configuration file to filter false positive warning messages when checking
  RPM spec file and built packages.  Update 'mrel' script to use this rc
  configuration file when linting RPM spec file.

  * contrib/rpm/environment-modules.spec.in: rpm: remove useless
  environment-modules provides  Remove useless environment-modules Provides
  statement since this package is already named environment-modules.

2022-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.sh, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: fix 50/400 tests when
  module was defined but uninstalled  Correct source-sh tests in 50/400 to
  succeed when tests are run in an environment where module is defined but has
  been uninstalled. It corresponds to the environment created for 'mrel'
  script execution.

2022-05-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modules.20-locate/130-mcookie_check_eval.exp: ts: fix 20/130 tests
  when run from path containing + char

  * script/mpub, script/mrel: script: no line number dependency for expected
  errors  Update mpub and mrel scripts not to depend on the line number
  expressed in error message when comparing them to expected error message.

  * NEWS.rst: doc: fix rst typo in 5.1 NEWS

2022-04-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  doc/source/conf.py, lib/configure.ac, tcl/subcmd.tcl.in,
  testsuite/home/coll40, testsuite/home/coll41, testsuite/home/coll42,
  testsuite/home/coll43, testsuite/home/coll45, testsuite/home/coll46,
  testsuite/home/coll49, testsuite/home/coll49-tosource,
  testsuite/modules.61-coll/010-init_ts.exp, version.inc.in: Release of
  version 5.1.0

2022-04-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll49-tosource, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: tests tagging messages on
  verbose/verbose2 modes

2022-04-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst, tcl/main.tcl.in,
  tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: No Tagging msg
  block if hidden and nuasked  Do not output Tagging message block if module
  is set hidden-loaded and evaluation has not been directly asked by user.
  Add uasked argument to cmdModuleTag procedure to know if the evaluation of
  module has been asked or not by user.

  * .aspell.en.pws, MIGRATING.rst, doc/source/_static/terminal_output.css,
  doc/source/conf.py: doc: add examples in more tagging section in MIGRATING

  * NEWS.rst, doc/source/design/module-tags.rst, doc/source/module.rst: doc:
  desc. tagging evaluation message

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt existing restore tests
  to the Tagging msg

  * tcl/subcmd.tcl.in: Add Tagging message block  When just tagging a module
  already loaded, report a *Tagging* message with module denomination. Like
  for *Loading* message, it is only seen during a restore/source sub-commands
  or in verbose mode.

  * .aspell.en.pws, NEWS.rst, doc/example/log-module-commands/siteconfig.tcl,
  doc/source/cookbook/log-module-commands.rst: doc: fix log-module-command
  recipe siteconfig.tcl  Fix the siteconfig.tcl file of the log-module-command
  cookbook recipe not to break when a file is sourced through cmdModuleSource.
  Limit the addition of the 'auto' log field only if load evaluation comes
  from cmdModuleLoad procedure.  Fixes #453

  * NEWS.rst, doc/source/design/module-tags.rst, doc/source/module.rst: doc:
  desc. tag report on load/unload/refresh msg block

2022-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/024-ml.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp,
  testsuite/modules.70-maint/320-tags.exp,
  .../modules.70-maint/377-variant-shortcut.exp: ts: update tests with tags
  reported in msg block

  * tcl/report.tcl.in: Report module tags in header message block  Update
  Loading/Unloading/Refreshing header message block to render the tags
  applying on the currently analyzed module over or along this module name, as
  done when reporting loaded modules with list sub-command.

  * tcl/report.tcl.in: Make getModuleDesignation rely on
  formatListEltToDisplay  Use formatListEltToDisplay in getModuleDesignation
  to render module designation.

2022-04-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.70-maint/240-icase.exp,
  .../272-adv_version_spec-range.exp,
  testsuite/modules.70-maint/376-variant-tag.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: update avail/list tests
  when space in module name

  * NEWS.rst, tcl/report.tcl.in: Quote name if it contains space when listing
  modules  Update formatListEltToDisplay and formatListEltToLongDisplay to
  enclose element name in single quote if it contains a space character. As a
  result list and avail output will now report enclosed module names if space
  character if found in them, like it is done when reporting module
  designation as loading/unloading header.  Only enclose element name and not
  suffix, to follow the same output approach than 'ls' command.

  * tcl/report.tcl.in, tcl/subcmd.tcl.in: Register tag list in module
  designation  Update registerModuleDesignation procedure to also register the
  list of tags applied along module name and variants.

  * MIGRATING.rst, NEWS.rst: doc: desc. tags improvement in NEWS/MIGRATING

  * doc/source/design/module-tags.rst: doc: list mfcmd where --tag opt is
  available in design

  * NEWS.rst, doc/source/changes.rst, doc/source/design/module-tags.rst: doc:
  link to --tag option section

2022-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: configure safe.directory git opt
  on Cygwin & win native

  * doc/source/module.rst: doc: mention --tag in Module tags section

  * doc/source/module.rst, doc/source/modulefile.rst: doc: --tag update tag
  list if mod is loaded already

  * doc/source/module.rst: doc: add an option section for --tag in module(1)

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: test tag set with full path
  module spec

2022-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll49, testsuite/modulefiles.3/foo/.modulerc,
  testsuite/modulefiles.3/keep/1.0, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: add restore tests with tags
  set or not

  * tcl/subcmd.tcl.in: Clear auto-loaded tag on cmdModuleTag  When the
  unset_extra flag is enabled, also remove the auto-loaded tag on module if it
  is not part of the target tag_list.

  * tcl/subcmd.tcl.in: Clear auto-loaded/keep-loaded tags when unloading
  Remove from the in-memory knowledge the auto-loaded and keep-loaded tags set
  on unloading modules. These tags are then forgotten and will not be
  reapplied if module is currently reloading.

2022-04-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modeval.tcl, tcl/subcmd.tcl.in,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp: Save/restore extra tags when
  reloading modules  Update reloadModuleListUnloadPhase and
  reloadModuleListLoadPhase procedures to save extra tags of unloaded modules
  to re-inject them when reloading these modules.

  * testsuite/modules.61-coll/040-restore.exp: ts: update restore tests now
  extra tags are cleared

  * tcl/subcmd.tcl.in: Clear extra tags when unloading module  Remove from the
  in-memory knowledge the extra tags set on unloading modules. These extra
  tags are then forgotten and will not be reapplied if module is currently
  reloading.

  * tcl/subcmd.tcl.in: Clear extra tags when restoring collection  When
  restoring a collection, unset the extra tags on loaded modules that are not
  defined in collection.

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in,
  tcl/subcmd.tcl.in: Unset extra tags on cmdModuleTag  Add unset_extra
  argument to the cmdModuleTag procedure to remove, when enabled, the extra
  tags currently set on designated modules that are not part of the
  transmitted tag list.  Update every cmdModuleTag calls to take into account
  this new unset_extra argument.

2022-04-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: desc. updating tags on loaded mods
  in design doc

2022-04-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/517-always-load.exp: ts: add tests where tags are
  updated on loaded mods

2022-04-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: fix existing tests to set
  tags on already loaded mod

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Apply new tags set
  on loaded requirement  Update the loadRequirementModuleList procedure to
  apply tags defined on the first requirement found loaded.

2022-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Apply new tags set on loaded module  When a module load
  attempt is made on an already loaded module with additional tag set, update
  the tag list set on this loaded module: add the new tags not already set on
  the loaded module.

2022-04-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test over newer FreeBSD 12 release

  * NEWS.rst, doc/source/modulefile.rst: doc: desc avail module subcmds in
  modulefile interp ctx

2022-04-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: add mfile/rc interp diff table
  in modulefile man

2022-04-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/module.rst: doc: mention rc files are not for
  module config

2022-04-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: mention use/unuse in module modulefile man
  section

  * NEWS.rst: doc: desc. coll file signature change in NEWS

2022-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/.module/coll48, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.70-maint/154-is-saved.exp: ts: verify coll compat on all
  coll subcmds

2022-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.61-coll/080-access-coll.exp: ts: adapt existing tests
  now coll compat is verified

2022-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, tcl/{coll.tcl => coll.tcl.in}: install: tcl/coll.tcl
  should be built  Need to build tcl/coll.tcl as this part of the code need to
  use the @MODULES_VERSION@ pattern.

2022-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl, tcl/subcmd.tcl.in: Check collections are valid when
  searching them  Update findCollections procedure to rely on a checkValidColl
  procedure that verifies given collections can be read and are compatible
  with current Modules version if they express a minimum version requirement.
  As a side effect, when listing available collections with savelist
  sub-command, now the collections that cannot be read are withdrawn from
  result list.

2022-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Merge
  getCollectionFilename into findCollections  Update findCollections procedure
  to merge behavior of getCollectionFilename in it. If search argument is set
  to 'exact' an exact collection search match is performed. If search argument
  is set to 'name', only the name of the collection file is computed.

2022-04-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll40, testsuite/home/coll41, testsuite/home/coll42,
  testsuite/home/coll43, testsuite/home/coll45, testsuite/home/coll46,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: update tag saved in
  collection tests  Set temporarily file signature to 5.0 version. Will move
  to 5.1 version with the release commit of 5.1.0.

  * tcl/coll.tcl, tcl/subcmd.tcl.in: Add Module header when saving coll with
  tags  Record Modules magic cookie at the beginning of a collection when tags
  are found set on the module to save. The #%Module file signature is followed
  by the version number of Modules introducing the tag support.  This version
  number is temporarily set to 5.0 for test purpose. It will be moved to 5.1,
  on the release commit of 5.1.0.  If collection starts with a Modules file
  signature, this header will not be reported on saveshow output.

  * tcl/coll.tcl, tcl/modfind.tcl.in: No empty entry in tag array for build
  coll  Update getSimplifiedLoadedModuleList and
  getLoadedModuleWithVariantSaveTagArrayList procedure to fill the tag array
  only with entries for modules with tags applied to them. This way it is
  possible to know if collection define tags by checking number if this array
  is empty.

2022-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test saving nearly-forbidden
  tag in collection

  * testsuite/home/coll45, testsuite/home/coll46,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test restore colls with
  invalid tags saved

2022-03-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. __MODULES_LMEXTRATAG/collection_pin_tag in NEWS

2022-03-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: ts: test reload with extra tags
  in 50/465

  * doc/source/design/module-tags.rst: doc: desc. collection_pin_tag in design
  doc

  * testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test save/restore with
  collection_pin_tag enabled

2022-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Save all tags if collection_pin_tag is enabled  Update
  the getSaveTagList procedure to return all defined tags for given module
  when the collection_pin_tag configuration option is enabled. An exception is
  made for nearly-forbidden tag which is not saved due to its temporal
  meaning.

  * testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test collection_pin_tag
  config option

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  MODULES_COLLECTION_PIN_TAG in man/changes

  * INSTALL.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  collection_pin_tag config in man/changes/INSTALL

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add collection_pin_tag config to completion scripts

  * tcl/init.tcl.in: Add collection_pin_tag configuration option  Add
  collection_pin_tag configuration option that controls whether all tags
  should be recorded in collection or just the tags specifically set with
  --tag option or describing loaded module state (like auto-loaded or
  keep-loaded tags). Disabled by default. When configuration is modified it
  sets the MODULES_COLLECTION_PIN_TAG environment variable.

  * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: add collection tests for
  extra tag record

2022-03-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Only
  record extra tags in collection  Update way collection is saved to only
  record in it the extra tags set through --tag option and tags describing the
  load state of a module like auto-loaded and keep-loaded.  The getSaveTagList
  procedure is introduce to return the list of tag to save for each loaded
  module.

  * testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: adapt --tag option collection
  tests

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: adapt --tag option tests

2022-03-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: adapt clear subcmd tests for
  __MODULES_LMEXTRATAG

  * tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record extra tags in
  __MODULES_LMEXTRATAG  Introduce __MODULES_LMEXTRATAG environment variable to
  record the extra tags that have been set on loaded modules through the --tag
  option.  Exclude from this variable the auto-loaded and keep-loaded tags
  that may be in some situation set through --tag option.

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear __MODULES_LMEXTRATAG
  prior tests

  * .aspell.en.pws, doc/source/changes.rst, doc/source/design/module-tags.rst,
  doc/source/module.rst: doc: desc. __MODULES_LMEXTRATAG in man/changes/design

2022-03-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst: doc: desc. sysconf error handling in ext lib

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-sysconf.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed sysconf call  Add an utility library that supersedes the
  sysconf function from libc. The sysconf function from this added library
  always returns an error (-1). It is used for coverage test of the sysconf
  call made within the Envmodules_InitStateUsergroupsObjCmd function of the
  Tcl extension library.

2022-03-30  Lukáš Zaoral <lzaoral@redhat.com>

  * lib/envmodules.c: lib: handle sysconf failure in InitStateUsergroupsObjCmd
  sysconf may fail to obtain the value of the NGROUPS_MAX variable.  In such
  case, it returns -1 and sets errno to indicate the error.  Let's handle this
  situation as the size argument of ckalloc is an unsigned int so the size of
  the allocated memory would be UINT_MAX instead. Subsequently, getgroups
  would fail with EINVAL as maxgroupsize is non-zero but less than the number
  of GIDs that would have been returned.  Note that if sysconf returns -1 and
  leaves errno intact, the given variable has no limit.  However, that does
  not seem to be the case on any reasonable operating system [1].  Found by
  Coverity.  Resolves: modules-5.0.1/lib/envmodules.c:355: negative_return_fn:
  Function "sysconf(_SC_NGROUPS_MAX)" returns a negative number.
  modules-5.0.1/lib/envmodules.c:355: assign: Assigning: "maxgroups" =
  "sysconf(_SC_NGROUPS_MAX)". modules-5.0.1/lib/envmodules.c:368:
  negative_returns: "maxgroups" is passed to a parameter that cannot be
  negative. 366| 367|   #if defined (HAVE_GETGROUPS) 368|->    if ((ngroups =
  getgroups(maxgroups, groups)) == -1) { 369|         Tcl_SetErrno(errno);
  370|         Tcl_SetObjResult(interp,  [1] https://www.j3e.de/ngroups.html

2022-03-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/python.py.in: init: explicitly send err output to sys.stderr in
  python  Update python initialization script to explicitly send error output
  to the sys.stderr channel (instead of parent process stderr channel) to be
  able to catch this content.

2022-03-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: update autoinit tests to
  new python code

  * .aspell.en.pws, NEWS.rst, tcl/envmngt.tcl.in: Update module() python func
  to send output to sys.stderr  Update definition of the module() python
  function to explicitly send output to sys.stderr to get the ability to catch
  this content.

  * MIGRATING.rst: doc: fix missing word in Lmod Tcl mfile support desc.

  * MIGRATING.rst: doc: desc. Lmod Tcl mfile support in MIGRATING

2022-03-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: add Lmod Tcl mfile support
  section in modulefile(4)

2022-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/lmod-tcl-modulefile-compat.rst: doc:
  desc. pushenv in design notes

2022-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. pushenv in NEWS

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean family envvar prior
  tests

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean pushenv stack envvar
  prior tests

2022-03-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/flatlcompat,
  testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.10, testsuite/modulefiles.3/lcompat/1.11,
  testsuite/modules.50-cmds/511-remove-property.exp,
  testsuite/modules.50-cmds/520-pushenv.exp: ts: test pushenv mfcmd in 50/520

2022-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Ensure pushenv stack var is
  cleared by other cmds  Like for the reference counter array, ensure the push
  stack environment variable is cleared when targeted variable is handled by
  append-path, prepend-path, remove-path, setenv and unsetenv modulefile
  commands.

2022-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add pushenv modulefile command
  Introduce the pushenv modulefile command that sets an environment variable
  with a value specified as argument but saves the previous value set to
  restore it when modulefile is unloaded.  Use a __MODULES_PUSHENV_<VAR>
  environment variable as a stack to record the previous values of environment
  variable <VAR>. Each element in this Modules-specific variable is the
  combination of the currently evaluating modulename and pushed value. When
  unloading, the value set by this module is removed not the value on top of
  the list.  When saving value set before any module, an empty module name is
  used to push to the stack. When restoring this initial value, initial entry
  in stack is also cleared (as no other module unload will unset it).  Follow
  same implementation principle that setenv, with a dedicated procedure for
  the unload and whatis modes.

2022-03-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  __MODULES_PUSHENV_<VAR> in changes/man

  * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. pushenv in
  changes/man

2022-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for pushenv
  mfcmd

  * INSTALL.rst, doc/source/_static/rtd_theme_overrides.css: doc: fix config
  opt table layout in INSTALL  Update CSS and content of table to make default
  value words correctly wrap and be able to see the 4th and 5th cols on small
  screens.

2022-03-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, INSTALL.rst, NEWS.rst,
  doc/source/design/add-new-config-option.rst: doc: add Configuration options
  section in INSTALL

2022-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: reorder silent_shell_debug config opt in
  module(1)

  * doc/source/module.rst: doc: see linked envvar for details on configs

2022-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: fix wrong default value for some install opts

  * CONTRIBUTING.rst: doc: use plural for Commit hook section in CONTRIBUTING

2022-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/conf.py, doc/source/module.rst: doc:
  clarify instopt & default value of config opts

2022-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: MODULES_ML has to get set prior Modules init

  * INSTALL.rst, NEWS.rst: doc: clarify config opt linked to install opt

  * NEWS.rst, doc/source/module.rst: doc: clarify env vars to set prior
  Modules initialization

  * doc/source/module.rst: doc: clarify module-generated env vars in module(1)

2022-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst: doc: clarify config opt linked to env var
  Update the ENVIRONMENT section in module(1) man page to provide for each
  Modules environment variable the name of the configuration option that could
  be used to set the variable through the config sub-command.

2022-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, MIGRATING.rst, NEWS.rst, doc/source/changes.rst,
  doc/source/cookbook/reduce-io-load.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: magic cookie means file signature  Update
  documentation to clarify that the Modules magic cookie corresponds to a file
  signature.

2022-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes: install: exclude git hook stuff from git export

  * CONTRIBUTING.rst, INSTALL.rst, NEWS.rst, script/commit-msg: script: add
  commit-msg hook script to check commit msg

  * .aspell.en.pws, .codespellrc, .gitignore, CONTRIBUTING.rst, NEWS.rst,
  script/pre-commit: script: update pre-commit to spell check docs with Aspell

2022-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/pre-commit: script: pre-commit warn if codespell not installed

  * NEWS.rst, doc/source/modulefile.rst: doc: desc. Dependencies between
  modulefiles  Fixes #431. Fixes #433.

2022-03-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, MIGRATING.rst, NEWS.rst, README.md, doc/source/FAQ.rst,
  doc/source/changes.rst, doc/source/cookbook/compiler-etc-dependencies.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/output-configuration.rst,
  .../design/source-shell-script-in-modulefile.rst,
  doc/source/design/variants.rst, doc/source/index.rst: doc: fix typos found
  with Aspell

2022-03-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, NEWS.rst, script/pre-commit: script: add pre-commit
  script to verify commits

  * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Handle empty fish shell
  function in sh-to-mod/source-sh  Update the sh-to-mod and source-sh
  mechanism to handle fish shell function with an empty body.

  * NEWS.rst: doc: desc. recent sh-to-mod/source-sh fixes in NEWS

  * tcl/mfinterp.tcl.in, testsuite/install.00-init/091-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Include private functions in
  fish sh-to-mod analysis  Update the environment analysis made for sh-to-mod
  sub-command and source-sh modulefile command for fish shell to include the
  private functions. Catch this way all definition that may be used to set
  shell completion.

2022-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/091-source-sh.exp: ts: test unload of source-sh
  mods in install ts

2022-02-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: upgrade to python 3.9 on Cygwin
  Seem a new python37-sphinx release on Cygwin has broken dependencies, so
  upgrate Cygwin test cases to python 3.9 which is the recommanded version.

  * .codespellrc: codespell: ignore spack/miniconda3/OpenFOAM-dev content

  * .cirrus.yml, .gitignore, Makefile,
  testsuite/install.00-init/091-source-sh.exp,
  testsuite/modulefiles.3/source-sh/openfoam: install/ts: test source-sh over
  OpenFOAM scripts

2022-02-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/091-source-sh.exp: ts: test source-sh over Conda
  script on ksh/zsh/tcsh/fish

  * tcl/mfinterp.tcl.in: Fix csh alias detection on source-sh  Alias
  definition may sometimes be enclosed in parenthesis on csh shell. Fix alias
  parsing regexp to support such definition.  Useful for Conda initialization
  script for csh shell: conda shell alias definition is presented by csh shell
  enclosed in parenthesis.  Fixes #434.

  * .cirrus.yml, .gitignore, Makefile: install/ts: fetch/install Conda/Spack
  for source-sh tests  Add directives into Makefile to fetch and install Spack
  and Conda in order to test source-sh feature against their profile scripts.

  * testsuite/example/sh-to-mod.fish: ts: test fish complete def without -c
  when fish>=3.2  Test fish shell completion definition without -c/--complete
  option when fish is >=3.2 instead of >=3.0.

  * .cirrus.yml, testsuite/install.00-init/091-source-sh.exp,
  testsuite/modulefiles.3/source-sh/conda: ts: test source-sh over Conda
  scripts in install ts

  * .cirrus.yml: cirrus: upgrade linux test env to ubuntu 20.04

2022-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: fix autoinit tests after
  modulecmd.tcl output quoting

  * testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modulefiles.3/noglobeval/1.0: ts: update install tests after
  modulecmd.tcl output quoting

  * .github/workflows/linux_tests.yaml, INSTALL.rst, Makefile,
  Makefile.inc.in, NEWS.rst, configure, doc/source/changes.rst,
  doc/source/module.rst, init/Makefile, init/fish_completion,
  init/zsh-functions/_module.in, site.exp.in, tcl/envmngt.tcl.in,
  tcl/init.tcl.in, testsuite/example/initrc.in,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/220-config.exp: Revert work on noglob_eval_shells
  config option  Remove entirely the work on the noglob_eval_shells option as
  enclosing in quotes the generated output of modulecmd.tcl to pass it to the
  eval command is equivalent to disable the pathname expansion mechanism of
  sh-kind shells.

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: translate ``
  into $() for sh-kind shells

  * doc/source/FAQ.rst, doc/source/module.rst: doc: translate `` into $() for
  sh-kind shells

2022-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in: Translate `` into $() for sh-kind shells  As the
  module shell function code is currently updated for sh-kind shells, take
  this opportunity to translate the `cmd` execution syntax into the more
  modern $(cmd) syntax.

2022-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/091-source-sh.exp: ts: test ksh/zsh over Spack
  scripts in install ts

  * tcl/envmngt.tcl.in: Enclose modulecmd.tcl output in quotes on sh-kind
  shells  Update the module shell function definition for sh-kind shell to
  enclose the output generated by modulecmd.tcl in quotes in order to pass it
  to the eval command.  Quoting code to pass it to eval brings correctness to
  the definition of shell functions without harming already well functionning
  definition. Regular shell function definition could now be correctly defined
  in user environment: no more need to get each command line in these function
  ending with a ';' character.  Same mechanism was applied in initialization
  script to evaluate the code produced by the autoinit sub-command.  Multiple
  function-definition issues spotted when using source-sh across environment
  setting script shell are fixed with this change.  Moreover, all the
  noglob_eval_shells work is made useless with this change as no globbing is
  applyed to the code produced by modulecmd.tcl as it is now enclosed in
  quotes.

2022-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test wildcard char in func
  on sh-to-mod tests

2022-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh, testsuite/example/sh-to-mod.csh,
  testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test wildcard char in
  envvar on sh-to-mod tests

2022-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, testsuite/install.00-init/091-source-sh.exp,
  testsuite/modulefiles.3/source-sh/spack: ts: test source-sh over Spack
  scripts in install ts

  * doc/source/changes.rst: doc: desc. MODULES_NOGLOB_EVAL_SHELLS in changes

  * testsuite/example/sh-to-mod.fish,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test sh-to-mod against
  fish nested func/_ in name

2022-02-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Correctly escape [ and | in builtin fish funcs
  Update execShAndGetEnv to correctly escape the '[' and '|' characters in
  fish shell code to filter builtin commands. These character were not
  correctly escaped previously (replaced by '$1').

  * tcl/mfinterp.tcl.in: Remove dup ';' in execShAndGetEnv getfunc fish code

  * NEWS.rst, tcl/mfinterp.tcl.in: Fix fish builtin func withdrawal on
  sh-to-mod/source-sh  Fix the fish code to withdraw builtin functions to
  compare functions defined before and after fish script shell execution in
  execShAndGetEnv procedure.  Previous regexp was not matching the full
  string, so every function whose name contained a substring equal to the name
  of a builtin function (like '_') where filtered.

  * NEWS.rst, doc/source/design/source-shell-script-in-modulefile.rst,
  tcl/mfinterp.tcl.in: Support fish nested function on sh-to-mod/source-sh  On
  fish shell, function definition can be embedded inside function definition.
  Update the execShAndGetEnv procedure to add a string separated after each
  function definition (%ModulesSubShToMod%) to clearly delimitate the shell
  function to analyse and report and skip the definition of nested functions.

2022-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .github/workflows/linux_tests.yaml: cirrus/gh: remove broken
  snapd fish config  Remove snapd file that breaks fish shell on bionic (see
  https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1961365).

  * testsuite/install.00-init/020-module.exp,
  testsuite/modulefiles.3/noglobeval/1.0: ts: add install tests for
  noglob_eval_shells

  * .github/workflows/linux_tests.yaml, testsuite/example/initrc.in,
  testsuite/modules.70-maint/120-autoinit.exp: ts: test noglob_eval_shells
  over autoinit subcmd

2022-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test noglob_eval_shells
  config option

2022-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  noglob_eval_shells in man/changes/NEWS

2022-02-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: desc. --with-noglob-eval-shells option in INSTALL

  * tcl/envmngt.tcl.in: Disable pathname expansion prior shell eval  Add code
  in module shell function (for shells listed in noglob_eval_shells) to
  disable pathname expansion for the time of produced shell code evaluation.

2022-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add noglob_eval_shells config to completion scripts

  * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in:
  install: add --with-noglob-eval-shells configure opt  Introduce the
  --with-noglob-eval-shells configure option to choose at installation time if
  the pathname expansion should be disabled or not in the module function to
  evaluate shell code produced by modulecmd.tcl, for the shells listed in
  option value.

  * tcl/init.tcl.in: Add noglob_eval_shells configuration option  Add
  noglob_eval_shells configuration option that controls whether or not the
  module shell function should disable pathname expansion to evaluate shell
  code produced by modulecmd.tcl script.  Enabled by default for sh, bash ans
  ksh shells. Support also zsh shell. When configuration option is modified it
  sets the MODULES_NOGLOB_EVAL_SHELLS environment variable.  Pathname
  expansion is primarily an issue of bash and ksh93 shells when evaluating
  shell function body code. It also impacts bash-flavored sh shells. So the
  option is provided to support any shell from the sh family, but disabled by
  default for shells not having the globbing issue (zsh).

2022-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .codespellrc: Add codespell configuration for the project

  * contrib/modulefiles/openwin, testsuite/modules.50-cmds/190-load.exp: ts:
  fix some other typos in tests

  * MIGRATING.rst, NEWS.rst, doc/source/cookbook/sticky-modules.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst,
  doc/source/module.rst, tcl/modeval.tcl, tcl/subcmd.tcl.in,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.61-coll/040-restore.exp: Fix stickiness typos  Fixes #442.

2022-02-17  Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com>

  * INSTALL.rst, contrib/modulefiles/scheme/racket/5.0.2,
  doc/source/cookbook/new-features-without-breaking-old-module.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/insensitive-case.rst,
  doc/source/design/sticky-modules.rst: Fix typos not found by codespell

  * contrib/modulefiles/gnu, contrib/modulefiles/openwin: contrib: fix
  additional typos

2022-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/modulefiles/java/6/35, contrib/modulefiles/java/6/38,
  contrib/modulefiles/java/7/07, contrib/modulefiles/java/7/11,
  contrib/modulefiles/openwin, contrib/readme.txt,
  contrib/rpm/environment-modules.spec.in: contrib: fix typos found in several
  files

  * NEWS.rst: doc: fix typos in NEWS

  * testsuite/modulefiles/module/unk,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp: ts: fix NonExistent typo in several
  tests  Fixes #439

2022-02-16  Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com>

  * init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in,
  init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in,
  init/zsh.in: init: fix typo in comment

2022-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp: ts: fix 00/{120,140} tests after
  typos fix

  * NEWS.rst: doc: desc. typos fix in NEWS

2022-02-13  Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com>

  * .github/ISSUE_TEMPLATE/bug_report.md, Makefile.inc.in, README.md,
  configure, .../guide/get_started/08-guide_modulefile_search-alias.sh,
  doc/example/compiler-etc-dependencies/homebrewed/bar/common,
  doc/example/expose-procs-vars-to-modulefiles/siteconfig.tcl,
  doc/example/inhibit-report-info/siteconfig.tcl,
  doc/example/unload-firstly-loaded/siteconfig.tcl, doc/source/FAQ.rst,
  doc/source/changes.rst, doc/source/cookbook/compiler-etc-dependencies.rst,
  doc/source/cookbook/modulefiles-in-git.rst,
  .../cookbook/new-features-without-breaking-old-module.rst,
  doc/source/design/default-latest-version-specifiers.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst,
  doc/source/module.rst, script/mlprof, script/mpub, tcl/coll.tcl,
  tcl/init.tcl.in, tcl/modfind.tcl.in, testsuite/config/base-config.exp,
  testsuite/example/siteconfig.tcl-1,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/070-stderrtty.exp,
  testsuite/modulefiles/append/1.7, testsuite/modulefiles/append/2.4,
  testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/mode3,
  testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/userexp,
  testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0,
  testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/1.0,
  testsuite/modulefiles/loc_dv2/2.0, testsuite/modulefiles/loc_dv3/1.0,
  testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/1.0,
  testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_dv6/1.0,
  testsuite/modulefiles/loc_dv7/1.0, testsuite/modulefiles/loc_dv7/3.0,
  testsuite/modulefiles/loc_dv8/1.0, testsuite/modulefiles/loc_dv8/2.0,
  testsuite/modulefiles/loc_dv9/.version, testsuite/modulefiles/loc_dv9/1.0,
  testsuite/modulefiles/loc_dv9/2.0, testsuite/modulefiles/loc_dvv1/.common,
  testsuite/modulefiles/loc_dvv1/.modulerc,
  testsuite/modulefiles/loc_dvv1/.version, testsuite/modulefiles/loc_fq/1.0,
  testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc5/1.0,
  testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/alias3,
  testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias8,
  testsuite/modulefiles/loc_sym/getvers10,
  testsuite/modulefiles/loc_sym/getvers5,
  testsuite/modulefiles/loc_sym/getvers6,
  testsuite/modulefiles/loc_sym/getvers7,
  testsuite/modulefiles/loc_sym/versinf3,
  testsuite/modulefiles/loc_sym/versinf4,
  testsuite/modulefiles/loc_sym/versinf5,
  testsuite/modulefiles/loc_sym/version11,
  testsuite/modulefiles/loc_sym/version12,
  testsuite/modulefiles/loc_sym/version13,
  testsuite/modulefiles/loc_sym/version14,
  testsuite/modulefiles/loc_sym/version2,
  testsuite/modulefiles/loc_sym/version3,
  testsuite/modulefiles/loc_sym/version4,
  testsuite/modulefiles/loc_sym/version6,
  testsuite/modulefiles/loc_sym/version7,
  testsuite/modulefiles/loc_sym/version8,
  testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/spread/1.0,
  testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spread/3.0,
  testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spread/5.0,
  testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spread/8.0, testsuite/modulefiles/spreadrc/dir1/1.0,
  testsuite/modulefiles/spreadrc/dir2/1.0,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/1.0,
  testsuite/modulefiles/spreadrc/dir5/1.0,
  testsuite/modulefiles/spreadrc/dir6/1.0,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/200-errdisp.exp,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp,
  testsuite/modules.70-maint/272-adv_version_spec-range.exp,
  testsuite/modules.70-maint/273-adv_version_spec-space.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/350-term_width.exp,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/999-cleanup.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/020-avail.exp: Fix typos found by codespell

2022-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: move from centos8 to rockylinux8

2022-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. shell completion features in MIGRATING

2022-02-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: add refresh tests on
  source-sh in 50/400

  * doc/source/design/shell-completion.rst,
  .../design/source-shell-script-in-modulefile.rst,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/540-complete.exp: doc/ts: completion is first
  cleared before set on fish

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Ensure pre-existing fish
  completion is cleared  When defining completion for a given command on fish
  shell, start by clearing any potential previous completion definition.
  Modulefile should this way provide the full completion definition for
  command and cannot rely on partial definition coming from other sides.

2022-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. completion support on source-sh/sh-to-mod in NEWS

  * .../design/source-shell-script-in-modulefile.rst: doc: desc. shell
  completion support on source-sh in design

  * doc/source/changes.rst: doc: desc. completion support on
  sh-to-mod/source-sh in changes

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. completion
  support on sh-to-mod/source-sh man

2022-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.fish, testsuite/modulefiles.2/source-sh/7.2,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test fish complete on
  sh-to-mod/source-sh

2022-02-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.sh, testsuite/modulefiles.2/source-sh/7.1,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test bash complete on
  sh-to-mod/source-sh

2022-02-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.csh, testsuite/modulefiles.2/source-sh/7.0,
  testsuite/modulefiles.2/source-sh/8.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test tcsh complete on
  sh-to-mod/source-sh

2022-02-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Tcsh support for complete/uncomplete changes on
  sh-to-mod  Update execShAndGetEnv procedure to add support for complete and
  uncomplete changes on sh-to-mod for tcsh shell.

  * tcl/mfinterp.tcl.in: Fish support for complete/uncomplete changes on
  sh-to-mod  Update execShAndGetEnv procedure to add support for complete and
  uncomplete changes on sh-to-mod for fish shell.

  * tcl/mfinterp.tcl.in: Bash support for complete/uncomplete changes on
  sh-to-mod  Update execShAndGetEnv procedure to add support for complete and
  uncomplete changes on sh-to-mod for bash shell.

  * tcl/mfinterp.tcl.in, tcl/modfind.tcl.in: Support for complete/uncomplete
  changes on sh-to-mod  Update the sh-to-mod and execShAndGetEnv procedures to
  analyze complete and uncomplete changes on sourced shell script and render
  the corresponding modulefile commands.  Add basic code for shells that do no
  support complete/uncomplete environment changes.

2022-02-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/020-module.exp,
  testsuite/modulefiles.3/complete/1.0, testsuite/modulefiles.3/complete/1.1:
  ts: add complete test in install ts

2022-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/complete/.modulerc,
  testsuite/modulefiles.3/complete/1.1, testsuite/modulefiles.3/complete/1.2,
  testsuite/modules.50-cmds/541-uncomplete.exp: ts: add tests for uncomplete
  mfcmd in 50/541

2022-01-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/complete/.modulerc,
  testsuite/modulefiles.3/complete/1.0, testsuite/modulefiles.3/complete/1.2,
  testsuite/modulefiles.3/complete/2.0,
  testsuite/modules.50-cmds/540-complete.exp: ts: add tests for complete mfcmd
  in 50/540

2022-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for
  complete/uncomplete

  * doc/source/modulefile.rst: doc: desc. complete/uncomplete in man

  * NEWS.rst, doc/source/changes.rst: doc: desc. complete/uncomplete in
  NEWS/changes

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Add
  complete/uncomplete modulefile commands  Introduce the complete and
  uncomplete modulefile commands to define completion mechanism on running
  shell. It supports only shell with completion capabilities that could be
  defined with shell commands: bash, tcsh and fish.  complete command takes a
  shell name as first argument to apply completion specification only if
  currently running shell corresponds to this shell name set as argument. This
  is done as completion implementation is really different from one shell to
  another. Also the arguments passed after command name are specific of the
  shell and are not checked by module command.  When unloading module,
  complete becomes uncomplete. uncomplete can also be set as an independent
  modulefile command and only acts on load evaluation module. complete is also
  evaluated in refresh evaluation mode to push completion definition in
  sub-shells for instance.  Multiple completion definition for the same
  command may be defined and will be applied to shell. Some shell, like fish,
  needs multiple complete commands to fully define all parameters for the
  completion of a single command.

  * NEWS.rst, doc/source/design/shell-completion.rst: doc: add
  shell-completion design notes

2022-01-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/230-verbosity.exp: ts: check trace of
  dynamically defined procs

2022-01-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/list/1.0, testsuite/modulefiles.3/list/2.0,
  testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.50-cmds/530-module-list.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/361-list_output.exp,
  testsuite/modules.70-maint/400-list-search.exp: ts: test pattern search on
  list sub-cmd

2022-01-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: improve pattern search desc. on avail subcmd

2022-01-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. list
  filtering in NEWS/changes/man

2022-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.70-maint/190-emptyarg.exp: ts: adapt existing tests now
  list accepts args

2022-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add search capabilities to list subcmd
  When module specification is passed to the list sub-command, only output the
  loaded modules that matches at least one of these specification (OR
  operation).  Sub-command header message is adapted when module
  specifications are passed to the sub-command. However same header message is
  reported if there is no loaded module to report from the start.  Search
  capabilities rely on the modEq comparison procedure, so it takes into
  account the search_match mode (starts-with/contains), the alternative names
  set over loaded modules and the variant defined.  Only the first specified
  search pattern is set for SGR highlight due to the current limitation of
  reportModules procedure (which only accepts one mod argument).

2022-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: Restore psuf arg on modEq proc
  Pattern suffix is useful again on modEq comparison procedure due to the
  introduction of search capabilities on the list sub-command.

2022-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow search match
  option on list subcmd  Allow to pass the search match options (-S/-C) to the
  list sub-command.

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow mod spec as
  argument to list subcmd  Allow the list sub-command to receive module
  specifications as argument.

  * tcl/modspec.tcl: Trace dynamically defined procs in debug2 mode  When
  verbosity is set to debug2 or an higher mode, also add trace to the
  procedure that are dynamically generated during the modulecmd.tcl run.

2022-01-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, testsuite/modules.00-init/090-switches.exp: Add
  --initial_load cmd-line option  Add dummy support for the --initial_load
  command-line option for compatiblity with script written for Lmod.  Goal
  here is just to avoid error when this option is used.

  * tcl/main.tcl.in, testsuite/modules.00-init/090-switches.exp: Add
  --no_redirect cmd-line option  Add dummy support for the --no_redirect
  command-line option for compatiblity with script written for Lmod.  Goal
  here is to avoid error when this option is used. Support not added within
  module shell function.

2022-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: add ref to reduce-io-load recipe in MIGRATING

  * MIGRATING.rst, doc/source/changes.rst,
  doc/source/cookbook/reduce-io-load.rst: doc: fix typos in
  MIGRATING/changes/reduce-io-load

2022-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/_static/terminal_output.css, doc/source/conf.py,
  doc/source/cookbook/reduce-io-load.rst: doc: add reduce-io-load cookbook
  recipe

2022-01-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/flatlcompat,
  testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.8,
  testsuite/modulefiles.3/lcompat/1.9/1.9,
  testsuite/modulefiles.3/lcompat/1.9/2.0,
  testsuite/modules.50-cmds/519-family.exp: ts: test family mfcmd in 50/519

2022-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc. family in
  design doc

  * NEWS.rst: doc: desc. family/MODULES_FAMILY_<NAME> in NEWS

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for family
  mfcmd

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  MODULES_FAMILY_<NAME> in man/changes

  * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. family in
  man/changes

2022-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Add family modulefile command  Introduce the family
  modulefile command that indicates currently loading module provides name
  passed as argument and this name could only be provided by one loaded
  module.  family is implemented with the combined definition of a conflict
  and a module alias.  An environment variable is set to indicate what module
  currently provides for the family within the loaded environment.

2022-01-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/puts/prestdout,
  testsuite/modules.50-cmds/311-puts-prestdout.exp: ts: test prestdout channel
  on puts command in 50/311

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  prestdout channel in man/changes/NEWS

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Add prestdout
  channel to puts command  Introduce the prestdout channel for the modified
  puts command to be able to set specific content prior any other content sent
  to stdout after the environment changes generated by modulefile evaluation.
  Fixes #432

  * NEWS.rst, doc/source/modulefile.rst: doc: desc. puts mfcmd in man

2022-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: desc auto_handling on prereq in man

2022-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Clean useless code in setLoadedAltname

2022-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. mcookie_check in MIGRATING

2022-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Protect 'file mtime' call when do not know what we
  check  Catch error of file mtime when targeted file has not been checked
  previously (when mcookie_check is set to 'eval').

2022-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. mcookie_check in NEWS

2021-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv4/1.0,
  testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_rc1/.modulerc,
  testsuite/modulefiles/loc_virt2/.modulerc, testsuite/modulefiles/mcookie/1,
  testsuite/modules.00-init/005-init_ts.exp,
  .../modules.20-locate/130-mcookie_check_eval.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: test mcookie_check set to
  eval in 20/130

2021-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/magic-cookie-check.rst: doc: add
  magic-cookie-check design notes

2021-12-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test mcookie_check config
  option

  * tcl/modfind.tcl.in: No mcookie check when searching module  Update
  checkValidModule to skip Module magic cookie check in file if mcookie_check
  configuration option is not set to 'always'.  When mcookie_check is set to
  'eval', files are not read when searching modulefiles. Which means any file
  located within a modulepath directory is considered a modulefile. An error
  will be obtained if an attempt is made to evaluate a non-modulefile located
  in a modulepath directory.  Also if a modulefile is specified fullpath,
  Modules magic cookie will also not be checked if mcookie_check is set to
  'eval', and if this file is not a modulefile an error will be obtained if an
  attempt is made to evaluate this file.

2021-12-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst, doc/source/modulefile.rst:
  doc: desc mcookie_check in changes/man

  * doc/source/changes.rst, doc/source/module.rst: doc: desc
  MODULES_MCOOKIE_CHECK in changes/man

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add mcookie_check config to completion script

  * tcl/init.tcl.in: Add mcookie_check configuration option  Add the
  mcookie_check configuration option that controls whether or not the magic
  cookie at the start of modulefile (`#%Module`) need to get checked.

2022-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, doc/source/conf.py, tcl/coll.tcl, tcl/envmngt.tcl.in,
  tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in,
  tcl/util.tcl: New year (2022) copyright mention update

2021-12-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: precise python-sphinx deps on
  Cygwin  Need to precise all sphinxcontrib packages required as dependency
  specification of python37-sphinx Cygwin package is regularly broken.

2021-12-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/notreq/loadany,
  testsuite/modulefiles.3/notreq/loadanymul,
  testsuite/modulefiles.3/notreq/tryload,
  testsuite/modulefiles.3/notreq/tryloadmul,
  testsuite/modules.50-cmds/431-not-req.exp: ts: test --not-req with module
  try-load/load-any in 50/431

  * tcl/main.tcl.in: Add support for --not-req on module try-load/load-any

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --not-req support on module try-load/load-any

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc. load-any in NEWS/changes/man

  * NEWS.rst, doc/source/changes.rst, doc/source/design/module-tags.rst,
  doc/source/modulefile.rst: doc: desc. --tag opt on load-any in
  NEWS/changes/man/design

  * doc/source/design/add-new-sub-command.rst: doc: desc. module-info command
  in add new subcmd guide

  * testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: ts: add --tag tests for load-any
  subcmd in 50/465

2021-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/loadany/.modulerc,
  testsuite/modulefiles.3/loadany/1.0, testsuite/modulefiles.3/loadany/2.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/518-load-any.exp: ts: test load-any subcmd in
  50/518

2021-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add load-any
  test/doc on 'module-info command'

  * testsuite/modulefiles.2/modemptyarg/load-any,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt existing tests
  for try-load subcmd

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add load-any
  sub-cmd to completion scripts

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Introduce load-any
  sub-command  Add the load-any module sub-command that loads first valid
  module in specified list. Errors for unknown modulefile are silenced like
  for try-load sub-command. add-any is an alias over load-any sub-command.
  The any_modulefile state is introduced to indicate cmdModuleLoad to stop
  after first loaded modulefile in list.  When used from a modulefile
  evaluation context, load-any first checks if a module from its specified
  list is already loaded. If this is the case, no additional requirement load
  is performed as constraint is considered satisfied.

2021-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modeval.tcl: Move requirement load code of prereq
  in dedicated proc  Create the dedicated loadRequirementModuleList procedure
  to attempt to load a list of module requirement in an OR operation. This
  procedure is called by prereq modulefile command when auto_handling mode is
  enabled.

2021-12-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc module
  load-any in design doc

  * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc. always-load
  in design doc

2021-12-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/467-keep-loaded.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: Ensure no duplicate in tags set
  to module  Update setModuleTag procedure to avoid adding a tag to module
  which is already set to avoid duplicate entries. Adapt existing tests.

2021-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  always-load in NEWS/changes/man

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: fix tests in 50/465 for Tcl
  8.5

2021-12-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/keep/1.0,
  testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.7, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/467-keep-loaded.exp,
  testsuite/modules.50-cmds/517-always-load.exp: ts: test always-load mfcmd in
  50/{465,467,517}

  * tcl/mfinterp.tcl.in: Add always-load modulefile command  Introduce
  always-load modulefile command that loads all modulefile specified (AND
  operation) and applies to them the keep-loaded module tag in order to avoid
  these modules to get automatically unloaded.

2021-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/515-depends-on.exp,
  testsuite/modules.50-cmds/516-prereq-all.exp: Pass mfcmd name to
  parsePrereqCommandArgs proc

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for
  always-load mfcmd

2021-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add
  prereq-{all,any}/require-filename/depends-on mfcmds

  * testsuite/modulefiles.3/keep/1.0, testsuite/modulefiles.3/keep/2.0,
  testsuite/modules.50-cmds/467-keep-loaded.exp: ts: test keep-loaded module
  tag in 50/467

  * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing only
  html directive in mans

  * NEWS.rst: doc: desc keep-loaded tag in NEWS

  * doc/source/changes.rst: doc: fix missing tag_abbrev mconfig in changes

2021-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/design/module-tags.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc keep-loaded tag in INSTALL/design/mans

  * configure: install: add default abbrev/sgr for keep-loaded tag

  * tcl/modeval.tcl: Add keep-loaded module tag  Introduce the keep-loaded
  module tag that avoids an auto-loaded module to get automatically unloaded
  when all its dependent modules are unloaded.

2021-12-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: reorg option desc for load/switch/try-load in
  man

  * doc/source/module.rst: doc: fix sort of try-add subcmd in man

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc --tag option in changes/NEWS/mans

  * testsuite/home/coll39, testsuite/home/coll40, testsuite/home/coll41,
  testsuite/home/coll42, testsuite/home/coll43,
  testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: add collection tests for
  --tag option

2021-12-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt existing collection
  tests for --tag record

  * tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Create
  getExportTagList from getTagList  Create getExportTagList procedure to get
  list of tags applying to module that can be exported (not loaded or hidden).
  Use getExportTagList when building persistency variable so serializing code
  is only useful in this procedure and not anymore in getTagList.

  * testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: fix auto-loaded module
  restore tests in 61/040

2021-12-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Save tags set on
  loaded modules in collection  Adapt collection mechanism to dump the tags
  set on loaded module when saving a collection and setting them back when
  collection is restored.  Tags are recorded in collection with the --tag=
  option set on module load lines. Previously used --notuasked option is still
  processed if found in collection but when saving new ones the auto-loaded
  tag is dumped instead 'module load --tag=auto-loaded foo/1.0' for instance.
  With this current patch savec tags are restored if module is not yet loaded
  at the correct position in expected loaded module list.

2021-12-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/513-prereq-any.exp,
  testsuite/modules.50-cmds/515-depends-on.exp,
  testsuite/modules.50-cmds/516-prereq-all.exp: ts: adapt existing prereq
  tests for --tag opt

2021-12-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modulefiles.3/tag/9.0, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp: ts: add test for --tag option in
  50/465

2021-12-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in: Add --tag option to prereq
  modulefile command  Add the --tag option for the prereq modulefile command
  to be albe to precise tags to apply to loading module when auto handling
  mode is enabled. This way tags could be specified whatever the dependency
  mechanism used.  Also apply on prereq-any, prereq-all and depends-on
  modulefile commands.

2021-12-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: update module tag design for --tag
  opt

2021-12-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in:
  Pass and apply tag_list in cmdModuleLoad  Transmit the tag list specified on
  module load, try-load or switch to the cmdModuleLoad procedure to apply
  these tags to the module to load.  Need to refine later on tag list
  transmission on collection management (cmdModuleRestore) and environment
  reload (reloadModuleListLoadPhase).  An already loaded module will not be
  reloaded if a different tag list is specified. Loaded tags for this module
  are not changed either.

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add --tag= opt
  to completion scripts

2021-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in: Add parsing of --tag opt for
  load/switch/try-load subcmds  Adapt parseModuleCommandArgs and reportUsage
  procedures to handle the --tag option for the load, switch and try-load
  sub-comands.  '--tag=LIST' is the syntax for the command-line whereas '--tag
  LIST' is the main syntax for use within modulefiles. LIST is composed of tag
  names separated by colon character.  Allow --tag for unload sub-command to
  avoid errors on mixed unload/load ml command.

2021-12-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.6,
  testsuite/modules.50-cmds/516-prereq-all.exp: ts: add tests for prereq-all
  in 50/516

2021-12-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc
  prereq-all in NEWS/changes/man

  * tcl/mfinterp.tcl.in: Add prereq-all modulefile command  Rename depends-on
  into prereq-all modulefile command and make depends-on an alias on it.

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.5,
  testsuite/modules.50-cmds/515-depends-on.exp: ts: add tests for depends-on
  in 50/515

  * doc/source/modulefile.rst: doc: split prereq/conflict man description

  * tcl/mfinterp.tcl.in: Add depends-on modulefile command  Introduce the
  depends-on modulefile command which defines module requirements for
  currently loading modulefile. This command is an alias over prereq command
  with all modulefile arguments treated as a Boolean AND operation: all
  specified modulefiles are required.

  * NEWS.rst, doc/source/changes.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst, doc/source/modulefile.rst:
  doc: desc depends-on in NEWS/changes/man/design

2021-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.4, testsuite/modulefiles.3/lcompatdep/1.4,
  testsuite/modulefiles.3/lcompatdep/2.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/514-require-fullname.exp: ts: add tests for
  require-fullname in 50/514

  * tcl/mfinterp.tcl.in, tcl/modfind.tcl.in, tcl/modspec.tcl: Add
  require-fullname modulefile command  Introduce the require-fullname
  modulefile command that raises an error if loading module is not fully
  qualified. Alias and symbols are considered fully qualified versions expect
  for the default symbol.  Add the filter_default argument on
  getAllModuleResolvedName procedure to exclude module parent name and default
  symbol version from alternative name list.  Update modEq procedures to call
  for getAllModuleResolvedName with filter_default mode enabled when ismodlo
  argument is set to 4.

2021-11-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  require-fullname in man/changes/NEWS

  * NEWS.rst, doc/source/design/lmod-tcl-modulefile-compat.rst: doc: add
  lmod-tcl-modulefile-compat initial version

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc
  reportError and reportWarning in man/changes/NEWS

2021-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.version,
  testsuite/modules.20-locate/120-moduleversion.exp: ts: test ModuleVersion in
  20/120

  * NEWS.rst, doc/source/changes.rst, tcl/mfinterp.tcl.in: Set ModuleVersion
  as an alias over ModulesVersion  Set ModuleVersion as an alias over
  ModulesVersion modulefile variable for compatibility with Lmod Tcl
  modulefiles.

  * NEWS.rst, doc/source/modulefile.rst: doc: desc ModulesVersion mfvar in man

  * NEWS.rst, tcl/mfinterp.tcl.in,
  testsuite/modules.50-cmds/513-prereq-any.exp: Clear msg when no arg is
  passed to prereq  Produce a clear error message when wrong number of
  argument is received by prereq command.

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.3,
  testsuite/modules.50-cmds/513-prereq-any.exp: ts: add tests for prereq-any
  in 50/513

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc
  prereq-any in man/NEWS/changes

  * tcl/mfinterp.tcl.in: Add prereq-any modulefile command  Introduce the
  prereq-any modulefile command which is a bare alias for the prereq command.

  * NEWS.rst, doc/source/modulefile.rst: doc: desc
  {add,remove}-property/extensions in man/NEWS

2021-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.2,
  testsuite/modules.50-cmds/512-extensions.exp: ts: add test for extensions in
  50/512

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.1,
  testsuite/modules.50-cmds/511-remove-property.exp: ts: add tests for
  remove-property in 50/511

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.0, testsuite/modulefiles.3/lcompat/2.0,
  testsuite/modules.50-cmds/510-add-property.exp: ts: add tests for
  add-property in 50/510

  * doc/source/changes.rst: doc: desc. add-property/remove-property/extensions
  in changes

  * tcl/mfinterp.tcl.in: Add add-property/extensions/remove-property cmds
  Introduce the add-property, extensions and remove-property modulefile
  commands. Implemented as a no-operation command for modulefile evaluation
  context.

2021-11-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: ts: update CI config to test completiondir install opt

2021-11-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst: doc: desc completiondir install opts in
  NEWS/INSTALL

2021-11-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: use shell-specific
  completion dir

  * Makefile.inc.in, configure, init/Makefile, init/fish.in, site.exp.in:
  install: add --with-fishcompletiondir configure opt  Add the
  --with-fishcompletiondir option to the configure installation script to
  define a particular installation directory for the fish completion script.
  If option is not defined, fish completion script is installed by default in
  initdir and it is sourced in fish init script. If option is set, completion
  script is installed in designated directory and fish init script does not
  source it.

  * Makefile.inc.in, configure, init/Makefile, init/bash.in, site.exp.in:
  install: add --with-bashcompletiondir configure opt  Add the
  --with-bashcompletiondir option to the configure installation script to
  define a particular installation directory for the bash completion script.
  If option is not defined, bash completion script is installed by default in
  initdir and it is sourced in bash init script. If option is set, completion
  script is installed in designated directory and bash init script does not
  source it.

2021-11-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile.inc.in, configure, init/Makefile, init/zsh.in, site.exp.in:
  install: add --with-zshcompletiondir configure opt  Add the
  --with-zshcompletiondir option to the configure installation script to
  define a particular installation directory for the zsh completion script.
  If option is not defined, zsh completion script is installed by default in
  initdir and the FPATH environment variable is set in zsh init script. If
  option is set, completion script is installed in designated directory and
  zsh init script does not set the FPATH environment variable.  Fixes #428

  * MIGRATING.rst: doc: desc. modfile command behavior opts in MIGRATING

2021-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.5,
  testsuite/modules.50-cmds/505-set-if-undef.exp: ts: test setenv
  --set-if-undef on modfile cmds

  * doc/example/top-priority-values/siteconfig.tcl,
  doc/source/cookbook/top-priority-values.rst: doc: update setenv in
  top-priority-values recipe config

2021-11-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/504-unset-on-unload.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: fix existing setenv tests
  for --set-if-undef

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  setenv --set-if-undef in man/changes/NEWS

  * tcl/mfinterp.tcl.in: Add --set-if-undef option on setenv  Add the
  --set-if-undef option on the setenv modulefile command. When set, the
  environment variable is set when modulefile is loaded only if currently
  unset.  Fixes #425

2021-11-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Parse setenv args with parseUnsetenvCommandArgs  Add
  the parseUnsetenvCommandArgs procedure to parse arguments set on setenv
  modulefile command.  Split procedure for setenv and unsetenv commands in
  whatis evaluation mode, as both commands now have different set of options
  that should also be parsed in whatis mode to extract targeted environment
  variable name.

  * testsuite/modulefiles.3/path-cmd-opt/1.4,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/504-unset-on-unload.exp: ts: test unsetenv
  --unset-on-unload on modfile cmds

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  unsetenv --unset-on-unload in man/changes/NEWS

  * testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp: ts: fix existing unsetenv
  tests for --unset-on-unload

  * tcl/mfinterp.tcl.in: Add --unset-on-unload option on unsetenv  Add the
  --unset-on-unload option on the unsetenv modulefile command. When set, the
  environment variable is unset when modulefile is unloaded, like it does when
  modulefile is loaded.

2021-11-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.3,
  testsuite/modules.50-cmds/503-noop-on-unload.exp: ts: test unsetenv
  --noop-on-unload on modfile cmds

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  unsetenv --noop-on-unload in man/changes/NEWS

  * testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp: ts: fix existing unsetenv
  tests for --noop-on-unload

  * tcl/mfinterp.tcl.in: Add --noop-on-unload option on unsetenv  Add the
  --noop-on-unload option to the unsetenv modulefile command. Corresponds to
  the actual default behavior, which is enforced even if a value to restore on
  unload mode is specified.

  * tcl/mfinterp.tcl.in: Parse unsetenv args with parseUnsetenvCommandArgs
  Add the parseUnsetenvCommandArgs procedure to parse the arguments set on an
  unsetenv moduefile command.

2021-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.3,
  testsuite/modules.50-cmds/503-noop-on-unload.exp: ts: test --noop-on-unload
  option on modfile cmds

2021-11-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --noop-on-unload in man/changes/NEWS

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: test --noop-on-unload
  option on subcmds

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Add
  --noop-on-unload on remove-path/module unuse  Add the --noop-on-unload
  option to the remove-path and module unuse sub-command to perform no
  operation when commands are evaluated in unload mode.

2021-11-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.2,
  .../modules.50-cmds/502-prepend-on-unload.exp: ts: test --prepend-on-unload
  option on modfile cmds

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: test --prepend-on-unload
  option on subcmds

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Add --prepend-on-unload on
  remove-path/module unuse  Add the --prepend-on-unload option to the
  remove-path and module unuse sub-command to append specified paths when
  commands are evaluated in unload mode.  If option is set prior path list
  specification, this path list which is unsets when modulefile loads is
  appended back when modulefile unloads. If a different path list is passed
  after option specification, this list is appended on unload mode instead of
  the list removed at load time.  --prepend-on-unload option cannot be mixed
  with --index option.

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Pass precise
  behavior to apply to add-path  Instead of barely setting 'add' as default
  behavior to apply on add-path procedure, precise this behavior with 'append'
  and 'prepend' value.

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --prepend-on-unload in man/changes/NEWS

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --append-on-unload in man/changes/NEWS

  * doc/source/design/control-mode-behaviors.rst: doc: add noop-on-unload +
  details in ctrl mode bhv design

2021-11-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/top-priority-values/siteconfig.tcl: doc: update
  top-priority-values recipe config  Update the siteconfig.tcl configuration
  of top-priority-values cookbook recipe after the add-path/unload-path
  changes.

2021-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.0,
  testsuite/modulefiles.3/path-cmd-opt/1.1,
  testsuite/modules.50-cmds/500-remove-on-load.exp,
  testsuite/modules.50-cmds/501-append-on-unload.exp: ts: additional
  --remove-on-unload/--append-on-unload tests

  * tcl/subcmd.tcl.in, testsuite/modules.50-cmds/500-remove-on-load.exp,
  testsuite/modules.50-cmds/501-append-on-unload.exp: Allow use of
  --remove-on-unload on module unuse  Even if it corresponds to the default
  behavior, allow the use of the --remove-on-unload option on the module unuse
  modulefile command.  Adapt existing tests.

  * tcl/envmngt.tcl.in, testsuite/modules.50-cmds/500-remove-on-load.exp,
  testsuite/modules.50-cmds/501-append-on-unload.exp: Allow --remove-on-unload
  to get set after variable name  Adapt parsePathCommandArgs procedure to
  allow the --remove-on-unload option to get set after the variable name, like
  for --append-on-unload.  Adapt existing tests.

  * testsuite/modules.50-cmds/501-append-on-unload.exp: ts: fix
  append-on-unload tests for reuse of load path list

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Reuse more path list defined for
  load in parsePathCommandArgs  In case the --append-on-unload argument is set
  after environment variable name but prior path list definition, the path
  list to use for load evaluation will also be used on the append behavior
  during unload evaluation.  In addition, if no path list is defined after
  --append-on-unload argument, the list used for load evaluation is reused on
  the append behavior of unload evaluation.  Applies to remove-path and module
  unuse modulefile commands.

  * tcl/report.tcl.in: Filter internal cmd starting from $ sign from stack
  trace  Update the formatErrStackTrace procedure to filter from error stack
  trace the internal calls made through the use of a variable to designate the
  command to call (like done in runModuleUse).

  * tcl/subcmd.tcl.in: No error catch in runModuleUse  Remove the error catch
  set in runModuleUse when calling for add-path or unload-path. Errors are
  this way rendered like any other: internal module bug if called during a
  modulefile evaluation or top error with report link advice.

2021-11-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.1,
  testsuite/modules.50-cmds/501-append-on-unload.exp: ts: test
  --append-on-unload option on modfile cmds

  * tcl/subcmd.tcl.in: Make runModuleUse rely on add-path/unload-path  Make
  the runModuleUse procedure rely on the add-path and unload-path procedures
  rather {append,prepend,remove}-path to be able to precise the current
  evaluation mode.

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Align add-path args with
  unload-path  Adopt same argument list for add-path procedure as unload-path
  to make it easy to dynamically call one or the other.

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Pass down eval mode to runModuleUse
  Add argument mode to the runModuleUse procedure to get knowledge of current
  evaluation mode in order to distinguish a module unuse in load or unload
  evaluation mode.  Update the module, cmdModuleUse and cmdModuleUnuse
  procedures to pass down the mode information.

2021-11-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: test --append-on-unload
  option on subcmds

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Add --append-on-unload on
  remove-path/module unuse  Add the --append-on-unload option to the
  remove-path and module unuse sub-command to append specified paths when
  commands are evaluated in unload mode.  If option is set prior path list
  specification, this path list which is unsets when modulefile loads is
  appended back when modulefile unloads. If a different path list is passed
  after option specification, this list is appended on unload mode instead of
  the list removed at load time.  --append-on-unload option cannot be mixed
  with --index option.  Fixes #114

2021-11-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add mode arg to
  unload-path/parsePathCommandArgs  Update the unload-path and
  parsePathCommandArgs procedure to add a mode argument to get knowledge of
  the current evaluation mode when checking passed arguments.

2021-11-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp: ts: add use/unuse tests with var ref
  in modpath

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.50-cmds/040-append.exp: ts: fix comments on work to be
  done in a future release

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: adapt existing debug msg
  tests

  * NEWS.rst: doc: desc. debug msg rework in NEWS

  * tcl/main.tcl.in: Add debug report at end of parseModuleCommandName

  * tcl/mfinterp.tcl.in: Move arg debug report of getenv/getvariant in parse
  proc

  * tcl/envmngt.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Remove obvious debug reports  Remove
  the debug reports of argument passed to the procedure as they are already
  generated when debug2 verbosity mode is enabled and for the debug verbosity
  mode the procedures bound to a modulefile command are traced to emit a debug
  report of their call.

  * tcl/mfinterp.tcl.in: Trace mfcmd calls to report them in debug verbosity
  mode  Add trace over each modulefile/modulerc commands to report when they
  are called and with what paramaters. These traces are set only if the
  verbosity equals to debug. When verbosity is higher than debug, traces are
  set on all modulecmd.tcl procedures.

2021-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst: doc: error when unk opt for use/unuse in
  changes/NEWS

2021-11-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --remove-on-unload in man/changes/NEWS

  * testsuite/modulefiles.3/path-cmd-opt/1.0,
  testsuite/modulefiles.3/path-cmd-opt/2.0,
  testsuite/modules.50-cmds/500-remove-on-load.exp: ts: test
  --remove-on-unload option on modfile cmds

  * tcl/subcmd.tcl.in: Raise error when unknown argument passed to use/unuse
  Raise an error when an unknown option is passed to module use or module
  unuse modulefile command.

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Add runModuleUse procedure for both
  use/unuse subcmd  Introduce the runModuleUse procedure that is called by
  cmdModuleUse and cmdModuleUnuse to share execution code between both
  sub-commands. runModuleUse takes a position argument (append, prepend,
  remove) and a command (use or unuse) to know what arguments are allowed and
  what kind of path change to apply.  Aplying module use in unload mode now
  calls for cmdModuleUse with position argument set to remove. To allow same
  set of arguments for the module use command whatever the evaluation mode
  set.

2021-11-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Push eval mode if none on use/unuse  Push a load
  evaluation mode when processing module use or module unuse command only if
  no evaluation mode already set.

2021-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  te                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     