@@ -1,942 +0,0 @@
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.Collections.Specialized ;
using System.Text ;
using MediaBrowser.Model.Services ;
namespace MediaBrowser.Server.Implementations.HttpServer.SocketSharp
{
public static class MyHttpUtility
{
sealed class HttpQSCollection : NameValueCollection
{
public override string ToString ( )
{
int count = Count ;
if ( count = = 0 )
return "" ;
StringBuilder sb = new StringBuilder ( ) ;
string [ ] keys = AllKeys ;
for ( int i = 0 ; i < count ; i + + )
{
sb . AppendFormat ( "{0}={1}&" , keys [ i ] , this [ keys [ i ] ] ) ;
}
if ( sb . Length > 0 )
sb . Length - - ;
return sb . ToString ( ) ;
}
}
// Must be sorted
static readonly long [ ] entities = new long [ ] {
( long ) 'A' < < 56 | ( long ) 'E' < < 48 | ( long ) 'l' < < 40 | ( long ) 'i' < < 32 | ( long ) 'g' < < 24 ,
( long ) 'A' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'A' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'A' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'A' < < 56 | ( long ) 'l' < < 48 | ( long ) 'p' < < 40 | ( long ) 'h' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'A' < < 56 | ( long ) 'r' < < 48 | ( long ) 'i' < < 40 | ( long ) 'n' < < 32 | ( long ) 'g' < < 24 ,
( long ) 'A' < < 56 | ( long ) 't' < < 48 | ( long ) 'i' < < 40 | ( long ) 'l' < < 32 | ( long ) 'd' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'A' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'B' < < 56 | ( long ) 'e' < < 48 | ( long ) 't' < < 40 | ( long ) 'a' < < 32 ,
( long ) 'C' < < 56 | ( long ) 'c' < < 48 | ( long ) 'e' < < 40 | ( long ) 'd' < < 32 | ( long ) 'i' < < 24 | ( long ) 'l' < < 16 ,
( long ) 'C' < < 56 | ( long ) 'h' < < 48 | ( long ) 'i' < < 40 ,
( long ) 'D' < < 56 | ( long ) 'a' < < 48 | ( long ) 'g' < < 40 | ( long ) 'g' < < 32 | ( long ) 'e' < < 24 | ( long ) 'r' < < 16 ,
( long ) 'D' < < 56 | ( long ) 'e' < < 48 | ( long ) 'l' < < 40 | ( long ) 't' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'E' < < 56 | ( long ) 'T' < < 48 | ( long ) 'H' < < 40 ,
( long ) 'E' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'E' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'E' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'E' < < 56 | ( long ) 'p' < < 48 | ( long ) 's' < < 40 | ( long ) 'i' < < 32 | ( long ) 'l' < < 24 | ( long ) 'o' < < 16 | ( long ) 'n' < < 8 ,
( long ) 'E' < < 56 | ( long ) 't' < < 48 | ( long ) 'a' < < 40 ,
( long ) 'E' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'G' < < 56 | ( long ) 'a' < < 48 | ( long ) 'm' < < 40 | ( long ) 'm' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'I' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'I' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'I' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'I' < < 56 | ( long ) 'o' < < 48 | ( long ) 't' < < 40 | ( long ) 'a' < < 32 ,
( long ) 'I' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'K' < < 56 | ( long ) 'a' < < 48 | ( long ) 'p' < < 40 | ( long ) 'p' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'L' < < 56 | ( long ) 'a' < < 48 | ( long ) 'm' < < 40 | ( long ) 'b' < < 32 | ( long ) 'd' < < 24 | ( long ) 'a' < < 16 ,
( long ) 'M' < < 56 | ( long ) 'u' < < 48 ,
( long ) 'N' < < 56 | ( long ) 't' < < 48 | ( long ) 'i' < < 40 | ( long ) 'l' < < 32 | ( long ) 'd' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'N' < < 56 | ( long ) 'u' < < 48 ,
( long ) 'O' < < 56 | ( long ) 'E' < < 48 | ( long ) 'l' < < 40 | ( long ) 'i' < < 32 | ( long ) 'g' < < 24 ,
( long ) 'O' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'O' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'O' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'O' < < 56 | ( long ) 'm' < < 48 | ( long ) 'e' < < 40 | ( long ) 'g' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'O' < < 56 | ( long ) 'm' < < 48 | ( long ) 'i' < < 40 | ( long ) 'c' < < 32 | ( long ) 'r' < < 24 | ( long ) 'o' < < 16 | ( long ) 'n' < < 8 ,
( long ) 'O' < < 56 | ( long ) 's' < < 48 | ( long ) 'l' < < 40 | ( long ) 'a' < < 32 | ( long ) 's' < < 24 | ( long ) 'h' < < 16 ,
( long ) 'O' < < 56 | ( long ) 't' < < 48 | ( long ) 'i' < < 40 | ( long ) 'l' < < 32 | ( long ) 'd' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'O' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'P' < < 56 | ( long ) 'h' < < 48 | ( long ) 'i' < < 40 ,
( long ) 'P' < < 56 | ( long ) 'i' < < 48 ,
( long ) 'P' < < 56 | ( long ) 'r' < < 48 | ( long ) 'i' < < 40 | ( long ) 'm' < < 32 | ( long ) 'e' < < 24 ,
( long ) 'P' < < 56 | ( long ) 's' < < 48 | ( long ) 'i' < < 40 ,
( long ) 'R' < < 56 | ( long ) 'h' < < 48 | ( long ) 'o' < < 40 ,
( long ) 'S' < < 56 | ( long ) 'c' < < 48 | ( long ) 'a' < < 40 | ( long ) 'r' < < 32 | ( long ) 'o' < < 24 | ( long ) 'n' < < 16 ,
( long ) 'S' < < 56 | ( long ) 'i' < < 48 | ( long ) 'g' < < 40 | ( long ) 'm' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'T' < < 56 | ( long ) 'H' < < 48 | ( long ) 'O' < < 40 | ( long ) 'R' < < 32 | ( long ) 'N' < < 24 ,
( long ) 'T' < < 56 | ( long ) 'a' < < 48 | ( long ) 'u' < < 40 ,
( long ) 'T' < < 56 | ( long ) 'h' < < 48 | ( long ) 'e' < < 40 | ( long ) 't' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'U' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'U' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'U' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'U' < < 56 | ( long ) 'p' < < 48 | ( long ) 's' < < 40 | ( long ) 'i' < < 32 | ( long ) 'l' < < 24 | ( long ) 'o' < < 16 | ( long ) 'n' < < 8 ,
( long ) 'U' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'X' < < 56 | ( long ) 'i' < < 48 ,
( long ) 'Y' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'Y' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'Z' < < 56 | ( long ) 'e' < < 48 | ( long ) 't' < < 40 | ( long ) 'a' < < 32 ,
( long ) 'a' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'a' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'a' < < 56 | ( long ) 'c' < < 48 | ( long ) 'u' < < 40 | ( long ) 't' < < 32 | ( long ) 'e' < < 24 ,
( long ) 'a' < < 56 | ( long ) 'e' < < 48 | ( long ) 'l' < < 40 | ( long ) 'i' < < 32 | ( long ) 'g' < < 24 ,
( long ) 'a' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'a' < < 56 | ( long ) 'l' < < 48 | ( long ) 'e' < < 40 | ( long ) 'f' < < 32 | ( long ) 's' < < 24 | ( long ) 'y' < < 16 | ( long ) 'm' < < 8 ,
( long ) 'a' < < 56 | ( long ) 'l' < < 48 | ( long ) 'p' < < 40 | ( long ) 'h' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'a' < < 56 | ( long ) 'm' < < 48 | ( long ) 'p' < < 40 ,
( long ) 'a' < < 56 | ( long ) 'n' < < 48 | ( long ) 'd' < < 40 ,
( long ) 'a' < < 56 | ( long ) 'n' < < 48 | ( long ) 'g' < < 40 ,
( long ) 'a' < < 56 | ( long ) 'p' < < 48 | ( long ) 'o' < < 40 | ( long ) 's' < < 32 ,
( long ) 'a' < < 56 | ( long ) 'r' < < 48 | ( long ) 'i' < < 40 | ( long ) 'n' < < 32 | ( long ) 'g' < < 24 ,
( long ) 'a' < < 56 | ( long ) 's' < < 48 | ( long ) 'y' < < 40 | ( long ) 'm' < < 32 | ( long ) 'p' < < 24 ,
( long ) 'a' < < 56 | ( long ) 't' < < 48 | ( long ) 'i' < < 40 | ( long ) 'l' < < 32 | ( long ) 'd' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'a' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'b' < < 56 | ( long ) 'd' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 'b' < < 56 | ( long ) 'e' < < 48 | ( long ) 't' < < 40 | ( long ) 'a' < < 32 ,
( long ) 'b' < < 56 | ( long ) 'r' < < 48 | ( long ) 'v' < < 40 | ( long ) 'b' < < 32 | ( long ) 'a' < < 24 | ( long ) 'r' < < 16 ,
( long ) 'b' < < 56 | ( long ) 'u' < < 48 | ( long ) 'l' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'c' < < 56 | ( long ) 'a' < < 48 | ( long ) 'p' < < 40 ,
( long ) 'c' < < 56 | ( long ) 'c' < < 48 | ( long ) 'e' < < 40 | ( long ) 'd' < < 32 | ( long ) 'i' < < 24 | ( long ) 'l' < < 16 ,
( long ) 'c' < < 56 | ( long ) 'e' < < 48 | ( long ) 'd' < < 40 | ( long ) 'i' < < 32 | ( long ) 'l' < < 24 ,
( long ) 'c' < < 56 | ( long ) 'e' < < 48 | ( long ) 'n' < < 40 | ( long ) 't' < < 32 ,
( long ) 'c' < < 56 | ( long ) 'h' < < 48 | ( long ) 'i' < < 40 ,
( long ) 'c' < < 56 | ( long ) 'i' < < 48 | ( long ) 'r' < < 40 | ( long ) 'c' < < 32 ,
( long ) 'c' < < 56 | ( long ) 'l' < < 48 | ( long ) 'u' < < 40 | ( long ) 'b' < < 32 | ( long ) 's' < < 24 ,
( long ) 'c' < < 56 | ( long ) 'o' < < 48 | ( long ) 'n' < < 40 | ( long ) 'g' < < 32 ,
( long ) 'c' < < 56 | ( long ) 'o' < < 48 | ( long ) 'p' < < 40 | ( long ) 'y' < < 32 ,
( long ) 'c' < < 56 | ( long ) 'r' < < 48 | ( long ) 'a' < < 40 | ( long ) 'r' < < 32 | ( long ) 'r' < < 24 ,
( long ) 'c' < < 56 | ( long ) 'u' < < 48 | ( long ) 'p' < < 40 ,
( long ) 'c' < < 56 | ( long ) 'u' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 | ( long ) 'e' < < 24 | ( long ) 'n' < < 16 ,
( long ) 'd' < < 56 | ( long ) 'A' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'd' < < 56 | ( long ) 'a' < < 48 | ( long ) 'g' < < 40 | ( long ) 'g' < < 32 | ( long ) 'e' < < 24 | ( long ) 'r' < < 16 ,
( long ) 'd' < < 56 | ( long ) 'a' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'd' < < 56 | ( long ) 'e' < < 48 | ( long ) 'g' < < 40 ,
( long ) 'd' < < 56 | ( long ) 'e' < < 48 | ( long ) 'l' < < 40 | ( long ) 't' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'd' < < 56 | ( long ) 'i' < < 48 | ( long ) 'a' < < 40 | ( long ) 'm' < < 32 | ( long ) 's' < < 24 ,
( long ) 'd' < < 56 | ( long ) 'i' < < 48 | ( long ) 'v' < < 40 | ( long ) 'i' < < 32 | ( long ) 'd' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'e' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'e' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'e' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'e' < < 56 | ( long ) 'm' < < 48 | ( long ) 'p' < < 40 | ( long ) 't' < < 32 | ( long ) 'y' < < 24 ,
( long ) 'e' < < 56 | ( long ) 'm' < < 48 | ( long ) 's' < < 40 | ( long ) 'p' < < 32 ,
( long ) 'e' < < 56 | ( long ) 'n' < < 48 | ( long ) 's' < < 40 | ( long ) 'p' < < 32 ,
( long ) 'e' < < 56 | ( long ) 'p' < < 48 | ( long ) 's' < < 40 | ( long ) 'i' < < 32 | ( long ) 'l' < < 24 | ( long ) 'o' < < 16 | ( long ) 'n' < < 8 ,
( long ) 'e' < < 56 | ( long ) 'q' < < 48 | ( long ) 'u' < < 40 | ( long ) 'i' < < 32 | ( long ) 'v' < < 24 ,
( long ) 'e' < < 56 | ( long ) 't' < < 48 | ( long ) 'a' < < 40 ,
( long ) 'e' < < 56 | ( long ) 't' < < 48 | ( long ) 'h' < < 40 ,
( long ) 'e' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'e' < < 56 | ( long ) 'u' < < 48 | ( long ) 'r' < < 40 | ( long ) 'o' < < 32 ,
( long ) 'e' < < 56 | ( long ) 'x' < < 48 | ( long ) 'i' < < 40 | ( long ) 's' < < 32 | ( long ) 't' < < 24 ,
( long ) 'f' < < 56 | ( long ) 'n' < < 48 | ( long ) 'o' < < 40 | ( long ) 'f' < < 32 ,
( long ) 'f' < < 56 | ( long ) 'o' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'l' < < 24 | ( long ) 'l' < < 16 ,
( long ) 'f' < < 56 | ( long ) 'r' < < 48 | ( long ) 'a' < < 40 | ( long ) 'c' < < 32 | ( long ) '1' < < 24 | ( long ) '2' < < 16 ,
( long ) 'f' < < 56 | ( long ) 'r' < < 48 | ( long ) 'a' < < 40 | ( long ) 'c' < < 32 | ( long ) '1' < < 24 | ( long ) '4' < < 16 ,
( long ) 'f' < < 56 | ( long ) 'r' < < 48 | ( long ) 'a' < < 40 | ( long ) 'c' < < 32 | ( long ) '3' < < 24 | ( long ) '4' < < 16 ,
( long ) 'f' < < 56 | ( long ) 'r' < < 48 | ( long ) 'a' < < 40 | ( long ) 's' < < 32 | ( long ) 'l' < < 24 ,
( long ) 'g' < < 56 | ( long ) 'a' < < 48 | ( long ) 'm' < < 40 | ( long ) 'm' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'g' < < 56 | ( long ) 'e' < < 48 ,
( long ) 'g' < < 56 | ( long ) 't' < < 48 ,
( long ) 'h' < < 56 | ( long ) 'A' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'h' < < 56 | ( long ) 'a' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'h' < < 56 | ( long ) 'e' < < 48 | ( long ) 'a' < < 40 | ( long ) 'r' < < 32 | ( long ) 't' < < 24 | ( long ) 's' < < 16 ,
( long ) 'h' < < 56 | ( long ) 'e' < < 48 | ( long ) 'l' < < 40 | ( long ) 'l' < < 32 | ( long ) 'i' < < 24 | ( long ) 'p' < < 16 ,
( long ) 'i' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'i' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'i' < < 56 | ( long ) 'e' < < 48 | ( long ) 'x' < < 40 | ( long ) 'c' < < 32 | ( long ) 'l' < < 24 ,
( long ) 'i' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'i' < < 56 | ( long ) 'm' < < 48 | ( long ) 'a' < < 40 | ( long ) 'g' < < 32 | ( long ) 'e' < < 24 ,
( long ) 'i' < < 56 | ( long ) 'n' < < 48 | ( long ) 'f' < < 40 | ( long ) 'i' < < 32 | ( long ) 'n' < < 24 ,
( long ) 'i' < < 56 | ( long ) 'n' < < 48 | ( long ) 't' < < 40 ,
( long ) 'i' < < 56 | ( long ) 'o' < < 48 | ( long ) 't' < < 40 | ( long ) 'a' < < 32 ,
( long ) 'i' < < 56 | ( long ) 'q' < < 48 | ( long ) 'u' < < 40 | ( long ) 'e' < < 32 | ( long ) 's' < < 24 | ( long ) 't' < < 16 ,
( long ) 'i' < < 56 | ( long ) 's' < < 48 | ( long ) 'i' < < 40 | ( long ) 'n' < < 32 ,
( long ) 'i' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'k' < < 56 | ( long ) 'a' < < 48 | ( long ) 'p' < < 40 | ( long ) 'p' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'l' < < 56 | ( long ) 'A' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'l' < < 56 | ( long ) 'a' < < 48 | ( long ) 'm' < < 40 | ( long ) 'b' < < 32 | ( long ) 'd' < < 24 | ( long ) 'a' < < 16 ,
( long ) 'l' < < 56 | ( long ) 'a' < < 48 | ( long ) 'n' < < 40 | ( long ) 'g' < < 32 ,
( long ) 'l' < < 56 | ( long ) 'a' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 'l' < < 56 | ( long ) 'a' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'l' < < 56 | ( long ) 'c' < < 48 | ( long ) 'e' < < 40 | ( long ) 'i' < < 32 | ( long ) 'l' < < 24 ,
( long ) 'l' < < 56 | ( long ) 'd' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 'l' < < 56 | ( long ) 'e' < < 48 ,
( long ) 'l' < < 56 | ( long ) 'f' < < 48 | ( long ) 'l' < < 40 | ( long ) 'o' < < 32 | ( long ) 'o' < < 24 | ( long ) 'r' < < 16 ,
( long ) 'l' < < 56 | ( long ) 'o' < < 48 | ( long ) 'w' < < 40 | ( long ) 'a' < < 32 | ( long ) 's' < < 24 | ( long ) 't' < < 16 ,
( long ) 'l' < < 56 | ( long ) 'o' < < 48 | ( long ) 'z' < < 40 ,
( long ) 'l' < < 56 | ( long ) 'r' < < 48 | ( long ) 'm' < < 40 ,
( long ) 'l' < < 56 | ( long ) 's' < < 48 | ( long ) 'a' < < 40 | ( long ) 'q' < < 32 | ( long ) 'u' < < 24 | ( long ) 'o' < < 16 ,
( long ) 'l' < < 56 | ( long ) 's' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 'l' < < 56 | ( long ) 't' < < 48 ,
( long ) 'm' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'm' < < 56 | ( long ) 'd' < < 48 | ( long ) 'a' < < 40 | ( long ) 's' < < 32 | ( long ) 'h' < < 24 ,
( long ) 'm' < < 56 | ( long ) 'i' < < 48 | ( long ) 'c' < < 40 | ( long ) 'r' < < 32 | ( long ) 'o' < < 24 ,
( long ) 'm' < < 56 | ( long ) 'i' < < 48 | ( long ) 'd' < < 40 | ( long ) 'd' < < 32 | ( long ) 'o' < < 24 | ( long ) 't' < < 16 ,
( long ) 'm' < < 56 | ( long ) 'i' < < 48 | ( long ) 'n' < < 40 | ( long ) 'u' < < 32 | ( long ) 's' < < 24 ,
( long ) 'm' < < 56 | ( long ) 'u' < < 48 ,
( long ) 'n' < < 56 | ( long ) 'a' < < 48 | ( long ) 'b' < < 40 | ( long ) 'l' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'n' < < 56 | ( long ) 'b' < < 48 | ( long ) 's' < < 40 | ( long ) 'p' < < 32 ,
( long ) 'n' < < 56 | ( long ) 'd' < < 48 | ( long ) 'a' < < 40 | ( long ) 's' < < 32 | ( long ) 'h' < < 24 ,
( long ) 'n' < < 56 | ( long ) 'e' < < 48 ,
( long ) 'n' < < 56 | ( long ) 'i' < < 48 ,
( long ) 'n' < < 56 | ( long ) 'o' < < 48 | ( long ) 't' < < 40 ,
( long ) 'n' < < 56 | ( long ) 'o' < < 48 | ( long ) 't' < < 40 | ( long ) 'i' < < 32 | ( long ) 'n' < < 24 ,
( long ) 'n' < < 56 | ( long ) 's' < < 48 | ( long ) 'u' < < 40 | ( long ) 'b' < < 32 ,
( long ) 'n' < < 56 | ( long ) 't' < < 48 | ( long ) 'i' < < 40 | ( long ) 'l' < < 32 | ( long ) 'd' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'n' < < 56 | ( long ) 'u' < < 48 ,
( long ) 'o' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'o' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'o' < < 56 | ( long ) 'e' < < 48 | ( long ) 'l' < < 40 | ( long ) 'i' < < 32 | ( long ) 'g' < < 24 ,
( long ) 'o' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'o' < < 56 | ( long ) 'l' < < 48 | ( long ) 'i' < < 40 | ( long ) 'n' < < 32 | ( long ) 'e' < < 24 ,
( long ) 'o' < < 56 | ( long ) 'm' < < 48 | ( long ) 'e' < < 40 | ( long ) 'g' < < 32 | ( long ) 'a' < < 24 ,
( long ) 'o' < < 56 | ( long ) 'm' < < 48 | ( long ) 'i' < < 40 | ( long ) 'c' < < 32 | ( long ) 'r' < < 24 | ( long ) 'o' < < 16 | ( long ) 'n' < < 8 ,
( long ) 'o' < < 56 | ( long ) 'p' < < 48 | ( long ) 'l' < < 40 | ( long ) 'u' < < 32 | ( long ) 's' < < 24 ,
( long ) 'o' < < 56 | ( long ) 'r' < < 48 ,
( long ) 'o' < < 56 | ( long ) 'r' < < 48 | ( long ) 'd' < < 40 | ( long ) 'f' < < 32 ,
( long ) 'o' < < 56 | ( long ) 'r' < < 48 | ( long ) 'd' < < 40 | ( long ) 'm' < < 32 ,
( long ) 'o' < < 56 | ( long ) 's' < < 48 | ( long ) 'l' < < 40 | ( long ) 'a' < < 32 | ( long ) 's' < < 24 | ( long ) 'h' < < 16 ,
( long ) 'o' < < 56 | ( long ) 't' < < 48 | ( long ) 'i' < < 40 | ( long ) 'l' < < 32 | ( long ) 'd' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'o' < < 56 | ( long ) 't' < < 48 | ( long ) 'i' < < 40 | ( long ) 'm' < < 32 | ( long ) 'e' < < 24 | ( long ) 's' < < 16 ,
( long ) 'o' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'p' < < 56 | ( long ) 'a' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 ,
( long ) 'p' < < 56 | ( long ) 'a' < < 48 | ( long ) 'r' < < 40 | ( long ) 't' < < 32 ,
( long ) 'p' < < 56 | ( long ) 'e' < < 48 | ( long ) 'r' < < 40 | ( long ) 'm' < < 32 | ( long ) 'i' < < 24 | ( long ) 'l' < < 16 ,
( long ) 'p' < < 56 | ( long ) 'e' < < 48 | ( long ) 'r' < < 40 | ( long ) 'p' < < 32 ,
( long ) 'p' < < 56 | ( long ) 'h' < < 48 | ( long ) 'i' < < 40 ,
( long ) 'p' < < 56 | ( long ) 'i' < < 48 ,
( long ) 'p' < < 56 | ( long ) 'i' < < 48 | ( long ) 'v' < < 40 ,
( long ) 'p' < < 56 | ( long ) 'l' < < 48 | ( long ) 'u' < < 40 | ( long ) 's' < < 32 | ( long ) 'm' < < 24 | ( long ) 'n' < < 16 ,
( long ) 'p' < < 56 | ( long ) 'o' < < 48 | ( long ) 'u' < < 40 | ( long ) 'n' < < 32 | ( long ) 'd' < < 24 ,
( long ) 'p' < < 56 | ( long ) 'r' < < 48 | ( long ) 'i' < < 40 | ( long ) 'm' < < 32 | ( long ) 'e' < < 24 ,
( long ) 'p' < < 56 | ( long ) 'r' < < 48 | ( long ) 'o' < < 40 | ( long ) 'd' < < 32 ,
( long ) 'p' < < 56 | ( long ) 'r' < < 48 | ( long ) 'o' < < 40 | ( long ) 'p' < < 32 ,
( long ) 'p' < < 56 | ( long ) 's' < < 48 | ( long ) 'i' < < 40 ,
( long ) 'q' < < 56 | ( long ) 'u' < < 48 | ( long ) 'o' < < 40 | ( long ) 't' < < 32 ,
( long ) 'r' < < 56 | ( long ) 'A' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'r' < < 56 | ( long ) 'a' < < 48 | ( long ) 'd' < < 40 | ( long ) 'i' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'r' < < 56 | ( long ) 'a' < < 48 | ( long ) 'n' < < 40 | ( long ) 'g' < < 32 ,
( long ) 'r' < < 56 | ( long ) 'a' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 'r' < < 56 | ( long ) 'a' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'r' < < 56 | ( long ) 'c' < < 48 | ( long ) 'e' < < 40 | ( long ) 'i' < < 32 | ( long ) 'l' < < 24 ,
( long ) 'r' < < 56 | ( long ) 'd' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 'r' < < 56 | ( long ) 'e' < < 48 | ( long ) 'a' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'r' < < 56 | ( long ) 'e' < < 48 | ( long ) 'g' < < 40 ,
( long ) 'r' < < 56 | ( long ) 'f' < < 48 | ( long ) 'l' < < 40 | ( long ) 'o' < < 32 | ( long ) 'o' < < 24 | ( long ) 'r' < < 16 ,
( long ) 'r' < < 56 | ( long ) 'h' < < 48 | ( long ) 'o' < < 40 ,
( long ) 'r' < < 56 | ( long ) 'l' < < 48 | ( long ) 'm' < < 40 ,
( long ) 'r' < < 56 | ( long ) 's' < < 48 | ( long ) 'a' < < 40 | ( long ) 'q' < < 32 | ( long ) 'u' < < 24 | ( long ) 'o' < < 16 ,
( long ) 'r' < < 56 | ( long ) 's' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 's' < < 56 | ( long ) 'b' < < 48 | ( long ) 'q' < < 40 | ( long ) 'u' < < 32 | ( long ) 'o' < < 24 ,
( long ) 's' < < 56 | ( long ) 'c' < < 48 | ( long ) 'a' < < 40 | ( long ) 'r' < < 32 | ( long ) 'o' < < 24 | ( long ) 'n' < < 16 ,
( long ) 's' < < 56 | ( long ) 'd' < < 48 | ( long ) 'o' < < 40 | ( long ) 't' < < 32 ,
( long ) 's' < < 56 | ( long ) 'e' < < 48 | ( long ) 'c' < < 40 | ( long ) 't' < < 32 ,
( long ) 's' < < 56 | ( long ) 'h' < < 48 | ( long ) 'y' < < 40 ,
( long ) 's' < < 56 | ( long ) 'i' < < 48 | ( long ) 'g' < < 40 | ( long ) 'm' < < 32 | ( long ) 'a' < < 24 ,
( long ) 's' < < 56 | ( long ) 'i' < < 48 | ( long ) 'g' < < 40 | ( long ) 'm' < < 32 | ( long ) 'a' < < 24 | ( long ) 'f' < < 16 ,
( long ) 's' < < 56 | ( long ) 'i' < < 48 | ( long ) 'm' < < 40 ,
( long ) 's' < < 56 | ( long ) 'p' < < 48 | ( long ) 'a' < < 40 | ( long ) 'd' < < 32 | ( long ) 'e' < < 24 | ( long ) 's' < < 16 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'b' < < 40 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'b' < < 40 | ( long ) 'e' < < 32 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'p' < < 40 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'p' < < 40 | ( long ) '1' < < 32 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'p' < < 40 | ( long ) '2' < < 32 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'p' < < 40 | ( long ) '3' < < 32 ,
( long ) 's' < < 56 | ( long ) 'u' < < 48 | ( long ) 'p' < < 40 | ( long ) 'e' < < 32 ,
( long ) 's' < < 56 | ( long ) 'z' < < 48 | ( long ) 'l' < < 40 | ( long ) 'i' < < 32 | ( long ) 'g' < < 24 ,
( long ) 't' < < 56 | ( long ) 'a' < < 48 | ( long ) 'u' < < 40 ,
( long ) 't' < < 56 | ( long ) 'h' < < 48 | ( long ) 'e' < < 40 | ( long ) 'r' < < 32 | ( long ) 'e' < < 24 | ( long ) '4' < < 16 ,
( long ) 't' < < 56 | ( long ) 'h' < < 48 | ( long ) 'e' < < 40 | ( long ) 't' < < 32 | ( long ) 'a' < < 24 ,
( long ) 't' < < 56 | ( long ) 'h' < < 48 | ( long ) 'e' < < 40 | ( long ) 't' < < 32 | ( long ) 'a' < < 24 | ( long ) 's' < < 16 | ( long ) 'y' < < 8 | ( long ) 'm' < < 0 ,
( long ) 't' < < 56 | ( long ) 'h' < < 48 | ( long ) 'i' < < 40 | ( long ) 'n' < < 32 | ( long ) 's' < < 24 | ( long ) 'p' < < 16 ,
( long ) 't' < < 56 | ( long ) 'h' < < 48 | ( long ) 'o' < < 40 | ( long ) 'r' < < 32 | ( long ) 'n' < < 24 ,
( long ) 't' < < 56 | ( long ) 'i' < < 48 | ( long ) 'l' < < 40 | ( long ) 'd' < < 32 | ( long ) 'e' < < 24 ,
( long ) 't' < < 56 | ( long ) 'i' < < 48 | ( long ) 'm' < < 40 | ( long ) 'e' < < 32 | ( long ) 's' < < 24 ,
( long ) 't' < < 56 | ( long ) 'r' < < 48 | ( long ) 'a' < < 40 | ( long ) 'd' < < 32 | ( long ) 'e' < < 24 ,
( long ) 'u' < < 56 | ( long ) 'A' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'u' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'u' < < 56 | ( long ) 'a' < < 48 | ( long ) 'r' < < 40 | ( long ) 'r' < < 32 ,
( long ) 'u' < < 56 | ( long ) 'c' < < 48 | ( long ) 'i' < < 40 | ( long ) 'r' < < 32 | ( long ) 'c' < < 24 ,
( long ) 'u' < < 56 | ( long ) 'g' < < 48 | ( long ) 'r' < < 40 | ( long ) 'a' < < 32 | ( long ) 'v' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'u' < < 56 | ( long ) 'm' < < 48 | ( long ) 'l' < < 40 ,
( long ) 'u' < < 56 | ( long ) 'p' < < 48 | ( long ) 's' < < 40 | ( long ) 'i' < < 32 | ( long ) 'h' < < 24 ,
( long ) 'u' < < 56 | ( long ) 'p' < < 48 | ( long ) 's' < < 40 | ( long ) 'i' < < 32 | ( long ) 'l' < < 24 | ( long ) 'o' < < 16 | ( long ) 'n' < < 8 ,
( long ) 'u' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'w' < < 56 | ( long ) 'e' < < 48 | ( long ) 'i' < < 40 | ( long ) 'e' < < 32 | ( long ) 'r' < < 24 | ( long ) 'p' < < 16 ,
( long ) 'x' < < 56 | ( long ) 'i' < < 48 ,
( long ) 'y' < < 56 | ( long ) 'a' < < 48 | ( long ) 'c' < < 40 | ( long ) 'u' < < 32 | ( long ) 't' < < 24 | ( long ) 'e' < < 16 ,
( long ) 'y' < < 56 | ( long ) 'e' < < 48 | ( long ) 'n' < < 40 ,
( long ) 'y' < < 56 | ( long ) 'u' < < 48 | ( long ) 'm' < < 40 | ( long ) 'l' < < 32 ,
( long ) 'z' < < 56 | ( long ) 'e' < < 48 | ( long ) 't' < < 40 | ( long ) 'a' < < 32 ,
( long ) 'z' < < 56 | ( long ) 'w' < < 48 | ( long ) 'j' < < 40 ,
( long ) 'z' < < 56 | ( long ) 'w' < < 48 | ( long ) 'n' < < 40 | ( long ) 'j' < < 32
} ;
static readonly char [ ] entities_values = new char [ ] {
' \ u00C6 ' ,
' \ u00C1 ' ,
' \ u00C2 ' ,
' \ u00C0 ' ,
' \ u0391 ' ,
' \ u00C5 ' ,
' \ u00C3 ' ,
' \ u00C4 ' ,
' \ u0392 ' ,
' \ u00C7 ' ,
' \ u03A7 ' ,
' \ u2021 ' ,
' \ u0394 ' ,
' \ u00D0 ' ,
' \ u00C9 ' ,
' \ u00CA ' ,
' \ u00C8 ' ,
' \ u0395 ' ,
' \ u0397 ' ,
' \ u00CB ' ,
' \ u0393 ' ,
' \ u00CD ' ,
' \ u00CE ' ,
' \ u00CC ' ,
' \ u0399 ' ,
' \ u00CF ' ,
' \ u039A ' ,
' \ u039B ' ,
' \ u039C ' ,
' \ u00D1 ' ,
' \ u039D ' ,
' \ u0152 ' ,
' \ u00D3 ' ,
' \ u00D4 ' ,
' \ u00D2 ' ,
' \ u03A9 ' ,
' \ u039F ' ,
' \ u00D8 ' ,
' \ u00D5 ' ,
' \ u00D6 ' ,
' \ u03A6 ' ,
' \ u03A0 ' ,
' \ u2033 ' ,
' \ u03A8 ' ,
' \ u03A1 ' ,
' \ u0160 ' ,
' \ u03A3 ' ,
' \ u00DE ' ,
' \ u03A4 ' ,
' \ u0398 ' ,
' \ u00DA ' ,
' \ u00DB ' ,
' \ u00D9 ' ,
' \ u03A5 ' ,
' \ u00DC ' ,
' \ u039E ' ,
' \ u00DD ' ,
' \ u0178 ' ,
' \ u0396 ' ,
' \ u00E1 ' ,
' \ u00E2 ' ,
' \ u00B4 ' ,
' \ u00E6 ' ,
' \ u00E0 ' ,
' \ u2135 ' ,
' \ u03B1 ' ,
' \ u0026 ' ,
' \ u2227 ' ,
' \ u2220 ' ,
' \ u0027 ' ,
' \ u00E5 ' ,
' \ u2248 ' ,
' \ u00E3 ' ,
' \ u00E4 ' ,
' \ u201E ' ,
' \ u03B2 ' ,
' \ u00A6 ' ,
' \ u2022 ' ,
' \ u2229 ' ,
' \ u00E7 ' ,
' \ u00B8 ' ,
' \ u00A2 ' ,
' \ u03C7 ' ,
' \ u02C6 ' ,
' \ u2663 ' ,
' \ u2245 ' ,
' \ u00A9 ' ,
' \ u21B5 ' ,
' \ u222A ' ,
' \ u00A4 ' ,
' \ u21D3 ' ,
' \ u2020 ' ,
' \ u2193 ' ,
' \ u00B0 ' ,
' \ u03B4 ' ,
' \ u2666 ' ,
' \ u00F7 ' ,
' \ u00E9 ' ,
' \ u00EA ' ,
' \ u00E8 ' ,
' \ u2205 ' ,
' \ u2003 ' ,
' \ u2002 ' ,
' \ u03B5 ' ,
' \ u2261 ' ,
' \ u03B7 ' ,
' \ u00F0 ' ,
' \ u00EB ' ,
' \ u20AC ' ,
' \ u2203 ' ,
' \ u0192 ' ,
' \ u2200 ' ,
' \ u00BD ' ,
' \ u00BC ' ,
' \ u00BE ' ,
' \ u2044 ' ,
' \ u03B3 ' ,
' \ u2265 ' ,
' \ u003E ' ,
' \ u21D4 ' ,
' \ u2194 ' ,
' \ u2665 ' ,
' \ u2026 ' ,
' \ u00ED ' ,
' \ u00EE ' ,
' \ u00A1 ' ,
' \ u00EC ' ,
' \ u2111 ' ,
' \ u221E ' ,
' \ u222B ' ,
' \ u03B9 ' ,
' \ u00BF ' ,
' \ u2208 ' ,
' \ u00EF ' ,
' \ u03BA ' ,
' \ u21D0 ' ,
' \ u03BB ' ,
' \ u2329 ' ,
' \ u00AB ' ,
' \ u2190 ' ,
' \ u2308 ' ,
' \ u201C ' ,
' \ u2264 ' ,
' \ u230A ' ,
' \ u2217 ' ,
' \ u25CA ' ,
' \ u200E ' ,
' \ u2039 ' ,
' \ u2018 ' ,
' \ u003C ' ,
' \ u00AF ' ,
' \ u2014 ' ,
' \ u00B5 ' ,
' \ u00B7 ' ,
' \ u2212 ' ,
' \ u03BC ' ,
' \ u2207 ' ,
' \ u00A0 ' ,
' \ u2013 ' ,
' \ u2260 ' ,
' \ u220B ' ,
' \ u00AC ' ,
' \ u2209 ' ,
' \ u2284 ' ,
' \ u00F1 ' ,
' \ u03BD ' ,
' \ u00F3 ' ,
' \ u00F4 ' ,
' \ u0153 ' ,
' \ u00F2 ' ,
' \ u203E ' ,
' \ u03C9 ' ,
' \ u03BF ' ,
' \ u2295 ' ,
' \ u2228 ' ,
' \ u00AA ' ,
' \ u00BA ' ,
' \ u00F8 ' ,
' \ u00F5 ' ,
' \ u2297 ' ,
' \ u00F6 ' ,
' \ u00B6 ' ,
' \ u2202 ' ,
' \ u2030 ' ,
' \ u22A5 ' ,
' \ u03C6 ' ,
' \ u03C0 ' ,
' \ u03D6 ' ,
' \ u00B1 ' ,
' \ u00A3 ' ,
' \ u2032 ' ,
' \ u220F ' ,
' \ u221D ' ,
' \ u03C8 ' ,
' \ u0022 ' ,
' \ u21D2 ' ,
' \ u221A ' ,
' \ u232A ' ,
' \ u00BB ' ,
' \ u2192 ' ,
' \ u2309 ' ,
' \ u201D ' ,
' \ u211C ' ,
' \ u00AE ' ,
' \ u230B ' ,
' \ u03C1 ' ,
' \ u200F ' ,
' \ u203A ' ,
' \ u2019 ' ,
' \ u201A ' ,
' \ u0161 ' ,
' \ u22C5 ' ,
' \ u00A7 ' ,
' \ u00AD ' ,
' \ u03C3 ' ,
' \ u03C2 ' ,
' \ u223C ' ,
' \ u2660 ' ,
' \ u2282 ' ,
' \ u2286 ' ,
' \ u2211 ' ,
' \ u2283 ' ,
' \ u00B9 ' ,
' \ u00B2 ' ,
' \ u00B3 ' ,
' \ u2287 ' ,
' \ u00DF ' ,
' \ u03C4 ' ,
' \ u2234 ' ,
' \ u03B8 ' ,
' \ u03D1 ' ,
' \ u2009 ' ,
' \ u00FE ' ,
' \ u02DC ' ,
' \ u00D7 ' ,
' \ u2122 ' ,
' \ u21D1 ' ,
' \ u00FA ' ,
' \ u2191 ' ,
' \ u00FB ' ,
' \ u00F9 ' ,
' \ u00A8 ' ,
' \ u03D2 ' ,
' \ u03C5 ' ,
' \ u00FC ' ,
' \ u2118 ' ,
' \ u03BE ' ,
' \ u00FD ' ,
' \ u00A5 ' ,
' \ u00FF ' ,
' \ u03B6 ' ,
' \ u200D ' ,
' \ u200C '
} ;
#region Methods
static void WriteCharBytes ( IList buf , char ch , Encoding e )
{
if ( ch > 255 )
{
foreach ( byte b in e . GetBytes ( new char [ ] { ch } ) )
buf . Add ( b ) ;
}
else
buf . Add ( ( byte ) ch ) ;
}
public static string UrlDecode ( string s , Encoding e )
{
if ( null = = s )
return null ;
if ( s . IndexOf ( '%' ) = = - 1 & & s . IndexOf ( '+' ) = = - 1 )
return s ;
if ( e = = null )
e = Encoding . UTF8 ;
long len = s . Length ;
var bytes = new List < byte > ( ) ;
int xchar ;
char ch ;
for ( int i = 0 ; i < len ; i + + )
{
ch = s [ i ] ;
if ( ch = = '%' & & i + 2 < len & & s [ i + 1 ] ! = '%' )
{
if ( s [ i + 1 ] = = 'u' & & i + 5 < len )
{
// unicode hex sequence
xchar = GetChar ( s , i + 2 , 4 ) ;
if ( xchar ! = - 1 )
{
WriteCharBytes ( bytes , ( char ) xchar , e ) ;
i + = 5 ;
}
else
WriteCharBytes ( bytes , '%' , e ) ;
}
else if ( ( xchar = GetChar ( s , i + 1 , 2 ) ) ! = - 1 )
{
WriteCharBytes ( bytes , ( char ) xchar , e ) ;
i + = 2 ;
}
else
{
WriteCharBytes ( bytes , '%' , e ) ;
}
continue ;
}
if ( ch = = '+' )
WriteCharBytes ( bytes , ' ' , e ) ;
else
WriteCharBytes ( bytes , ch , e ) ;
}
byte [ ] buf = bytes . ToArray ( ) ;
bytes = null ;
return e . GetString ( buf ) ;
}
static int GetInt ( byte b )
{
char c = ( char ) b ;
if ( c > = '0' & & c < = '9' )
return c - '0' ;
if ( c > = 'a' & & c < = 'f' )
return c - 'a' + 10 ;
if ( c > = 'A' & & c < = 'F' )
return c - 'A' + 10 ;
return - 1 ;
}
static int GetChar ( string str , int offset , int length )
{
int val = 0 ;
int end = length + offset ;
for ( int i = offset ; i < end ; i + + )
{
char c = str [ i ] ;
if ( c > 127 )
return - 1 ;
int current = GetInt ( ( byte ) c ) ;
if ( current = = - 1 )
return - 1 ;
val = ( val < < 4 ) + current ;
}
return val ;
}
static bool TryConvertKeyToEntity ( string key , out char value )
{
var token = CalculateKeyValue ( key ) ;
if ( token = = 0 )
{
value = '\0' ;
return false ;
}
var idx = Array . BinarySearch ( entities , token ) ;
if ( idx < 0 )
{
value = '\0' ;
return false ;
}
value = entities_values [ idx ] ;
return true ;
}
static long CalculateKeyValue ( string s )
{
if ( s . Length > 8 )
return 0 ;
long key = 0 ;
for ( int i = 0 ; i < s . Length ; + + i )
{
long ch = s [ i ] ;
if ( ch > 'z' | | ch < '0' )
return 0 ;
key | = ch < < ( ( 7 - i ) * 8 ) ;
}
return key ;
}
/// <summary>
/// Decodes an HTML-encoded string and returns the decoded string.
/// </summary>
/// <param name="s">The HTML string to decode. </param>
/// <returns>The decoded text.</returns>
public static string HtmlDecode ( string s )
{
if ( s = = null )
throw new ArgumentNullException ( "s" ) ;
if ( s . IndexOf ( '&' ) = = - 1 )
return s ;
StringBuilder entity = new StringBuilder ( ) ;
StringBuilder output = new StringBuilder ( ) ;
int len = s . Length ;
// 0 -> nothing,
// 1 -> right after '&'
// 2 -> between '&' and ';' but no '#'
// 3 -> '#' found after '&' and getting numbers
int state = 0 ;
int number = 0 ;
int digit_start = 0 ;
bool hex_number = false ;
for ( int i = 0 ; i < len ; i + + )
{
char c = s [ i ] ;
if ( state = = 0 )
{
if ( c = = '&' )
{
entity . Append ( c ) ;
state = 1 ;
}
else
{
output . Append ( c ) ;
}
continue ;
}
if ( c = = '&' )
{
state = 1 ;
if ( digit_start > 0 )
{
entity . Append ( s , digit_start , i - digit_start ) ;
digit_start = 0 ;
}
output . Append ( entity . ToString ( ) ) ;
entity . Length = 0 ;
entity . Append ( '&' ) ;
continue ;
}
switch ( state )
{
case 1 :
if ( c = = ';' )
{
state = 0 ;
output . Append ( entity . ToString ( ) ) ;
output . Append ( c ) ;
entity . Length = 0 ;
break ;
}
number = 0 ;
hex_number = false ;
if ( c ! = '#' )
{
state = 2 ;
}
else
{
state = 3 ;
}
entity . Append ( c ) ;
break ;
case 2 :
entity . Append ( c ) ;
if ( c = = ';' )
{
string key = entity . ToString ( ) ;
state = 0 ;
entity . Length = 0 ;
if ( key . Length > 1 )
{
var skey = key . Substring ( 1 , key . Length - 2 ) ;
if ( TryConvertKeyToEntity ( skey , out c ) )
{
output . Append ( c ) ;
break ;
}
}
output . Append ( key ) ;
}
break ;
case 3 :
if ( c = = ';' )
{
if ( number < 0x10000 )
{
output . Append ( ( char ) number ) ;
}
else
{
output . Append ( ( char ) ( 0xd800 + ( ( number - 0x10000 ) > > 10 ) ) ) ;
output . Append ( ( char ) ( 0xdc00 + ( ( number - 0x10000 ) & 0x3ff ) ) ) ;
}
state = 0 ;
entity . Length = 0 ;
digit_start = 0 ;
break ;
}
if ( c = = 'x' | | c = = 'X' & & ! hex_number )
{
digit_start = i ;
hex_number = true ;
break ;
}
if ( Char . IsDigit ( c ) )
{
if ( digit_start = = 0 )
digit_start = i ;
number = number * ( hex_number ? 16 : 10 ) + ( ( int ) c - '0' ) ;
break ;
}
if ( hex_number )
{
if ( c > = 'a' & & c < = 'f' )
{
number = number * 16 + 10 + ( ( int ) c - 'a' ) ;
break ;
}
if ( c > = 'A' & & c < = 'F' )
{
number = number * 16 + 10 + ( ( int ) c - 'A' ) ;
break ;
}
}
state = 2 ;
if ( digit_start > 0 )
{
entity . Append ( s , digit_start , i - digit_start ) ;
digit_start = 0 ;
}
entity . Append ( c ) ;
break ;
}
}
if ( entity . Length > 0 )
{
output . Append ( entity ) ;
}
else if ( digit_start > 0 )
{
output . Append ( s , digit_start , s . Length - digit_start ) ;
}
return output . ToString ( ) ;
}
public static QueryParamCollection ParseQueryString ( string query )
{
return ParseQueryString ( query , Encoding . UTF8 ) ;
}
public static QueryParamCollection ParseQueryString ( string query , Encoding encoding )
{
if ( query = = null )
throw new ArgumentNullException ( "query" ) ;
if ( encoding = = null )
throw new ArgumentNullException ( "encoding" ) ;
if ( query . Length = = 0 | | ( query . Length = = 1 & & query [ 0 ] = = '?' ) )
return new QueryParamCollection ( ) ;
if ( query [ 0 ] = = '?' )
query = query . Substring ( 1 ) ;
QueryParamCollection result = new QueryParamCollection ( ) ;
ParseQueryString ( query , encoding , result ) ;
return result ;
}
internal static void ParseQueryString ( string query , Encoding encoding , QueryParamCollection result )
{
if ( query . Length = = 0 )
return ;
string decoded = HtmlDecode ( query ) ;
int decodedLength = decoded . Length ;
int namePos = 0 ;
bool first = true ;
while ( namePos < = decodedLength )
{
int valuePos = - 1 , valueEnd = - 1 ;
for ( int q = namePos ; q < decodedLength ; q + + )
{
if ( valuePos = = - 1 & & decoded [ q ] = = '=' )
{
valuePos = q + 1 ;
}
else if ( decoded [ q ] = = '&' )
{
valueEnd = q ;
break ;
}
}
if ( first )
{
first = false ;
if ( decoded [ namePos ] = = '?' )
namePos + + ;
}
string name , value ;
if ( valuePos = = - 1 )
{
name = null ;
valuePos = namePos ;
}
else
{
name = UrlDecode ( decoded . Substring ( namePos , valuePos - namePos - 1 ) , encoding ) ;
}
if ( valueEnd < 0 )
{
namePos = - 1 ;
valueEnd = decoded . Length ;
}
else
{
namePos = valueEnd + 1 ;
}
value = UrlDecode ( decoded . Substring ( valuePos , valueEnd - valuePos ) , encoding ) ;
result . Add ( name , value ) ;
if ( namePos = = - 1 )
break ;
}
}
#endregion // Methods
}
}