{"id":351,"date":"2017-08-10T15:52:57","date_gmt":"2017-08-10T07:52:57","guid":{"rendered":"https:\/\/blog.jsjs.org\/?p=351"},"modified":"2017-08-10T15:52:57","modified_gmt":"2017-08-10T07:52:57","slug":"%e7%94%a8sinopia%e6%90%ad%e5%bb%banpm%e7%a7%81%e6%9c%8d","status":"publish","type":"post","link":"https:\/\/blog.jsjs.org\/?p=351","title":{"rendered":"\u7528sinopia\u642d\u5efanpm\u79c1\u670d  \u00a0"},"content":{"rendered":"<div class=\"clear\"><\/div>\n<div class=\"postBody\">\n<div id=\"cnblogs_post_body\">\n<p>&nbsp;<\/p>\n<h2><strong>\u9700\u6c42(\u8fd9\u6bb5\u8bdd\u662f\u6458\u6284\u53c2\u8003\u6587\u6863\u7684\uff0c\u56e0\u4e3a\u4f5c\u8005\u4e5f\u60f3\u8fd9\u4e48\u8bf4)\uff1a<\/strong><\/h2>\n<p data-mce-=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u516c\u53f8\u51fa\u4e8e\u81ea\u8eab\u9690\u79c1\u4fdd\u62a4\u9700\u8981,\u4e0d\u60f3\u628a\u81ea\u5df1\u7684\u4ee3\u7801\u5f00\u6e90\u5230\u5305\u7ba1\u7406\u533a\uff0c\u4f46\u662f\u53c8\u6025\u9700\u4e00\u5957\u5b8c\u6574\u5305\u7ba1\u5de5\u5177\uff0c\u6765\u7ba1\u7406\u8d8a\u6765\u8d8a\u591a\u7684\u7ec4\u4ef6\u3001\u6a21\u5757\u548c\u9879\u76ee\u3002\u5bf9\u4e8e\u524d\u7aef\uff0c\u6700\u719f\u6089\u7684\u83ab\u8fc7\u4e8enpm\uff0cbower\u7b49\uff1b\u4f46\u662fbower\u7684\u5e02\u573a\u517c\u5bb9\u6027\u660e\u663e\u6ca1\u6709npm\u5f3a\u58ee\uff0c\u52a0\u4e4bcommonjs\u89c4\u8303\u7684\u65e5\u76ca\u6210\u719f\u3002npm\u5e94\u8be5\u662f\u524d\u7aef\u5305\u7ba1\u7406\u7684\u4e0d\u4e8c\u9009\u62e9\u3002<\/p>\n<p data-mce-=\"\">\u516c\u53f8\u5bf9\u4e8e\u642d\u5efa\u672c\u5730\u79c1\u6709npm\u5e93\u6709\u5982\u4e0b\u8981\u6c42\uff1a<\/p>\n<ol data-mce-=\"\">\n<li data-mce-=\"\">\n<p data-mce-=\"\">\u79c1\u6709\u5305\u6258\u7ba1\u5728\u5185\u90e8\u670d\u52a1\u5668\u4e2d<\/p>\n<\/li>\n<li data-mce-=\"\">\n<p data-mce-=\"\">\u9879\u76ee\u4e2d\u4f7f\u7528\u4e86\u516c\u5171\u4ed3\u5e93\u4e0a\u7684\u516c\u5171\u5305\uff0c\u4e5f\u4f7f\u7528\u4e86\u5185\u90e8\u670d\u52a1\u5668\u4e0a\u7684\u79c1\u6709\u5305<\/p>\n<\/li>\n<li data-mce-=\"\">\n<p data-mce-=\"\">\u5e0c\u671b\u4e0b\u8f7d\u7684\u65f6\u5019\uff0c\u516c\u5171\u5305\u8d70\u516c\u5171\u4ed3\u5e93\uff0c\u79c1\u6709\u5305\u8d70\u5185\u90e8\u670d\u52a1\u5668\u7684\u79c1\u6709\u4ed3\u5e93<\/p>\n<\/li>\n<li data-mce-=\"\">\n<p data-mce-=\"\">\u670d\u52a1\u5668\u786c\u76d8\u6709\u9650\uff0c\u5e0c\u671b\u53ea\u7f13\u5b58\u4e0b\u8f7d\u8fc7\u7684\u5305\uff0c\u800c\u4e0d\u662f\u5168\u90e8\u540c\u6b65\u3002<\/p>\n<\/li>\n<li data-mce-=\"\">\n<p data-mce-=\"\">\u5bf9\u4e8e\u4e0b\u8f7d\uff0c\u53d1\u5e03npm\u5305\u6709\u5bf9\u5e94\u7684\u6743\u9650\u7ba1\u7406\uff0c\u5b89\u88c5\u65b9\u4fbf\uff0c\u914d\u7f6e\u7b80\u5355\uff0c\u4f9d\u8d56\u5c11\u3002<\/p>\n<\/li>\n<\/ol>\n<h2><strong><a href=\"https:\/\/github.com\/rlidwka\/sinopia\" target=\"_blank\" rel=\"noopener\" data-mce-=\"\">Sinopia<\/a>\u00a0\u662f\u4e00\u4e2a\u96f6\u914d\u7f6e\u7684\u79c1\u6709\u7684\u5e26\u7f13\u5b58\u529f\u80fd\u7684npm\u5305\u7ba1\u7406\u5de5\u5177\u3002<\/strong><\/h2>\n<h2><strong>1.\u8981\u5b89\u88c5\u7684\u8f6f\u4ef6<\/strong><\/h2>\n<h3><strong>\u8f6f\u4ef6\u7b80\u4ecb<\/strong><\/h3>\n<p><strong>nodejs\/npm<\/strong>\u00a0\u8f6f\u4ef6\u540d\u79f0\uff1a node-v6.9.1-linux-x64.tar.gz \u00a0 \u4e0b\u8f7d\u5730\u5740\uff1a<a href=\"https:\/\/npm.taobao.org\/mirrors\/node\/v6.9.1\/\">https:\/\/npm.taobao.org\/mirrors\/node\/v6.9.1\/<\/a><\/p>\n<p><strong>\u5b89\u88c5\u547d\u4ee4\uff1a<\/strong><\/p>\n<div class=\"cnblogs_code\">\n<pre>tar -xvf node-v6.9.1-linux-x64.tar.gz<\/pre>\n<\/div>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_line\"><strong>sinopia \u00a0\u00a0<\/strong>\u00a0\u7248\u672c\uff1a1.4.0\u00a0<strong>\u5b89\u88c5\u547d\u4ee4<\/strong>\uff1a<\/div>\n<div class=\"ace_line\">\n<div class=\"cnblogs_code\">\n<pre>npm install -g sinopia<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p><strong>pm2<\/strong>\u00a0\u00a0 \u7248\u672c\uff1a2.1.4\u00a0\u00a0<strong>\u5b89\u88c5\u547d\u4ee4<\/strong>\uff1a<\/p>\n<div class=\"cnblogs_code\">\n<pre> npm install -g  pm2<\/pre>\n<\/div>\n<p><strong>nrm<\/strong>\u00a0\u00a0 \u7248\u672c\uff1a1.0.0\u00a0<strong>\u00a0\u5b89\u88c5\u547d\u4ee4<\/strong>\uff1a<\/p>\n<div class=\"cnblogs_code\">\n<pre>npm install -g nrm<\/pre>\n<\/div>\n<h3><strong>\u89c4\u5212\u76ee\u5f55(\u4e0b\u4e3a\u672c\u6b21\u5b89\u88c5\u7684\u5b9e\u9645\u76ee\u5f55\uff0c\u53ef\u6839\u636e\u5b9e\u9645\u73af\u5883\u8c03\u6574<\/strong>)<\/h3>\n<table>\n<tbody>\n<tr>\n<td><strong>\u9879<\/strong><\/td>\n<td><strong>\u76ee\u5f55<\/strong><\/td>\n<td><strong>\u8d26\u6237<\/strong><\/td>\n<td><strong>\u5907\u6ce8<\/strong><\/td>\n<\/tr>\n<tr>\n<td>npm\u3001nodejs\u89e3\u538b\u76ee\u5f55<\/td>\n<td>\/opt\/software<\/td>\n<td>nadmin<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>sinopia\u542f\u52a8\u65f6\u76ee\u5f55<\/td>\n<td>\/home\/nadmin<\/td>\n<td>nadmin<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>sinopia\u7684passwd\u8def\u5f84<\/td>\n<td>\/home\/nadmin\/node_htpasswd<\/td>\n<td>nadmin<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>sinopia\u7684storage\u8def\u5f84<\/td>\n<td>\/home\/nadmin\/sinopia\/storage<\/td>\n<td>nadmin<\/td>\n<td>\u5efa\u8bae\u78c1\u76d8\u7a7a\u95f4\u8f83\u5927\u4e0d\u63a8\u8350\u653e\u5728home\u76ee\u5f55<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><strong>2.\u5177\u4f53\u5b89\u88c5\u6b65\u9aa4(Server\u7aef)<\/strong><\/h2>\n<h3><strong>\u521b\u5efa\u8d26\u6237nadmin<\/strong><\/h3>\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_layer ace_cursor-layer ace_hidden-cursors\">$ useradd\u00a0nadmin<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3><strong>\u5b89\u88c5node\u548cnpm<\/strong><\/h3>\n<p>\u5b89\u88c5\u6b65\u9aa41\u7684\u76ee\u5f55\u548c\u547d\u4ee4\uff0c\u89e3\u538b\u8f6f\u4ef6 node-v6.9.1-linux-x64.tar.gz<\/p>\n<p>(\u6ce8\uff1anpm\u4f1a\u5728\u5b89\u88c5node\u7684\u65f6\u5019\u4e00\u8d77\u5b89\u88c5)<\/p>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">\n<div class=\"cnblogs_code\">\n<pre>$ tar -xvf node-v6.9.1-linux-x64.tar.gz<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u6dfb\u52a0node_home\u5230\u73af\u5883\u53d8\u91cf\uff0c\u7528root\u8d26\u6237\u4fee\u6539\/etc\/profile<\/p>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"cnblogs_code\">\n<pre>$vim \/etc\/profile          #\u8ffd\u52a0\nNODE_HOME=\/opt\/software\/node-v6.9.1-linux-x64\nPATH=$PATH:$NODE_HOME\/bin<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>source \u4f7f\u914d\u7f6e\u751f\u6548<\/p>\n<div class=\"cnblogs_code\">\n<pre>$ source \/etc\/profile<\/pre>\n<\/div>\n<p>\u914d\u7f6e\u751f\u6548\u4e4b\u540e\uff0c\u5728\u4efb\u610f\u5730\u65b9\u53ef\u67e5\u770b\u7248\u672c\u5982\u4e0b\uff1a<\/p>\n<div class=\"cnblogs_code\">\n<pre>1 $ node -v\n2 v6.9.1\n3 $ npm -v\n4 3.10.8<\/pre>\n<\/div>\n<h3><strong>\u914d\u7f6enpm<\/strong><\/h3>\n<p><strong>\u5148\u67e5\u770bnpm\u7684\u914d\u7f6e\u6587\u4ef6\u5730\u5740<br \/>\n<\/strong><\/p>\n<div class=\"ace_content\">\n<div class=\"cnblogs_code\">\n<pre>$npm config get userconfig\n\/home\/nadmin\/.npmrc<\/pre>\n<\/div>\n<\/div>\n<p>\u4fee\u6539\u6b64\u914d\u7f6e\u6587\u4ef6\uff0c\u4fee\u6539\u540e\u67e5\u770b\uff0c\u5185\u5bb9\u5982\u4e0b<\/p>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"cnblogs_code\">\n<pre>$ cat \/home\/nadmin\/.npmrc\nproxy=http:\/\/\u7f51\u7edc\u4ee3\u7406ip:8080\/\nhttps-proxy=http:\/\/\u7f51\u7edc\u4ee3\u7406ip:8080\/\nno_proxy=\u672c\u5730yum\u6e90ip\nregistry=https:\/\/registry.npm.taobao.org\/<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u4e5f\u53ef\u901a\u8fc7\u547d\u4ee4\u8bbe\u7f6ehttp\u7f51\u7edc\u4ee3\u7406\u5730\u5740\u548cnpm server\u7684\u5730\u5740\uff0c\u5982\u4e0b\uff1a<\/p>\n<p>$\u00a0npm\u00a0config\u00a0set\u00a0proxy\u00a0http:\/\/server:port<\/p>\n<p>$\u00a0npm\u00a0config\u00a0set\u00a0https-proxy\u00a0http:\/\/server:port<\/p>\n<p>$\u00a0npm\u00a0config\u00a0set\u00a0registry\u00a0&#8220;http:\/\/registry.npmjs.org\/&#8221;<\/p>\n<p><strong>~~\u7531\u4e8e\u4e0a\u6b65\u9aa4npm\u5df2\u7ecf\u5b89\u88c5\u914d\u7f6e\u5b8c\u6bd5\uff0c\u6240\u4ee5\u4e0b\u9762\u7684\u5b89\u88c5\u8f6f\u4ef6\u53ef\u4ee5\u901a\u8fc7npm\u547d\u4ee4\u8fdb\u884c~~<\/strong><\/p>\n<h3><strong>\u5b89\u88c5sinopia<\/strong><\/h3>\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">\n<div class=\"cnblogs_code\">\n<pre>$npm install -g sinopia<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3><strong>\u914d\u7f6esinopia<\/strong><\/h3>\n<p>Sinopia\u7684\u7279\u70b9\u662f\uff0c\u4f60\u5728\u54ea\u4e2a\u76ee\u5f55\u8fd0\u884c\uff0c\u5b83\u7684\u5c31\u4f1a\u5728\u5bf9\u5e94\u7684\u76ee\u5f55\u4e0b\u521b\u5efa\u81ea\u5df1\u7684\u6587\u4ef6\u3002\u76ee\u5f55\u4e0b\u9ed8\u8ba4\u6709\u4e24\u4e2a\u6587\u4ef6\uff1aconfig.yaml\u548cstorage\uff0chtpasswd\u00a0\u662f\u6dfb\u52a0\u7528\u6237\u4e4b\u540e\u81ea\u52a8\u521b\u5efa\u7684<\/p>\n<p>\u7531\u4e8e\u6bcf\u6b21\u542f\u52a8\u9ed8\u8ba4\u7684config.xml\u6587\u4ef6\u662f\u4ece\u539f\u59cb\u6587\u4ef6default.yaml\u62f7\u8d1d\u800c\u6765\uff0c\u53ef\u5148\u4fee\u6539sinopia\u539f\u59cb\u7684default.yaml<\/p>\n<p>\u5730\u5740\uff1asinopia\u5b89\u88c5\u76ee\u5f55\/conf\/ default.yaml<\/p>\n<p>\u67e5\u770b<\/p>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>$ pwd\n\/opt\/software\/node-v6.9.1-linux-x64\/lib\/node_modules\/sinopia\/conf\n$ ll\ntotal 12\n-rw-rw-r-- 1 nadmin nadmin 1309 Nov 9 19:52 default.yaml\n-rw-rw-r-- 1 nadmin nadmin 4076 Jun 7 2015 full.yaml\n-rw-rw-r-- 1 nadmin nadmin   39 Jun 7 2015 README.md<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u4fee\u6539\u5b8c\u6bd5\uff0c\u5185\u5982\u4e0b\uff1a<\/p>\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>storage: .\/storage\nauth:\nhtpasswd:\n   file: \/home\/nadmin\/node_htpasswd\nuplinks:\nnpmjs:\n   url: http:\/\/registry.npm.taobao.org\/\npackages:\n'@*\/*':\n   access: $all\n   publish: $authenticated\n'*':\n   access: $all\n   publish: $authenticated\n   proxy: npmjs\nlogs:\n- {type: stdout, format: pretty, level: http}\nlisten: 0.0.0.0:4873\nhttp_proxy: http:\/\/\u4ee3\u7406\u670d\u52a1\u5668ip:8080\nhttps_proxy: http:\/\/\u4ee3\u7406\u670d\u52a1\u5668ip:8080<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3><strong>\u542f\u52a8 sinopia<\/strong><\/h3>\n<p>\u5728\u89c4\u5212\u597d\u7684\u542f\u52a8\u76ee\u5f55\u4e0b\u6267\u884c\u547d\u4ee4sinopia<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>$ pwd\n\/home\/nadmin\n$ sinopia\nwarn --- config file - \/home\/nadmin\/sinopia\/config.yaml\nwarn --- http address - http:\/\/0.0.0.0:4873\/\nhttp --&gt; 200, req: 'GET http:\/\/registry.npm.taobao.org\/express', bytes: 0\/578356\nhttp &lt;-- 200, user: admin, req: 'GET \/express', bytes: 0\/34448\nhttp --&gt; 200, req: 'GET http:\/\/registry.npm.taobao.org\/type-is', bytes: 0\/54083<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>sinopia\u5df2\u7ecf\u542f\u52a8\uff0c\u53ef\u6b63\u5e38\u4f7f\u7528\uff0c\u6b64\u79cd\u65b9\u6cd5\u65e5\u5fd7\u4f1a\u8f93\u51fa\u5230\u63a7\u5236\u53f0\uff0c\u4e0d\u5efa\u8bae\u4f7f\u7528\uff0c\u540e\u9762\u4f1a\u4ecb\u7ecd\u4f7f\u7528pm2\u5bf9sinopia\u8fdb\u7a0b\u8fdb\u884c\u6258\u7ba1\u542f\u52a8\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\u8bbf\u95eehttp:\/\/ServerS::4873 \u67e5\u770b\u9875\u9762\uff0c\u770b\u5230\u5982\u4e0b\u9875\u9762\uff0c\u8bf4\u660esinopia\u5b89\u88c5\u6210\u529f\uff01<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAA0wAAAFVCAIAAABTufiaAAAgAElEQVR4nOy9e3wT14H3rX33\/m73aZoLbG+U7paQNOQqSuPEjtOW0O1jliaw0AdvSxaSuMsW77OQNw08T6mdZl3UtVIH21gEHNESbDDI4BgMIrHjYMvIl8EByRDZjpEtfAHJDs4YY2HFPu8foxnNVRrZsmUPv+\/n94c9lmbOnBlpvj5nzhnd4Q+7Dn\/YVVLdeeiDywerOorfbz9wuvV3eyt+u6uEBjHFvP9Q8ZFyW6NDPg0OW4OjtsFR23CBSU39hZr688HYeak\/L11+hg3vNRfUh92oI1Iu1IrfKyybiq1zOygX4bZ4v+4rOlpyzKqmhKKysTXzkTDnz4j\/JKzDaCpQXdWFDq5s7Z2RyUcKOX9GqYQKtaq69mQLyZ2HUZxRaqP2xFM6A5VPuQbZ2lC\/IdlzT1ozMYuKEsqcPHKnjeh7YFLHbmKl4hfM\/I7lUOlJme+usGWrDZOojyn7SsmHrib4KePVWKjwgq8Fua\/f6CtTXHiFcvKKaj7Aqz3ZqK7SyZ0AF2oinflhv9gn\/umbcKL80othFGtgir46wkdXdra37Gxv2dmeY7YrpTUey5nO4tMfZ\/y+qKbBGW8p0hpU84X83ebqunNnm1p4cTKpY9LorAs63wUb+2mvrT9fW3++pv58bSih5bWST7joq4TRR8WERNNpa2QKoBhbo5OnpKHvI16RQl9kyhsKbiu0NvFCmZx4r7bwj4erbedC5QnVmHLxxDb8UdhvRmkF8nfhQuig8PdOtvaahAmVUL725Eti\/0guMkdZoZJDOfFezV5+7TXJhV+HDdJCylxfxS+TRHK+XWAjc\/qFK1uTqAJFnw5R2SLUhvzZrrTdJmfFe7WFfzz8gY2SOXzqP2jqPoORPoDi01vp5FHwoWiKGsXXgqhUglO63Prhnn2HqmqawpRH5WksexwjHMRo6q1WMeLKlDmT1R5i9Uf5gq3hwvHTZ\/bsO1RV08i7BITx3UmfjZJv4\/BFncmpkF4yZnbCXwGlUblaXUWTt6LJW9F47bi9792zvWW27rcO1\/2+sCzeRqRN\/vBOydHj752lWs5SLXZemCWc8wk8L\/RF85Hyd1DoO6uWvfyHvoPCfksGT4UmZ12TM6SelCSsktY1OiUayvsqDH0D8jfBxMnfVrQ529Sy\/2DZuyerZcrGq726JiezOX7tSYQpjN6dr60\/L9gLmQh2kNupcLUnUzyHpPYiGB7TtFBj\/6hGWshGaW0Lq73J+ceDx949Wa1YPPYQiypQeAaKtntBWCGhCGpP2FYtvaKIK1CpeFSoAmVOvwb5c88mrYpG8XmlYrst+w8eKzv5Ae\/kl+51tHYiKqHqDyCvBhQ+\/tIPo+i4qPlacIi\/FhSLJD5naiXnzL4DlqPHK0XlkRcm+XNY7pQO1li0nzv+18JHNfXs50tqdWJnCvP\/SRSHWPXXbKi0+4pKjx5\/P3zxwlSmivoU1q2okOE\/GjM7+w+VvXtK+ZJxe0RnpfqtVP+pJl9Fo\/d4fd+xWs8O09GT1VS8dUibfFh7dnfhO7X1F+zURUlazlKhTzjvy0i2OSdslCRA8vXElwD+51lavLOi4om+LkXfksx2ZS+xgu9lJz+86640LWebWt49Vb2vqLS2wXE2Uu3xKzDaqqvh74KCxNjEO8hWYPBzJS3eRaXiha43MuVpPnNWEnsz46lCm1e86nDFKztZve9AaW3DhXDHl5I9vnL1Uy9\/wZa53oROPIkVcZLX5KwLnX4Xozq+iloj43lO4b80In2R3W5w0++erN53wFJjPy9WTPHFlf9ZC9PeI70Gi04h8THijo6q7weJlIdaPdV5ntzXQvhzJlypSo+\/X\/jHkg\/rzoXKE+bfBmUFER9KyREM\/7njzJj\/EasJfqCkqidrTipbyMQuKPZ4+a9ZwWeQqc\/ahvNHj79f+MdD1TaKLaRUScX\/hil5nsL3g1jyItbqbEn5qQ\/\/UHTU1uCIe0niGN3pcwOnzw1Yqf6Tjd53z\/aYDtUY95Rd8\/bHW4e0idfr22M+cMhyXM7zWO9hvy7ZL6PmGnvzmbPn2ASv9MEIDCD4AuEXlvRLSqwF7Dem4re5nSd5dbzicV+XoY1y\/iG50Ir+nZV2toZLk\/NsU0tt\/YV9RaWW8vdr5T60weIJL4HKqqTCkmX\/XeZ1lPCuSc66RmdYR7koqr2wAtrMlvncmbPnPqwTJHgORD7E4taymvrz+w6UWt59r7ZB5n+M0PFt4h9fiWvaeVUXtlFZtiUpvOexl5ZwFShRnPP8o6ZQIZJrrbT1OpzkXTxLtdTWXzC\/YzlSZj1z9iOJXAq0ILz4hml0CZ5CikZ1USR5vH0XnNuy\/7fIntuKB6Uh2q8FmbOa\/1mrtlF7\/3DoUGlFtY0StJ8pHjil5vMLkm8tVf9c1Qm\/VHnflrzPVKjqzou+AcKew4KEb1QTFjhyfTKfwWobtfcPBw9aTnxQ28T7N0\/V15e6Yjt4B90hOuizWvJsDY4\/FB0tLX\/\/dvY83X\/vKf\/vPeW\/e6vcYDq2w3TMuLe87tzH8XYhLUM1X9hjPpD\/1r5dwuTv3pe\/25xvMueZ3s4rKMzdVbhz196d+XvezN\/zZt5bOWzezHvrzfy33mSW578VTN5bbwpesOfN\/D07d+1lU5hboJS3cwvezjO9nWcy55nMebvN+bvN+bv3BfMWm91s8XYzxXs7t6Bw5669O3ft4UrIFonbdGj9XPJMXMx5zJ6qjTnPJCzb7n1MHfKKty9\/d3C1zN6FKjCa7BRWHS97hQnVIa+E+8LVHrvLuQWFucxK8vcol5A7prvZsIdYUM9sYRSP8tvCEoqP767Ixzd4gskd5fAJc+Lxiqd0iNUcX7YO1W1a9iRUPq+kx66AOXZs5eySrQTZs0WhfgRnkfwB4pWEPUAm9gBxh0P2AOXzS7hHUlFqvxbCFkl4UNgjEipSvlyR8vdwZ340pVI4baL91hJ8o4Y+WZITu1BtYXZxp4TMmRChwGHrU\/QZlHz\/K3yD7ZpAfaot5C5ktkUXb+cBAAAAAACxB5IHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeTIMDAw0NDQcPXq0BAAAAABgdgLJk6GhoeGDDz64desWAQAAAACYnUDyZDh69CgMDwAAAACzGkieDCUlJfE+LgAAAAAAkwKSJwMkDwAAAACzHUieDJORvMtz5iD8xPBkBQAAAIB6IHkyTFjy4m5UMzOxPWUBAAAAoIaoJa+vr+\/VV1999dVXY+tVra2tra2tg4ODk19VX19fcXHxq6++mpqampqa+uqrrxYWFvb19TF\/zc3NjbiGiJJ348aN0tLSbdu2MZvYtm1baWlp3F1qJmd6zmYAAAAAcEQneYzhpaam\/vKXv5yAfoWhtbXV6XRO3vNOnz794osvpkp48cUXT58+nZubm5qaGnEl4SXvzJkzzCbeeOMNi8VisVjeeOONuFvUDI98Vfrez8vIyDj4Mbdg5ErtOzmvZ2RkZLy+w3S8fYh5VW1ehpjsU1eCq2h6J\/t14esBAAAAQKKSPL7hcQ1jsWJwcHDynnf69GlG6XJzcy9evMgsvHjxIuN2HBHXE0byzpw5k5qaunXrVq\/Xy18ed4ua4ZGrS1+tKScnhyd5Q017M3a803Q9QEhgyHlwR4bJLqNtQ3ZTRs6pPmYV9mOn3EOEkMD1pnd2ZOTV+ib4OQAAAAA0h1rJm1LDY5ik5\/X19TENbKdPn5b+NSMjY\/KSd+PGjRdffHHr1q3cEmaFBJIXveT5ak3Zx9zOgzzJ+5j\/i+g3jr5TOfLy5z62Q+71AAAAwG2KKsmbBsNjmIznFRcXM2140j\/FqiXPYrGkpqby2\/AgedLoHs6RkbyA8+Drr+\/7iJUzX60p+0h7QGhyfadyMvLeDzbGXZGXOfexHRl7m+T6ZT8+mJFxpH3iHwUAAABAW0SWvGkzPIYJe94vf\/nL1NRUrpeWQ2R4k5G8rVu3vvHGG7J\/irtazZzofnwwkuQNNe19\/Z2PRoi4uW7kyinT66\/nHbPbj+W9vmNfk7Tztf3Yjox3nAHx4sB19ynT6yb01gIAAAAckSWPkaeIRDXeltG4iLS2tqpfp0qBU4OS5KWmplosFtEStOSpkjweQ017X2cb40R9soHrzoM5GRkZGRk7TMec18UyF3C+k7HjmKC17uODwaEYecc+9knkDwAAALh9iZnkRTXeFpJ3uyVUZUNNe3lNbgLJ89WaMnbss\/cFCBlynzJlZIia5oaa9oodL0hgpO\/j46aMHQc\/HpngBwEAAADQGqq6axnPe\/XVV2djdy1HX1\/f7373u+Li4oirUt9dC8mLVvLk5kPJyMjIq\/WR9iMZ\/K7YIbspY8cxd6iy+cNq5bhyKlvhdj0AAADgNkTtwIvp8bwpGnjBwNycN5nJkDHwYvKSJ4LfkvfxQaHUOYUjKfpO5YSfI+XKqeyMdz5Cly0AAABACIlqCpWp9rzJT6HywgsvpCpMocJNoXf58uWIqwozhcoLL7ywbds2bgkneQSeF17yRKNrWfiSN9S0NyPDFJz3bsh9ypSx40g752zuY9J589pP7at1DwVkXw8AAADc5kQ3GfLUeV5sJ0POy8vj+m2bmpry8vKY5bL+JyXiZMjbtm0TTYbs9Xq3bdsWd5eamSGEqJE8\/gMvMl7P2XvceT30QvlhtSPtx007Xg++\/hSeeAEAAACEiPqxZpznRa1gYYnVY81qamqY9jwRL7zwgkrDo1U81ozZxBtvvFFaWlpaWvrGG28wm2hqaoq7Uc20TNupDAAAAAA+0UkezXreVDy7dvKGx9DX11dcXMzI6AsvvJCRkVFcXBxV02N4ySOE3Lhxw2KxbN26lTHIrVu3WiyWGzduTM8xAwAAAACISNSSdzsQUfIAAAAAAGY4kDwZIHkAAAAAmO1A8mSA5AEAAABgtgPJkwGSBwAAAIDZDiRPhqNHj966dSvehwYAAAAAYOJA8mRoaGj44IMP4HkAAAAAmL1A8uRpaGg4evRoCQAAAADA7ASSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGkQ7kkdO66JKvMsLpgpK9ydRJd7lBQAAAKaEyK5z8\/HHmKj5NY5w9jZy4k9vN8lLlVBcXBzvQsUNSJ5muN1O7P76H4XJYEs6ihdDtLQ7M3xfZnjxlJilxRahNckbP6179tlnN63\/wZHfLpys5LWbU1LM7VNf8smTmpoq+jU9PV3bl8MwCB1OR+l0TTodpdNd+MpXPl7yXVfy0x8\/+WTL\/fef+6u\/guTNcG63E7u\/\/kekL08p\/fU\/QvFiiJZ2Z4bvywwvnhKztNgiplfyKFNqjk26uN2colMks0rVqgWS9+yzz770s2VRSV5VJrvBFHOVpDxB2fOWZmZWeUNv8lYZNpZ6FNcUbnc8pRtSTE7h+yaslNJr4eXLl1VcDiMXNeyh4dVMuzmFf6BEv9K0tyrHUOWVX5\/CbnttOakbi51yfwqPSPIuPvqob8+eWz0940IC1z9VkLzK7boVhdEfivbCFbrtldGXV92bHYVr5i4xNsn8pTZrTVZtcBUi1O6Go3BdViVN05XbuULwflRTvKlhoic2TdM07TSlpBbz99\/raaeqinM2LN1cwXyIuY+c9IPAnpTeis3zNvA+496KzYkG3neY2g+IOmb4RWVyxXOWbkyco5tnEF0B2s0pusyqSF9GOp0usypiZc+U2g5fUK6QtpxE9lTk3qf2ejdt+8JQlRld3caueJPYMntqTZgY1KqneMMqs5OmadqWs1R07qtTBeEOye1PhPVElrxbLGp+jYTNsHhjqVe8VNBkJtiPKE56keQ9++yzE2jJc5pSgkeEXyyefjlNKRsrvDRtMzAHrN28YTOjfVWZq4qDFwzFc1KwOzbDUgPfGGMqeTRNq7gcqi0qi9OUskEitXIvl3m305yaylVtaMPC5tIIX\/TqzgVO75r\/+q+9e\/eOj42NyzB28+LF2SN5jsI1ydsP5K9YUeiQvDFte6WX\/8oVwfW0F654RV1xarPW5DtomjG745Xb1xW2M5LnsaSvO9AeuXgR8fV+0uLu8X0W5dsmdmJLLrGZVVWZOt2cBYkpGzabim1Otroif+ScpqWCy7PBkCp7ueZervQBUYfoonJ5zhwEQZDJZMpvTVPzP83USd4vf5588L\/u6yj6ohrJ81ZlJm4o9SiZRrCItpyNxe10e\/Gq4Le5zZBZ6qVppzllM1PSqsyUzMxMs5Om6XZz6kb2PzVbztKcUmZ3RBvIZN\/H31ZUlSy9FvJRfl\/koooLJitdVZmphsyUBQuWZlZRSo2gNE17KzLZ\/2SUJY\/7xVO6IXVi0suo27k\/+7PPKis5p\/u0tPSTf\/7nlm8\/4Jg3z3nvQtf3vte+4sezRPIclrTkNYUOOuh6fKXzWIwHHDTtKFyXbKylaZp25C9bd8DDrlJVcbzHX3nluNdzIG175fHtuu2VtMeSbqyt3K7bbsxPD0rl5CTP1+X8pL09JpKn7sRmG45pur14g6HKS1dlCv9DEHwtKZqe05zy4OYqypzJ\/nfiNGcWt9PO0AKaplV8QFTDl7y4XxsQBNFAIkveo2+nMmF+\/Ub2DSbMr4P7dUyU3q5G06aiu5aRvPxtjzI\/v\/jTH771q4fOvz1HUfK8VZkpgr5Y2ZY8DqdpKb9kntIN7L\/wVZkpZqfNkGpyOs2rNheXGgxVbNOfM1xlxK4lT+Wf1BZVfIEMwh3ZdnPKBoMhJbPKWZppsgXfMifTFmanBJK3qlggedLO8ijPBEbdPP\/xvznD60rf1KTTqR54MaMkz1G4bsm6UPudt3J78pr8puB5Wps1f\/6S5CXzdUu2V3pp2nGAtUGapukm47LttZG37MjfbvEEGwSnpLu2\/7LT2TXg9Uxe8lT+iaZZuXOaNzKfadlz2GlKTDGHuR\/AZtjI\/Nlpzin1tJduTpyTkkN5aZr2VBjMFPe6SB8Q9XCSF\/cLA4Ig2sg0S15VJncjmi1nKXt\/3pR2165dvfxZHuNKksf9O654T17QRdkWPcPiUNE8xampxR5uH83ttLcqM3FeosFG0+3Fqanm4sxVJie3O57SVEYJPaUbufazOElehKLSwmsYr5DcK2yZ8zKLhQeKd7MTv+pkViM5P8ztNE17KzYmiu\/dUQ2jbsMOB2N4I598Qv3Jn0xU8jyVWeuWzNfpdHMXLksvZOXKU2tcs3CuTjc3Od1S+Erw1e2FK3TbLcG\/zF+SxqmYt6kwfdl8nU43f1m6xcFbtnCuTqfT6bZX8i3KYUlbsmR7pYemPU2FacnLsmpF\/X\/e2qxlyWmFTcHFjsI1yVm1NF2btWxF1vF2mqbp2u1zdTrd3OSsWsmtERLaD6zRzV24cP6KwnbG7LZvF538wuKFquQvv\/7g6q3vnPcxS3svHMn6z7SfvLTld5ZzdadeK2q+yiz3XW5qcPtoeholT\/pfQmamsLEtxdxO087SDYlLU1ISNxg2y\/1bwWuCbq8wpMybs9Rga6\/KXLx4g5kSHpFIHxD1MJIX96sCgiCayfRIHmVaygxQaC9elchYHntTW\/A1nOrEXPKGj\/+5YcuSyJIXpGoz17AkO7o29CXOu\/9GcCtO8BXe0g26pcy+Ok1LdanFHt7uOE2Jm6to2lO6IbTjcZO88EWNeA3zVmxMLbaFlzzu9eKerZTMTLabO\/Ryry0zMVgvE6kURt3GAgFG8gZPnmRG10Yved7K7Q8vecXS7qVpmvYc375k7ivHvTTdXrhi7pr8Jg9N015H4Zq5PMmbvy6fcbJ2S\/rDD2fVMj8aC5mFTcZlc7fX0jTtsaTNX5ZVyXOFoEV5jr+SHOyQrc1aw5hc5XZeu2LwF0+tccWyrFqadhSuWVPooL0eT2SfU8R7fDvT2cs133mPp8\/VvXJcXDxRlVyx7li25LeVPpruKn81Nevd1qs0TQ901e0zspI38Im97uNemp5WyWPhnTzsORxa5K0ymAyZKWaqKnMj15QsOt287VXmzFUL5s1ZkJJjCx4sL2VKnaebl5JprqA8XsHKRWuA5CEIEvdM+cALW+aczCraaVrKtHTZDA+uKm4XOt6UdNemr\/8BOa3rKPri6\/+RoKYlz2letbnCSztNKQa\nbzD02vKsF96O3KnPp5iov3V68it\/sVJWZYm732jITN5pyVm2s8NLeqs2J8xIzq7y8r31b5mKDzVO6YXOFV7r7UXvNpCQvUlH51zC+jsvYuNKBzKwSvZ7Xkle8in9P3uYUc7vSPU7RddcGfL7x8fFxMu53u6k\/+7MJteRVbtfxRzo4ClfM3V5Ltx9Yo+ONaOBe3V64gr\/ckZ\/Myll77YH8rKys9HVL5uvWHGgXr4EOvjlt+\/Zk4S13zAZekUoebyNzFyYnJycnp1vapcNrGWOr3C74PfQyVmWzsiq9NO31st213spX1ixbplu2bMW6YHMkJ3miKrn4zktLfk\/Rbuv2pL2h\/suL7zOS199qr2zuHaRpelolT3bgxYMGG8078ZymDSYn95u3KnNpji34Z6c5lfmX1GlKWbrRVCU9IVPMlLM0Z8PSYLeEmg+IOiB5CILENlM98MJbsTHF3E7TnuJUptGoYvMCg422GVbx5g+xZS4WGN+kW\/J+vu6ZC2\/fY\/z\/Fj\/H07sXfvrD2l1fU7wnz2lamlpcZRJuPFxLHs0M1ViasjQx0yYaJVtqWLzU5KRpW85mc3FmSmZVe9XmVSZn6EY3T+nGDaacjcERuvKtYOqZjORFLCrvGuYpTl2wwewM3teveKC8FZsXzFuwsUJoK\/KSF\/yxyrDK7OSNXqGlL1QNo25ek2l8fJwQQggZOHTwwte+1hScM+9PKJ2u+a\/+itM+yQqEkhfaPCt5wvvTKl+Rl7zK7XNXFLbTdJNxyZK0fEutw+PxHGdeK3OHW3vhCl2aMX\/N\/DU8hWL\/kn7cG1qrwu2CXq94pIXKgRe12+fOX5K8cOGS5HTLge267ZVM4yDjew5LurHSK5a8UAFYySt\/NemPPMljumuvOU+VlJScPHmytrb2woULbre7v\/965ALxmOCJHRy0U5WZYjLnGKq8tKd0A9NAz90PUFVc6uF+azenMC3ZzAJPceriaG4WUPMBUQckD0GQ2Cbq7trRMh0T2V8l2AyLmTvwPcXcyATaW7F5Q3Goq8ppSuQJwaQl7z82fH\/nq\/qVz\/2Y07tVK1fsf+0B0ZMwJCvwVm1+UPegwabQkMSNJE3JKTVvZHp4nMUbEhcsWLDKRAkkb2lqKrdHNkNw4hBP6UaDmXVIbztVVZy5dN7ixMQFmeY4Sl7konJ4KdOqxMziCtPGxAUpmcXC+5J4B8pTlZm4scJjy0xcJbirvd2cklnlsRlyKrzCSWmWZtqCbYoVG8OMu1Ddlseo20d3fGn4\/EeM5I2Pj4+Pjfk\/6Riqr79BUbe6um40NlKRJc97\/JW5gu7aJVm1NE3XZi2Zu6bQ4aVp2tOUv24+T\/LY5V5H4Zq5y\/IdNO2xpOnWMWtzFLKvdeQvm7sm2LHrOGBp4izK25S\/Zn5oYAVN015LWjIzv0mwbELJ87Y3HS\/cvm7JkiXG2olJHu318BRS90qWMf2AQ3HghaBKrlh3LHsuv5Gm6Y\/+kJaadfLyAE3T1zo+PPBm6J680FamrSWvyrDBzCmbp3SjoaJ081K20Y3\/4QreHVCxcXFmleDuAJthMfttZcsJjr6gneaU4Kxm3qrMDSbJiI2wHxB1QPIQBIltplbyvBUbZf4l9hRv4E8BaTM8yJ9bSuB1TolqKMLZ2+9f0fP7Z19Lf6K75AsqplDxVGxOnDdvQUqmuYJq93jlW\/KcpqVzElNzKpztNvPGpUs3Fjtp2mPLSVmcYih18kbXypeRyklkplAJzthVYXN64t1dG76oNE3TXg9VYdq4dHHoviS6vcKwavHiVYYK0XAZD2XekLjUwDRsOks3JCZuLm0PHmqnOWXevKUbikMtJgw2Q0pOVfGGDaXO4tSl4kvnxFvymnS65r\/5Qt+OHYFPB6Sz5A0eP66iJY+maceB4PiI+UvWhW6icxxIXzZfp5u7cI2x1iLori20sH9hX+1lh2Isy6rkXkt7ao3rlszX6eYuZHpEQ4173tqsZfOXMWMmvE35a+anWTz8sgnbFtet2V5Y6WCqWKm7NgJeT5MlP33NwoXrmJY8udfw2x7ZKvnLexP\/\/fcf9gRf0VZZ8H9\/8ZOfbPmVqbL13PtxlTx2i6UbmJPHyTbUyUpee3EqO6M59w7BjEJO80bm3Z7iDRtLvV5bTqbgvzpVHxB1QPIQBIltplbybIaNxe1hb7nLrGov3ih4Cobw7q55wjnrw8AXuDP5X09ds\/yln\/7QbvqKysmQ2ccreKjizNTExfMkJZ3D6460GVLE\/6q3V+SkLt1gbpf3ElvmHGZ35KZKjW93bfiiUjkpixNTM80VTmm5PZR546qgw7ebUzIrbIalKcLLmpcyb1zK3H3prdicyl0bJZ3e81LMlM2QWSG+H23ikkcFB1vozv3FX7gSEzt\/\/vPuX\/2qJyPjyqtb3Rs2tNx\/v3JLXlR4DqzT8bpTY4nn+CtruOG4QRS7a2lJ0526ljzv8VeWpRkP1LZ7af7dezyink7G21D62gnXp9G9SZaJntjtxat0Ot2cxBwbTdP8bxi5lrzQG9h3hP6u+MXF\/jem9gOiDkyhgiBIbDPNT7yYQkQON3ryT8esfzKpZ9fOHqTPcVc3Z6w2URpgoXrgRUQqjcEOS2+75ZXgkNvbnIbivWc8AzRND3SfK8sxnmqJhePddic2\/\/Hncb82IAiigWjHdcI\/xEzbkgf4TL3k0Z5a44r5OtHkebc3vReOZP7iJz95acuvTJY6t7zifXq9v3+aizWrifvlAUGQ2R64DgAAAACABoHkAQAAAABoEEgeAAAAAIAGgeQBAAAAAGgQSB4AAAAAgAaB5AEAAAAAaBDdyZuJYD0AACAASURBVBMnEQRBEARBEI1FRyXpEQRBEARBEI0FkocgCIIgCKLBQPIQBEEQBEE0GEgegiAIgiCIBgPJQxAEQRAE0WAgebFP\/+77xuoX3Tr3k9GGH43anxmt\/6G2smy0\/h9vnfvJWOPDn769MO61jSAIgiCIbCB5sQ\/9bjLpTSPuF8jNw4TeQ67nkcFdGsn1PPLZbnLzCOl8ifRtvPHe0rjXNoIgCIIgsoHkxT7XS54ixEq6VpOLT5Pru8inbxDva8T3X7M+3t+QgWwyaCKXniHuHxNSSR\/\/YdxrG0EQBEEQ2UDyYp\/Bg48TUkRIOeldTxyPk34jub5z1nue9zXyaQ4ZeJO0PEWu\/JSQY4RY6PKkuNc2giAIgiCygeTFPoOHniDkD4SYCHmX9P8nufAYuZZFPisg3sz4u9oEDS+TDOYR7++I4zvE+++EvEtIASFFQ8e\/F\/faRhAEQRBENpC82Gfw0JOEvENIARnPJeQY+ew1cuFR0vNLQr81K9vzvJmENpG+XxGHngz+X0KOkfFcMp5PyMGhE5A8UbZd7yWkt7pjmre7kwoQt29aN7rc20ZG6zOECzMG+8lw2fJ4HwUEQRBET0HypiKDh58k5B0yXkDG8snYm4RYyPAbxPko6foFoQuJ9zfE9xvie3025DfE+xqh9xDPZuJ8jNwwEFJKxt4kY\/lkfBchB4cqvh\/32laVMtdYP+WZjm2plLyswV7\/yMnYbVdR8izDfh+9cwpqI93qJz0D6cKFJseY33ElSU8l6R3pRl+zO0AIoXnbWp010EkTQgghgTZLm\/L6fZ0kiN83VLaJStJTJ91EiHIFlo\/wX9dZzvvTpoFeQggtrhN+ZAspX\/JNV5t7xgghhIz11nlWR6g0x04qwCuPI8MyTPuZdY7RLu\/LkpKzL5apDQRBEBWB5MU+QsnLJ2M5hBwkgb3k4wTyyb+QobfJ9TxyPXfGZye5nkfot0nHv5JLj5NbBYSUBA2Pk7yTs0TyTroFqhH\/GGk6jKNEH0XJKx+RCk0sasNd7xtrK3IIFi73tvkvz5lzO8cRptJWFw37aX8vzUmer5OM1mdcTNJTq9O8bf5As1H4lrSBXlFb6Vp3TQ+hqc74n8AIgsyOQPJin8HDTxJygCd5THvefkLeIZ\/8I2n7Z9L5Arn8M3J53czOz0jnetL+E\/LJD8m4mZADIcNjJe\/GKZWSVz5Ceuj6YJvHaLPRwS4crHEHeK0jvk7ib6ZGCRnrrL7e6SfEP3RYcbVtZa5AsB2EcBfItsOUn1nop4fLNik1jchnJxWgXdebheXkN+FwrTUvF9G9ft5K3b4kXlMTfxOrjYO9NP9lnmaaCAhKmK+T+OutI8wf\/W7fy3pXZQ\/PxrYN9ku7R3klJz10sOT+kZObKH7zT2jr8rXhaaYDbdVD\/X5CCPH3DO7k+lu3Xe8lpL\/OLd5i7pDfN5glXJhu9ftdcdes+ManWG+bfJ3+QLPR0xySPE8zTWj3wM40V3a13+8fOZkmqE+TY4y4vPzWwdVpfc30WGe5K95fcQiCzJZA8mKfwSOJEsnLJWQXIWWEFJP+H5Cx\/0PI\/yFk28zO\/yHjvyYD3yfETMhxQnaSsTyx5FnVSx4Z66+7sp7pseq5nh5a2Je+3JFh9RP\/kEnv6yTE7\/KaqAAho\/VZA51E0rzBxUjT\/uGytYKF6Va\/3z2QtZZKWu7aWTfK9SeqbLvaSQWIf7TZ4l6vd2RTo8TtS9JfaaEDzftcq\/XU+gxfm3+sJZdK0l9tI6TX2rFaz5WcWwn\/Kh7cdH+dW9yRJ9OS5+skzCXfkbTWy+z4asswt\/KsulHi9qWHKTkZ67R2rNa3VfYQv6MvVPORW\/I8zTQh9PDJjItJa6+00KTXymqEvOS5Knt4rwnmSot\/rCU37poV3wxmyNdb20n3WH+dW3x6pF1tCxq\/v0ak75uuC5rxWDv391zPFp7zCIIgyoHkxT6DlkRCigSSN14QuL7zxsX\/vul67Wbzuptdf7zZWXizc8\/Mzt6bXUU3P3p+uGXrzbac8Vt5ZHyXWPLe+4G6OuGrBvczf+HygV7ir0nzMXKzkwqQnoHVel84yVve10ITv2+k2dqXlRbsJhPftsWuPwrJE3V6GmlRu1tnOSWWPDLMa24US16W1e8ngV7HYFlu23rBaqWSJ91ZxpyY1TI\/RC65YC9USx5X5p1UIOSIspEbXbHaMkx8g1n6uGvWzJA8YV6u9vt7Bl4WV7Wn3kf8PdezN3VWugNE0JLnOCBpxkvSU0lr3ZXuMemtkAiCIAqB5MU+n5UmCSUvj5CDVw\/95wd\/+bX6RY\/WL1pcv+ih+kUPz4Y8VP\/g4rr5D9jvfcDvMRLyh1Bj3vguQg4On46V5KVd7yX+yuU8yXP7FLyHn4tZ+waa3aN+EuzDOukmvdUynVmTkjz\/0AHxK9sqe8bYXmF\/cxF\/AIFY8pL01Oo0T1ndUC9NiG9wJ7daVZJHZdWNEtdV2e5RpZJPUvIOOMbC15VJ5gWuyh7mEMRds+Kbq3I1JumgZ\/79MNI08VculzttMpS75o00HXbUCIIgCC+QvNjns6NPSSSv+FrJ5uq\/nt\/wiL7h0e80PKKfNXnsO2e\/9XD9\/Q\/7r7xBiFkseZUqH2umKHlDpuVU0vKOw64A6RlI10creVSSnkpa7ipzBbUjq26U+IdPZlwUveaAY4z0DGREmtpDRvKWe9sI6af60vnvzaJp\/3BZmuxd9jKSx2R9xmA\/J3Zp13tJoCWXX06FnU0b6PX723rGJN2jiiUX7MW+IT\/xV24TFFVSG55mmvRaLybpqfVZ13sJr8lQ2l273Nvm91cK7x5LyhjsD3Yrx12z4huHYr1JT48smiZjbZaO1Wy1txUxr3Ecdsk14+mp1Wmemp4xv+tqpGG8CIIgTCB5sc9nR54ipJjXuZlHSJHX8nLNXQuaEh6nEp+0fe2rZ+760pm77oyQO7\/U8MjD1FNJVNKTjYsfi\/z6u+48c9edtV+e2\/REQtMTCeeSnzp777dUbUhh63XfnH\/u6afqH3ys8TG9v1tO8qqeUVcnSpLHtWv00IeDYwVUS57M26mk5Z2Vbm40Bq+9apOXvfkpwsAL6RjVl4vo0MiJoKV11Ph4rTJ+f73RIW2wYcc0cC8LdFo72cuzY2ddsCmQN\/BCdmcdZS5CIk0+pyh5+rYyVyBYAG6huDaUCikjK1l1oxL\/cJS5pEIjWxvUauNgr0wLqOuke4yQ0RrJLWiEBPodXs5Hs+pGiUyLpvLb6dE2\/u5Iz0Y9xXSbEv\/w4eXyJZcfLsNUZqgmI9Qbv1q4KVSy2XE2hAR6664Ee\/OlzXgKtYEgCBIpkLzY57PiJwk5LCt5jd9ZXL\/oga7fv3Ht8OGrhw6Fz7XDhy88++zZhffa77\/vo2XPXDtccrUk8lu6d+9u1Osb9Y\/V\/cPft23+z2tHIm9IaVWXM3599t5v1S96VEHyDt38QKXkyUauJ3F2JHfIT\/yVwenKLpa5yVROROwocxHZdp3YRbH1URLuHkFe0gZ6iaRtD0EQBIl\/IHmxz2dlTxFyUF7yHnu0bv43\/D3dRB2uf\/t5zT132776Fec\/r1L5lvHRQP1DDzY89GD13\/7NNYtF5btkGbTbz9x5R\/0DkDxpyYm\/MjjDWV8LPXWT8DkyioZo5ZlTYhT1kocgCILMokDyYh+6LFlR8vSPnf2Hv6fPUSo169L6f639ypfrvjHP8eyPVb5lpLOz\/uGHGh5+6MydX+opLJyg3xFCCPGdOFEzd064lrzqZZOoqNkreYJO4bF+10D2lPSgMRPdhX8yREwCyUMQBNFkIHmxD\/3u0xOQvNFr1\/zdV\/xXroz296uUvPHPA7d6e2\/19Pg9ns+Hh1VK3uefDfqvePw93beu9pHx8eDCGzf8Hg+ztvHRUXWSd\/Dmmcm05CEIgiAIMoWB5MU+dPlEJO\/8\/\/yR7atfqbnnrkvr16uUvJErnvoHF9nvW3jmji9eKy1VKXnu32Z9eMf\/OPutf6ASHv\/8xg1mYd87+z\/82y\/UL3rAvvDe4dbWyJI3lk\/I4ZFJteQhCIIgCDKFgeTFPkPHvzcByWv+wffP3Pml6r\/5f1v+5V9USp6\/q+vsgm\/Z5n\/jg7\/482uHS1RK3uXfvPbBX\/x57de+2vDoI58PDTELe\/aZq\/7sT+v+4e9t35g37HJFlrzxfEJKRmogeQiCIAgyQwPJi32GKr4\/Acm78OMVdd+cX\/uVL3+c9qJaybtypVH\/WP1DD9bMucd77KhKyev8naHmnrvt376feiop1JJXdODM3Xc1PPpI\/YOLbra1qZC8XYQcGqn9x7jXNoIgCIIgsoHkxT5DJyckeSv+qW7+N2q\/\/HcfvxSN5D32aP2Di2ruuTs6ybv7Lvv991FJiQLJu+vOhkcerl\/0ACQPQRAEQTQQSF7sM62St1hf\/\/BDNXPu8ZYdi4fk\/SjutY0gCIIgiGwgebHPDes0Sd5IZ6ftq1+pmXPP+zrd1eLi6ZW8fEIOjdggeQiCIAgyQwPJi31unP7BNLXk9fQ0f+9p6sknzt5\/f39FRRwkr24GS57cM8o0PiHcYccY8Q8dnu7tqnvEcEwj93Q1+YUIgiC3cSB5sc+N96ZJ8niMcz9B8oKB5CmlzDXWH8tHdChJXmd9z5iktmUXRhu5p6sFF16eM+e2CiGEEHq4bFOkSlvOPH6XefgylbT2Sn0P+1BjWv7hy8G5yo00t5h2X9+JJ+ciyGwKJC\/2GX5\/6bRLXoiRrq6Q5L39dgTJY6dQ7isuCklee7tKyfPb\/2fca1sxt6HkqcxJd2yfw6YkebK1HYNDsNoy7PcNZsksjLtyxSUXs6v90goRxnHYNUb3+GlW8rKpgN\/lTV9OJekvZtWNSh++bHKMiZpFV6ddbfPj44MgsyuQvNhnuFJR8hqYZ9f29krdy7HyOdvXvlpz912t6encQtfGf6u55666+VFI3vjnnwefXfuFv7l25Ij0BVdMBWe++D\/O3rvg3FNJ3ML+kyer\/\/YLDQ8\/ZL\/\/vjHW\/D5raDjzpTvCzJOnWvLKR0gPXd8zRgghZLTZ6GAXDta4meYE5uFdvk7ib6ZGCRnrrL7e6Sdh26WYp34RQvgtGW2HKb+fW85cujZdbQ5umhDCXKX4qsH7eZO3jWZfyT5ybXXWQGewKSPQW+dhLnsn3aS3jl3uHzkZsR0lcnydxF9vHQmu0u17WU8l6R3Z7BK2uSX4UDXeAQ00G3nNLYInxbWVubjHrwWajcxTdwUwO76TCtCu6838A5Q75CcjJ9lmm8MuotwT6usko211wXL2U57VjGELCDQb5RfKnQbsRh1jxD98WNx05KrsGWuzOCQL4y5bccwYIYHmLMV6e7l8xE\/TO400J3np5SN+\/2\nizxZ2+7arMw5fTBnolT0xenzHQ6Z\/ufnkEQSYXSF7sM1yl3JK35DsNDz7Ysf1X3btNXcbsLqOxy2j05ORcyc9r\/sH36x9cZP\/2\/ef\/6Z+6d5s8Ob\/v3m26sDylftG36+Z9XVbyAtevd\/7O0Pnb33a9YewyGruM2VcKdrmz\/qtR\/1jjYr39vnsvvfACf0NdRmP3btPFn\/7Uft\/ChkcfoZ5I6Mr+7yu5ud27Ta5\/+7l94b2Ni\/UNjz7i\/s1vrhTs6t5tatuy2X7\/wvoHH1NuyUtRVyflI4SM9dddWa937KQCpOd6emhhX\/pyR4bVT\/xDJr2vkxC\/y2uiAoSM1mcNqLvZ6+Jh15jf0ZfE3JVF0wfSHEl6h8nBtOS5632EpvrSl1NJy6+00OEkbycV8Lu86wUrv9JCB5r3uVbrqfUZvja2l\/CkmxB6pNLoWq2\/WBabhjFfJyG0e2BnmiNprTe447lDdHB3LmaVD\/v9QyY9lVE3Sugh01oqae2VFpr0Wl2CeuZLnpGm\/cNla8Xbkrbk7aQCxD\/abHGv1zuyqVGu3oIrX+5tC3cgfJ2EEB9tWkutNtI08dekiSuWF8lCmdMg+Cd5ycsd8vNewy6Mu2bFN9fbaNJWpFBvm3yd\/tH6DOY\/Aba7Vu\/Iqg76P+3oE57zjgPCZjzOzmmHNwPdtQgymwLJi31ufvAMIYdkJO\/ue5ueeJxKSqz92lc+vOOLNXffxeTMXXeeufOOxsV6KinxXPJTDY889OEdX6y5+84zX\/piwyMPnXs62fb1r8lK3s3Llz\/8wt988Bd\/fubuu2ruvrPmnrvOfOmO2r+bSz2ZQD2RcO7pZPu9C\/gbqrn7rjN3fNF+\/33nnn6KSnyy6fHv1txz95k7v\/ThHV88+61\/OPd0MvVEApX4RO2X\/+7Ml+44c8cX6+Z\/49z3nqp\/6LFG\/WKFljz1ksfJB\/czf+HygV7ir0kLdvztpAKkZ2B1+Dv6l3tCNxURptGuo95Heq3BNp5gd+22wX7irwxemTjDkJe81fuGaDLW76Yr97nTmbfwbkjiN31F0ePJazzj3nLSLWzN0lOynZ6Spq+RkxLJ66\/rkK9nPZW0vK+FJn7fSLO1Lyst1PQlL3mSDrt0q5\/0DKTrqdXlI8wPCvvILzn\/Z9WSJz4NwtSno8xF+uvccgvjblpxjKeZJ3nCtNX0jPVa29iTmdeSRwItRe6sIrrfLzwfNl2XNuMl6anVaX3NNPE7rkziuxFBkGkOJC\/2kZO8g1eL\/neV7mv2b3\/XvnCR\/b5F9vseFGfhIvvCRfaFD9gXsn9d+EDjd75zLulJ21e\/4njuOZmWvE8\/ZZ54QT2V2PDwo\/aFD\/BXdZa\/KvGGHghujrfwrHThfYvs9y2q\/fpjZ7+5aMSTTcg+seTVq\/y3PqLkpV3vJf7K5TzJc\/vCD9s0OcaCrhNyFIFABBcKWi8iSF6Snkpa6z5gpTt9Y8Q\/cjKNaQwbOiDZeqxva6OUJI9poeRnde4QTYJ9yrR7IJt\/CESSp6eS9Bez9g00u0f9ZKyz3KVUeFnJS1rubSOj9dtku0eVSj45yQueBsq1lDbQyxwX+YVxl624hEpa7usko\/Xb5GpM8l8K888G\/xxYbfXzThvHYZf4brzQuWf1y5wnCILM3EDyYp+bHy6TSN5+77tbbfOXnFvyzXNPLTn3dOK55Cci5Oknzj39BJXweFNCgm3e1y88++OxW7fGbt78fGjo86Ghz2l67Natm5980vjYI\/UPLmr67nfPJSWcezrSOqNO4rnkxxsf+CqV9H1\/bx4he8WS1zDZlrwh03IqaXnHYVeA9Ayk66OQvMMuQnzXX9Y70o3Xe\/3B2+8OuwjpGchY7siwDNPB5r2rbYT0WjtWL+8ocwXYpriOeh\/ppzpXL3cdoLiFoaxO87Yxtx8t97YR0s\/09vJeMD2St9oyTMgo01nM33R\/nXu97EpkJI9K0lNJy11lrjGuwAccY6RngN\/vJi95esrkGKNdw\/3S7lHFkvN\/dtX0ENpxRVhUyUKZ04A9xJLu2qy6UWlLknBh3JVrmuMI1htv4IXCvYyClryTbkJ8g9lr2Wr3Xc9gXpMx2C\/XjJekp9ZneFtoaTMqgiAzOZC82CfYkjfGSd6bhPxhfLzo80++N\/bJxrGb9rGR98ZuWiPEf3o80Hxp\/U9qv\/zNpoTHqYTHqeSnqKREKvHJYJ5KopISmx7\/btPj3625Z941i3E8cH7s5qnIa1afkffGRuo\/79g89kkyGX+HkP1k7E3BPXkNk2zJ45oWeujDm6ikaCQviXE7Qgg9UuNgGxg2eduYhgvf0OHqEWbhy4zwEdLvuFrjDvoct5B2DzT3hDphuVbSXurqy3oqSU+9XET3hhpDQtfIaZA8ZhxJaONuX5KeWl00HBpZQgjt8r6sl4yoUKxhSlBLvIEX8i00GYP9JOJ1XUnyqNXGweAxCrNQqZBSWWFaFkX+IbtQtjb0bYzlS1pAPfU+wttQaCYRPz1Sk3uR3dDVNj+RadE0DvYT4ndd5UScO4to33Blluj14obM9PIRPyH91VwN84YTMSuhPJLhMkxlOnbWBccY+cPXW6iovFZt3mgkPz1cto0pp0wzXuieAX+gs\/qK\/H8XCILM0EDyYp+R6mcIOcwzvEMkYCKfJBD614RcJqSBEBshdZFylpCOj1\/6l9q53ziX9GTTd79jv+9e+\/0L7fffF8x999q\/fX\/TE483PZFQc9fX+0\/lE+JWt2b1sRFiJ6ST3DCQ1iXEn0tISdDzxvMJOXSr6Z8mUVFKzU5IuLgqewhNBQf5rs6i+3nDKmMf5XadmEX1acDdIxhxIYIgCJKkpyB5U5ER2w8JOUTGGcM7RujXycVHiXcnIV2EvE\/IKUJOq8j7hLQ0\/2DpKd3\/U3P3N87c+fUzd82TyZ1fP3Pn10\/qdL1\/eJ2QS4RY1a1cfZgVdhLfXtKymHy2nZBjZHwnGc8jpASSN\/3pbKYJ7egLznBm9RPeRCcxztrOmp4xfhvVlASnAYIgyFQFkhf7jNT+IyHFhOwi5F3S\/wvi\/A4ZfJeQy4ScJOQ0Ie+py\/uE1F2zGNxZv+gu2Hpl16thcvn1f7\/R8g4hZ1WvPKqcJqSCkHYyZCUtTxLvS4SUkfECQg5C8uIQQfcxPVJf1DYVW2E66fw9g1P+hAOcBgiCIFMVSF7s47c9Q8hRQo6SK\/9MPv4h8dsJaSHkRPR2dZKQc4S4CHES0hI2rYTUElIxNZLH5AQhF8hoE3H9mHQ9S8hhQt691ahy4AWCIAiCINMdSF7s429cRchJ0v490r6OkFZCmiZkeFwrmspMnd5xqSDETkg76XiJtCWS8Ypbzalxr20EQRAEQWQDyYt9Ahf+kVz7Bfl0LyGfE9JBiJOQj3m5JPn1Eu+HachFFS+QhvmTg5BWQgLk0z+Svo2fX5pMdy2CIAiCIFMYSF7sc+PINwPU07datt46l3qLWnuLSr1Fpd6i\/uVW809vNf\/01rmfBn8Q5GfCrBuVyfOjH7E5\/6\/CrJePYwMvL4jjfHHU+VIoLS+NtqSxEf2aNtrycyaBlpcCF18a\/WTHWMuPb747L+61jSAIgiCIbCB5CIIgCIIgGgwkD0EQBEEQRIOB5CEIgiAIgmgwkDwEQRAEQRANBpKHIAiCIAiiwUDyEARBEARBNBhIHoIgCIIgiAajIwAAAAAAQHNA8gAAAAAANAgkDwAAAABAg0DyAAAAAAA0CCQPAAAAAECDQPIAAAAAADQIJA8AAAAAQINA8gAAAAAANAgkDwAAAABAg0DyAAAAAAA0CCQPAAAAAECDQPIAAAAAADQIJA8AAAAAQINA8gAAAAAANAgkDwAAAABAg0DyAAAAAAA0CCQPAAAAAECDQPIAAAAAADQIJA8AAAAAQINA8gAAAAAANAgkDwAAAABAg0DyAAAAAAA0CCQPAAAAAECDQPIAAAAAADQIJA8AAAAAQINA8qYNP5WVoNfr9frnLT3xLIfDqNfr9Xr9pnIfu8hXvolZZnTEYs2q1xKj7UYukQIJy9au3ZJlqXPTU7N5FSWbqj0HAAAAIHnTBW3dwrrF8n2uOBYEkidD8pby6TVvSB4AAICpBpI3TXA+o9fr9QlZlD9uJYHkybPcOJ0HBZIHAABgqoHkTQ89luf1er1+eUYG0563xTr9PYTKaF7ylNbv97nrcp9PYDVvGltYIXkAAACmGkjetODat1yv1+sTjA5fsNc2zjfmCbltJY8QQojfYVw57ZYHyQMAADDVQPKmAW7IRVadn7s3L7435gm5vSWPELdlLfM6Xhf2FAPJAwAAMNVA8qYegeOFRmDI3ZgXbPFTlg12XQkiOaDdVHnutrS1y9iux4Rla9O2FcmNG43ynrwJrJlZi4\/at2VlcvAdW4zlDukuhZU82l1XFNqu4jrColKluHJI6z2K3efW5ig3bmHfkLwybVsRJS22Ysl6yjcF37nFKm7s9bmslqwta5laZdYevlb8PVTRtrTg60NFCW5c9iyLstpplzWX2wJToPgMVwYAACABkjflSKTOX5fFXBFlbsxj25QUenPZtwqaAXuqM9ayCiIhYW2uQ+iSUUjeBNdsdPgduTJvXJlRLdwrRclT3nDyFotb\/fiIaFvytlXzj0iUu08IIT3WLclyr16ZVScUJfmSKRue31WUJrtm+ZcTQvxui2xZVmZUlytIXpTVLn+Uw9QOAACAaQWSN9UEh1zwvSzcjHnsy2UtT8bx\/I7clYrXfr341YSol7yJrzkjK0vJjVYa+dd+ecnjTEeBhE2qpztRd08eZWTaT\/VrLe5J7D5vRXIISy1TMk4Qpcrms4avEr3kPwa6elukd4gkL9pq57aQsHZbbnkdRVEURVktWayLxnUIOQAAAALJm3JkHI+EumVlbsxjxUfG8ujqbeJ3cbPvJW8pcvTQ3FVVMGxU2LerUvImsWbmyp9R7vIFmy57HEVcoxJ\/l2W3y9lJwtoMi6MnuGE\/3UPt49qynufZWDjCS56f9rnrQisVSM8Edp89qKJ9rzMGm7sE1iMuWU91xsrg9qSNcuyaE9YarW5fqCx0j8OSsVKm9H6HUbYsvCoU72+01R46T0PLgu+pE9yeAAAAIF5A8qYW9vIsVja2g1CmuYPVi7Xiq6fMH3xW5kq73CjXOSZ\/q5k6yZvMmsUNdkzp2Us\/b5dltsuZ0qYimW5ZbiCs+J5EBaKZJ0\/QUDWB3XcYE4JvER9SrsOeV2iB5NGUUdnwCHHkJkgrW7JdXiWy\/w2EPQ6C9UVf7ewOqPVtAAAA0w4kbyrh+mWld9+xLXwyf1IYf0tHP\/mKjM\/FaDLksGtWGDjM7nJCLrsV6XZZ+VUce8wJU66aoqqVvITn97miaXWS2X225BI3D78Go4MzKHnDi4i0ErmbPjNkm9K4RspQ6SdQ7awG6\/XJaVkWq4PXwggAAGBmAMmbQriLbVik0iY7vCJMN67gvTTtczsoq8XIG\/MYE8lTv2YjJb8GViW4N0m2y9WYckHY96ia7SS85CWvXLt2S5bF6lIzZjfC7qsouWzJVq7k7vxT\/8gNP03TPS6qrrwoa0to3K\/ElDdZT5Q5UgAAF3dJREFU5XespzxNWPoJVbu\/TnLnZfLKLVkWq6sHugcAADMCSN7UwXtabVikzSdsCyDvL2wzmNyjMvw9lIV\/tZcwYcmb0JoV27IkoiDZruDhb9HWmgyTnI0uit2Pyj2JSD8TEpR6enmIJiuRwu1kxOd8BJ1OehyirPYeq8Jo3IRlm\/bJzBsDAABgWoHkTRlch2xEpDfmSSxP0fH8rn3Ph66zySvXrl27JSu3qLzO4fb5qcl01054zdMjearEbRKSF+XuT1zyVmZU9\/jYYQ8yN9ERwhuWodfr9QnL1q5dm7bNmGuxUq4e2i05eFMpeTL\/B7islqwtMvIZxShoAAAAUwEkb6rgRkSGmUmCu91d2j4XehAaISHHE87jFuoyS9i0zyHtJON64SYgeZNZs5JccFM9W5UkT2b88KSYsORFvfsT7a5lRYibJEVG89zBo78yyypz5xs3yZ+0u1ZBOCXdtbGpdn+Pi7JajNueD7V8is9XAAAA0wkkb4oIM0kKD661T3qnHd\/y2Ku2eE4KVpLk+nAJf8hk1JI3qTUrNOVJZ5ORbldpNPIEmajkTWD32WWyO8+OgA0dQGnJuHnqxJoXfLPCmRS6KWASAy9iXO1+177nJ1bxAAAAYggkb0oIN92xAO6CK72EB80uwehgf5K0CbKmIHujnruI64OLXvImtWbZjjrOYXh7GmYKFaW+PnY16qbanajkTWT3ladQ4YYo8F4uV7IetjpW8h8XwVaSrOT56rK4+ZfVTaHCDeaVVVTV1R56NItb5uXRjYEGAAAwNUDypgJO3RRagnhwOii1lmDL1\/JNmxQcL9RTl\/B8LsX1KvqFU\/yKVUKV5E1qzXq9Xp+cto97H82bP1igvXL3AoZuZWRm5aVlN75SXcfiRCVvQrvv2reSKzg3ATFv3xP4nZfyJWM7ZvmaFxqjvTK02uBEyIJhD7wDqjQZMm\/uZOEboq92d9FK7kjX8Wdo5s0WjYdeAABAXIHkTQGc46ma8l\/5xjzB0A3Z6X85r4gAf1ITdffkTWbNWUalx3uJGoom9lgzxeEJUiZ8T95Edp\/fSBZx15VKJqN5ap5Qptfr9Wn8DYR\/xBpDdI81E1e7zBQqIjBPMgAAxBdIXuzhJv1V2Y6hfGMebxIWhTuy\/G6LwqU5YW1GucMabATi3yimcnTtJNZsdMg+ul4647DS1C1+t2WL0lQhCWuNdaon55j46NoJ7D4homGw\/PfkirRUuWScX4aazWgqS8Eek9P2UVRRsNlR9D8F9yxcISuzLLmigRehfY6q2sO\/PpfCoAsAAIgvkLyYo27IBR\/lG\/PC3LLHe5HLagxN5pa8Mm1bbnlwSCjXbSdzN5iKefImuGZmLT5qX3BijeSVaduK6tzSa37YSZhpd13RtjTe1tduybLIrSUMk5snL8rd5\/bKUR56W\/LKLcZyh9RKw5TM78iVaB4hPqooNEtewjJ+ZbDVKNPYy39X8sq0bUWUL8J0L1FWu7\/HUW7csnZyhwkAAMCUAMkD4DaD\/TdE1d0EAAAAZi2QPAC0BttMKDu2m7tbT+VTdgEAAMxWIHkAaA2fdRN7ZxxvQK5oRG6M5sQDAAAwY4HkAaA5Ig\/IVT1AGQAAwKwFkgeABhE+eldIVAOUAQAAzFogeQBolODIV3ZILka+AgDAbQYkDwAAAABAg0DyAAAAAAA0CCQPAAAAAECDQPIAAAAAADQIJA8AAAAAQINA8gAAAAAANAgkDwAAAABAg0DyAAAAAAA0CCQPAAAAAECDQPIAAAAAADQIJE8VvQAAAAAAswpInirifZgAAAAAAKIDkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAAAAAABoEkgcAAAAAoEEgeQAAAAAAGgSSBwAAAACgQSB5AAAAAAAaBJIHAAAAAKBBIHkAA\nAAAABoEkgcAAAAAoEEgeQAAAGYRjiIDS06RYyjqdxU5prR4YbcdnuycnJw9+8uszV2D013ECIT2oMB6Nd6FAVEAyQMAADCLECiTas2bDZLHp6CkuX+6y6kMJG+2AskDAAAwixApU3ZRsxrNm22SZzAYDHsqu6e7qApA8mYrkDwAAACzCIkyqdK8mSF5YRUpMDTY7ThhzuG351lnhuZB8mYrkDwAAACzCJl2MRWaNwskj6XbWhDatf2NI1NfwIhA8mYrkDwAAACzCPnOz\/2N4TVvFkkeIV0n8maW5UHyZiuQPAAAALMInnCUndivVvNmleSRq6HGvOzS1ikungogebMVSB4AAIBZhEA4hhpVap46yQsMdthP7N+Tk5PNOVZOnrnE6uieTHPaBBSJ11wpX97AYEeztUxQ1GBpi07YOwYDkTYw0u2wlpjzePu5Z\/+JZqXdjLAHQ46i0J2EeaWX5A7DJAscGGytLjHncW\/OzjOX2YNTzYSUWM2xzRZsvMTquBpp28G64hdcfUXHGUgeAACAWYRIOFRqXkTJC1xtLuHdCydlz4nWCU5fF2PJC3RV78+TLSKPgjJZ1SKEkKEOq2B0h4C80ksyexluD4Yulebx3y7d7KQLfKlM6cjkFDX2q5C8\/vDHVnm+mkBXtXJdMSUwV3fNYNOD5AEAAJhFSIRjqLko1Mayp1r+ch1e8oYcJeEv5ezaJzSpSfSS123lpChPOMBWbUkNCkNzBY1u8sjMPai4B0MdJ0L2JGt4U17gnCJrWTjJExQxzMZPdEgKLxgCEwalk24GAMkDAAAwi5ARDhWaF07yhNfyHPMJR\/dQsN9ypL\/DXraHZxlRPGQjXInDwxt4Ibwlb+QSz5hyzCcc3YNDXDPSyNDVjmbBFCySQRuCZk9mRwOEEBIY6m4uCTW25ZRcEr5Rfg8CXdYIhjfpAvdX7+EdmoKSZvbIjPR32KWtc9JjK16BveMqW4CRoW6HtYi3DtGZw3+r4KQgJDB0VbD57NJL0n2fEUDyAAAAzCJkhSOi5ilLnuBaXtQs1yUrsJmcqEdCRCd5g838G9xOdMkXNa+sQ6GTMHCplHt\/idA9LpVylSQjq\/w3iqpQbg+6IxreVBdYVFcyx5YvtQVW+W5V\/jr4kjnIlV1xhh5eFZTMUMuD5AEAAJhFKCiTQPMKKsUypSh5vFazcFMP81e\/pzq6m\/NUSV5gaLC7tbrMzL95TSQ2Ie0IP7FK14kc2ZeFyiF0R46RkBMJSyrZg+7KkBkrGd6kCywojtKhaS3laZ7isQ0\/k2LodTy5Dd3plzdDpqSeCJA8AAAAswjl+8P4d2+JNU9J8niTlUSYka5fpbGEK3FUTPhxF6F9EtRQK9cspuyazVxRBfsorPNu3mAEZcObdIF5jheuwvktsUrHVkFqOUI2GhL4\/kruzMgxV3fNgNkKJwIkDwAAwCwiTLtYGM1TkDyVIkEI4Y+GiHLuuglIXkFJc8SZPQQEhgYHu1ubq08U8eZFEdRQSFpyIihPuD3IKzmxX6k3OSoiFzgkpeGbTnk2pnBsIx+v0LENrYI\/JbXBYDBk79lfZrW38m7NmwVA8gAAAMwiwnZ+KmqeguRF1SfnkG\/miqLEYcnOyckzF52oblUxKV9gqLvVbi0r2b8nRzjxnBB5ZyqojHYwqPIeqB1YGn2Bef4d4Ya3iMc2GgRVVqYwsDdb9YGKN5A8AAAAs4hoJuYN9XhGFAEVYyIm+tyH2D4vYrA1zDR3YYxlMs\/8CKepkR4oN9ECqz80cs1wEQqtrsoizCloMBgM2QVF1ROdP3E6gOQBAACYRURUJlnN04jk8Qc8iHWDaQd0dPR3ye5U7CQvr\/TS0NVQH2lYzZt4gWeE5BFCCBlhRsQotz9O\/PbJKQeSBwAAYBahQpkEs7MxF+DYdtdGp0kxkzzBXWLZBftPVDc7Oq4Oim8Sk9ejSyVcKSbTXcuNtODNH6I4dnUyBeYNzY1Q3QrHJTRmN1YP3B0Z6m4V3UTIEv3EOtMDJA8AAMAsQpUySTRvZgy8mJRt8Mqas78xjKfxdI63vZBJTWbgBX+N\/Dmb5TRvkgUOLZ3YwAueJU7BLHYj\/aKJnKNvH50OIHkAAABmESqVSaR51klPoaL+lRMscSTUTIEiKqjghfIqJYLX\/MVr71PaA94kdZKnZEy6wCoFnPcy0bEN7cuUPZFiSGlmwZkCJA8AAMAsQrUyCTQvxAydDDma1YRzHuGk0ApTGitOfRKqDUFzn+Ie8Os4zMPQJlZgxbmZ+QieSSc6tiHLjHDXXGiuPU4HQ4YYdp4YeSmeOUDyAAAAzCKiUSbB4xDkRUD4WDP5XkXBY82yixxRzpwRI8kL+YTixCWDl0oFc7uJtserjoKyDmn\/Kk+YhGYTbm5CnqOJbkyLbYFPyBR4SPT2CTyyjpChjhNyu80zRLPSPDG8MT7R94FPC5A8AAAAs4jolEmqedJ7pwSNQcJn0Y\/0d9jL9vBWIfsI1ZiWONy+ZMuXkhkRICgng\/jmQUGrGbOKALefJSFfEots+LkJef2lQs2bkgKPhAosmQdPxbFt7rga3GemEPyVCNsi+YZoKCiyOroH2XeSwNBV4S15aucLnG4geQAAAGYR0SqTWPPkbpAfcsj27ErYUzmRqTJiNrpWMDmMKiT9pOK2LzlySsQiG2EP+DokaAKMRYGjWcVkjq1Mj263yumUc8z2mXg\/HiGQPAAAALOK6JVJ+HwqhVGQgav2sDaRXVB2aYKT3sZyMmT+c2PlVaWoutVRFhpxIB0HHOgKt449ct2iEfeAP22esKc3BgUe6jihONmeIaeosTLS1Dbh99hgMBgKSprlW+L6GyM55sTPi+kAkgcAAGAWMRFl4mteuKkuAoMd9hP79\/Ceu5Wdk2cusTom9QCr2D7xggQGW6tLzHmCQooeiBbaX6XZXga7hDuanZNnLrN3DMo\/MFfFHvBbvURtYrEosGQd2Tl7ioLHRd38heyxFR3cohOKe82982prteidwfOiuWsG+x0hBJIHAAAAgNlLaBDuzJzFJK5A8gAAAAAwWwlNUh3l\/IW3A5A8AAAAAMw41M2zpzC1HyCEQPIAAAAAMANRMZcxfwbDsJMW365A8gAAAAAw87jEm2fPkFdk5U20J5moTvbpuQCSBwAAAIAZiOpJ8mSfhwEgeQAAAACYqQxeKoswI3FBSfPV8HOg3MZA8gAAAAAwgxnsarYKZ9pTO8fd7Q4kDwAAAABAg0DyAAAAAAA0CCQPAAAAAECDQPIAAAAAADQIJA8AAAAAQINA8gAAAAAANAgkDwAAAIgzY4HPR4dHbtE3kGgzOjwy\/vnn8T6AMxRIHgAAABBPxgKfx12VZnvgebJA8gAAAIB4Mjp8M+6SNNszOnwz3odxJgLJAwAAAOJJ3A1JG4n3YZyJQPIAAACAeBJ3PdJG4n0YZyKQPAAAACCexF2PJpBPfr3Cvq6sT\/6vjecXrLAHs\/MTmRd0uzavsj+Q7rwQk81B8hSB5AEAAADxJO7GFmvJC6avaEt4ybvoguRNLZA8AAAAQCVXrQWGIodwmaPIIFkWFXE3tmmXvCnZ3KQOrEaB5AEAAAAqgeTxrOsX7\/VPr+Rdg+RFCSQPAAAAUEl4yRvqsO7PMxgMBkN23n5rx1DwBbzFBUX2roB4pUJZcV9ct6KxqKWraEfjoyvsC1bZ1+297OO5zq\/rrn1Q0PTMKvuCFfbndriCPZ6N5xesOG9tPP\/cKvsDGy40Xfska4N9waqmI+7hCP4U3NyVoh2Nj6+S2Ryv\/YwvbcolCS957ovruNv1tly8LHrLtStHjMEVCl8Q2hxTyOeMreL3QvJkgOQBAAAAKgkreR1lOYb99sEAIYGrlWZDdmkrIYR0WwsMBSdaBwkhgav2\/TmG\/Y1DwhVIrcv+wKr6re\/10TeGe+rOP7OifudHIdd5YJX9uYJPem7coq+1\/\/pn9mcKuljJq3\/mVeeFa61bV9Q\/l95U5O4uSrc\/ELEhjd3c5opu341bdNvFdavsv3jPq0bynvlZ\/briLq4kzx3pVt+SV7dTKnmffbDDvmCL88KnUjEVbi5YSFE74vScAbMLSB4AAACgkrCS5ygyZBc1Dwr\/2lqanXOii\/t1pHG\/YU+18DUy1rX5vU+FPZV93M9PGdvZlrZbl8saF6w6XxeUPPvWDz8LvqbgstreUvfFdSvs6470skuG63baF2y5dFmF5KXs7eLWc6G4fsEG0WjZaCXv2pEt9qeM7T0yrxdtTnbNU3TIZzWQPAAAAEAl4btruyv3MJ2y+09Ut3aPsG8Qw5c+QmQl79eNAr\/hS55g\/EHj+QUrzr17jfmhscjNf00Uksfb3K3LZY0L\/teFJhWSxy+J78NzC1acr5uU5N3yNZ5PWWV\/4H81\/qLg4gctXpHkKZQEkhcGSB4AAACgkqvWAkNRs3CZcODFSHdr9Yn9BdkGg8Fs7ydXrQWGAuvVsCudhOTVNS9Ycc76aSwlz3WkkW2Ti0Lyet6LgeTRN27RN7wX6i5m\/arx0RX2R9OdTZ9C8iYDJA8AAABQS3ORuCGuv3qPoaCyX\/zCjrIcw57qfuIoMhj2N46EW+eEJW\/4wt76BT93um7EUPI+tb5mf2AH0yMs2lzX7g1KkjfcVFC\/4FcuYU\/rxCRPtmCQvIkByQMAAADUMnKpJMdQcKK1f4QQQgJD3fb9jMwxt9vlFDUPBgghgS5rgSHvRBchpOtEniFnv\/1qgBAy0m3fn5Pz\/7d3\/65NhHEAh\/+aTPkf3LIGSpYszu5d2kHcnDpIKXRwyKZQunToIB1Kl3IloUFBQ3CoiIhURdvzEkiaioO5eMEfmIbyJi\/Pw3e6C8cb3uXDccftdKabb7bIqz999ykbpFl2dvx8pXbyoPklnTvy1g++ptkgzT639k4rtdaT8Tu5H3fXkvLqq242SM\/fNlaTcm0q8vKVXHYP2pXqycPm5fTF54m87P1R+0612Xgt8uYh8gBgBhed\/cbWxs\/H6zYePd5pT+7ifevsN7bGJ7Z\/Hb8oHC7+PDdb5E2+GFZZa+++zN8wnS\/yxtesJSv3Xxy+yQpnu+v3klI1Kddbm8fnh5uTC354tn1av1tcyeRNkcHZXrNUWGepmuRrm\/7iWT7F23V\/\/nci74ZEHgCE9M8Im5r\/+fDDjPPbM3lLO6G3cRGJPAAISeSJvFsi8gAgJJEn8m6JyAOAkIa9fvBCWvYZ9vqht3ERiTwACOn6ahQ8kpZ9vo9GobdxEYk8AAjs+mrkft7NZtjrK7y\/EXkAABESeQAAERJ5AAAREnkAABESeQAAERJ5AAAREnkAABESeQAAERJ5AAAREnkAABESeQAAERJ5AAAREnkAABESeQAAERJ5AAAREnkAABESeQAAERJ5AAAREnkAABESeQAAEfoBhoLYp1QbtpAAAAAASUVORK5CYII=\" alt=\"\" \/><\/p>\n<h3><strong>\u5b89\u88c5pm2<\/strong><\/h3>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">\n<div class=\"cnblogs_code\">\n<pre>$npm install -g pm2<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u4f7f\u7528pm2\u542f\u52a8sinopia<\/p>\n<div class=\"cnblogs_code\">\n<pre>$ pm2 start sinopia\n[PM2] Applying action restartProcessId on app [sinopia](ids: 0)\n[PM2] [sinopia](0) \u2713\n[PM2] Process successfully started<\/pre>\n<\/div>\n<p>\u4f7f\u7528pm2\u6258\u7ba1\u7684\u8fdb\u7a0b\u53ef\u4ee5\u4fdd\u8bc1\u8fdb\u7a0b\u6c38\u8fdc\u662f\u6d3b\u7740\u7684\uff0c\u5c1d\u8bd5\u901a\u8fc7kill -9\u53bb\u6740sinopia\u7684\u8fdb\u7a0b\u53d1\u73b0\u6740\u4e86\u4e4b\u540e\u53c8\u81ea\u52a8\u542f\u8d77\u6765\u3002\u63a8\u8350\u4f7f\u7528\u6b64\u79cd\u65b9\u5f0f\u542f\u52a8sinopia.<\/p>\n<p>&nbsp;<\/p>\n<p>pm2 \u5f00\u673a\u81ea\u542f\u52a8sinopia<\/p>\n<p>pm2 startup centos,\u6839\u636e\u63d0\u793a\u7528root\u8d26\u6237\u6267\u884c\uff1a<\/p>\n<div class=\"cnblogs_code\">\n<pre># su -c \"env PATH=$PATH:\/opt\/software\/node-v6.9.1-linux-x64\/bin pm2 startup centos -u nadmin --hp \/home\/nadmin\"<\/pre>\n<\/div>\n<p>pm2 \u542f\u52a8sinopia 4\u4e2a\u8fdb\u7a0b\uff0c\u4e14\u4fdd\u5b58\u65e5\u5fd7<\/p>\n<div class=\"cnblogs_code\">\n<pre>$ pm2 start sinopia -i 4 --watch --merge-logs --log-date-format=\"YYYY-MM-DD HH:mm: Z\" -l \/opt\/log\/sinopia.log<\/pre>\n<\/div>\n<p>\u4fdd\u5b58\u5f53\u524d\u914d\u7f6e\uff0c\u5f00\u673a\u81ea\u542f\u52a8\u65f6\u6309\u7167\u6b64\u65f6\u914d\u7f6e\u542f\u52a8<\/p>\n<div class=\"cnblogs_code\">\n<pre>$ pm2 save<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h3><strong>\u5b89\u88c5nrm<\/strong><\/h3>\n<p>nrm\u662f npm registry \u7ba1\u7406\u5de5\u5177, \u80fd\u591f\u67e5\u770b\u548c\u5207\u6362\u5f53\u524d\u4f7f\u7528\u7684registry\u3002\u4e0d\u5b89\u88c5\u4e5f\u53ef\u4ee5\u3002<\/p>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>$npm install -g nrm\n\n$ nrm ls\n  npm ---- https:\/\/registry.npmjs.org\/\n  cnpm --- http:\/\/r.cnpmjs.org\/\n* taobao - https:\/\/registry.npm.taobao.org\/\n  nj ----- https:\/\/registry.nodejitsu.com\/\n  rednpm - http:\/\/registry.mirror.cqupt.edu.cn\/\n  npmMirror  https:\/\/skimdb.npmjs.com\/registry\/\n  edunpm - http:\/\/registry.enpmjs.org\/\n  mytestnpm  http:\/\/ServerS:4873\/<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<p>\u4f7f\u7528\u547d\u4ee4<\/p>\n<p>$ nrm add XXXXX http:\/\/XXXXXX:4873 # \u6dfb\u52a0\u672c\u5730\u7684npm\u955c\u50cf\u5730\u5740<\/p>\n<p>$ nrm use XXXX # \u4f7f\u7528\u672c\u5740\u7684\u955c\u50cf\u5730\u5740<\/p>\n<h2><strong>3.\u9a8c\u8bc1<\/strong><\/h2>\n<p>\u5728\u5ba2\u6237\u7aefServerC\u5047\u8bbe\u4f7f\u7528\u8005\u5df2\u7ecf\u5b89\u88c5npm\/nrm\u5e76\u4e14\u5df2\u7ecf\u6b63\u786e\u914d\u7f6e<\/p>\n<h4><strong>1&gt;npm install<\/strong><\/h4>\n<p>\u73b0\u5728\u9a8c\u8bc1\u4f7f\u7528\u521a\u521a\u642d\u5efa\u597d\u7684sinopia npm\u5e93(http:\/\/serverS:4873\/)\u8fdb\u884c\u5b89\u88c5\u8f6f\u4ef6\u548c\u53d1\u5e03\u8f6f\u4ef6<\/p>\n<p>\u4fee\u6539npm\u7684\u8bbf\u95ee\u4ee3\u7406\u4e3a\u521a\u521a\u642d\u5efa\u597d\u7684http:\/\/serverS:4873\/<\/p>\n<div class=\"cnblogs_code\">\n<pre># cat .npmrc\nregistry=http:\/\/serverS:4873\/<\/pre>\n<\/div>\n<p>\u6267\u884c\u5b89\u88c5express\u7684\u547d\u4ee4<\/p>\n<div class=\"ace_scroller\">\n<div class=\"cnblogs_code\">\n<pre>$npm install express<\/pre>\n<\/div>\n<\/div>\n<p>\u5b89\u88c5\u6210\u529f\uff01<\/p>\n<h4><strong>2&gt;npm publish<\/strong><\/h4>\n<p>\u672c\u5730\u5982\u679c\u6709\u53ef\u7528\u6765\u53d1\u5e03\u7684\u6a21\u5757\u53ef\u4ee5\u76f4\u63a5\u7528\uff0c\u672c\u5730\u6ca1\u6709\uff0c\u4f7f\u7528npm init\u6839\u636e\u63d0\u793a\u521b\u5efa\u4e00\u4e2a\u3002<\/p>\n<p>\u521d\u59cb\u5316\u521b\u5efa\u4e00\u4e2a\u6a21\u5757<\/p>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">\n<div class=\"cnblogs_code\">\n<pre>$npm init<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u5982\u679c\u9700\u8981\u767b\u5f55\u624d\u80fdpublish\u5219\u767b\u5f55<\/p>\n<p>\u8fd0\u884cnpm adduser\u6ce8\u518c\u8d26\u53f7\uff0c\u5982\u679c\u5df2\u7ecf\u6709\u8d26\u53f7\u76f4\u63a5\u8fd0\u884c npm login<\/p>\n<p>\u767b\u5f55\u6210\u529f\u65f6\u53ef\u901a\u8fc7npm whoami\u67e5\u770b<\/p>\n<p>\u6267\u884c\u53d1\u5e03<\/p>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_marker-layer\">\n<div class=\"cnblogs_code\">\n<pre># npm publish chenyu\/\n+ chenyu@1.0.0<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u53bbserverS\u67e5\u770b\u521a\u521apublish\u7684\u6a21\u5757\uff1a\u6210\u529f\uff01<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAm0AAAEfCAIAAACca2a+AAAgAElEQVR4nO2dd3gc1cGv97tf8t3n3uS7ARtIIZR8CRiwqaLZ2AYCIZCEkoACgZjeiQ02RQRi40qLwca2JK+LbKO+kmVbsupKsppVV12yLUurrrUly+paVevcP2Z39szMmdnZ0Uqr8nuf3wPW7JQzZ2bPu+fM7KwuwXQurqAtNq81OtcSnW05fLzxUEZ9VHptZFp1ROqpiJQT4cbycGNZSHxRUGz+gSPHA6Iy9kSl747M2n0ob9fhwt3RpXtiT+5LqgvNOBNV0B5T2pl0stfUZK09P3ymZ\/RMz4j53FBefX98Zc+R4vMRuWdDMpoPGOu+N9YEp1SHplSFJZ+ISKmMTCmLTCmNTCn72j8sMqU0MpX7s\/RgaunB1LKD3L+5P1NKuT8jU0oOppQIZkstizpWrpiyg6llB1NLv\/IPiUwpiUguNhiLDcai8KSi8KRCYexTEgvDHDGFJZjCEky2P5O4BYvCk4rDjdKUGIwlhuQSQ3JJRHJpREppREpZREpZJJfUssjUciplkSllESmlESmlEcklBmNJeFJxeFJRWGJhaGJhaKIpNIEON7EwNLEwNIGL+NWwxKKwpKIwrmx08Rx\/lnAxGEsMyaWG5NKIZFsJ7YUsp1Jmf6nUkFxqMJaEG4vDk4rCkorCEvlC2rebaN8uvQlHbdi3RcUgzJd+IaIpdAUyixcpLl5JeFJxGFeB9voJSTCF8FXEDL0XfNUpxF6N3H4JSyhfvGSu9orFtScujykkwRQSXyCO4ygXCcppFBxW4fG1V7vjJCxXfXy5sjlOrU07AulNc6cZM46CKVag4wwUvUeEFRgpLp6tAkUnnkKF8O9H5+dVKuPYRSSXGrj3Jr91QYqd7y9j91WeQuURjmKUGIwlYYlFgUdzt+4\/+prP5pSc8rbekdYexJPRJRa2x5vOxeW1xuSdjcmxRGc3Hc6qP5RRF5VeE3nsVGRKZYSxLDypOCQuPzDm+L5Dx\/ZGJO02JOkNqTsjM\/yjcvSHC3fFVAYk1YZmWqJM7TFlXSlVfSXNA01dI93W0a7+kYaOocIGa9Kp3uiSDkPu2ZC05gNJdd8n1QQaq0OSq8KST4YZyyOMpRHGkojkEtt\/k0sikksik22+jLS7MyKlJCKFf6mEf+lgCifI8oM2X1ZEHauISquISquw\/ftYRdSxioPHyg+mlnGSjkguMRiLOV9yXhTbiPJTSIIpJN4kbMsK6bZM8EZKKg4TWIR70\/JNVXlESrlQouWRqeUR3FslucyQXBpuLAlLKg5LLApNKOQ2HRxfYI8pOJ4rjCPBwhlCEgpDEgpDE4tCbWUrZoVvX3hdlUUk24oXkWoLVbbyiJRyvnjhXPGoEoYk2LebwG1XUAnSbRmSywwSg8qnzF6B5XwJHVWXKige59GwpGJb8RxVZHLUnr20IVz5BX\/aqy5RWnX8R4ciYTXyJRQXL4JdvGJH8ehiSI9pXEFwXH5wXH6QPYxDLCyn\/SSUVjtVh6Lj6zjEouNbyFWg4MRLMIXYT37lyJx40pOQLl45fQYyi8dXIHcG2s86R3nEFcI+A52fVwqnVhhzf9knjNNKKKYrwVEYyXvQkFxqMJaGJRYFxeXvP5y5fnvYm59uTS882d7neYsguoTC83GmdptHsy1HspsPZzVEpdceSq85eOxUZHK5IakoLD4\/ODb7wOHUgMiEXWHR\/iGH\/UPj\/cKT\/cPT\/Q7m6A+XBiRUh2S0HCw4F13alVrVV24ZONMzMjQyNjh84Uz3cFmz1Xiq+0hxe0Te2ZD05n3Guv2JNYFJ1UHGkyHGytCksvCkYkNScXhSkSGpODyp2GAsMSQVG4zFEcmlNq0aSyKSi7kYkosNxqIIY7EhudguXc64ZQdTy\/lEpVbQOZhafjCFM2hphLHEkFQUnlgYlmAK5dQYlx8clx8cS\/2XT2xecGxeEJejeUGxefYZCuytnqgnURSawLW2xWGJxeFJJeFJJeHGUgPf2tLtBa0oY6nBWBqeVBKWWGxrv+IKgmPzg2LzA4\/mcQk6mhcUmy9JXhA\/Q2x+UGxBcFxBcLwpJL7QXrYiRhKLuRKGCUsYkVwWkVwekUyXjWtHyqjiFYVyzb29hI7txnGtbWFogq0GHEmy1wYrohY2TDSDsdRg5GqvnFU8WwU6HMAZNK4gOLZAUl1cOeXjqLoiUTcxJKFQUKvcUU4qCU8qddiUVTy+9ujiCTYaK0hQbL79mObaEiM6xCZhOaXH114820lYKq5Dp8c3zhQcZyuJ4MRz1BIzhU5OPNEZaDvEyqcf\/wbhK5CuQ5PtrGOe81Q9UJsrkdSJZLuSmglPpE8tk3C7ppB4u9H5syWeivBPuq0ITSwOS2Sd5PZihCUWh8QXHojO2WVI3bL\/6LrvQt7\/fPe2\/YfNLe3tfaMeVwjS2jOi+\/TbiE+2RPzzm3CfzWE+X4d+9HXwh18FffjVgQ+\/2P\/+pj3vb9KvWu\/\/7tptKz7b8s6nX7318YbXPvjstQ9Wv\/LBhlc+\/OLVj\/79yj+3vvYvv7fW73v3y5D3vzX4bDv4mf+hLfuj94THhh+ODz8cvzs09pv90Wv8D\/l8F7Fqc9i7nwe9veH7t9ft\/8f6gH9s2Lti\/e531+96b4P\/exv8V663\/3e9\/8oNO1du8F+5YefKjf6rNu5ctcF\/5cadKzf4r+KycactG3au2qhftVG\/auOu9zftev\/z3Vw++ILLHvs\/uOm7Vm3Sr9qk51b13ga\/d9f7vrtux4p1O1as3bF87Y7la7cvX7t9ue3ffLbb8pk9tum+K9b5rljnt2Kd37vrufg7ssH\/vQ07bdmoX8ll066Vm3at2rRr1abdqz6nsmn3qk27Vm3axc323oad7673X7HOb8VaX25b\/\/hsuz07JMXbsfwzagZH2fxWrPNbISqVsITvikvIFW+3LYrFe3ed34p1vsvtJeTrZDlXJ9x2N+zk8h6djXp7dr63UfgSMxv1Koq3e9WmXSs37VrJrZYr4Xq+hJKsoyKcKDym0noTHmu+DgXHlyqevbQrqdp7b4O\/7fiKCiAId9zpQ0+fAPZ6VnmI+TrcxKpD\/vhyFSg5vpITj9o6M3SRNshGcoh3rdy0a6Xs8d3NOr5+K6QlkVYIfaoLT0IV5xV\/7HaKjt0K6myRbNp2nihWEX8WKZ5C9sKs3LRr9dagvRHJx0vNze19XdZRDOdOneh6Bi4gCIIgUzMDw2N9gxe6B0a7rKOd1tHzfTDolIvO4yVAEARBkOkb3dmeEQRBEARBtAUeRRAEQRDt0Z3tHlGZ5o7BkmpLcu6JQymm4JjMwJiMwJiM4JjMQymm5NwTJdWWls4h9WtDEARBkBkQ3ZnuEacxn+1JzjsZGJ0RlVyQU1Z3suGc+WxPy\/mB5nar+WzPyYZzOWV1UckFgdEZKfmnalt71awTQRAEQWZAnHi0uXMorag6MDr9mKmqqd16rndUIU3t1rTCqsDo9PTimpbOYY\/vG4IgCIJMdJQ8aj7bG2nMT8iucGpQOo3n+uOPl0ca881nezy+ewiCIAgyodFZukeYOdXSGXw0K6e8rq13VEOyy+r8QhNC43OOpBcjCIIgyEyNztI1Is1pS\/f+w2klp1vaekY1p6iqJSg6rbO7ZxQAAACYoTA82tA+GBSTebykdjwS5XK8pDYyMXt4ZIQAAAAAMxFdS9eIKEl5p46kF7f2jLolR9KK8kqrPL2bAAAAwIQg9miVpXvvwdS6tj41jtwTHLU\/PFp5nrq2voColO7efrcXvaKiwu3rBAAAAFxC19w1Qic+uzK54NTZnlGnWfPF1pvvuu+mO+\/bqv9eec7kglMZhSeUyzE2NmaxWI4dO2YwGAwGw7Fjx86cOTM2NqawCDwKAADA4+iaO0f41LcP7o1KbTo3cLZ7VDmffb514f1\/evTpl\/\/w1Au3L37oTNeIwsyNbdZ9h1JHRkflCtHT0xMYGJiZmdnW1jY4ODg4ONjW1paRkREUFNTb2yu3lJxHay+7bAbEDccWAADAxKNr7hzmk3+yOcKY5\/QZSJ99sXXRA4\/+edkbz76+8rG\/vbonKNLpIoakXHPjWWYJurq6goKCzp07J33p3LlzgYGB3d3dzAWZHvW4\/6BSAACYVeiaOof5xB4vzyypVf7C6WdfbF304KN\/ef6t5954\/8\/L3twbHNXa4\/xrqhkl5rQCxtDu2NhYaGjo+fPn+SkxMTExMTH8n+3t7WFhYcyiSz3qcfO5PXJ97ra2trVr16alpdF\/clRWVhJC0tLS1grhZ+anqD1HAAAAyCPwaEh8dkV9u6JEv7vnd4899cI7L7zj89zrq743HFUj0TPdI5UN7RFJudLNt7S0ZGdn01OOHDkSHR1NTzl+\/LjFYpEuK3KMx503EdHpdMzD5uvr6+vrS6uR0ycn1La2NnpmbiK\/IPcP7jq0\/IkBAABAFbqmjmE+e6OOVVu6FSS6+KEnvF\/6x4vL\/\/nyu5\/+\/c0PHn7q+TvvfeTGO+9dcPuSBbcvucHrnieeeYm5bH1b\/75Dx6SbT0pKEjX6UlpbW1NSUqTTZ4NH58+fL7VdWlpaWlqawWCgPcpXo9Sj3MyilVRWVvJOBQAAoBldY8cwn50GY+P5QeZjAn33hd\/zu8eefmXFy+9++urK1a+uXP3yik+ee\/N975f+8dQLb3P587I3Fz7wJ+biTeeHdkUkSzf\/\/fffjwif0iAa1yWEDA8PBwYGSpedDR719vbmvMjbsa2tjfMf7dG0tDRuIt1J5ZGaVbQ4AAAAzaj16JadB\/709EuvvPvp6+9\/JpdXV65+6IlnmYs3tA\/IeXR4eJieotfr9Xo9PWV4eDgoKEi67Oz0qK+vLzeEKxKhr68v86qnqN\/JX0nlVgIAAGCcCDy6J+pY9Zke9pPru4bWfe277K2P3nh\/7Zsfrn\/zw\/Wvr\/rshXc+fvb1Vc+8+h4X75eWv7rch7n4aUu3ynFdqUdn87gu51F+H+kRWua4rvT6KO9dEQaDAeO6AAAwfnQNHcN8QuJzyuraW7pHmLF0DW34ZucL\/\/B566P1b3+88ZX3\/nXEeLy1d5TO2V72sqW1bZHGPOnmW1pasrKy6ClSj2ZmZqq5z4jMRJWKro\/ynU4eg8Eg6nHSfqXvMJLCHO8FAADgErqG88N8YrMqMoprpU\/c5WPpGtr47c6XVvzznY83vbJy9R+ffjHwYILC\/HzSi9R+70V0v65L33shM0ulBoNh\/vz5ROYuXN6XolfpMVvR2G9bWxtvZf6SKgAAgPEg8GhuZXN4Up6yES1dQ5u27Hr53X+95bPpuTc\/WPrwk99Hxjr1aFii7HMY+vr6FJ7DEBQU1N\/PfjYv06Pz58\/3uP\/cEp1Ox3\/pRdmjRPhtUV6izKXoOZXOCwAAAOrQ1Z8f5lPTNrA7MrWu1epUpZ9v3fXqytXvfPL5c2+8v\/h3jyvPX9vavzdK7XMBuZ9zG89zAQEAAIBJQ+DR+vPDR7MqEnNPOu1fWrqGvti6++X3\/rXsHZ9v9QeUZ07MPZmp+jn1Bw4cOHDgAJ5TDwAAYFqgqzs\/TOdEc8+uyNTTZ3pFvwMjTUvX0O6Qw3vDoy3dSrOdPtO7Nyq1t3\/A7UWHRwEAAHgcXV37sChxOSejUovo34GRi6VrxNLlZJ6olMJc\/I43AACAGQrDozWtg0FxOca8KjUqVY4xryr6mOnCBaXhWQAAAGD6oqttH5amsrlnT1R6zonmps4RzckqbwiMzui3un9EFwAAAJgi6Grbh5gprjvnb0g25lfRPwijPsa8qnW+4f6G5ANHjyMIgiDITI2sR2vbh8obO\/ceSo9INlWd6VFv0KozPQajKeBwxsmWbvphSQiCIAgy86IznxtSyOnWgZisim0hCdEZZafP9NIP45WmytJzJL1sW0jC0azK060DymtGEARBkBkQJx7lUt7YFZVWsj0kYV90ZlJeVVFN6+kzvfXtg3XtgyebuwqrW5PyqvZFZ24PSYhKKylv7PL4XiEIgiDI5ESVR7mcPmvNLG+MTC3edyTTN8y4JTBuS2Ccb5hx35HMyNTizPLG02etHt8fBEEQBJnM6GrODSEIgiAIoi26mrYhBEEQBEG0RVfdNoQgCIIgiLbAowiCIAiiPfAogiAIgmgPPIogCIIg2gOPIgiCIIj2wKMIgiAIoj3wKIIgCIJoj8OjXxprlkeWK+RLY43Hizue1Jasr8t+TiG1Jes9XkhUgih1jQ39yb\/vT36orrHB44VBtCVGp1MZjxcVQTTEceK+HVacW2\/lk11nPV5vzajpS6\/pyzD3pVX3vh1W7PHijiuZfxsdSBsdSB8dSB8dSBu1po72p4z0J430JY70JQ33JlRn\/s3zhUQlUKmvrxg+fBUx6IhBN3z4qvr6Co8XCXE1MTpdgk53TEUSoFJkesZx1r4VYsqttx6r7kut7kut7kuu6k2q6k041RN7oju6oiv2ZPdbISaPF3c8OZX2zOhA2kh\/\/Ehf3Ehf7HBvzHDPkeHuQ0NdkYOd4UOdkafSnvF4IVEJ1W1DHTkfjBl+yOlTmjHDDztyPvB4IRGViVEnUS7wKDId4zhr3wjMy6232iR6ui+pqjf+ZM\/Ryu7oiq5DZZ3RlV1vBOY5WZcMcZmOjuw1827Q6XTVbUMrPly94sPV3D\/4eeIyix957El6nXGZxTrJW0u0rMLm6FQk\/3V0IJ3zx4jNH1FDXRGDneEDHcGDHWEVyX9VU2Xb9oTwhdy2J0RUPFEBHnnsyW17QtTUEge912oqU1QhouIpV0LtZZd5JNv2hPAlZ2Ys4gdyErWpNOIHnnm3yJ9diFx4jxJFFDyq\/JaJyywWnU70W0DaeiCI2+M4yV7fn5Vbb0053Zd8ui+usmvFjsMLX11796tr395+KLzoXFRZ5+v7s5TXxWwcH3nsSa7p4ZSjAOcbWglcVny4WioG5kSuDHItXXGC9+hA+kjf0ZHemOGew0OcRDvCBs8HD5w7MNAeVJzgrabKRKLinMdtVOT1Rx57kv5TWj\/SneXXydw7vjKlFc4JW1midCV4SqJclD2qLFEuao7UNfNuUK4NV6PBo6JzgDsr3Fgk9eFOVOlHT+kZyPzQpjnj9ygd5luGf79w55WCR7lWSPTRljlxPIsgsy2Ok+yVvem59VZjVW\/iqd7l26N++6HfpsNFGw4V3fe+36tbIiNKzr+2L7OsuU9pXfIfGKvbhrbtCWE6g8uKD1fzJyVnC+aquJcUWiIFj5pinxy1pg33Rtsk2mkY7AgdPB80cG6\/tXWPtW1\/UfxTVZbzru4dXxiuzPRu8qWVK5KCR5Urk26dmZ1yuSriKsGzEuUiV8\/1DSd4WV555ZW0O+k\/6xtOKJ\/ZXDdF59buyHjU4t6SOM01824QtfLSk4052HPNvBu42aRjLdrCHNel3enSuK7cW4Z7R8i9cTi\/XjPvBi50zTAnKr+qvAgyC+M4a1\/enZpbb0081Rt3ovuRT3d9GVOSeKr7aGXnuqiiBz\/Wr09ueN4v\/s19GQdNjXLrctof5TqRzEaf9igfpnp5j4r8wc2p4NHc6L+MWtOGew4PdR3kJDrQHmht29t\/xq\/f4nf+5Kqi+KfyYp+rqExUrjLRuC7\/b35PV3y4miskXyFy3a9x9kc1NHO50X\/xuEEVPFrXWDscfbVYnNE\/I9E\/FXl0+PBVdY21CnvK1a10XH08mdYelRZeOqgjMqtbVOFej3JtBXN\/me9K5gcF6U4p76mGRZBZFcdJ9uLOpOO1\/bEnuqPKu576KnLFrkR9Tuv2TMtrfnGPf254L6bmeb\/4pFNdr+xKlq6F++CvAC8SabtGO4OzLP1+UPYovyp+TgWPZkU9MdKfMtQVOXg+yNq2p8+yo7dpc3f9591163saN7cWv1AU\/9RAZ3TmISejuyKPSkvIfZDn9lS55dXcH62mxsldOt5ZUU943KAKHu03PkB3QAdD\/oPU+BEyRgghZv1g8H\/Qr\/YbH1bYU+5MEF2L5do+vjL584eucPr8FH1K01G9f9pAotnY7zTJkaIPKz2RLyE3UC9ds2hz0sJL33fMa9LSk1N0XUBOWi5lnB5lfvKmeeSxJ7n3GnfEmcMzot4kPIq4N46z9nm\/+PSa3n15bXtyW1\/xjV34ztdPbwry3hh4x9tffRCYwXk0uLD9eb9\n45opoqylc\/ZLrj\/Iz0FoVXVLlVqvZo2mGx4Z6Evss23ubt\/Y2be5p+LK7flNX7brOmtXd9V9wHu0\/q08zPCZd1ukHBdH1UWkDzSzVePqjXH9XebScWQkeN6haj0b8J8l\/UXANLe\/vJOI\/HR5N\/r3cbtLaoCufHumlxy2ZN47pJF7kz1X6orho\/XJtq05yPxp9axi9Uf4in2hzcqViFl5UEunnV6ZZRT3UqeBRUfhhZ+ZL3NuB21N+l0X7Do8ibo\/jrF22PSaxqnt3TutzXwTfs+Lbv\/47cvGKbxYv\/+YfAal78s5wHt2RdWbZ9hjmiuiPgdzFA1ozzPmdKkQ0zzg9mhz66GDH4d7mb3sav+6u\/6K7bkOX+bPO6k87Tn\/cXbue82hP4xfJoY8qV5n0Xh5uo\/xALvP2Ih3rmqXm\/ii3ILdm7h\/M2ZiV4HGDKni0rrF25Ih98LblCCHkSgpCCGk+yL06En2FwrguLQD639ILXfyf9AlcraIDx\/d3RTUv18rT7wLpyvmS0JuQ\/lvuVmdR4UW7JncdlHklZSp7lHuXyd1gyCkWHkUmP46z9tmth49UdD694YDXS5+94R\/3vak1qKj1gKl1R1bLtxktvEef3XqYuSJRf5S3nXTYlgnfOnDz8xdTRW+A6nFcH00M+uNAe2hPw1d8N7Sz+pOOqo\/On3q\/q2YN79HEoD8qVxnTo9pqX3N\/lN9ZV7eYGPRHjxtUwaPV9H1Go1autXVIlBAy0qPmPiPpCcYfKWmTyt\/IWk0pR71HVR4Fpx6V9m7VeJRZ+GrJRwQ1XyeTFmyqXR\/lakn67uBvVufeUNKjD48iExrHWfu3zQf3ZtYueeeLt3bG7c0980VK48aUxnXGhjVJ9V8da+I9+rfNB5kr4jwquo+UO6f5eWgv0gqhvwHGvcP5Phy\/rFTMzFuTFDwa9\/0frK37bd3Qmn91nP64o+rD8ydXtp9Y0Xn6E96jcd\/\/QbnKpB7VCW\/NkO4ss82qlvGo+ovNGjzKVYLHJarg0Wr+ey+Fb5HhbsG47nA3KXrH6fdepDea8i0pfTcKf3LS8qDPWLr95a+Pijwqmk3hTnJpkehxXeYoNPPfolLJFZ5u5aUtvqijSQ9T8zPzaxYNYvOdPG5nnd7W6y6P0iO6cvcluKU\/Su+vykWQWR7HWfvM14awovY92Q178s58ntK4wdiw1tiwOqn+k4S6TSmNnEe\/O9a0bEuUdC2i64L0249u66Ue5Qcw+XcFrxbRhRDeXpq\/9xKz75G+M7u7atZ0Vn\/SUeVz\/tT750+81165\/FzF2x1VH3EePV+7MTbwz8pVxpeEF56oSeLLKf00IK03uXEzrkppZeokI8MaPMpXgmclqlzycT6HQTr0x0\/hPCrqpNKHknuVP5SiOZkelbtHSRTpaUB\/NqInKntUWipm4fnzR\/qYAqkn6CnS9Xvco9tYX9YUfUbn300KHhV9QpWbKPpUoWYRV9+GyAyL40R8+suwAwVt\/jlntmZavs1o2ZzW\/HVa8xepjRuTGzYkN3AefXFL1GGT88eFX2P\/flW1\/U2o\/tIgl23CO9fp85XpUf4ylUIDfXjvw70tvt11X3TXbugyr+2sWd1Z\/WlH1cfnT314\/tQHnEdjAp8qKU9T3jtpf1RUBjnkvvZDw3UUdDKX2bhN0Ff7qmX6r3L1QFfCFOyJcunMXqmg0rGIH3Rmr9R2us\/CPoRbrnGOJ+N8LiD9\/TFp6LeMzv6gNOnbYbYddGSS4zhrP9qf\/NcvQxWyKsBY2tTj8RJrjvHwqkO7f68Q46Hlp5rPebycqAQ+bn9O\/Sz0qE7+prPJCZ5Tj8z4OM7agipLSv5JY26lXDJLak2nz5Y3dnm80NrC7WBSToVcpvsOzshKqGuq6zc+2G98sK6pbvxrm4UenQrB76YhMzs4cREEQRBEe+BRBEEQBNEeeBRBEARBtAceRRAEQRDtgUcRBEEQRHt0huRiBEEQBEG0RWda4oUgCIIgiLbAowiCIAiiPfAogiAIgmgPPIogCIIg2gOPIgiCIIj2wKNuTvvO60dzFwyZnhnKe2Qo96GhvN\/PrDw0lPfwkOmZ0fybO\/bM83htIwiCeDzwqJvTc2QpsbxO6l4hVgPp2UU6t5Mu3xmSzu2keyexRpD618iZt\/qSHvR4bSMIgng88Kib0xm+lJAE0uBNKu8jnb6k4xvSto6c2zjt07aenP836fInJ35H6h4nJLkn5iGP1zaCIIjHA4+6OV2hdxMSTEg0sbxEyu4m7ZtJ53fTXqVt60jHFnJ+K6lYSpr+TsghQiJ7jiz1eG0jCIJ4PPCom9MVtoiQ\/YT4E3KEtL9HSm8jrZtItx9pW+t5HWqU6FrStZ20fUXK7iBtbxNyhBA\/QoJ7Yu73eG0jCIJ4PPCom9MVtoiQQEL8yNg2Qg6R7nWk9FbS8hHp0U\/LXmnbWtLjT878i5R5ka5PCTlExraRsR2EhPYehUclWaa3EtKxZvI37dNBjGYP7Kxko8yJCDKjA4+6OV2GewgJJGN+5MIOcmErIZGk\/xtSfitpeIf07CFt68m59eTchumQ9aRtHenZRRpXkvLbSN+XhBwkF7aSCzvImC8hob1Hf+vx2lYXb0vdZLlNrUfdXiQ5jzI35J6tVwaYrQHechNrL7ts9sRKOMyWZarqjdAnyRoj4Un1EU8hhJ\/ZnMpPULUhZNICj7o5Qo\/uIBe2EBJKRnaTkwtJzXOkdy\/p3E46t035fEc6t5OevcT8IjlxNxnyIyTcJlHeo3Hw6NQp0uR71KeD0Zo7JnrcbZMZW2Wq6YuvMZI6Y4ej\/ukD56RK+VQGmEmdvqwMNecAAB4nSURBVNLzpzFiCzzq5nRFLCYkiPIo1yv9npBAUvMwOf0UqX+F1C4jtc9P7Swj9S+R6qdJze\/JWAAhQQ6J2j3al6DSoz4dxGgJMHMfpO09GMbEygCzNUDfQQip01tSHR\/D2Vmmt3cCiKNXRE3klq20b0LNB3lzKukI4Ndgb90k6zQtEfcYuALw3QVBsSXllCuSdOvC5tLbUkek\/T+6ks32UilsSGbrzGPk2FPGgVhjtHWeZCZ63G2TGe4YMTuawqrjpEh\/jqEO6xqj1I6VAWZpPTMnIh4MPOrmdEUskXh0GyG+hBwmJIS0P0AufELIJ4T8c2rnEzK2hpz\/LSEBhMQQ8h25sF3s0Xj1HqUHrDg\/UROX6a2OJt5oXuLTQYg1wJs5bMjHnCpt3OU+2qvtfplTCd+Q2dfPXCe1cnHbJ94Wq5zsIsls3b4hJ30dZiXL7bt0IuNw2F5ie9TbUif9RCKY6HG3TWb4w2dJpT6FSKrObHuVcZIQvv7Fh5WuZ58O7pMOOqNTLPCom9MVsYSQYIFHx\/xGOr\/rq\/zaemqdteh5a8MBa\/0ea\/2uqZ3d1oZga\/EL\/RUfW09vGRvaTsZ8xR5NfEBdnVAqcsiA9pOtWbF\/yra1HcoetfWr6KaH6vkJu54ueFQ8G3udLniUUU6ZIjGNa295ndSGTCXL7TvTo8qLCMPqOYkmetxtkxlzqu0Qm1PlxwwcnXVxf5RfVlSrsv1OwUclxPOBR92c7kiRR7cTEno27L3U\/\/3L3AW35i64PXfBTbkLbp4OuSn3xtuPXz0\/59r5g42bCdnv6JJyHlX7PKMJ8agt3Egm3w9jf04fh0dl1il\/x4fMtuhyyszG7rku01vr9JXOb8edVI\/KKZ+e6HG3TWbsJ6pC1Xlb6oiYOn2l4GD5dND9V9HAgPhw41ajKRR41M3pjloq8WhIa\/jKY\/\/n6rxbvPJuvSPvFq9pk9vuyP7NzbnX3zzY9A0hASKP9ie7yaP2D9daPCpeJ7sVU+olCGdjjRWzOqmyA2vyLalwYFZaJJkRYC9zqtkSwLoY6bySZfddMpFxOEyOPyVXfKW7L1snogoRduWVN0S\/RK2c7\/yJ55E\/+pIPQ5LDJFncfpVBsCrWRA17RG2dlqVQnOzdZFUI4vHAo25Ot2EpISHUKOh2QoLbIt\/PmHtNwcK7TYvvyfrl5elzL06fO8dJ5lycd8vNpqVLTEvuyb\/9Nufzz52TPndO5s9\/WrBoYcGihYX3Ls2+9jeqNiSz9eO\/urrwvqW5N96Wf5vXYPNEeFTcpXPFo4JP98KP8NSH\/SXS6c7uM2L2CCXrpPqjxN50ijscHWvky8kqkpxHlQTjpJLl9108kXE45LauTsyidVK7L3MsxDfp0IuLDyXjIEoWp2qeoRz28Dv7ROILz5yocHap8ajwdjDFzqhMhSBTIPCom9Mdeg8hBqZH8++4PXfB\/IZvv2k1GM6GhSmn1WAofeKJ7HnX5lx\/XfFDv2s1hJ8Nd75I886d+V5e+V63Hf\/1\/5xe+V5rhPMNya2q9rM12df+JnfBrTIeDetPGc\/zdT3x3AB3RdjtUNnZHdfmJrzdVH048OwFBJEEHnVzug\/dS0go26O33Xr86qsGW5qJOk69+UbGpZdkXf6L8qeeVLnI2PBI7k035t1047H\/\/lFrZKTKpZh05eSkz7kod76sR62pvxtHRc0Yj8oOJrspE73+6X84EMTTgUfdnB4Fj3rdlv3r\/+kpNKk02YmXXsz8xc+PX3Vl2ROPq1xkoL4+9+ab8m6+KX3OxS179mhUKCGEkHNHj2b89DKF\/qj12Gz1qHC0duI6o9zo8cR2dmfC4UAQDwcedXN6ou\/T4NHh1tbB5qbBpqbh9nZ+orJHx0ZHhiyWoZaWwcbG0f5+lR4d7e4abGocbGkeOnuGjI3ZJvb1DTY2cmsbGx5W59FQazp+Nw1BEAQedXd6ou\/X4NGSPzySdfkvMi6de+Kll1R6dKCpMffGBTnXzUu\/6CetBw+q9Gjd55vSLvp\/2b\/5tWnh3aN9fdzEM4Hfp\/33j3MXzM+Zd21\/VZVzj17YQYjBegweRRAEgUfdnZ4YLR4teuC36XMuPvaj\/1vx3HMqPTrY0JB9zW+yrr4q9b9+2GoIV+nR2vXrUv\/rh5m\/vDzv1ltGe3u5iS37AlJ+8J\/Hf\/0\/WVdd2X\/qlHOPju0gJHwgfTzjugiCIDMk8Kib03v0txo8Wvr4Y8d\/dXXmL35+8vVX1Xq0qSnf67bcm27MuOzStkNRKj1a\/9WXGZdeknPD9aalSxz90eCg9Evm5t16S+6NC6ynT6vwqC8hYQOZv\/d4bSMIgng88Kib0xuryaOPPXr86qsyf\/6zk6+54tHbbs29cUHGpZe45tFL5uZcf51pyWKBR+fOybvl5twF8+FRBEEQlwKPujm9cZPo0du9cm++KeOyS9sOH\/KERx\/2eG0jCIJ4PPCom9MXP0keHaivz7r8FxmXXWrU6c6GhEyuR3cQEjZwHB5FEASBR92dvoQHJqk\/2tJSdP99pnsWZV9\/fXtsrCc8+geP17ZsZudjd5bprZPx0AZpPPH109l5iJEpGXjUzelLnCSPUozx\/4JHbZmdjaxaj6r9ARzVkfOoyl+b0RLm45eFE22Py1B+rLFcGD\/pI\/zxdvGaJfvoQPi4ecmjgGUPpbic6icq1ptg6\/ROOX6\/lrGb8r9xhMCj7k6\/8cFJ96iDgYYGh0f37pXOIPCo\/ekNZ0KCHR6truYmOvXoYPYjHq9t2cxOj6rNDPAo84fDHBM9\/ktqk5YOwePynZ3ea4ykztjhqH\/mz9Q7qefKADMelC8KPOrm9CfLejSPe76uxSLVW9lf\/pz1y8szLplbtXw5P\/HUW29mXDr3+NUueHRsdNT2fN0f\/6g1IkI6Q5O\/X\/pP\/l\/2tdcULl3CT2yPizv23z\/Ou\/mmnOuvu2CXa3deXvrFFyl8f1S1R306iNFi\/1ELe3eBMbEywGwN0HcQQur0llRCFD+z07+4IvMzHfTvn4gmyvw6CjWno1tDTeQ3ZE4lHQH8dPe4mb1O1tZFPQauqHyFyHS\/HJUsPCOoX5sRbl3YXHpb6hSeUOjTQYxme6kUNiSzdeYZ4thT9u+5Mn86LdXHNJskyoU7RsyOpuRXZs2WZeJfEbdVOOvnEJg\/JC776+KzOPCom9OfIt8fvfOOvBtvNK\/+V\/NO\/4bN\/27YvLlh8+bGLVuadmwveuC3uTcuyLnh+pJHH23e6d+45dvmnf6lf\/pj7oIbjl95BdOjI52d9V99Wf\/55w3fbG7YvLlh87+b\/HzrNm3M97ot\/3avnOuuPfHKK\/SGGjZvbt7pX\/n3v+dcNy\/v1ltMixY2\/Pvrpm3bmnf6n3rzjZx51+bf7pV36y1169c3+fk27\/Q\/vWplzvXzZH43bQchYYM5Ksd1fToIPWRE\/W4aN9H+E1H2H3f06SDEGuA9rt8fdT6R4VGZ3x9lfGCnf9JS9vfOXAxrncytC3\/wUtD2ibt6MmVj\/4o4a+v0T2MqfFxgHmL2hmR+RVx8MtheYnvU21In7TnZJnrcah4Jd\/gs9E8Pyf7gHeMkIYT5W6eizqj9h9vQGZUEHnVz+lMeIiSM4dFLri1YdLdpyeLMX\/4i7aKfZFwyl0v63Dnpcy7Kv93LtGRx4b1L8265Ke2in2RcMif94p\/k3XJT4X33Zl3xS6ZHrbW1aT\/+Uep\/\/TD9krkZl8zJuHRu+sUXZf7sp6Z7FpoWLSy8796ca6+hN5Rxydz0i36Sc\/11hfctNS2+p+DuuzIuvSR9zsVpF\/0k+ze\/LrzvXtOihabFizJ\/\/rP0iy9Kv+gnx6++qvD+pbk33ZbvdTu7P+qCRxV\/x9v+xnbtd7wFfTKjeYlQKvyGmBNlPGrrLdENivgnJ539VqhiOUVtnGgiY53srbvgUcYesWaT2yP+J+GcfaaR+\/VT9R5VXkRSpdKmfI2R1Ok97jNPhTvESj\/h5+jBi\/uj\/LKiWpXtd4p+rhyBR90ea+rvJB4NPRv8borulzk33JUzb0HOdQtyrrtRnHkLcuYtyJk3P2ee\/dV58\/PvuKNwyT1Zl\/+i7M9\/ZvRHOzq45xmZli7Ou\/nWnHnz6VVl06sSb2i+bXPUxGzpxOsW5Fy3IPOK27J\/tWCg8d+E7BN7NPdP6upkIjzK6iqN26O2cJLje1esT9\/u6oM6Waf81kVet0dGQvQeycwm+xvmdfpK57fjTqpH5ZTPTfS40jwSZ1Un\/pF5W7dScLCEv9An83vp4ncfssTLBI+6PdZ0qUe\/bzvycdbVdxbe+avCpXcW3re48N5FTnLfosL7FpkW3l2wcGHWlVeUPvH4haGhC1braG\/vaG\/vaE\/PhaEha01N\/m235N64oOCuuwqXLCy8z9k6Xc7iwnvvzp9\/uWnJbwct2wnZLfZonps8av9464JHqTe5OdXeH3VM5FoN+YmOhoCeKFq\/ZFiYyiR5lLl1m9uYK5FvSYUfF6QdF7k9MqeaLQGsi5HODzF7Q6yJjJPB5PhTcsVXuvvCiR632iSHup1YseqkJwktS6E4zanMkV77mjG0Kww86uZYjz1ESBi5wHt0KyH7x8aCR2vuv1Dz1gVrzoWBpAvWBCcZTBwbKTrx0tOZP\/9VwcK7TQvvNt271LRksWnxPbYsXWJasrjg7rsK7r4r49IrWyM3j42UXLDGO1+z+gwkXRjIHTWvvFBzLxkLJOR7cmGr4Ppo3qPq6kTOo+JOlUvjunyfzBqg59fP38bSscZH5URqccFndva9S+6+JiraI3aPkLV1Ckbh7eWX2SPBap2NVMs2x04PMXtDrImMk0Fu6+rEPItUKvu9FzUeFd4OptgZpY4RJCoJPOrmDBx7kBADJdEwMuJPahaSnjWE1BKSR0gWIcedJZsQ88nXnsv86VWFS+4puOuOnOuuzbl+Xs7119ly3bU5N1xfsOjugkULM+Ze0R6\/g5A6dWtWnyxCcgipJ31fkqo7yeA2QsJtKuU8WqDSo8zgh6O1RtjtULok5q7NTXi7qfpkwNeZkCkZeNTNGcji7jPiJHqI9GwglbeStu8IaSDESEg8IYkqYiSkouiBB+N1\/yvjkqvS51yRPvdKRuZckT7nijidzrJ\/AyEnCElQt3L14VZYT87tJhW3k+7VhBwiY9+Rse2EhA8VqBzXZQYe1RqBR9nDzu7LRK+f3wpOBmQaBx51cwayHiYkhBBfQo6Q9ndI+R2k6wghtYTEEZJISJK6GAk53hr5Zd2md5r9Pm7y9VFI7Ya3+yoCCclWvXKXkkhILCHVpDeBVNxD2l4j5DAZ8yMkFB71UASjtRPXGeVGjye2s2sLTgZkegcedXMGsh4iJIqQKNL0FDn5ezKYQ0gFIUddF1gcIY\nWEnCKknJAKxVQRkklI7MR4lMtRQkrJcAE59ThpeIIQAyFHhgr+6PHaRhAE8XjgUTdnMP9JQuJI9f2k+nlCqggp0CRRvi+oMhNnUD6xhOQQUk3Mr5HTi8lY7FDhsx6vbQRBEI8HHnVzRkofIa3vkI7dhIwSYiaknJCTVE5I\/jxB\/WMSUqliBmm4l8oIqSJkhHQcIGfeGq0cz31GCIIgMyTwqJvTF3n1iOn+oQqfIdOzQwXPDBU8O1Tw7FDBc0OFzw0VPjdk4v7x96HCvw8V8VkmzPNDxS8wUvLCUMkLw8UvDJe8KMxL7JS+TOUVccpeGS571ZHyV4fLX7OlgsvrVN6wpfL14ROvD9d8OVr+uPXIlR6vbQRBEI8HHkUQBEEQ7YFHEQRBEER74FEEQRAE0R54FEEQBEG0Bx5FEARBEO3REQAAAABoBR4FAAAAtAOPAgAAANqBRwEAAADtwKMAAACAduBRAAAAQDvwKAAAAKAdeBQAAADQDjwKAAAAaAceBQAAALQDjwIAAADagUcBAAAA7cCjAAAAgHbgUQAAAEA78CgAAACgHXgUAAAA0A48CgAAAGgHHgUAAAC0A48CAAAA2oFHAQAAAO3AowAAAIB24FEAAABAO\/AoAAAAoB14FAAAANAOPAoAAABoBx6dFMx6by8vLy8vL2+92cMl8DE6megqRh+Xd80t23W+diU8cCDsFTUhOw0A8Bjw6GRAteyeEik8ymJSlQaPAjAzgUcnAXsD6kmRwqNsJvFwwKMAzEzg0YnH1n56e0+kPDQxsz2qUCBatZNmUngUgJkJPDrhOJrPKdeQzlqP0mWYNJFOucMPAHAL8OhEQ7eeU60lnc0epYbbJ+lwTLWjDwBwD\/DoxCIyhpxznItFVg6Ci6\/yRtNwfVTlmkX7JFyKvT\/K25Vc33RRPO7wqMp9ly0zq8iyHlXsGo+zJNy8ylXiUoUzrj7jgwGY5cCjE4pEGLKdNyedFdbLyvfTiFbkkkddWjO1SzLLyYtD\/Ir8hjX0drV51KV9V1xAPC\/7EMtL1I0l0ctViWsVznC6UnkAmCXAoxMJwxfaRMp4UalNY6zJBY+6uGZ+j7wVmn0Zd7hgMPUqdfX6KF0IF\/fdyQLCEjAOokJP1L0lYW7FtQpn3ptFbxQmBbMVeHQCYepCdjRRQaTSl+QbYKplc6pM1kSX1yxsvwULUS8JpitvV25mtSZ17lGBQNy07\/QSjsmsme3TlIZz3VUShaPjYoUr1Cou\/IJZDjw6cci0PLKDmrLNkYJGWU0X8+FJaj3q+pplGnbxIkxfsT4YKF1aVNVUu\/T9UdWXi1n7Ll8s1qqEh5FfVvXVbG0lceZFtRWu4XYyAGYJ8OiEIdvwyD4kUGYJlz\/us9bjnucwsNbszHGM16XbdVYStdc8BetyiktOkO67K4UiguOoKFENJXEiOcYZ53KFy\/XhAQDw6ETh+uUqmYbZ\/hgHNS2uilE8jR6VX7PTjoq8gKS9Haf3K6towdV4VJNBxYu6+AGHdUa4KCSZkjgVurx5Xahw9hkNpQIAj04QajSqSqSKGlXeyng8qn7NqltkNR51ucZUbc9FVO67q9vR4CGVJdFwCDRVuNInFPgUzF7g0YlBdTMl840TcRMpbauZW5D\/lup479eVX7M7POrWodjxeNSVfR+HRwXfEWJXnCslcTokoDxK62qFy53cuHQKZinw6EQgewVUOoeySJ0\/fUHpJhFNHnV5zU49quY2KXfe8qndoy7uu8ZxXfsKlEzqWkkmYlxXHSKlwqRgVgKPTgDONUqcf\/\/FW2+WbR9VPp5Gg0c1rFntfUase0VV32fkClo96vK+K3YDpaJS+vYS+\/u17imJpvuMXMO9awNgmgGPuh+VjYrsPZu8SI1y99YoNZsyX7dU6VENa3Z0SRQfgeOkME7uYHWlodbqUdf3XeEjBGNlys+kYn0Z1C0lcbaEugpXqXZ4FMxG4FG3o7pNcSZSHx8fmfVQLaPSE4HG0R91Yc3j+aa\/mucwODO1hPH2R7Xtu\/OPFuyhVJZJ3VcSLUeHXX6FrwmzHzsBwKwBHnU3LjwywOkXSWXXo\/I2EeVHHzh5HoLaNfN68JG\/t0rVoyicb1pdM635+qjr++7khjJhCeQuSTJM6vaSMAvkYoU73QCujoJZCjzqZlx67IvTu42krzDmkLRmRoaf1d+v6+qaKT2wF5VWhWyX3S1frBjH\/bqu7rviMqqfV8Xq0Lm3JBqeU+9kHETN7ADMEuBR9+Li09Oci1SpdZI0awq3v7r2\/VFX1iyaIui1OLvvhbl30tbatSZ6nN8fdWXf5RZSeeeR9DXZoe7xlUT5KRauVThDplAomN3AowDMeNz5tSIAgAh4FIBpj4avKwEA3AU8CsC0R+YrSYTI38gLAHAX8CgAMwDnd+vCogBMEPAoADMC5W+x4MooABMGPArAzIEhU\/RDAZhg4FEAAABAO\/AoAAAAoB14FAAAANAOPAoAAABoBx4FAAAAtAOPAgAAANqBRwEAAADtwKMAAACAduBRAAAAQDvwKAAAAKAdeNQ5FgAAAEAGeNQ5nj5GAAAApi7wKAAAAKAdeBQAAADQDjwKAAAAaAceBQAAALQDjwIAAADagUcBAAAA7cCjAAAAgHbgUQAAAEA78CgAAACgHXgUAAAA0A48CgAAAGgHHgUAAAC0A48CAAAA2oFHAQAAAO3AowAAAIB24FEAAABAO\/AoAAAAoB14FAAAANAOPAoAAABoBx4FAAAAtAOPAgAAANqBRwEAAADtwKPTHbNlmZdpmd7q6XIAAMDsBB6d7sCjAADgSeBRz2K2LPOqDDCPcw3wKAAAeAp41NOk+piWqFNpqo9piZdpiZdpibeljp\/Ke9Rotr0qXZvjJdMSnw4iWdaxZsey1gBv4Ybs868xsuTNv+QqLTFrX9eblF7lWBvTMo55AABgooBHpwCcxhQlZA3wNjlcSKuUU5qPeRn9qpc5VbhyhWXFr9qXrdNXipSc6mN\/1V0etSlQxqMtMWv510x6tibVzAMAABMIPDo1cKJSTnh2\/wm6sHYX8lYTrMr2qkOrdfpKyav8dm22pl+lZNmxhu\/OuuBRk17gSf5Pm0LX6vVy\/dGWmLW0Fk16hiTVzAMAABMJPDplUFCptGvogHMhPVprNPPrYS1oDfAW6FBuWfHQLv2SK\/1RgUgdf7TExNj+L+dRkRSZM6qZBwAAJhJ4dMpgG4ClrWanTl9J9ykFKCqNMahLD+061aHRzGvYMairZkEaSqSizikhCuoTdTUlf6udBwAAJhR4dGqgPK7rMY+SjjW2GahBXVUL0vD2ZGgUHgUATHPg0SmA0\/uMnI7ryilNScDOlnWUzdtSR3VMCSFirRLRgLAYmz9ZGsW4LgBgmgOPehoVN+uK7zPipGXzn7ILRQsS4TVRNd1Ko3mJV+Uan0rhd2A61niJh3mV9sKkf\/11fQxTcvLqE70ie5+Rs3kAAGAigUc9i+qvi0hGaNVeqmQN7Qru9XU2PMspU\/yoB9FquS\/eyO+I\/BdcFLqQ+N4LAGAaAI9OHyh1UUO1KlzIfddF27JEdlTZ8ZXWZXqr0w8EtO8kL9DThV1K9jMW1MwDAACTAzwKnMB6sBEAAAAb8ChQhr4WCwAAQAw8CuRwPJVX\/o5fAACY7cCjQA7bXbjj+zkaAACY4cCjAAAAgHbgUQAAAEA78CgAAACgHXgUAAAA0A48CgAAAGgHHgUAAAC0A48CAAAA2oFHAQAAAO3AowAAAIB24NHphlnv7eUj\/l0V5kT1i08NjD5eXl5eXt76afX8JFaF8tOUa3sKHwsAgHrg0ekA3eBOncZXW0lklzL6TDeFEkKceNT1RQEA0w54dDowGzw6dfbLNeBRAGY78OjUxzbeaRvx5Bpf+zRbM0y3yPzszO6d+jkFM3hJGnxhqQRTqFnFm5AuxZeKWtjxp302s97b28fHW1IOs97by0dvn52eW68XFUc4q4\/RsRWGy1hrYH+aMeu9vXx8fAQFYI7rSmubeSgBANMNeHQ6IG7B7Y2u0cdL3F5To6PMgVL1czrWzv1TMoegOyUUi21e1iac90dF2+V3UMZ3XtTWqCLQdcR\/AKFnpcrDribxGuQ9Ki4Bw6NyVSE5lACA6QY8Oh0Qt+DCDg2RkZCTVbnUcrNMKzvazM\/M2oRTjzJXxbadTG2wDS9XXOc3btn+UOiPUsUVzKlc2+zCAwCmGfDodMCpAiSNudKApco5iWC41Ul\/VDAnc7CXNQTNXJtA2SwJOq8Z4dy2FWr3qG0NKrYlNq5ybU\/Ny94AABeBR6cDrnnUDrPD6dqctA7V90dZMIagZdYm2x\/V6NFJ7o8KlK1c2\/AoADMCeHQ6IDcAKG2v6TmVPep0TtFlSrZH+YlUsZQ3oTRCq3x91DWPSq6auuxRyRpEF2Al2+Knqjwu8CgAMwJ4dFpgGzaV7VbRE912v65jrNZbb5SVjZd0ddTaGJsQLcUqGL1l5cuHCn1E0T20Gvqj4jU4yuWt1\/sobEvlcYFHAZgRwKNg5jF+KUFrAAC1wKNg5gGPAgAmD3gUzDzgUQDA5AGPAgAAANqBRwEAAADtwKMAAACAduBRAAAAQDvwKAAAAKAdeBQAAADQDjwKAAAAaAceBQAAALQDjwIAAADagUcBAAAA7cCjAAAAgHbgUQAAAEA78CgAAACgHXgUAAAA0A48CgAAAGgHHgUAAAC0A48CAAAA2oFHAQAAAO3AowAAAIB24FEAAABAO\/AoAAAAoB14FAAAANAOPAoAAABoBx4FAAAAtAOPAgAAANqBRwEAAADtwKMAAACAduBRAAAAQDvwKAAAAKAdeBQAAADQDjwKAAAAaAceBQAAALQDjwIAAADagUcBAAAA7cCjAAAAgHbgUQAAAEA78CgAAACgHXgUAAAA0A48CgAAAGgHHgUAAAC08\/8B5tVlbQ5p+BgAAAAASUVORK5CYII=\" alt=\"\" \/><\/p>\n<h2><strong>4.\u5b89\u88c5\u8fc7\u7a0b\u7684\u4e00\u4e9b\u62a5\u9519\u548c\u89e3\u51b3\u529e\u6cd5<\/strong><\/h2>\n<h4><strong>1&gt;\u6ce8\u518c\u8d26\u53f7\u5931\u8d25Incorrect username or password<\/strong><\/h4>\n<div class=\"cnblogs_code\">\n<pre>npm set registry http:\/\/ServerS:4873\n\nnpm adduser --registry http:\/\/Servers:4873<\/pre>\n<\/div>\n<p>\u62a5\u9519\uff1a<strong>Incorrect username or password<\/strong><\/p>\n<p>\u89e3\u51b3\u529e\u6cd5\uff1a\u628a.npmrc\u4e2d\u7684\u7f51\u7edc\u4ee3\u7406proxy\/ https-proxy\u53bb\u6389\u5373\u53ef\u3002<\/p>\n<h4><strong>2&gt;\u5728Client\u7aef\u4f7f\u7528\u65b0\u642d\u5efa\u7684npm\u5e93\u5b89\u88c5\u8f6f\u4ef6\u7684\u65f6\u5019\uff0c\u62a5404\u9519\u8bef<\/strong><\/h4>\n<p>\u68c0\u67e5\u540e\u53d1\u73b0\uff0cServer\u7aef\u7684npm\u7684.npmrc\u4e2d\u548csinopia\u7684config.yaml\u4e2d\u4e0a\u7f51\u4ee3\u7406\u672a\u8bbe\u7f6e\uff0c\u52a0\u4e0a\u540e\u5373\u53ef\u3002<\/p>\n<p>&nbsp;<\/p>\n<h2><strong>5.\u9644\u5f55(npm\u3001pm2\u7b49\u7684\u4f7f\u7528\u65b9\u6cd5)<\/strong><\/h2>\n<h3><strong>config.xml\u6587\u4ef6\u8be6\u89e3\uff1a<\/strong><\/h3>\n<p>config.yaml\u662fsinopia\u7684\u914d\u7f6e\u6587\u4ef6<\/p>\n<h4><strong>1&gt;\u5176\u5e38\u7528\u7684\u914d\u7f6e<\/strong><\/h4>\n<p><strong>storage<\/strong>\uff1a \u4ed3\u5e93\u4fdd\u5b58\u7684\u5730\u5740\uff0cpublish\u65f6\u4ed3\u5e93\u4fdd\u5b58\u7684\u5730\u5740\u3002<\/p>\n<p><strong>auth<\/strong>\uff1a htpasswd file\uff1a\u8d26\u53f7\u5bc6\u7801\u7684\u6587\u4ef6\u5730\u5740\uff0c\u521d\u59cb\u5316\u65f6\u4e0d\u5b58\u5728\uff0c\u53ef\u6307\u5b9a\u9700\u8981\u624b\u5de5\u521b\u5efa\u3002<\/p>\n<p>max_users\uff1a\u9ed8\u8ba41000\uff0c\u4e3a\u5141\u8bb8\u7528\u6237\u6ce8\u518c\u7684\u6570\u91cf\u3002<\/p>\n<p>\u4e3a-1\u65f6\uff0c\u4e0d\u5141\u8bb8\u7528\u6237\u901a\u8fc7npm adduser\u6ce8\u518c\u3002<\/p>\n<p>\u4f46\u662f\uff0c\u5f53\u4e3a-1\u65f6\uff0c\u53ef\u4ee5\u901a\u8fc7\u76f4\u63a5\u7f16\u5199htpasswd file\u5185\u5bb9\u7684\u65b9\u5f0f\u6dfb\u52a0\u7528\u6237\u3002<\/p>\n<p>\u8bed\u6cd5\uff1a\u7528\u6237\u540d:{SHA}\u54c8\u5e0c\u52a0\u5bc6\u7684\u5b57\u7b26=:autocreated \u65f6\u95f4<\/p>\n<p>\u52a0\u5bc6\u7b97\u6cd5\uff1aSHA1\u54c8\u7a00\u4e4b\u540e\u518d\u8f6c\u6362\u6210 Base64 \u8f93\u51fa\u5c31\u597d<\/p>\n<p>&nbsp;<\/p>\n<p><strong>uplinks<\/strong>: \u914d\u7f6e\u4e0a\u6e38\u7684npm\u670d\u52a1\u5668\uff0c\u4e3b\u8981\u7528\u4e8e\u8bf7\u6c42\u7684\u4ed3\u5e93\u4e0d\u5b58\u5728\u65f6\u5230\u4e0a\u6e38\u670d\u52a1\u5668\u53bb\u62c9\u53d6\u3002<\/p>\n<p><strong>packages<\/strong>: \u914d\u7f6e\u6a21\u5757\u3002access\u8bbf\u95ee\u4e0b\u8f7d\u6743\u9650,publish\u5305\u7684\u53d1\u5e03\u6743\u9650\u3002<\/p>\n<p>\u683c\u5f0f\u5982\u4e0b\uff1a<\/p>\n<p><strong>scope<\/strong>:<\/p>\n<p><strong>\u6743\u9650<\/strong>\uff1a<strong>\u64cd\u4f5c<\/strong><\/p>\n<p><strong>scope<\/strong>:\u4e24\u79cd\u6a21\u5f0f<\/p>\n<p>\u4e00\u79cd\u662f @*\/* \u8868\u793a\u67d0\u4e0b\u5c5e\u7684\u67d0\u9879\u76ee<\/p>\n<p>\u53e6\u4e00\u79cd\u662f * \u5339\u914d\u9879\u76ee\u540d\u79f0(\u540d\u79f0\u5728package.json\u4e2d\u6709\u5b9a\u4e49)<\/p>\n<p><strong>\u00a0<\/strong><strong>\u6743\u9650\uff1a<\/strong><\/p>\n<p>l\u00a0 access: \u8868\u793a\u54ea\u4e00\u7c7b\u7528\u6237\u53ef\u4ee5\u5bf9\u5339\u914d\u7684\u9879\u76ee\u8fdb\u884c\u5b89\u88c5(install)<\/p>\n<p>l\u00a0 publish: \u8868\u793a\u54ea\u4e00\u7c7b\u7528\u6237\u53ef\u4ee5\u5bf9\u5339\u914d\u7684\u9879\u76ee\u8fdb\u884c\u53d1\u5e03(publish)<\/p>\n<p>l\u00a0 proxy: \u5982\u5176\u540d\uff0c\u8fd9\u91cc\u7684\u503c\u662f\u5bf9\u5e94\u4e8e uplinks \u7684\u540d\u79f0\uff0c\u5982\u679c\u672c\u5730\u4e0d\u5b58\u5728\uff0c\u5141\u8bb8\u53bb\u5bf9\u5e94\u7684uplinks\u53bb\u53d6\u3002<\/p>\n<p><strong>\u00a0\u00a0<\/strong><strong>\u64cd\u4f5c\uff1a<\/strong><\/p>\n<p>l\u00a0 $all \u8868\u793a\u6240\u6709\u4eba(\u5df2\u6ce8\u518c\u3001\u672a\u6ce8\u518c)\u90fd\u53ef\u4ee5\u6267\u884c\u5bf9\u5e94\u7684\u64cd\u4f5c<\/p>\n<p>l\u00a0 $authenticated \u8868\u793a\u53ea\u6709\u901a\u8fc7\u9a8c\u8bc1\u7684\u4eba(\u5df2\u6ce8\u518c)\u53ef\u4ee5\u6267\u884c\u5bf9\u5e94\u64cd\u4f5c\uff0c\u6ce8\u610f\uff0c\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u53bb\u6ce8\u518c\u8d26\u6237\u3002<\/p>\n<p>l\u00a0 $anonymous \u8868\u793a\u53ea\u6709\u533f\u540d\u8005\u53ef\u4ee5\u8fdb\u884c\u5bf9\u5e94\u64cd\u4f5c\uff08\u901a\u5e38\u65e0\u7528\uff09<\/p>\n<p>l\u00a0 \u6216\u8005\u4e5f\u53ef\u4ee5\u6307\u5b9a\u5bf9\u5e94\u4e8e\u4e4b\u524d\u6211\u4eec\u914d\u7f6e\u7684\u7528\u6237\u8868 htpasswd \u4e2d\u7684\u4e00\u4e2a\u6216\u591a\u4e2a\u7528\u6237\uff0c\u8fd9\u6837\u5c31\u660e\u786e\u5730\u6307\u5b9a\u54ea\u4e9b\u7528\u6237\u53ef\u4ee5\u6267\u884c\u5339\u914d\u7684\u64cd\u4f5c<\/p>\n<p>&nbsp;<\/p>\n<p><strong>listen<\/strong>\uff1a\u914d\u7f6e\u76d1\u542c\u7aef\u53e3\u548c\u4e3b\u673a\u540d\u3002<\/p>\n<p>localhost:4873 #\u9ed8\u8ba4<\/p>\n<p>0.0.0.0:4873 #\u5728\u6240\u6709\u7f51\u5361\u76d1\u542c<\/p>\n<p><strong>\u4ee3\u7406\uff1a<\/strong><\/p>\n<p>#http_proxy:\u00a0<a href=\"http:\/\/something.local\/\">http:\/\/something.local\/<\/a>\u00a0 #http\u4ee3\u7406<\/p>\n<p>#https_proxy:\u00a0<a href=\"https:\/\/something.local\/\">https:\/\/something.local\/<\/a>\u00a0 #https\u4ee3\u7406<\/p>\n<p>#no_proxy: localhost,127.0.0.1\u00a0 #\u4e0d\u9002\u7528\u4ee3\u7406\u7684iP<\/p>\n<p>\u4fee\u6539\u4e86\u914d\u7f6e\u6587\u4ef6\u540e\uff0c\u8fd0\u884c\u547d\u4ee4<\/p>\n<div class=\"cnblogs_code\">\n<pre>$ sinopia -c config.yml<\/pre>\n<\/div>\n<h4><strong>2&gt;\u9644\u5f55github\u4e2d\u6bd4\u8f83\u5168\u7684\u914d\u7f6e\u548c\u8bf4\u660e<\/strong><\/h4>\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">https:\/\/raw.githubusercontent.com\/rlidwka\/sinopia\/master\/conf\/full.yaml<\/div>\n<\/div>\n<div class=\"cnblogs_code\">\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<pre>#\u4ed3\u5e93\n# path to a directory with all packages\nstorage: .\/storage\n\n# a list of users\n#\n# This could be deprecated soon, use auth plugins instead (see htpasswd below).\nusers:\n  admin:\n    # crypto.createHash('sha1').update(pass).digest('hex')\n    password: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3\n\n#\u662f\u5426\u652f\u6301web\u63a5\u53e3\nweb:\n  # web interface is disabled by default in 0.x, will be enabled soon in 1.x\n  # when all its issues will be fixed\n  #\n  # set this to `true` if you want to experiment with web ui now;\n  # this has a lot of issues, e.g. no auth yet, so use at your own risk\n  #enable: true\n\n  title: Sinopia\n  # logo: logo.png\n  # template: custom.hbs\n\nauth:\n  htpasswd:\n    file: .\/htpasswd\n    # Maximum amount of users allowed to register, defaults to \"+inf\".\n    # You can set this to -1 to disable registration.\n    #max_users: 1000\n\n# a list of other known repositories we can talk to\n#\u4e0a\u6e38npm\u670d\u52a1\u5668\u914d\u7f6e\nuplinks:\n  npmjs:\n    url: https:\/\/registry.npmjs.org\/\n\n#\u8bbe\u7f6e\u8bf7\u6c42\u65e0\u5e94\u7b54\u8d85\u65f6\u65f6\u95f4\n    # amount of time to wait for repository to respond\n    # before giving up and use the local cached copy\n    #timeout: 30s\n\n#\u8bbe\u7f6e\u6570\u636e\u8ba4\u4e3a\u6700\u65b0\u7684\u65f6\u95f4\u4e3a2\u5206\u949f\uff0c2\u5206\u949f\u540c\u4e00\u4e2a\u6570\u636e\u7684\u8bf7\u6c42\u4e0d\u4f1a\u5411\u4e0a\u6e38\u670d\u52a1\u5668\u8bf7\u6c42\n    # maximum time in which data is considered up to date\n    #\n    # default is 2 minutes, so server won't request the same data from\n    # uplink if a similar request was made less than 2 minutes ago\n    #maxage: 2m\n\n#\u8bbe\u7f6e\u8bbf\u95ee\u5931\u8d25\u8fbe\u5230\u67d0\u6b21\u6570\uff0c\u5c31\u505c\u6b62\u4e00\u6bb5\u65f6\u95f4\u4e0d\u8bbf\u95ee\u4e0a\u6e38\u670d\u52a1\u5668\uff0c\u9ed8\u8ba4\u662f2\u6b21\u4e0d\u5e94\u7b54\uff0c5\u5206\u949f\u4e0d\u53bb\u8bf7\u6c42\n    # if two subsequent requests fail, no further requests will be sent to\n    # this uplink for five minutes\n    #max_fails: 2\n    #fail_timeout: 5m\n\n    # timeouts are defined in the same way as nginx, see:\n    # http:\/\/wiki.nginx.org\/ConfigNotation\n\n#\u5305\u6743\u9650\u914d\u7f6e\npackages:\n  # uncomment this for packages with \"local-\" prefix to be available\n  # for admin only, it's a recommended way of handling private packages\n  #'local-*':\n  #  access: admin\n  #  publish: admin\n  #  # you can override storage directory for a group of packages this way:\n  #  storage: 'local_storage'\n\n  '*':\n    # allow all users to read packages (including non-authenticated users)\n    #\n    # you can specify usernames\/groupnames (depending on your auth plugin)\n    # and three keywords: \"$all\", \"$anonymous\", \"$authenticated\"\n    access: $all\n\n    # allow 'admin' to publish packages\n    publish: admin\n\n#\u5982\u679c\u5305\u672c\u5730\u4e0d\u5b58\u5728\uff0c\u5219\u53bbnpmjs\u53bb\u8bf7\u6c42\n    # if package is not available locally, proxy requests to 'npmjs' registry\n    proxy: npmjs\n\n#####################################################################\n# Advanced settings\n#####################################################################\n\n# if you use nginx with custom path, use this to override links\n#url_prefix: https:\/\/dev.company.local\/sinopia\/\n\n# You can specify listen address (or simply a port).\n# If you add multiple values, sinopia will listen on all of them.\n#\n# Examples:\n#\n#listen:\n# - localhost:4873            # default value\n# - http:\/\/localhost:4873     # same thing\n# - 0.0.0.0:4873              # listen on all addresses (INADDR_ANY)\n# - https:\/\/example.org:4873  # if you want to use https\n# - [::1]:4873                # ipv6\n# - unix:\/tmp\/sinopia.sock    # unix socket\n\n#https\u8bc1\u4e66\u914d\u7f6e(listen\u9700\u8981\u8bbe\u7f6e\u6210https)\n# Configure HTTPS, it is required if you use \"https\" protocol above.\n#https:\n#  key: path\/to\/server.key\n#  cert: path\/to\/server.crt\n\n# type: file | stdout | stderr\n# level: trace | debug | info | http (default) | warn | error | fatal\n#\n# parameters for file: name is filename\n#  {type: 'file', path: 'sinopia.log', level: 'debug'},\n#\n# parameters for stdout and stderr: format: json | pretty\n#  {type: 'stdout', format: 'pretty', level: 'debug'},\nlogs:\n  - {type: stdout, format: pretty, level: http}\n  #- {type: file, path: sinopia.log, level: info}\n\n#\u4ee3\u7406\u8bbe\u7f6e\n# you can specify proxy used with all requests in wget-like manner here\n# (or set up ENV variables with the same name)\n#http_proxy: http:\/\/something.local\/\n#https_proxy: https:\/\/something.local\/\n#no_proxy: localhost,127.0.0.1\n\n#\u8bbe\u7f6ejson\u6587\u6863\u5927\u5c0f\u4e0a\u9650\n# maximum size of uploaded json document\n# increase it if you have \"request entity too large\" errors\n#max_body_size: 1mb\n\n# Workaround for countless npm bugs. Must have for npm &lt;1.14.x, but expect\n# it to be turned off in future versions. If `true`, latest tag is ignored,\n# and the highest semver is placed instead.\n#ignore_latest_tag: false\n<\/pre>\n<div class=\"cnblogs_code_toolbar\"><span class=\"cnblogs_code_copy\"><a title=\"\u590d\u5236\u4ee3\u7801\"><img decoding=\"async\" src=\"http:\/\/common.cnblogs.com\/images\/copycode.gif\" alt=\"\u590d\u5236\u4ee3\u7801\" \/><\/a><\/span><\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3><strong>npm\u5e38\u89c1\u4f7f\u7528\u547d\u4ee4<\/strong><\/h3>\n<h4><strong>1&gt;\u5e38\u7528\u547d\u4ee4<\/strong><\/h4>\n<p>npm install XX :\u672c\u5730\u5b89\u88c5\uff0c\u5b89\u88c5\u5230\u5f53\u524d\u7684\u76ee\u5f55\u4e2d<\/p>\n<p>npm install \u2013g XX :\u6a21\u5757\u5c06\u88ab\u5b89\u88c5\u5230\u3010\u5168\u5c40\u76ee\u5f55\u3011<\/p>\n<p>\u67e5\u770b\u5168\u5c40\u76ee\u5f55npm config get prefix<\/p>\n<p>\u8bbe\u7f6e\u5168\u5c40\u76ee\u5f55npm config set prefix XXX<\/p>\n<p>\u67e5\u770b\u7f13\u5b58\u76ee\u5f55npm config get cache<\/p>\n<p>\u8bbe\u7f6e\u7f13\u5b58\u76ee\u5f55npm cofnig set cache XXX<\/p>\n<p>\u4e00\u822c\u91c7\u7528\u5168\u5c40\u5b89\u88c5\uff0c\u65b9\u4fbf\u7ba1\u7406\u3001\u7ed3\u6784\u6e05\u6670\u8fd8\u53ef\u4ee5\u91cd\u590d\u5229\u7528<\/p>\n<p>&nbsp;<\/p>\n<p>\u5176\u4ed6\u547d\u4ee4\u5982\u4e0b\uff1a<\/p>\n<p>npm install &lt;name&gt;\u5b89\u88c5nodejs\u7684\u4f9d\u8d56\u5305<\/p>\n<p>\u4f8b\u5982npm install express \u5c31\u4f1a\u9ed8\u8ba4\u5b89\u88c5express\u7684\u6700\u65b0\u7248\u672c\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5728\u540e\u9762\u52a0\u7248\u672c\u53f7\u7684\u65b9\u5f0f\u5b89\u88c5\u6307\u5b9a\u7248\u672c\uff0c\u5982npm install express@3.0.6<\/p>\n<p>npm install &lt;name&gt; -g\u00a0 \u5c06\u5305\u5b89\u88c5\u5230\u5168\u5c40\u73af\u5883\u4e2d<\/p>\n<p>\u4f46\u662f\u4ee3\u7801\u4e2d\uff0c\u76f4\u63a5\u901a\u8fc7require()\u7684\u65b9\u5f0f\u662f\u6ca1\u6709\u529e\u6cd5\u8c03\u7528\u5168\u5c40\u5b89\u88c5\u7684\u5305\u7684\u3002\u5168\u5c40\u7684\u5b89\u88c5\u662f\u4f9b\u547d\u4ee4\u884c\u4f7f\u7528\u7684\uff0c\u5c31\u597d\u50cf\u5168\u5c40\u5b89\u88c5\u4e86vmarket\u540e\uff0c\u5c31\u53ef\u4ee5\u5728\u547d\u4ee4\u884c\u4e2d\u76f4\u63a5\u8fd0\u884cvm\u547d\u4ee4<\/p>\n<p>npm install &lt;name&gt; &#8211;save\u00a0 \u5b89\u88c5\u7684\u540c\u65f6\uff0c\u5c06\u4fe1\u606f\u5199\u5165package.json\u4e2d<\/p>\n<p>\u9879\u76ee\u8def\u5f84\u4e2d\u5982\u679c\u6709package.json\u6587\u4ef6\u65f6\uff0c\u76f4\u63a5\u4f7f\u7528npm install\u65b9\u6cd5\u5c31\u53ef\u4ee5\u6839\u636edependencies\u914d\u7f6e\u5b89\u88c5\u6240\u6709\u7684\u4f9d\u8d56\u5305<\/p>\n<p>\u8fd9\u6837\u4ee3\u7801\u63d0\u4ea4\u5230github\u65f6\uff0c\u5c31\u4e0d\u7528\u63d0\u4ea4node_modules\u8fd9\u4e2a\u6587\u4ef6\u5939\u4e86\u3002<\/p>\n<p>npm init\u00a0 \u4f1a\u5f15\u5bfc\u4f60\u521b\u5efa\u4e00\u4e2apackage.json\u6587\u4ef6\uff0c\u5305\u62ec\u540d\u79f0\u3001\u7248\u672c\u3001\u4f5c\u8005\u8fd9\u4e9b\u4fe1\u606f\u7b49<\/p>\n<p>npm remove &lt;name&gt;\u79fb\u9664<\/p>\n<p>npm update &lt;name&gt;\u66f4\u65b0<\/p>\n<p>npm ls \u5217\u51fa\u5f53\u524d\u8def\u5f84\u4e0b\u5b89\u88c5\u7684\u4e86\u6240\u6709\u5305<\/p>\n<p>npm root \u67e5\u770b\u5f53\u524d\u5305\u7684\u5b89\u88c5\u8def\u5f84<\/p>\n<p>npm root -g\u00a0 \u67e5\u770b\u5168\u5c40\u7684\u5305\u7684\u5b89\u88c5\u8def\u5f84<\/p>\n<p>npm help\u00a0 \u5e2e\u52a9\uff0c\u5982\u679c\u8981\u5355\u72ec\u67e5\u770binstall\u547d\u4ee4\u7684\u5e2e\u52a9\uff0c\u53ef\u4ee5\u4f7f\u7528\u7684npm help install<\/p>\n<p>npm config get cache \u67e5\u770bnpm\u7684\u7f13\u5b58\u76ee\u5f55<\/p>\n<p>\u4e0b\u8fc7\u7684\u5305\u90fd\u5728\u91cc\u9762\uff0c\u6bd4\u5982\u521a\u521a\u4e0b\u8f7d\u7684loadash<\/p>\n<h4><strong>2&gt;\u5173\u4e8enpm\u7f13\u5b58\u76ee\u5f55\u7684\u4e00\u4e9b\u8bb0\u5f55<\/strong><\/h4>\n<p>npm\u5b89\u88c5\u7684\u6a21\u5757\u6709\u4e24\u4e2a\u7f13\u5b58\u76ee\u5f55:<br \/>\n\u9ed8\u8ba4*inux\u548cmac\u4e0b\u662f\u5728\u7528\u6237\u4e3b\u76ee\u5f55\u4e0b\u7684.npm\u76ee\u5f55\u4e0b\uff0c\u901a\u8fc7npm config get cache\u00a0\u53ef\u4ee5\u67e5\u770b\u3002window\u4e0b\u5219\u5728%AppData%\/npm-cache\u00a0\u76ee\u5f55\u4e0b\u3002<\/p>\n<p>\u8be5\u76ee\u5f55\u4e0b\u7684\u6a21\u5757\u7ed3\u6784\u4e3a.npm\/module_name\/module_version\/\u8fd9\u79cd\u65b9\u5f0f\u547d\u540d\u3002<\/p>\n<p>\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u6267\u884cnpm install\u547d\u4ee4\u7684\u65f6\u5019npm\u53ea\u4f1a\u68c0\u67e5node_modules\u4e2d\u662f\u5426\u5b58\u5728\u8be5\u6a21\u5757\uff0c\u5982\u679c\u6ca1\u6709\u5219\u4f1a\u53bbregistry\u4e0b\u8f7d\uff0c\u65e0\u8bba.npm\u6587\u4ef6\u5939\u4e0b\u662f\u5426\u5b58\u5728\u3002\u8fd9\u4e5f\u662finstall\u901f\u5ea6\u6162\u7684\u4e00\u4e2a\u539f\u56e0\u3002<\/p>\n<p>\u89e3\u51b3\u529e\u6cd5\u4f7f\u7528npm install &#8211;cache-min &lt;\u6574\u6570\u65f6\u95f4&gt; &lt;package-name&gt;;<br \/>\n\u8fd9\u4e2a\u547d\u4ee4\u7684\u610f\u601d\u662f\u4ece\u7f13\u5b58\u4e2d\u8fdb\u884c\u5b89\u88c5\uff0c\u53ea\u6709\u518d\u8d85\u8fc7\u53c2\u6570\u65f6\u95f4\u7684\u65f6\u5019\u624d\u4eceregitry\u4e0a\u5b89\u88c5\u3002\u4f46\u5185\u5728\u4e5f\u8fdb\u884c\u4e86\u4e00\u6b21\u4e0eregistry\u7684\u4ea4\u4e92\uff0c\u53ea\u662f\u4ea4\u4e92\u7684etag\u5c5e\u6027\uff0c\u670d\u52a1\u5668\u8fd4\u56de304\u8868\u793a\u6ca1\u6709\u66f4\u65b0\u4e0d\u9700\u8981\u4e0b\u8f7d<\/p>\n<p>\u53e6\u5916\u4e5f\u53ef\u4ee5\u5c06\u7f13\u5b58\u76ee\u5f55\u8bbe\u7f6e\u6210node_modules\u76ee\u5f55\u3002<\/p>\n<h3><strong>pm2\u547d\u4ee4\u8be6\u89e3<\/strong><\/h3>\n<p>pm2\u662f\u5f00\u6e90\u7684\u57fa\u4e8eNodejs\u7684\u8fdb\u7a0b\u7ba1\u7406\u5668\u3002\u5305\u62ec\u8fdb\u7a0b\u3001\u65e5\u5fd7\u3001\u76d1\u63a7\u7684\u4e00\u6574\u5957\u5b8c\u6574\u529f\u80fd\u3002\u5b83\u5e26\u6709\u8d1f\u8f7d\u5747\u8861\u529f\u80fd\uff0c\u5f53\u4f60\u8981\u628a\u4f60\u7684\u72ec\u7acb\u4ee3\u7801\u8d44\u6e90\u5229\u7528\u5168\u90e8\u7684\u670d\u52a1\u5668\u6240\u6709cpu\uff0c\u4fdd\u8bc1\u8fdb\u7a0b\u6c38\u8fdc\u90fd\u662f\u6d3b\u7740\u7684\uff0c0\u79d2\u7684\u91cd\u8f7d\uff0cPM2\u662f\u5b8c\u7f8e\u7684\u3002<\/p>\n<p>\u5e38\u7528\u7684\u547d\u4ee4\u4ecb\u7ecd\uff1a<\/p>\n<p>\u4ee5\u4e0b\u662fpm2\u5e38\u7528\u7684\u547d\u4ee4\u884c<\/p>\n<p>$ pm2 start app.js\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u542f\u52a8app.js\u5e94\u7528\u7a0b\u5e8f<\/p>\n<p>$ pm2 start app.js -i 4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # cluster mode \u6a21\u5f0f\u542f\u52a84\u4e2aapp.js\u7684\u5e94\u7528\u5b9e\u4f8b<\/p>\n<p># 4\u4e2a\u5e94\u7528\u7a0b\u5e8f\u4f1a\u81ea\u52a8\u8fdb\u884c\u8d1f\u8f7d\u5747\u8861<\/p>\n<p>&nbsp;<\/p>\n<p>$ pm2 start app.js &#8211;name=&#8221;api&#8221; # \u542f\u52a8\u5e94\u7528\u7a0b\u5e8f\u5e76\u547d\u540d\u4e3a &#8220;api&#8221;<\/p>\n<p>$ pm2 start app.js &#8211;watch\u00a0\u00a0\u00a0\u00a0\u00a0 # \u5f53\u6587\u4ef6\u53d8\u5316\u65f6\u81ea\u52a8\u91cd\u542f\u5e94\u7528<\/p>\n<p>$ pm2 start script.sh\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u542f\u52a8 bash \u811a\u672c<\/p>\n<p>&nbsp;<\/p>\n<p>$ pm2 list\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u5217\u8868 PM2 \u542f\u52a8\u7684\u6240\u6709\u7684\u5e94\u7528\u7a0b\u5e8f<\/p>\n<p>$ pm2 monit\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u663e\u793a\u6bcf\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684CPU\u548c\u5185\u5b58\u5360\u7528\u60c5\u51b5<\/p>\n<p>$ pm2 show [app-name]\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# \u663e\u793a\u5e94\u7528\u7a0b\u5e8f\u7684\u6240\u6709\u4fe1\u606f<\/p>\n<p>&nbsp;<\/p>\n<p>$ pm2 logs\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u663e\u793a\u6240\u6709\u5e94\u7528\u7a0b\u5e8f\u7684\u65e5\u5fd7<\/p>\n<p>$ pm2 logs [app-name]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u663e\u793a\u6307\u5b9a\u5e94\u7528\u7a0b\u5e8f\u7684\u65e5\u5fd7<\/p>\n<p>$ pm2 flush<\/p>\n<p>&nbsp;<\/p>\n<p>$ pm2 stop all\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u505c\u6b62\u6240\u6709\u7684\u5e94\u7528\u7a0b\u5e8f<\/p>\n<p>$ pm2 stop 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u505c\u6b62 id\u4e3a 0\u7684\u6307\u5b9a\u5e94\u7528\u7a0b\u5e8f<\/p>\n<p>$ pm2 restart all\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u91cd\u542f\u6240\u6709\u5e94\u7528<\/p>\n<p>$ pm2 reload all\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u91cd\u542f cluster mode\u4e0b\u7684\u6240\u6709\u5e94\u7528<\/p>\n<p>$ pm2 gracefulReload all\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Graceful reload all apps in cluster mode<\/p>\n<p>$ pm2 delete all\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u5173\u95ed\u5e76\u5220\u9664\u6240\u6709\u5e94\u7528<\/p>\n<p>$ pm2 delete 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u5220\u9664\u6307\u5b9a\u5e94\u7528 id 0<\/p>\n<p>$ pm2 scale api 10\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u628a\u540d\u5b57\u53ebapi\u7684\u5e94\u7528\u6269\u5c55\u523010\u4e2a\u5b9e\u4f8b<\/p>\n<p>$ pm2 reset [app-name]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u91cd\u7f6e\u91cd\u542f\u6570\u91cf<\/p>\n<p>&nbsp;<\/p>\n<p>$ pm2 startup\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u521b\u5efa\u5f00\u673a\u81ea\u542f\u52a8\u547d\u4ee4<\/p>\n<p>$ pm2 save\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u4fdd\u5b58\u5f53\u524d\u5e94\u7528\u5217\u8868<\/p>\n<p>$ pm2 resurrect\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # \u91cd\u65b0\u52a0\u8f7d\u4fdd\u5b58\u7684\u5e94\u7528\u5217\u8868<\/p>\n<p>$ pm2 update\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0# Save processes, kill PM2 and restore processes<\/p>\n<p>$ pm2 generate\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Generate a sample json configuration file<\/p>\n<p>&nbsp;<\/p>\n<p>$ pm2 deploy app.json prod setup\u00a0\u00a0\u00a0 # Setup &#8220;prod&#8221; remote server<\/p>\n<p>$ pm2 deploy app.json prod\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Update &#8220;prod&#8221; remote server<\/p>\n<p>$ pm2 deploy app.json prod revert 2 # Revert &#8220;prod&#8221; remote server by 2<\/p>\n<p>&nbsp;<\/p>\n<p>$ pm2 module:generate [name]\u00a0\u00a0\u00a0 # Generate sample module with name [name]<\/p>\n<p>$ pm2 install pm2-logrotate\u00a0\u00a0\u00a0\u00a0 # Install module (here a log rotation system)<\/p>\n<p>$ pm2 uninstall pm2-logrotate\u00a0\u00a0 # Uninstall module<\/p>\n<p>$ pm2 publish\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Increment version, git push and npm publish<\/p>\n<p>\u547d\u4ee4\u9a8c\u8bc1\uff1a<\/p>\n<p>\u505c\u6b62sinopia:<\/p>\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">$\u00a0pm2\u00a0stop\u00a0sinopia<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"ace_scroller\"><\/div>\n<p>\u542f\u52a8sinopia:<\/p>\n<div class=\"ace_scroller\">\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">$\u00a0pm2\u00a0start\u00a0sinopia<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>\u91cd\u542f sinopia:<\/p>\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">$\u00a0pm2\u00a0retart\u00a0sinopia<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"ace_scroller\"><\/div>\n<p>\u663e\u793a sinopia \u7684log:<\/p>\n<div class=\"ace_content\">\n<div class=\"ace_layer ace_text-layer\">\n<div class=\"ace_line_group\">\n<div class=\"ace_line\">$\u00a0pm2\u00a0logs\u00a0sinopia<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h2><strong>6.\u53c2\u8003\u6587\u6863<\/strong><\/h2>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000005790827\">https:\/\/segmentfault.com\/a\/1190000005790827<\/a><\/p>\n<p><a href=\"http:\/\/www.tuicool.com\/articles\/B3iyyya\">http:\/\/www.tuicool.com\/articles\/B3iyyya<\/a><\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; \u9700\u6c42(\u8fd9\u6bb5\u8bdd\u662f\u6458\u6284\u53c2\u8003\u6587\u6863\u7684\uff0c\u56e0\u4e3a\u4f5c\u8005\u4e5f\u60f3\u8fd9\u4e48\u8bf4)\uff1a \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u516c\u53f8\u51fa\u4e8e\u81ea\u8eab\u9690\u79c1\u4fdd\u62a4\u9700\u8981,\u4e0d\u60f3\u628a\u81ea\u5df1\u7684\u4ee3\u7801\u5f00\u6e90\u5230\u5305\u7ba1\u7406\u533a\uff0c\u4f46\u662f\u53c8\u6025\u9700\u4e00\u5957\u5b8c\u6574\u5305\u7ba1\u5de5\u5177\uff0c\u6765\u7ba1\u7406\u8d8a\u6765\u8d8a\u591a\u7684\u7ec4\u4ef6\u3001\u6a21\u5757\u548c\u9879\u76ee\u3002\u5bf9\u4e8e\u524d\u7aef\uff0c\u6700\u719f\u6089\u7684\u83ab\u8fc7\u4e8enpm\uff0cbower\u7b49\uff1b\u4f46\u662fbower\u7684\u5e02\u573a\u517c\u5bb9\u6027\u660e\u663e\u6ca1\u6709npm\u5f3a\u58ee\uff0c\u52a0\u4e4bcommonjs\u89c4\u8303\u7684\u65e5\u76ca\u6210\u719f\u3002npm\u5e94\u8be5\u662f\u524d\u7aef\u5305\u7ba1\u7406\u7684\u4e0d\u4e8c\u9009\u62e9\u3002 \u516c\u53f8\u5bf9\u4e8e\u642d\u5efa\u672c\u5730\u79c1\u6709npm\u5e93\u6709\u5982\u4e0b\u8981\u6c42\uff1a \u79c1\u6709\u5305\u6258\u7ba1\u5728\u5185\u90e8\u670d\u52a1\u5668\u4e2d \u9879\u76ee\u4e2d\u4f7f\u7528\u4e86\u516c\u5171\u4ed3\u5e93\u4e0a\u7684\u516c\u5171\u5305\uff0c\u4e5f\u4f7f\u7528\u4e86\u5185\u90e8\u670d\u52a1\u5668\u4e0a\u7684\u79c1\u6709\u5305 \u5e0c\u671b\u4e0b\u8f7d\u7684\u65f6\u5019\uff0c\u516c\u5171\u5305\u8d70\u516c\u5171\u4ed3\u5e93\uff0c\u79c1\u6709\u5305\u8d70\u5185\u90e8\u670d\u52a1\u5668\u7684\u79c1\u6709\u4ed3\u5e93 \u670d\u52a1\u5668\u786c\u76d8\u6709\u9650\uff0c\u5e0c\u671b\u53ea\u7f13\u5b58\u4e0b\u8f7d\u8fc7\u7684\u5305\uff0c\u800c\u4e0d\u662f\u5168\u90e8\u540c\u6b65\u3002 \u5bf9\u4e8e\u4e0b\u8f7d\uff0c\u53d1\u5e03npm\u5305\u6709\u5bf9\u5e94\u7684\u6743\u9650\u7ba1\u7406\uff0c\u5b89\u88c5\u65b9\u4fbf\uff0c\u914d\u7f6e\u7b80\u5355\uff0c\u4f9d\u8d56\u5c11\u3002 Sinopia\u00a0\u662f\u4e00\u4e2a\u96f6\u914d\u7f6e\u7684\u79c1\u6709\u7684\u5e26\u7f13\u5b58\u529f\u80fd\u7684npm\u5305\u7ba1\u7406\u5de5\u5177\u3002 1.\u8981\u5b89\u88c5\u7684\u8f6f\u4ef6 \u8f6f\u4ef6\u7b80\u4ecb nodejs\/npm\u00a0\u8f6f\u4ef6\u540d\u79f0\uff1a node-v6.9.1-linux-x64.tar.gz \u00a0 \u4e0b\u8f7d\u5730\u5740\uff1ahttps:\/\/npm.taobao.org\/mirrors\/node\/v6.9.1\/ \u5b89\u88c5\u547d\u4ee4\uff1a tar -xvf [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-351","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=351"}],"version-history":[{"count":0,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=\/wp\/v2\/posts\/351\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jsjs.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}