npm ci

安装一个干净的项目

概要

npm ci

aliases: clean-install, ic, install-clean, isntall-clean

描述

此命令与 npm install 类似,不同之处在于它旨在用于自动化环境,例如测试平台、持续集成和部署——或任何您希望确保对依赖项进行全新安装的情况。

使用 npm installnpm ci 的主要区别是:

  • 项目必须有一个现有的 package-lock.jsonnpm-shrinkwrap.json
  • 如果包锁中的依赖项与 package.json 中的依赖项不匹配,npm ci 将退出并出错,而不是更新包锁。
  • npm ci 一次只能安装整个项目:无法使用此命令添加单个依赖项。
  • 如果 node_modules 已经存在,它将在 npm ci 开始安装之前自动删除。
  • 它永远不会写入 package.json 或任何包锁:安装基本上是冻结的。

注意:如果您通过运行带有可能影响依赖关系树形状的标志(例如 --legacy-peer-deps--install-links)的 npm install 创建 package-lock.json 文件,则必须为 npm ci 提供相同的标志,否则您可能会遇到错误。一个简单的方法是运行例如 npm config set legacy-peer-deps=true --location=project 并将 .npmrc 文件提交到您的 repo。

示例

wCAX7hFEULMlpFFXcrzOGRfDNXXR25/m8ZzFuM2YN6uWiUGo4KQBS29R9V2Y4vKYAmFB6yaBtlHwgWTH1uZFSQ==

$ cd ./my/npm/project
$ npm install
added 154 packages in 10s
$ ls | grep package-lock

JGXI19bkRCkDbvUGC6LUvdvAG9HOndug9fpRC+k/0mF+eVbYysnsWAneoD308uSF

$ npm ci
added 154 packages in 5s

vfZkCmMJjqJYw6iScMmS+IUMZ9PmE34hMrhlS+mpESI2jxFi+H/qsz3kCcJ0PQpPqZOMNxKAgwjmjdu3xyBe7iqv5dMYT7IHXTqyU+eN6wA1FGPDu5Pko3PQvZpTlOBK

# .travis.yml
install:
- npm ci
# keep the npm cache around to speed up installs
cache:
  directories:
  - "$HOME/.npm"

配置

save

    EpH0pOUcYTmP1NTiHWcSli/IJJkHR/qn1sxjN4mTjf0fXu4ZYe6nM2NIDxQxWWqYWr8YLZButVsbP9hmcFuql4OKxDpKMIRLdAnGWJrE11OCfM5O62JcezN0FloYjqR+EtCyzL/fyackvv+l6Hix92OgMbnrTa29f7tArARedDXKY/g5tVzd0jvKTtxqBDK2

uP4eCvAqLmLLg9Ex90Vp2VDxmAQJCMcsW/HnqfJwmyIMIW/uS0cLtpWqpw8ibTgjpFEpwmioS333By4ocYODErYpG0LL0+EBz2EkpHufsc9HDY86Fp998eBuHbql0W8n

N7Qjys2T6nXIczIAv/ogc9lNyItQckTBIaGeq2NkV7CAX/pvSNqeAMVQ5X6YPBMTcv4BkA5HbEZ2/FtapGbNE8f5Gv84atipETbkM8SdG6r6AfBUCyFbQosoyqK+JjUE/CRpjpLTsxvobf72hrcDeQ==

FiFhVoVDelbi8I27yGVOt9oWoXzzAaGt0cKGF/i9f/TNharEWYKsK9xxE0pmEKY5/UUtDDlIUEYb08U4mv2VzSNo/jvnzdWti5jQ7rSSkFRze+ds4VVa/eN4GaKmhsQp

save-exact

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

ltYLk7U+K3DIvcEVW3x5SKHUnWu2NtB/Za4LZPQkrKZFYOIv5iKQcxOKrXzyg3J9bbOyin6uErsYEP9A3A5l263f9SlOMlZ2mLG2GqKAAJkumIATCjjwwoxIGerkUlDEeDOx8JOM+Jf9E7S8ZlYwA8orU1Wu8l9fz0FUZyj1ZcDj7MewoTECfKzPwmznPfxF

global

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

zDPgb8UkWYVf+WvObR9SGdxzVH3QKHOMkkskxKBrBr+s88KCnlu8gehxuXV9bD9MIS7YSKUA6cB+wzA3bLWmpO8I/ycLQ8yWn6K0+V+sVYnrBmID/b+GiB0FL6jrmJAMMpt5EASbCrNPjATxd0TLSIf0xpl7625KEZdUMrpIAnGLxBh2xOyjtIqXSnNo/z2qAokeuMB6FFLqg8k7gBMUlnHUOMlftQNkFHwH8ruIF70idoPdxBq8qmZ07E/MEL35vXnJvmZT8U9pRXc3Cl5/LR0SVurOB207XVRoI1LjSRw=

    RF2YraA0F21DLeJ3a4ertUfE2D8mgKgkhJ0NiTFSXjBdNMF4XKQCwnQE/VjYwmtbUm+UOvK+qbXG2ktx2fIxwlBJOfYXAHasczsz9juqOPnSkYgqZMhTNObLead4U8d/8U/WCXAHtaKTXUHE50oB7s8z2rBghLvSblR1rwDrl6td1M4rsx0hYkb0Tp9VZ8wBm/bJTWxlS/n5ePjAKVa9By7fxsf/6ouLm/M86M6Obm+iwa/MFiSN9S2YmffzWQQ9cIQuoPbxdn3BatSzMheTZWsOggPWOXt13WIL+ZC0hAk=

install-strategy

    EpH0pOUcYTmP1NTiHWcSlq7oUrIj8Fv57hcvdAy7g4AYqBKutvRUw4UMyqiyBI8l01q6TLMvXAn9bcficKxa01vMkPOKuETHsEjBQDHzAO9hYYp6k9r4345OfaxGEJj0WIK3Difwqk5e/x2tTKZAVA==

LEQTWu6Zwrc0iXXLR8DVoksx3Mvaq9axAFIjN8GB2kN5emOPQna41E3S971JqHddCbcaUdzzCcpSBzzVHTLV68EnSJX1YFcsPgWdYYdprXm5Esb5cRfCyotigqOCZ6l1QBgMTK9tNhYHR96Cap7dSnWjgvRfK/yBXm4rQHlmbaGyMfOTK+yW9kAJWaeTYUDaeJ6pRKq/wf/ckRiPAsGYnvlgtWPlWbSxTDbm3gd77TIdG2vP2juFu8asclx3vUMl8PlTUF6TX3okgD8vsoebH5rf6DBJn4xhNfGZYgERclwXMmvwJib/xN0Z7e7z989ExNM7eohqCPEfqllJprqJLNqiJREPgR4w12Ne09XvppCs3sdcFEq0CewSXlzGsgEhRH3gF0n8955NH5ctzK4U88tUeO8Y4yaiOpBi0S9DR8LZW6cRYhPf1FQdSIdiFmwaNFq8efB3IAHMHW8K3ncaqtKYwsn94SVW6iuxahjxLIM=

legacy-bundling

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8skCnWiqt1c8zsYLOtSxwq9uX04SvR5iA3S9TWg959L3r5wu3VEQi5+GIKx91Wfo72kZb9rSjW1Vf/3AaA6WSy6pYq0wzJZIXuGhiFne0GzlcJf1FYqUIxNlPLX8lniXO

Dic9LGg7YGLwI3R4cqTwXEUBCma2AdhsreAPcd2yPlOeianKoUSc03WixqT+6K+/23uIr1YJqvzsDo/JiN1nszDdbC8tPGzDpj4nNxUq3C0TXLyVKgJwDR7m8dL3gc1v/rJaB63YXnFPlUU+cJ1kwZbowH5KcIqNdD6XbnYm8KfS5xvn7aoViL7IJYWK1jO4dHVsS7IaA7j6iMDuDLMx+s//tIC6mH55r/ZHkpcb6RAx8jidxaGPcBZOxM7hXtiVodhli6P6kHaMEy+7JH03S6E65YVNGb2qzLsxZKZhHbB+z9fmGTZr4QuZEvQJDBr95Hd6R8kg89iBVa84bKDq5r2pmhP1cBqZnpcevSAfNs6SGoWb56LOyl+Ax+nAsCei

global-style

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8skCnWiqt1c8zsYLOtSxwq9uX04SvR5iA3S9TWg959L3r5wu3VEQi5+GIKx91Wfo72kZb9rSjW1Vf/3AaA6WSy8MluZWArxVCdd39Hj2QPvPbtCEtPMSakfS2Z7plruno

LCwEc1Bx7sd59W8D/DTPdT3OXHWvUMP1o33DeZCObQLqxHgronAUv8lqcc3TBY7YbgCoYEWE9vx/PiTgLNbK1i1423oGNHhFunO9BofcR13oDfdSH/CQV46YKJZSdvnB3KYFokm/F/euBQPYJELN1KYadPDkDC38NEZmXUOSnK1q+YAfASBFvXqFoKEn3jjxl3IqXnJYdw8IQIdILIUbMg==

omit

    EpH0pOUcYTmP1NTiHWcSlvFXpKjt4TwkxeA+dHri5cg+iMeaQjo/ZFF7rZ4CAzPAHbBBLOmW6AlEJoWTMJPEWsTkWNAbo2WrJEQJaTdA0KBFlkJhFP1Y9jsZCqZZtpMqd3vg5UW1k4iS2efoE/+LMoGQWyw+w8eGXDSa99V5BC1ljttWgKQZejW1e1VZI0Mey3oP1xhoV8Q27eKdMHJ7VpaBRqrSQknDtyBcEAawNo2BZdjWHsXFxb3g+C7AKMQ5

L0TPfcQFxexZK8CbhrW+QmmceIVjVkjju1MtiemTJK4ulZHS3ndqXfP5+WHgiIPdRcvuHMNYCb4cAQBzXX5BLw==

b+BEv8UAyWKF5Zt1F8QorKxKVxJ1Kbbk6Lzois0IqWL24M1ARoamqN+/ghTkISHrgfQtkjGOzV6zZ3QYyIhGU6JWqQN5JjSAE1Wqpi0ZN4/CWynskuD6m8XdppztPX5+ZGWG4+bWOl2kA/VHu4+qrEClkHbO1LtaEH6kd/xkp9z3yfkEMJWrqyA6SuLnCJtbjKxmn8iUyOuCuiaJCOpb0d0vo/lejeRw3ejgBVPHtuctehuP6F5sq1AyJLvRGc3s

536BSnSSBiwQlUBycFu1pASxBwOs1+84a5qCX3LMUHaWXrfWaBl8RvfyrjiKryOo3FCBi/SA8ort5QmX0Ck6syUZCl3RMfU8VrL7dUPv9zQM/wzbL7MLkB068TCjSxoCo9mtiPd5o9mHw1ERffb30Iq7yt3z1l0PNQI4VvpGgdU=

BjEEmviyjbL/zw94exS0A3IBElyDoF+rQ39L99AXs8LaknsKugoc89pFCmPcv94qg4uuDnRZl/63dGkFRQDhwF5fUqxKF9uWEyWMhFSAOlVp4Ca0yKiypvXxwXbjWXTZQOdkEGVtDTuZ9RxkkCtoDLE/Y6QmFK/J6UkElvg8kU9tHjb2LKQC8UwXV/fM9RIfQSGrX9EUerAs4xVL/UXloYrB7Ib4WIUGDRb9MeEd0JY=

strict-peer-deps

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

FiFhVoVDelbi8I27yGVOt+5FX1+D1ZKGxLuZ20HZ0JCnoigSBPtBk3+WUtrPA9PHEbdI/X5T1HlPLc8qvDPHyHg3lXbSVtBXkgtQ3KRo70vGErUEhXt3S5WBthMSodeLXaSrZ4heS7Fx3NzjNf63Obn3j/o+nIWIhqmxdNjloQQiyIx1ChCBB6FqUXewTUQJYjWUuqzGInD026O7i4RwAHpdQEofmmCy7bn/HunmDhW4wSDE0uBYZ5xp3RxkHSfYWdztz+m0/p0kShoco/oLwJJRX+iu9o5Ea81mkdUBfitGcTZunaOaYYst9JAgaAO0Y9drn98LWV1Uzp9tdFjtmQ==

hK0M81lLP7c05NGTnzGQpfUchfPl/n5QZ6R4Xx2YSoGdvZnEx/OVPsZMO6j4cfmHfDfpCekmTBZOsPQKc1kXrL++GTe612OaGGaQ/mUYog/AdcqX6UcrsQ6wJYeVrZ5N/2AfsMjy2X9sl0/HzVk016OWpmjkNgNbTWQYhDAPGeludkezy0VF4Mae3KgwC4oNAoks4TPmu02cNQNezWbLVNmf+gmJLkyOxTO7kOCePonR/x9F9Ct78+V4NB+44pPoHh4NCalmIIJ0gIaWlAKbPnWqf4Wrh4WK2oRdtjcdr3RVtaVOnMqvIOBTP+kSAnCfki/nvG4d2bWUloci8pVX2Q==

ktP/RBtv4waf8DSRkTz3s3ekGTKCf6GHTrrvdKDxY+xZGhNvtuCyVOq6TpyQ3f7QuFuVEtTOuDCFFnZLPLeAu/NRmDA0GbTFfBVnSkYrip2L1FtflWoVWWhCTD2QBGL1tlfGma1wUcTLu6XjhNZNm5CU5b7wwUWc6Q/B/2fCPb1WZWzsAiXuddZnuGrXZXGMHFUGJNf3BbCbju+NmwDJLjHmmoWuVC945nCP/dBgOGY=

package-lock

    EpH0pOUcYTmP1NTiHWcSlvc59cMRladRHoLV5jMq9t4AJJy5eeCQOazNRGakPPY4f8SDsLYQzvz2yC6gG4f0JA==

FiFhVoVDelbi8I27yGVOtwssR8DzI9JvfsrjPJCL123dOCAP2y5WTe8K2H1ELGvgMoMc9Vu5cQtbEyN4MmPlucKq20hsK4HyRSL6lLDrKBSMIcBfFrTZv4ZEPCiYJWc7EZoNUJBffC14tVP1WnWTPM76DO8WuUE5KRZmEtMHiyGOv0nJYoaPOFRIQ68FBZxqYXiUE9/q9AgB4Flg+3z6MtGuACPJ895EyXNXNszCXsw=

z+tb/LPpHENmwdp5lw5gnaZ5AhZ7DsKsvuyszg46UHvAJa0c1DY8eTvjCGy+lNv1

foreground-scripts

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

sG7pf/gfHxHSjqmM5nZeES/Ot6DC+HefQTwtFhUPrxzIFe6APsKe5RO8JiGD20TgYtJOHufo/xWrir699qu7jXuBlopF3R2V20NrbrBTAR14yIefTed/88LCDHQTIfqXl6Z3+aUbl6uaEaXUfMu7ylqVSgZTFNGWD/p8PPnbo8BX5Hth4NHBTOKM9ivlQiXTAozqUJm6zRwtflJ3L+7h+NWOgL1vl6/9q2ONYWt27aoCic+skzYGufnfflS7yHUeXl/UXxwhnbIhN+IRlEVBZQ==

KxZJtEJf5fXgRNlfRKFshr71g85h3yQ7RXJe0hg9M4lSSjYEGdBH7DXZdHnHsXF+6eXQFSoPM6Kxm9dtv/InErr5SItnjYEo96eGtiQvlRQE/sK9Xrb56P/lCEWQ4Z1xdPA3kDkRv1aVQ4TxA5It7Q==

ignore-scripts

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

KtGQswljOfrysKoM9lTZxKEUK+thIYsYF565ukHx4M2JMwfeJBI9eAXJLoI710Q8Tz1dM70rrZkshURIzWJGDx3ZwpTsyfonx8P0oT7pPHI=

dIl01/wrWmPY6FA2Rw0n/nyJ5uPPbByXRxiyqcurcZ1JMURukNVO9ravKunISGb7+2G9NzMI2Mm596Uguv++YfRAeQrb5cr6rqUDUVZp+PASyVBlyJN8YsKj3I9L5C5qeLGovW1FQleOUF7QvlIkmFrRji/VY4CbfHtEOPlYAFcpb5Qbh5ewyK6oxe/LBXfocPbM4CsMCgHYi+h/m8HnRTSyyJI1oAWioY+0qAvq0YG3wPVC8ni3+MZG8nrtzQHD3I7+iwp58V+Z0st1/wZcURJKrCeIQfw/IAgm2e1QoR57P8GsYLTKmWC5oYOqvzkeCT/JmxxxQWgU6ZlOZHvbubh5n//Qupg2vnI8lowX9GiSAz80n3iSKD1prKdoLQBKDvlV08pUs46W2AeJNs2+XpSE1BjaIyEqWJMFX7kakoR8E3n+aWiaioyextMjDPk5

audit

    EpH0pOUcYTmP1NTiHWcSlvc59cMRladRHoLV5jMq9t4AJJy5eeCQOazNRGakPPY4f8SDsLYQzvz2yC6gG4f0JA==

bc2amoQfOOVQ8ljsAa5MhlBUy8+5VSxcXvrp6rBfT/6udUcQXchKmOX4kX4xAKStReghkXwVFJZ+2AgmHQ/GEKj+6oA2AbcGF8CVP7aThpjJ9pX3zkzoTibVjumfh3qA9aYFJAgML7A0ZEufeD1XuanNxecxAP5tngw7Bqs7mjRO7z2wZSbPv8JFCHfiFyTeVTd9JxLqAoC8dRqSDWQdYFUaDMGG5pIq3h95Ex5WjSLZn9wRUUUpgcFueZPJjuryRySQ0/Pi7Dm7GHsrYU9p41lYLb4thKG1ejxQ3/DmiVwoBiZwHWc2iVOkopEVwpRwbfvSL6N7D+MLg/ZPzc1eZA==

    EpH0pOUcYTmP1NTiHWcSlvc59cMRladRHoLV5jMq9t4AJJy5eeCQOazNRGakPPY4f8SDsLYQzvz2yC6gG4f0JA==

C3uIWAV4IrQ7VwLTrEWyDbbGWbS+e3r8FgyjwAI80wBaguf4mkqcr/okwCZFRVv8wKs2QxUep5bg2WJhM0bt9X1LtqskM+JK+igIdzIjSU5ByPnrotrtXPAXKoFklT8gvTgf3kD+L7O4BHf7bsSB8w==

wMC0f8tsBUALLAIZ+dSN9F9yDtMiLF/9zHiWp1BZEQkYGjWIStQ8uKC/BsdSmUL2AYKy+pSbE01c5vYelmTfd5Tkx9vLx9gU2dCMnoVxtBf0W0GEOxGMvGy1CChq86wJVbHi0ruSErOJhe9L+JzOWl0Vc02UpT5FMbYApzmlflfRL1FWQQt0HeRdSMBIvYEibQbqSAB6q7ryfeWuMbAm1U8YZg1kz5Zq4CyFjeYSGG4=

fund

    EpH0pOUcYTmP1NTiHWcSlvc59cMRladRHoLV5jMq9t4AJJy5eeCQOazNRGakPPY4f8SDsLYQzvz2yC6gG4f0JA==

ZcYS1WAukIQ6EMUNuGE6k0BUwKbp+lBtPYhigVGVWXyI1sOrwVcBkRkXeTVjYLMH5OtM40lAPjPkCJbB4esNBao6esogpBRoA4CRgQFE5n4B8r9tgh+Z45WvNUvwydQplwBGL1OWxDfilNm7NLjXnx5F1SHGdJKlk14VB0qkBbmx1UfuYPasww3dXlfxVU4Seas8KVTfDSNVyjSm4Rys35Dq6T9X6J2Su778F207Dx8Kr0Vf8vdNSxsMouY4n937MLZYIo/eN/4OdX5TmsPocQ==

dry-run

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

Ell9KAE0MDDlLIjK+xs+BZeaHxcIi2v5k69PZ+CZ5J9HxdEf0wIglE0sBgaoly+Vbm3q99/nwgbUSiUribBrppozCXQ7Oa0NESwXdzaWKIOmQkm6ad4MJZP2XTVfe0Gh5XFr+pVmgm9zAqcI1pWFeFTSYr0Y+BzkrbWNxUFvWto/xeL2sj/pcLT9RZ/AVZ98Tl+YOgEJuoPZS5sUp8wMPh3l/RyZH/Z5MdhrtNmhe/3XAiizXD+oYJdM22o1OS1Ubedn6F4asJoMyMXgxa466dz7a/dDu8Qfz/HskzvElCX/LjGmG58Rs1FqOwh3B0PPfeYcVqk98bZJHZ/wz3OzpuZZpAZ5xGyTcV+I0v09COcQLG5eneCoqOHI+wo/8guI9vyXpEA/Qd7J9XidExcPBQ==

wQo72obhxRPdSt97x8SVk41fsngNIAfYdhU1xTsry9cRhvSQpXMsdUC58ohjyfrUkMvBGmoZJA5yBrkFRpIY6LXFaOthddRbFxq4CQh04E/Iq3ejgOXRPGW5Vbnx2PN529hjrgdfNDsn+9YA3jfVMQ==

workspace

    EpH0pOUcYTmP1NTiHWcSlij/kPhY8lT1gTnGg/9Xv80RR+B6BIW9wAST5a99EiZ12snpbydnPrGa45DStyxhUOv2mYkCTH0XUkoUVhW4bEw=

Co9F19fnIhlvdu344Y0mcOo6vAr61e9lTNxNHtEipS73qP3V++SDNvl5TrlRb9dj1KfDHG3+EpJEoRcJDm3OpK8ooNcb+nRp/RnWOyXAzmwtyZCx5Ue5pe232nbTCcSoIe/ax4wnPDzdNCu6zyPTc9SKUvJrYqCqnuYUGJ8Q8pzE9JOmNBRV9FqiYuETDLJX

9iyLI4mKZzUHFBoTFnXNYhssR8dKFn6SvrxgVF75xzgCg1K4o+OxxZ5u6jg8gPYc

    NhoKeqk7ibWPZK8+kwA9BZ3wK1l7K48bvN/8MHtIiLGbrfNrjbE69dupZQ8cjTeSq+XNmuQzbWve365lq7ISkBfsTYYsp4Nc8wbgWTjknXbvGw1EmTdL1hzCkPplpV0tvs7zdE+MNn8Pz/P7bADexBgu+mxT7N/DMhYbBisjXkM3w9EjUdqHRN9I37w9k1eqQj6CRjDXojw7+OAPi0ubRg==

bpWgN5ExK1siXdg2DWwIv3AQ4TM8eb5Xxf0dA187OsIy4VmWqazQh1+w9I5Nom/ydNZgWjRHHzJ8te12Qc0CvSqX/CbTrFbcc6lhN+ssspEBo9G0wnOXhaiUorkrZq6EeV4zUeYxF7xIPGRy1paay/rgwSA44WMPsLsU9pL6WY8KXmo19XCf8Oje9TQbcv5D+J/7Lj3hn8eYCy7Rym9oz37fZ6cxI0+hO9Jrb6pcL3vCvGY75CsFixQS0Ts6VAJt

JFycxGju54b5jbJJm/t0nXBFv8vDe9ZpWvbDDfrZIY1kxJQcWDSL5ZfxS/U+SELF

workspaces

    EpH0pOUcYTmP1NTiHWcSltfR1lrwymO7khwLeMltu/WMxgw1145EqFraMRjJCsHvdl834Mh8oROJ+F17VesdVQ==

lKHlRoYIPKI8hV3zeR0/pJf+0Xc28WB2RKxYuOvisEckDJ7AMtkTVVMEFlwwd4ZEQhDcuHVp8u+FfDR2WAgA1rxVG9OYz5z2MWzE2UJPIio=

+sl3MBh8e13jQmVoNUTr8PzwkmpYOhx1OvQCg06JLsPDAkJBh+oP/eramOjbSjBxV7otU1gk4OxDmLozHFa0Q6WQZ3liTZoKFATqgm4Y7tFw4ak3KCHLx/p86llyfg6HgPNIiZoLks78/y/8OYPwAlN8hGd0a/YTW8hU9zjBQzE=

    4q2Bh3Jkd9aYJ/8e3werT05e64CYz6FcIbG1Od52PBdjKGDXyu7Ch2wNcYchOSkROCMgwQAk3tH40BLSgUZJ4WZGfS+evCMsmu0wb6dauqzQ7xNGqOsyiAdVwJWEnzXuyUTgWpYqxs/SqZgZydN1LSsCNGrgymPwlusi/QnfjLsr043yHUeqd52hbosuUFQXTFZx1UHHj4TmNHFiM8KWYhHx6v+XYBOMqA31ZQlANRi1SZesohfkkKcwewzVFwYfDCvTwEh9UJPumH3mORbQOMIGqYeW0SwFoO/9WHqNFePa4grXI3eOaR30vnyGqLci2ssxS/nutfzGQ/O+xw6lci9gM6RPVGN6Yt+4r8xVhLbi/saRNhp+HoSUaC7m+KInbxEe9aKy1Jr2KSActmy7gdn2N9RpbFew7m/ApiS15/U=

JFycxGju54b5jbJJm/t0nXBFv8vDe9ZpWvbDDfrZIY1kxJQcWDSL5ZfxS/U+SELF

include-workspace-root

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

W+QbfZeZqLuwESPhYMVR7fuHVDc5Wf2UUuQSF1qib0+UOh/wN9QhLjMxK4qCh+Youfq2EIRahiarTF319YSrVA==

aenF55kZGUx38Lx3niKbjqRpkJrlixKpGZl0XCxA1+t1AmUHh+29C0ObgWPWQslPlhFQJKx9Syg1m4mUkWPCx2esHCckjrJY55GlfBVJa7VHBZcpoLjwZwzJQutzxRp5ssbOc8L3CxesEcAu/t9WoFjs83wgK081kUswtKvAJnOibkwdwO4vQsTAvncvilH/65k9y526uV61WcCPuV5nXaEgfXeFrIPA8PdNhxFWmAxgd+2Cg9hXEoSfnWDgxM6lraUFnD2+FUZnBGFy5eITgVo4CwEDz65KVaGts+rPn2/O4HAs1EI1Rf/O6U2T/oCl

JFycxGju54b5jbJJm/t0nXBFv8vDe9ZpWvbDDfrZIY1kxJQcWDSL5ZfxS/U+SELF

    EpH0pOUcYTmP1NTiHWcSliUJTBm//oVXh/pDP8UGh5dbSujBiD6FY3AqOvsSLxA8vKUZeAW9UrwwVzFqUQF35A==

TD0w3DydEe+/UB8yUr+USzSbBypTXHqQ4tzMltCeuweFfXThPQcXWlbT0btHjaGQsK2z4zhb5tdzZalCFSz4pm/UwZ/3KQSbewKVlswHVvNyUlAatRhKXUbFT88G2W8mXXDnHdo2ngBOO4vs2I7fLZ+hw9osFw66akwqvEJVMrHzhcPge4ZdDQdWInsNn2Gx