From db1e1880ab4c43075f269fc6eb4434183043b3f4 Mon Sep 17 00:00:00 2001 From: hsn <> Date: Tue, 26 Oct 2004 16:14:11 +0000 Subject: [PATCH] doc updated --- doc/.cvsignore | 1 + doc/4LAMERZ.TXT | 113 ++++++++++ doc/Makefile.am | 8 +- doc/PROTOCOL | 22 +- doc/fsp-faq.sgml | 571 ++++++++++++++++++++++++++++++++--------------- 5 files changed, 535 insertions(+), 180 deletions(-) create mode 100644 doc/4LAMERZ.TXT diff --git a/doc/.cvsignore b/doc/.cvsignore index 282522d..d4e49f5 100644 --- a/doc/.cvsignore +++ b/doc/.cvsignore @@ -1,2 +1,3 @@ Makefile Makefile.in +fsp-faq.html diff --git a/doc/4LAMERZ.TXT b/doc/4LAMERZ.TXT new file mode 100644 index 0000000..7427182 --- /dev/null +++ b/doc/4LAMERZ.TXT @@ -0,0 +1,113 @@ +########### ### # ######## + ### ## ## ### ### ## + ### ## # ## ### ## + ### # # ## ### ## + ### # # # ### ## Why 4 U riding this phile? 4u l8m3r? + ### # ### ## + ### # ### ## + ### # ## ### ## + ### # #### ### ## You 4 at r8t platz! + ####### ##### ####### + ### # ###### ### + ### # ##### ### + ### #### ### + ### ## ### w e l c o m e + ### ### ### + ### ## ### t o + ### ## ### + ### ## ### + ### # # ### L8mer guide to FSP + ### ## ## ### + ### ### # ### LQ Version +##### # ###### ##### Oct 2004 + +Why you need it + +- stealth operation +- old proven software with 10 years history +- for EliTe only +- attack resistant +- lamerz hates it + +STuFF firSt! + +you neeeed to get a p-file called cygwin1.dll. lamerz at www.cygwin.com +have some. Grab a copy, man. Copy it to your winlost sistema32 dyr. + +Have it? Right. + + +Now rock! + +There is a p-file fspd.exe. This is for stuff sharing. +Running this is easy: + +fspd.exe -d c:\your\stuff\to\share -p 53 + +this number is important. Recommended numbers for stealth +operation are: 53, 2090, 137-139, 13, 21, 80, 443 +You can be catched more easily with bad number, so chooze wisely. Rememmber, +some numbers like 2221 are used only by Elite! do not try it at +home; bad thingz can hepen. you know. police will certainly +take a visit. + +Get more stuff! + +Of course that you want to have the latest stuff, isn't it? +You must have some addresses of other ppl. They looks like +1.2.3.4 45 + +There is a p-file fsp.exe. This is for getting new stuff. +run it. +fsp.exe +fsp> +now type commands. + +You need to know a few: +open 1.2.3.4 45 -- connects to site +get file -- get new stuff +put file -- send your stuff +pro -- show your access level +dir -- list directory +quit -- go to sleep. + +We will give you some nice starting numbers for free. There are not a high +quality, but this is lq version of this guide. we can sell you +much better guide - hq version. Try to offer something. + +912.000.000.102. 2056 +234.234.234.823. 55 +123.578.866.346. 34567 +432.333.134.23 5436 +543.47.5436.5432 5432 +4352.532.532.21.54 4365 +4312.5637.4332.5432 4325 +324.43652.6543.4321 6547 +431.142.654.3112.3243 542 +1.34.342.543 542 +321.312.653.645 5432 +9.02.1.0 6969 +127.0.0.7 56 +192.168.45.21 108 +10.20.30.40 5060 + +never try to flood fsp server, this does not work, elite will lauch +at you and cut your accez down. remember, you ar elite, not a kiddie! + +-----**************------*******************----------************--- + +for HQ version of this guide send + 20 bucks to + e-gold.com account + number 550694 + +Features included: + list of hq quality sitez + how to setup upload facility + how to search for new sitez + special seek tool + and 3 secret bonuzez + +!We Do NOT sEnDZ hQ guiDe to LAmeRZ! Prove yourself first. + +------*****-----------******************--------------**************--- diff --git a/doc/Makefile.am b/doc/Makefile.am index 345666e..e1c461d 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,2 +1,8 @@ ## Process this file with automake to produce Makefile.in -EXTRA_DIST=faq.html PROTOCOL HISTORY fsp-faq.sgml +EXTRA_DIST=faq.html PROTOCOL HISTORY fsp-faq.sgml fsp-faq.html + +noinst_DATA = fsp-faq.html + +SUFFIXES = .html .sgml +.sgml.html: + sgmlfmt -d docbook -f html $< diff --git a/doc/PROTOCOL b/doc/PROTOCOL index 35a9221..541ae31 100644 --- a/doc/PROTOCOL +++ b/doc/PROTOCOL @@ -1,7 +1,7 @@ FILE SERVICE PROTOCOL VERSION 2 - Document version 0.10 - Last updated 18 Oct 2004 + Document version 0.11 + Last updated 24 Oct 2004 Also known as File Slurping Protocol, @@ -184,13 +184,24 @@ FSP File servers MUST supports following commands: file position: position in directory data: ASCIIZ directory name xtra data: (not required) - word - size of reply's optional data block + word - prefered size of directory block reply file position: same as in request data: directory listing (format follows) xtra data: not used +Directory listing is transfered in similar way as file transfer. Directory +listing is divided into blocks of equal size, only exception is last block +which can be shorter. Default and maximum size of directory listing block is +1024 bytes. Size of directory block can be changed by server using extra +data information sent by client. + +Directory blocks can't be split accross message boundary and client +can't do seeking to any arbitary offset, which can broke dirblock +into 2 messages. In short: Every message can contain only one +unsplited directory block. + RDIRENT is the structure of a directory entry contained in a directory listing. Each entry contains a HEADER, which has 4 bytes quantity 'time' in Unix standard format, a 4 bytes quantity 'size', and 1 byte of 'type'. Header is @@ -201,8 +212,9 @@ At this point, if the next RDIRENT entry to follow will spread across 1k boundary, then two possible things will happen: 1) if the HEADER fits between this entry and the 1k boundary, - a complete header will be filled in with a 'type' set to RDTYPE_SKIP. - Repeat this step as neceseary until no HEADER fits. + a complete header will be filled in with a 'type' set to RDTYPE_SKIP + and no name followed - just pad to 1k boundary. Clients which sees + RDTYPE_SKIP header skips over next data in packet. 2) if the HEADER does not fit, then simply pad to the 1k boundary. This will make sure that messages carrying directory information carry only diff --git a/doc/fsp-faq.sgml b/doc/fsp-faq.sgml index bd85b90..fa5aa0e 100644 --- a/doc/fsp-faq.sgml +++ b/doc/fsp-faq.sgml @@ -1,4 +1,4 @@ - ]> @@ -10,215 +10,366 @@ "Hoaxter" Hoexter + + Radim + "HSN" + Kolar + +
hsn@sendmail.cz.nospam
+
+
+ + 2003-2004 + Authors + - This document is a major rewrite of the old - FSP FAQ. - I started with this FAQ from scratch cause nearly all parts of the old FAQ where outdated. This new FAQ is maintained - in DocBook SGML. Send patches to the fsp-devel Mailinglist (FIXME link to id gethelpml) or directly to me - sven@du-gehoerst-mir.de-nospam. You should be able to find the latest SGML version of this FAQ in the - fsp CVS at sf.net or here - http://sven.stormbind.net/fsp/fsp-doc/fsp-faq.sgml - (be aware the sf.net public CVS is often about a week behind the "real" CVS :( ) + This document is a major rewrite of the old + FSP FAQ. + I started with this FAQ from scratch cause nearly all parts of the old FAQ where outdated. This new FAQ is maintained + in DocBook SGML. Send patches to the fsp-devel Mailinglist (FIXME link to id gethelpml) or directly to me + sven@du-gehoerst-mir.de-nospam. You should be able to find the latest SGML version of this FAQ in the + fsp CVS at sf.net or here + http://sven.stormbind.net/fsp/fsp-doc/fsp-faq.sgml + (be aware the sf.net public CVS is often about a week behind the "real" CVS :( ) - + - + - + Introduction What is FSP? - FSP stands for &fsp;. In general FSP is what anonymous ftp should be, a fast and bandwith friendly - way to access publicly avaible data. FSP is UDP based so it doesn't have all the protocol overhead you've with TCP - based transfer protocols. You can find the latest protocol definition right here - http://fsp.sourceforge.net/doc/PROTOCOL.txt - or in the source distribution in the "doc" subdirectory. - - - - In the past various people maintained the FSP code base. At the moment Radim Kolar hsn@cybermail.net-nospam - is maintaining FSP. If you like to get involved take a look at the FSP - Homepage and the - FSP project page. + FSP stands for &fsp;. In general FSP is what anonymous ftp should be: a reliable and bandwidth friendly + way to access publicly available data. + + FSP is a UDP based protocol for transferring files around. It has + many benefits over FTP, mainly for running + anonymous archives. FSP protocol is valuable in all kinds of + environments because it is one of the only TCP/IP protocols that is not + aggressive about bandwidth, while still being sufficiently fault tolerant. + + + + FSP Project + + FSP is (and always has been) open source project with MIT/X11 source + code license. See for more details. + + In the past various people maintained the FSP code base. + At the moment Radim Kolar + is maintaining FSP. FSP project is now hosted on + Source Forge.NET. + + If you like to get involved take a look at the FSP + Homepage and the + FSP project page. - Why and for what should I use FSP? - The &fsp; has its strengths on slow lines and connections with a high package lose like a Wireless LAN. In general the &fsp; is - what anonymous FTP should be - a fast and bandwith friendly way for anonymous file access. + The &fsp; has its strengths on slow lines and connections with a high packets lose like a Wireless LAN or radio packet networks. Because FSP is simple + and lightweight, it is very well suited for use in embedded devices area. + + FSP protocol is not aggressive about bandwidth and was designed + to resist against users which want to do some bandwidth-related attacks. + It can support more users, because the same available + bandwidth is divided into smaller parts. + Because FSP uses less bandwidth, FSP transfers takes about + 2-3 times longer than with TCP-based protocols. + + FSP protocol + chooses reliability and simplicity over raw transfer speed. + File transfer takes longer, but there are much more resistant + against network failure. + + Entire connection management is moved from server to client side, + which solves problems with aborted and timed out transfer. Because + FSP is stateless protocol, it can survive even server reboot without + interruption. - Comparison between fsp and other protocols - - We did some benchmarking so that you can see how fsp performce - compared to various other command protocols used to transfer - files. - - - FSP vs. http - FIXME - - - FSP vs. ftp - FIXME - - - FSP vs. tftp - FIXME - + Comparison between fsp and other protocols + + We did some benchmarking so that you can see how fsp performance + compared to various other command protocols used to transfer + files. + + Benchmark results + + You should understand that FSP is slower than TCP + based protocols by design. TCP protocol can have more than + one packet flying in network (usually 2-3) while FSP was designed to + make it impossible (See ). + + All TCP protocols have on normal networks + (max 15% packet loss) higher transfer rate than FSP. + FSP is clean winner when it comes to overloaded sites or lines. + These benchmarks were performed on 10Mbit LAN with zero traffic. + Transfer rate is quite slow even for 10Mb because one of testing + machines was old AMD K5/90 and both machines used cheap clone ISA NE2000 Ethernet cards. + Test file was 3656535 bytes long (FreeBSD kernel image). + Test results shows, that FSP is about 2-2.5 times slower than TCP. + + tftp 15.2 secs 240.6 kB/s + ftp 5.18 secs 688.7 kB/s + http 5.32 secs 685.4 KB/s + sftp 8.0 secs 446.4 KB/s + fsp 12.7 secs 287.7 kB/s + + + + FSP vs. http + + HTTP: widely supported by servers, clients and proxies. + De-facto standard protocol for accessing information today. + + FSP: Can provide directory listings, which are not supported + by standard HTTP/1.1 protocol. You need to have configured + WebDAV server-side extension for that. + + + + FSP vs. ftp + + FTP: widely supported by servers and clients, more difficult + to proxy than HTTP, uses 2 TCP connections, can provide directory + listings in site-specific format, more heavy service than HTTP. + + FSP: do not needs to make any connection, very lightweight service, + directory listings are standardized by protocol. + + + FSP vs. tftp + + tftp is UDP (but TCP version also exists) used mainly + for loading boot and flash ROM images from network. + + TFTP: more widely used, standardized, most network cards + can boot image via TFTP. + + FSP: about 1.5-times faster because of bigger packet size, + supports directory listings, + can query file date and size, + can provide random access to file and supports opening + more than one file, supports access control, timeout + management moved to client side, stateless. + + - + + Why should I run fspd? + + If you are providing anonymous archive (FTP,WWW), you should also + offer FSP access. FSP daemon is a very lightweight process, never + forks and you will never have more than one copy running around. + On todays machines, it has zero performance impact. + + Running fspd allows people with overloaded or lousy lines to get + files from your archive. It also helps people during spikes periods + when archive is very busy. + + There are also some people which likes slower FSP downloads, because + it saves their bandwidth for interactive tasks. + + It is not true that UDP based protocols are unsecure. &fsp; provides + the same security level as anonymous FTP and is much more resistant + against denial of service attack. It is nearly impossible to overload + fsp server by flooding. On other side, TCP-based protocols are very + simple to SYN flood. Where can I download FSP? - You can Download the FSP source Distribtuion from the - sf.net mirror network - or from - ibblio. - If you have the FSP tools already you can access the latest FSP release - via fsp on hxt.homelinux.org or wrack.telelev.net both running fspd on - port 2221. + You can Download the FSP source Distribution from the + sf.net mirror network + or from + ibblio. + If you have the FSP tools already you can access the latest FSP release + via fsp on hxt.homelinux.org or wrack.telelev.net both running fspd on + port 2221. - When you're interesseted in the latest, and of course greates, - development done in FSP please try a CVS checkout. - Explanation and all needed information to do this can be found - on the - sf.net CVS page. + When you're interested in the latest, and of course greatest, + development done in FSP please try a CVS checkout. + Explanation and all needed information to do this can be found + on the + sf.net CVS page. Where can I find help? - First of all various people took the time to write nice documentation on FSP including the fspd Server - and the client tools. Please read those fine documents bevor you start writing to the mailinglists. + First of all various people took the time to write nice documentation on FSP including the fspd Server + and the client tools. Please read those fine documents before you start writing to the mailinglists. - RTFM - Read the fine Manuals - - The &fsp; definition - The latest version of the FAQ - The old FAQ - + RTFM - Read the fine Manuals + + The &fsp; definition + The latest version of the FAQ, + The old FSP FAQ. + - The Mailinglists - - For developing issue writte to the fsp-dev mainlinglist. For end-user questions - and questions on how to configure your server/client write to the fsp-user Mailinglist. - You can find more information on how to subscribe/unsubscribe to the mailinglist and - the archiv on the - FSP mailinglist page - on sf.net. - Please bevor you write to one of the provided mailinglists read and understand - ESRs HowTo ask smart questions - and - learn.to/quote - + The Mailinglists + + For developing issue writte to the fsp-dev mainlinglist. For end-user questions + and questions on how to configure your server/client write to the fsp-user Mailinglist. + You can find more information on how to subscribe/unsubscribe to the mailinglist and + the archive on the + FSP mailinglist page + on sf.net. + Please before you write to one of the provided mailinglists read and understand + ESRs HowTo ask smart questions + and + learn.to/quote + Licence, copyright and redistribution of FSP - Most parts of the &fsp; distribution are free and licenced under a - BSD/MIT/X licence. + FSP code base uses MIT/X11 license (also known as 2-point BSD + license). This license is very friendly to users in commercional area. + You can freely develop, use and sell your commercional implementation of &fsp;. + + + Do not claim that you have wrote this software. + + + Do not sue us if something breaks. + + + Summary: As long as you will not remove our copyrights from source code + and will not go with your complains to the court, you can + do with this software anything you want. - From the COPYRIGHT file in the source distribution (e-mail addresses removed): - - Authors: - Radim Kolar (Current FSP maintainer) - Andrew Doherty - Michael Fischbein - Cimarron D. Taylor - Guido van Rossum - Wen-King Su - Philip G. Richards - Michael Meskes - Rich $alz - gjc@mitech.com - Joseph_Traub - Sven (VMS port maintainer) - Very Mad Students, University of Karlsruhe, FRG (VMS port) - - Copyright: - All of the FSP code is free software. Most of fsp falls under two - copyrights, the 2-point BSD copyright and one by Wen-King Su: - - Copyright (c) 1991 by Wen-King Su (wen-king@vlsi.cs.caltech.edu) - You may copy or modify this file in any manner you wish, provided - that this notice is always included, and that you hold the author - harmless for any loss or damage resulting from the installation or - use of this software. - - Other contributions to fsp fall under different copyrights: - - This file is Copyright 1992 by Philip G. Richards. All Rights Reserved. - See the file README that came with this distribution for permissions on - code usage, copying, and distribution. It comes with absolutely no warranty. - - Copyright (c) 1993 by Michael Meskes - You may copy or modify this file in any manner you wish, provided - that this notice is always included, and that you hold the author - harmless for any loss or damage resulting from the installation or - use of this software. - + From the COPYRIGHT file in the source distribution (e-mail addresses removed): + + Authors: + Radim Kolar (Current FSP maintainer) + Andrew Doherty + Michael Fischbein + Cimarron D. Taylor + Guido van Rossum + Wen-King Su + Philip G. Richards + Michael Meskes + Rich $alz + gjc@mitech.com + Joseph_Traub + Sven (VMS port maintainer) + Very Mad Students, University of Karlsruhe, FRG (VMS port) + + Copyright: + All of the FSP code is free software. Most of fsp falls under two + copyrights, the 2-point BSD copyright and one by Wen-King Su: + + Copyright (c) 1991 by Wen-King Su (wen-king@vlsi.cs.caltech.edu) + You may copy or modify this file in any manner you wish, provided + that this notice is always included, and that you hold the author + harmless for any loss or damage resulting from the installation or + use of this software. + + Other contributions to fsp fall under different copyrights: + + This file is Copyright 1992 by Philip G. Richards. All Rights Reserved. + See the file README that came with this distribution for permissions on + code usage, copying, and distribution. It comes with absolutely no warranty. + + Copyright (c) 1993 by Michael Meskes + You may copy or modify this file in any manner you wish, provided + that this notice is always included, and that you hold the author + harmless for any loss or damage resulting from the installation or + use of this software. + Project history - This should give you a short overview over the development of the &fsp; - in the past and today. + This should give you a short overview over the development of the &fsp; + in the past and today. - The past - - In the past various people worked on the &fsp;, see - - + The past + + FSP development started in a very old days. From source code and man + page time stamps we can see that it was working and alive in 1988. + FSP versions 1.0 and 2.0 was born in Dec 1991. After that two first + releases FSP goes to the active life. + + + FSP active development era ends in May 1993 when last official + version 2.7.1 was released. It was quite popular at that time, + mainly because it was superior way for transferring warez around + when compared with FTP. Because of this, FSP protocol got a bad + name and suffers from it even today. I see that FSP warez era + as practical demonstration how can FSP perform nicely on + overloaded sites and lines. + + + After that then was some work on + FSP in 1995 and which ends with now famous FSP version 2.8.1b3 + in March 1996. This version is used on some + servers today because Debian Woody has it, but 2.7.1 is still + used on some forgotten machines in universities. It has also + known security issues (fspd follows symlinks), but at this + time there were viewed as feature, not a bug. + + + Radim Kolar released 2.8.1b4 in 2001, which was just some bugfixed + version of 2.8.1b3 untouched from 1997 when I ported it to OS/2. + Active working on FSP again starts on 25 June 2003 when Version + 2.8.1b5 goes out. Major parts of FSP server code was rewrited + for higher performance and many old bugs in FSP code fixed. + + + In the past various people worked on the &fsp;, see + + - Today - - Radim Kolar started to work on the &fsp; again in June 2003. Since - that time he's maintaining the source distribution. You can reach him - on the mailinglists or via e-mail hsn@cybermail.net-nospam. - - - Since September 2003 Sven Hoexter is working on parts of the documentation. - You can reach him on the mailinglists or via e-mail - sven@du-gehoerst-mir.de-nospam. + Today + + Radim Kolar started to work on the &fsp; again in June 2003. Since + that time he's maintaining the source distribution. You can reach him + on the mailinglists or via e-mail hsn@sendmail.cz-nospam. + + + Since September 2003 Sven Hoexter is working on parts of the documentation. + You can reach him on the mailinglists or via e-mail + sven@du-gehoerst-mir.de-nospam. Developers and contributors - See + See - + @@ -227,33 +378,33 @@ How to get FSP - How to obtain the source distribution - - There are several ways to obtain the fsp source distribution please take a - look at - + How to obtain the source distribution + + There are several ways to obtain the fsp source distribution please take a + look at + - How to obtain a binary copy - - At the moment we provide only rpms for RedHat 7.3. You can download the rpm file from - the sf.net download page or from wrack.telelev.net. wrack.telelev.net provides the - rpms in a apt-rpm useable way, for more information about apt-rpm and the packages on - wrack.telelev.net take a look at http://sven.stormbind.net/aptrpm/ - If you're running other rpm based distributions you can try to rebuild the source rpms. - + How to obtain a binary copy + + At the moment we provide only RPM for RedHat 7.3. You can download the RPM file from + the sf.net download page or from wrack.telelev.net. wrack.telelev.net provides the + rpms in a apt-rpm usable way, for more information about apt-rpm and the packages on + wrack.telelev.net take a look at http://sven.stormbind.net/aptrpm/ + If you're running other rpm based distributions you can try to rebuild the source rpms. + How to compile the source code - After download you should be able to unpack the source tarball, change - into the source directory and use - ./configure - make - su - make install + After download you should be able to unpack the source tarball, change + into the source directory and use + ./configure + make + su + make install @@ -276,21 +427,21 @@ How to setup a basic fspd.conf - FIXME + FIXME - How can I start the fspd automagicly on reboot? + How can I start the fspd automagicly on reboot? - FIXME - Use init scripts ;) + FIXME + Use init scripts ;) - How to setup restrictions on directorys? - - FIXME - + How to setup restrictions on directories? + + FIXME + @@ -306,19 +457,91 @@ The fsp tool collection - FIXME - Information about all the f* commands + FIXME + Information about all the f* commands fspclient - FIXME - Enter information about fspclient here + FSP Client is FTP-like interface for FSP. + It look exactly like classic FTP does, but uses different transfer + protocol. People usually find this program easier to use that + multiple client programs in FSP protocol suite. If you are at least + somewhat familiar with command line FTP and want to try FSP, this + program is right for you. + + FSP client homepage is http://fspclient.sourceforge.net. + + Using FSP in browser + + If you want a GUI, the easiest way is to use FSP directly + from your web browser. + You need to download and install FSP Java LIB and Proxy server. Read included docs for install instructions. - - \ No newline at end of file + + FSP technology in-depth + + Protocol definition document + + FSP protocol is well documented. + You can find the latest protocol definition right here + http://fsp.sourceforge.net/doc/PROTOCOL.txt + or in the source distribution in the "doc" subdirectory. + + + Transport mechanism used by FSP + + FSP is datagram-based protocol. FSP protocol itself do not require + reliable underlying transport. FSP can operate even without + any Layer 2 and Layer 3 transports only with some extra features + disabled. FSP can be implemented in all kinds of environments. + This makes FSP very suitable for embedded devices area. + + When used in TCP/IP based networks, + UDP is used for transporting of FSP datagrams, this lowers protocol + overhead by skipping TCP level, which is not needed, because FSP + handles connection management by itself. This method is standardized + in . + + + FSP frames can be packed directly info Ethernet 802.2, USB or GSM + frames. Biggest advantage of using FSP in that areas is simplicity. + FSP protocol is very simple to implement. + + + Network bandwidth protection + + One of interesting parts of underlying network technology used + by FSP is how protocol design restrict user from sending + more than one packet into network. + + FSP uses very simple method: Every packet sent from server to client + contains a 16-bit long, pseudo random key. Client needs this key + for sending next request to server. Server will ignore requests + with wrong key, unless there was no previous activity recorded + for client IP address in last 60 seconds. + + Server remembers for each IP not only nextkey, but also previous + key. When packet's key matches previously stored key -- it is + resend from client. + This method also allows ignore duplicate requests by server for + action which should not be done more than once (for example mkdir). + + In each packet sent by client to server is sequence number. + Server will echo this number back to the client, when packet is + processed. There is no restriction on that number, client can + use anything he wants. + Primary purpose + of this sequence number is possibility to put unique mark on + every network packet. Client can use this information and + fine-tune its retry algorithm + by computing packet loss ratio of network, and duplicate + packet rate. + + +