mirror of https://github.com/aria2/aria2
				
				
				
			2008-12-10 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added --max-overall-upload-limit option. This option limits the overall upload speed. Stated in help message that the existing --max-upload-limit option limits the upload speed per each torrent. Man page is also updated. * doc/aria2c.1.txt * src/DefaultBtMessageDispatcher.cc * src/DefaultBtMessageDispatcher.h * src/OptionHandlerFactory.cc * src/PeerInteractionCommand.cc * src/option_processing.cc * src/prefs.cc * src/prefs.h * src/usage_text.hpull/1/head
							parent
							
								
									8129042a3a
								
							
						
					
					
						commit
						8c1894720f
					
				
							
								
								
									
										16
									
								
								ChangeLog
								
								
								
								
							
							
						
						
									
										16
									
								
								ChangeLog
								
								
								
								
							| 
						 | 
				
			
			@ -1,3 +1,19 @@
 | 
			
		|||
2008-12-10  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 | 
			
		||||
 | 
			
		||||
	Added --max-overall-upload-limit option. This option limits the
 | 
			
		||||
	overall upload speed.  Stated in help message that the existing
 | 
			
		||||
	--max-upload-limit option limits the upload speed per each
 | 
			
		||||
	torrent.  Man page is also updated.
 | 
			
		||||
	* doc/aria2c.1.txt
 | 
			
		||||
	* src/DefaultBtMessageDispatcher.cc
 | 
			
		||||
	* src/DefaultBtMessageDispatcher.h
 | 
			
		||||
	* src/OptionHandlerFactory.cc
 | 
			
		||||
	* src/PeerInteractionCommand.cc
 | 
			
		||||
	* src/option_processing.cc
 | 
			
		||||
	* src/prefs.cc
 | 
			
		||||
	* src/prefs.h
 | 
			
		||||
	* src/usage_text.h
 | 
			
		||||
 | 
			
		||||
2008-12-09  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 | 
			
		||||
 | 
			
		||||
	Use BDE instead of Dictionary/List/Data classes.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										27
									
								
								doc/aria2c.1
								
								
								
								
							
							
						
						
									
										27
									
								
								doc/aria2c.1
								
								
								
								
							| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
.\"     Title: aria2c
 | 
			
		||||
.\"    Author: 
 | 
			
		||||
.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
 | 
			
		||||
.\"      Date: 12/04/2008
 | 
			
		||||
.\"      Date: 12/10/2008
 | 
			
		||||
.\"    Manual: 
 | 
			
		||||
.\"    Source: 
 | 
			
		||||
.\"
 | 
			
		||||
.TH "ARIA2C" "1" "12/04/2008" "" ""
 | 
			
		||||
.TH "ARIA2C" "1" "12/10/2008" "" ""
 | 
			
		||||
.\" disable hyphenation
 | 
			
		||||
.nh
 | 
			
		||||
.\" disable justification (adjust text to left margin only)
 | 
			
		||||
| 
						 | 
				
			
			@ -507,14 +507,31 @@ Set TCP port number for BitTorrent downloads\&. Multiple ports can be specified
 | 
			
		|||
Note
 | 
			
		||||
Make sure that the specified ports are open for incoming TCP traffic\&.
 | 
			
		||||
.PP
 | 
			
		||||
\fB\-u\fR, \fB\-\-max\-upload\-limit\fR=SPEED
 | 
			
		||||
\fB\-\-max\-overall\-upload\-limit\fR=SPEED
 | 
			
		||||
.RS 4
 | 
			
		||||
Set max upload speed in bytes per sec\&.
 | 
			
		||||
Set max overall upload speed in bytes/sec\&.
 | 
			
		||||
\fI0\fR
 | 
			
		||||
means unrestricted\&. You can append
 | 
			
		||||
\fIK\fR
 | 
			
		||||
or
 | 
			
		||||
\fIM\fR(1K = 1024, 1M = 1024K)\&. Default:
 | 
			
		||||
\fIM\fR(1K = 1024, 1M = 1024K)\&. To limit the upload speed per torrent, use
 | 
			
		||||
\fB\-\-max\-upload\-limit\fR
 | 
			
		||||
option\&. If non\-zero value is specified,
 | 
			
		||||
\fB\-\-max\-upload\-limit\fR
 | 
			
		||||
option is ignored\&. Default:
 | 
			
		||||
\fI0\fR
 | 
			
		||||
.RE
 | 
			
		||||
.PP
 | 
			
		||||
\fB\-u\fR, \fB\-\-max\-upload\-limit\fR=SPEED
 | 
			
		||||
.RS 4
 | 
			
		||||
Set max upload speed per each torrent in bytes/sec\&.
 | 
			
		||||
\fI0\fR
 | 
			
		||||
means unrestricted\&. You can append
 | 
			
		||||
\fIK\fR
 | 
			
		||||
or
 | 
			
		||||
\fIM\fR(1K = 1024, 1M = 1024K)\&. To limit the overall upload speed, use
 | 
			
		||||
\fB\-\-max\-overall\-upload\-limit\fR
 | 
			
		||||
option\&. Default:
 | 
			
		||||
\fI0\fR
 | 
			
		||||
.RE
 | 
			
		||||
.PP
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1064,12 +1064,27 @@ writes the piece to the appropriate files.</td>
 | 
			
		|||
</div>
 | 
			
		||||
<div class="vlist"><dl>
 | 
			
		||||
<dt>
 | 
			
		||||
<strong>--max-overall-upload-limit</strong>=SPEED
 | 
			
		||||
</dt>
 | 
			
		||||
<dd>
 | 
			
		||||
<p>
 | 
			
		||||
  Set max overall upload speed in bytes/sec.
 | 
			
		||||
  <em>0</em> means unrestricted.
 | 
			
		||||
  You can append <em>K</em> or <em>M</em>(1K = 1024, 1M = 1024K).
 | 
			
		||||
  To limit the upload speed per torrent, use <strong>--max-upload-limit</strong> option.
 | 
			
		||||
  If non-zero value is specified, <strong>--max-upload-limit</strong> option is ignored.
 | 
			
		||||
  Default: <em>0</em>
 | 
			
		||||
</p>
 | 
			
		||||
</dd>
 | 
			
		||||
<dt>
 | 
			
		||||
<strong>-u</strong>, <strong>--max-upload-limit</strong>=SPEED
 | 
			
		||||
</dt>
 | 
			
		||||
<dd>
 | 
			
		||||
<p>
 | 
			
		||||
  Set max upload speed in bytes per sec. <em>0</em> means unrestricted.
 | 
			
		||||
  Set max upload speed per each torrent in bytes/sec.
 | 
			
		||||
  <em>0</em> means unrestricted.
 | 
			
		||||
  You can append <em>K</em> or <em>M</em>(1K = 1024, 1M = 1024K).
 | 
			
		||||
  To limit the overall upload speed, use <strong>--max-overall-upload-limit</strong> option.
 | 
			
		||||
  Default: <em>0</em>
 | 
			
		||||
</p>
 | 
			
		||||
</dd>
 | 
			
		||||
| 
						 | 
				
			
			@ -2031,7 +2046,7 @@ files in the program, then also delete it here.</p></div>
 | 
			
		|||
</div>
 | 
			
		||||
<div id="footer">
 | 
			
		||||
<div id="footer-text">
 | 
			
		||||
Last updated 2008-12-04 01:08:46 JST
 | 
			
		||||
Last updated 2008-12-10 23:03:25 JST
 | 
			
		||||
</div>
 | 
			
		||||
</div>
 | 
			
		||||
</body>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -366,9 +366,19 @@ BitTorrent Specific Options
 | 
			
		|||
[NOTE]
 | 
			
		||||
Make sure that the specified ports are open for incoming TCP traffic.
 | 
			
		||||
 | 
			
		||||
*-u*, *--max-upload-limit*=SPEED::
 | 
			
		||||
  Set max upload speed in bytes per sec. '0' means unrestricted.
 | 
			
		||||
*--max-overall-upload-limit*=SPEED::
 | 
			
		||||
  Set max overall upload speed in bytes/sec.
 | 
			
		||||
  '0' means unrestricted.
 | 
			
		||||
  You can append 'K' or 'M'(1K = 1024, 1M = 1024K).
 | 
			
		||||
  To limit the upload speed per torrent, use *--max-upload-limit* option.
 | 
			
		||||
  If non-zero value is specified, *--max-upload-limit* option is ignored.
 | 
			
		||||
  Default: '0'
 | 
			
		||||
 | 
			
		||||
*-u*, *--max-upload-limit*=SPEED::
 | 
			
		||||
  Set max upload speed per each torrent in bytes/sec.
 | 
			
		||||
  '0' means unrestricted.
 | 
			
		||||
  You can append 'K' or 'M'(1K = 1024, 1M = 1024K).
 | 
			
		||||
  To limit the overall upload speed, use *--max-overall-upload-limit* option.
 | 
			
		||||
  Default: '0'
 | 
			
		||||
 | 
			
		||||
*--peer-id-prefix*=PEERI_ID_PREFIX::
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,12 +52,14 @@
 | 
			
		|||
#include "LogFactory.h"
 | 
			
		||||
#include "Logger.h"
 | 
			
		||||
#include "a2functional.h"
 | 
			
		||||
#include "RequestGroupMan.h"
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
DefaultBtMessageDispatcher::DefaultBtMessageDispatcher():
 | 
			
		||||
  cuid(0),
 | 
			
		||||
  maxUploadSpeedLimit(0),
 | 
			
		||||
  _maxOverallSpeedLimit(0),
 | 
			
		||||
  _maxUploadSpeedLimit(0),
 | 
			
		||||
  requestTimeout(0),
 | 
			
		||||
  logger(LogFactory::getInstance()) {}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,16 +81,22 @@ void DefaultBtMessageDispatcher::addMessageToQueue(const BtMessages& btMessages)
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void DefaultBtMessageDispatcher::sendMessages() {
 | 
			
		||||
  BtMessages tempQueue;
 | 
			
		||||
  while(!messageQueue.empty()) {
 | 
			
		||||
    BtMessageHandle msg = messageQueue.front();
 | 
			
		||||
    messageQueue.pop_front();
 | 
			
		||||
    if(maxUploadSpeedLimit > 0 &&
 | 
			
		||||
       msg->isUploading() && !msg->isSendingInProgress()) {
 | 
			
		||||
      TransferStat stat = _peerStorage->calculateStat();
 | 
			
		||||
      if(maxUploadSpeedLimit < stat.getUploadSpeed()) {
 | 
			
		||||
    if(msg->isUploading() && !msg->isSendingInProgress()) {
 | 
			
		||||
      if(// See whether upload speed is exceeding overall limit.
 | 
			
		||||
	 (_maxOverallSpeedLimit > 0 &&
 | 
			
		||||
	  _maxOverallSpeedLimit <
 | 
			
		||||
	  _requestGroupMan->calculateStat().getUploadSpeed()) ||
 | 
			
		||||
	 // See whether uplaod speed is exceeding upload limit for each torrent.
 | 
			
		||||
	 // _maxUploadLimit is ignored when _maxOverallSpeedLimit is specified.
 | 
			
		||||
	 (_maxOverallSpeedLimit == 0 &&
 | 
			
		||||
	  _maxUploadSpeedLimit > 0 &&
 | 
			
		||||
	  _maxUploadSpeedLimit <
 | 
			
		||||
	  _peerStorage->calculateStat().getUploadSpeed())) {
 | 
			
		||||
	tempQueue.push_back(msg);
 | 
			
		||||
	continue;
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -457,4 +465,23 @@ void DefaultBtMessageDispatcher::setBtMessageFactory(const WeakHandle<BtMessageF
 | 
			
		|||
  this->messageFactory = factory;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultBtMessageDispatcher::setRequestGroupMan
 | 
			
		||||
(const WeakHandle<RequestGroupMan>& rgman)
 | 
			
		||||
{
 | 
			
		||||
  _requestGroupMan = rgman;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultBtMessageDispatcher::setMaxUploadSpeedLimit
 | 
			
		||||
(unsigned int maxUploadSpeedLimit)
 | 
			
		||||
{
 | 
			
		||||
  _maxUploadSpeedLimit = maxUploadSpeedLimit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void DefaultBtMessageDispatcher::setMaxOverallSpeedLimit
 | 
			
		||||
(unsigned int maxOverallSpeedLimit)
 | 
			
		||||
{
 | 
			
		||||
  _maxOverallSpeedLimit = maxOverallSpeedLimit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
} // namespace aria2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,6 +48,7 @@ class BtMessageFactory;
 | 
			
		|||
class Peer;
 | 
			
		||||
class Piece;
 | 
			
		||||
class Logger;
 | 
			
		||||
class RequestGroupMan;
 | 
			
		||||
 | 
			
		||||
class DefaultBtMessageDispatcher : public BtMessageDispatcher {
 | 
			
		||||
private:
 | 
			
		||||
| 
						 | 
				
			
			@ -59,7 +60,9 @@ private:
 | 
			
		|||
  SharedHandle<PieceStorage> _pieceStorage;
 | 
			
		||||
  WeakHandle<BtMessageFactory> messageFactory;
 | 
			
		||||
  SharedHandle<Peer> peer;
 | 
			
		||||
  unsigned int maxUploadSpeedLimit;
 | 
			
		||||
  WeakHandle<RequestGroupMan> _requestGroupMan;
 | 
			
		||||
  unsigned int _maxOverallSpeedLimit;
 | 
			
		||||
  unsigned int _maxUploadSpeedLimit;
 | 
			
		||||
  time_t requestTimeout;
 | 
			
		||||
  Logger* logger;
 | 
			
		||||
public:
 | 
			
		||||
| 
						 | 
				
			
			@ -117,13 +120,15 @@ public:
 | 
			
		|||
 | 
			
		||||
  void setBtMessageFactory(const WeakHandle<BtMessageFactory>& factory);
 | 
			
		||||
 | 
			
		||||
  void setRequestGroupMan(const WeakHandle<RequestGroupMan>& rgman);
 | 
			
		||||
 | 
			
		||||
  void setCuid(int32_t cuid) {
 | 
			
		||||
    this->cuid = cuid;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void setMaxUploadSpeedLimit(unsigned int maxUploadSpeedLimit) {
 | 
			
		||||
    this->maxUploadSpeedLimit = maxUploadSpeedLimit;
 | 
			
		||||
  }
 | 
			
		||||
  void setMaxUploadSpeedLimit(unsigned int maxUploadSpeedLimit);
 | 
			
		||||
 | 
			
		||||
  void setMaxOverallSpeedLimit(unsigned int maxOverallSpeedLimit);
 | 
			
		||||
 | 
			
		||||
  void setRequestTimeout(time_t requestTimeout) {
 | 
			
		||||
    this->requestTimeout = requestTimeout;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -824,6 +824,16 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
 | 
			
		|||
    op->addTag(TAG_BITTORRENT);
 | 
			
		||||
    handlers.push_back(op);
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 | 
			
		||||
				   (PREF_MAX_OVERALL_UPLOAD_LIMIT,
 | 
			
		||||
				    TEXT_MAX_OVERALL_UPLOAD_LIMIT,
 | 
			
		||||
				    "0",
 | 
			
		||||
				    0));
 | 
			
		||||
    op->addTag(TAG_BASIC);
 | 
			
		||||
    op->addTag(TAG_BITTORRENT);
 | 
			
		||||
    handlers.push_back(op);
 | 
			
		||||
  }
 | 
			
		||||
  {
 | 
			
		||||
    SharedHandle<OptionHandler> op(new UnitNumberOptionHandler
 | 
			
		||||
				   (PREF_MAX_UPLOAD_LIMIT,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,7 @@
 | 
			
		|||
#include "BtAnnounce.h"
 | 
			
		||||
#include "BtProgressInfoFile.h"
 | 
			
		||||
#include "DefaultExtensionMessageFactory.h"
 | 
			
		||||
#include "RequestGroupMan.h"
 | 
			
		||||
 | 
			
		||||
namespace aria2 {
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -133,8 +134,11 @@ PeerInteractionCommand::PeerInteractionCommand
 | 
			
		|||
  dispatcher->setPeerStorage(peerStorage);
 | 
			
		||||
  dispatcher->setMaxUploadSpeedLimit
 | 
			
		||||
    (e->option->getAsInt(PREF_MAX_UPLOAD_LIMIT));
 | 
			
		||||
  dispatcher->setMaxOverallSpeedLimit
 | 
			
		||||
    (e->option->getAsInt(PREF_MAX_OVERALL_UPLOAD_LIMIT));
 | 
			
		||||
  dispatcher->setRequestTimeout(e->option->getAsInt(PREF_BT_REQUEST_TIMEOUT));
 | 
			
		||||
  dispatcher->setBtMessageFactory(factory);
 | 
			
		||||
  dispatcher->setRequestGroupMan(e->_requestGroupMan);
 | 
			
		||||
 | 
			
		||||
  DefaultBtMessageReceiverHandle receiver(new DefaultBtMessageReceiver());
 | 
			
		||||
  receiver->setCuid(cuid);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -214,6 +214,7 @@ Option* option_processing(int argc, char* const argv[])
 | 
			
		|||
      { PREF_BT_MAX_OPEN_FILES.c_str(), required_argument, &lopt, 33 },
 | 
			
		||||
      { PREF_BT_SEED_UNVERIFIED.c_str(), optional_argument, &lopt, 34 },
 | 
			
		||||
      { PREF_DHT_FILE_PATH.c_str(), required_argument, &lopt, 35 },
 | 
			
		||||
      { PREF_MAX_OVERALL_UPLOAD_LIMIT.c_str(), required_argument, &lopt, 36 },
 | 
			
		||||
#endif // ENABLE_BITTORRENT
 | 
			
		||||
#ifdef ENABLE_METALINK
 | 
			
		||||
      { PREF_METALINK_FILE.c_str(), required_argument, NULL, 'M' },
 | 
			
		||||
| 
						 | 
				
			
			@ -338,6 +339,9 @@ Option* option_processing(int argc, char* const argv[])
 | 
			
		|||
      case 35:
 | 
			
		||||
	cmdstream << PREF_DHT_FILE_PATH << "=" << optarg << "\n";
 | 
			
		||||
	break;
 | 
			
		||||
      case 36:
 | 
			
		||||
	cmdstream << PREF_MAX_OVERALL_UPLOAD_LIMIT << "=" << optarg << "\n";
 | 
			
		||||
	break;
 | 
			
		||||
      case 100:
 | 
			
		||||
	cmdstream << PREF_METALINK_VERSION << "=" << optarg << "\n";
 | 
			
		||||
	break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -217,6 +217,8 @@ const std::string PREF_SHOW_FILES("show-files");
 | 
			
		|||
// values: true | false
 | 
			
		||||
const std::string PREF_DIRECT_FILE_MAPPING("direct-file-mapping");
 | 
			
		||||
// values: 1*digit
 | 
			
		||||
const std::string PREF_MAX_OVERALL_UPLOAD_LIMIT("max-overall-upload-limit");
 | 
			
		||||
// values: 1*digit
 | 
			
		||||
const std::string PREF_MAX_UPLOAD_LIMIT("max-upload-limit");
 | 
			
		||||
// values: a string that your file system recognizes as a file name.
 | 
			
		||||
const std::string PREF_TORRENT_FILE("torrent-file");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -221,6 +221,8 @@ extern const std::string PREF_SHOW_FILES;
 | 
			
		|||
// values: true | false
 | 
			
		||||
extern const std::string PREF_DIRECT_FILE_MAPPING;
 | 
			
		||||
// values: 1*digit
 | 
			
		||||
extern const std::string PREF_MAX_OVERALL_UPLOAD_LIMIT;
 | 
			
		||||
// values: 1*digit
 | 
			
		||||
extern const std::string PREF_MAX_UPLOAD_LIMIT;
 | 
			
		||||
// values: a string that your file system recognizes as a file name.
 | 
			
		||||
extern const std::string PREF_TORRENT_FILE;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -227,10 +227,19 @@ _(" --listen-port=PORT...        Set TCP port number for BitTorrent downloads.\n
 | 
			
		|||
  "                              for example: \"6881,6885\". You can also use '-'\n"\
 | 
			
		||||
  "                              to specify a range: \"6881-6999\". ',' and '-' can\n"\
 | 
			
		||||
  "                              be used together.")
 | 
			
		||||
#define TEXT_MAX_UPLOAD_LIMIT \
 | 
			
		||||
_(" -u, --max-upload-limit=SPEED Set max upload speed in bytes per sec.\n"\
 | 
			
		||||
#define TEXT_MAX_OVERALL_UPLOAD_LIMIT \
 | 
			
		||||
_(" --max-overall-upload-limit=SPEED Set max overall upload speed in bytes/sec.\n"\
 | 
			
		||||
  "                              0 means unrestricted.\n"\
 | 
			
		||||
  "                              You can append K or M(1K = 1024, 1M = 1024K).")
 | 
			
		||||
  "                              You can append K or M(1K = 1024, 1M = 1024K).\n"\
 | 
			
		||||
  "                              To limit the upload speed per torrent, use\n"\
 | 
			
		||||
  "                              --max-upload-limit option. If non-zero value is\n"\
 | 
			
		||||
  "                              specified, --max-upload-limit option is ignored.")
 | 
			
		||||
#define TEXT_MAX_UPLOAD_LIMIT \
 | 
			
		||||
_(" -u, --max-upload-limit=SPEED Set max upload speed per each torrent in\n"\
 | 
			
		||||
  "                              bytes/sec. 0 means unrestricted.\n"\
 | 
			
		||||
  "                              You can append K or M(1K = 1024, 1M = 1024K).\n"\
 | 
			
		||||
  "                              To limit the overall upload speed, use\n"\
 | 
			
		||||
  "                              --max-overall-upload-limit option.")
 | 
			
		||||
#define TEXT_SEED_TIME \
 | 
			
		||||
_(" --seed-time=MINUTES          Specify seeding time in minutes. Also see the\n"\
 | 
			
		||||
  "                              --seed-ratio option.")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue