Unverified Commit 21b2e0ea authored by Marcelo Bezerra's avatar Marcelo Bezerra Committed by mrbean-bremen
Browse files

Add support to .netstandard20

- This build supports targeting .Net Framework 4.0 and .Netstandard2.0 allowing use of Svg library by .Net core apps.
- Solution can be built using Visual Studio 2017 Preview and .Net Core 2.0 Preview 2+
parent fa748a18
Source/**/bin/ Source/**/bin/
Source/**/obj/ Source/**/obj/
Source/**/*.csproj.user Source/**/*.csproj.user
...@@ -16,3 +15,11 @@ Tests/**/*.suo ...@@ -16,3 +15,11 @@ Tests/**/*.suo
*.trx *.trx
Source/TestResults/ Source/TestResults/
Source/.vs Source/.vs
*~
*.swp
.vs/**
.vs
packages/
obj/
bin/
packages.config
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
...@@ -54,9 +54,11 @@ ...@@ -54,9 +54,11 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' "> <PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<BaseAddress>4194304</BaseAddress> <BaseAddress>4194304</BaseAddress>
...@@ -79,23 +81,12 @@ ...@@ -79,23 +81,12 @@
<RegisterForComInterop>False</RegisterForComInterop> <RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<Reference Include="System" /> <Prefer32Bit>false</Prefer32Bit>
<Reference Include="System.Core"> </PropertyGroup>
<RequiredTargetFramework>3.5</RequiredTargetFramework> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
</Reference> <Prefer32Bit>false</Prefer32Bit>
<Reference Include="System.Xml.Linq"> </PropertyGroup>
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="DebugRenderer.cs" /> <Compile Include="DebugRenderer.cs" />
<Compile Include="SvgViewer.cs"> <Compile Include="SvgViewer.cs">
...@@ -130,35 +121,21 @@ ...@@ -130,35 +121,21 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Source\Svg.csproj"> <ProjectReference Include="..\..\Source\Svg.csproj">
<Project>{886A98C5-37C0-4E8B-885E-30C1D2F98B47}</Project> <Project>{886A98C5-37C0-4E8B-885E-30C1D2F98B47}</Project>
<Name>Svg</Name> <Name>Svg</Name>
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project> </Project>
\ No newline at end of file
...@@ -5,7 +5,6 @@ using System.Diagnostics; ...@@ -5,7 +5,6 @@ using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.Text; using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Web.UI.WebControls;
namespace Svg namespace Svg
{ {
......
/* #line 1 "Parser.rl" */
using System;
using ExCSS.Model;
namespace ExCSS
{
public class Parser
{
private string _css;
private int _currentPosition;
private int p = 0;
private StylesheetContext _context;
/* #line 17 "Parser.rl" */
private string GetCssFragment() {
return _css.Substring(_currentPosition, p - _currentPosition);
}
private void BeginToken(TokenType tokenType){
_currentPosition = p;
_context.BeginToken(tokenType);
}
private void EndToken(TokenType tokenType){
_context.EndToken(tokenType, GetCssFragment());
}
#region Generated Scanner + Parser
public void Parse(string value, StylesheetContext context)
{
_css = value;
_context = context;
char[] data = value.ToCharArray();
int cs;
int eof = data.Length;
int pe = eof;
/* #line 2 "../ExCSS/Parser.generated.cs" */
{
cs = selector_start;
}
/* #line 45 "Parser.rl" */
/* #line 5 "../ExCSS/Parser.generated.cs" */
{
sbyte _klen;
short _trans;
short _keys;
if ( p == pe )
goto _test_eof;
if ( cs == 0 )
goto _out;
_resume:
_keys = _selector_key_offsets[cs];
_trans = (short)_selector_index_offsets[cs];
_klen = _selector_single_lengths[cs];
if ( _klen > 0 ) {
short _lower = _keys;
short _mid;
short _upper = (short) (_keys + _klen - 1);
while (true) {
if ( _upper < _lower )
break;
_mid = (short) (_lower + ((_upper-_lower) >> 1));
if ( data[p] < _selector_trans_keys[_mid] )
_upper = (short) (_mid - 1);
else if ( data[p] > _selector_trans_keys[_mid] )
_lower = (short) (_mid + 1);
else {
_trans += (short) (_mid - _keys);
goto _match;
}
}
_keys += (short) _klen;
_trans += (short) _klen;
}
_klen = _selector_range_lengths[cs];
if ( _klen > 0 ) {
short _lower = _keys;
short _mid;
short _upper = (short) (_keys + (_klen<<1) - 2);
while (true) {
if ( _upper < _lower )
break;
_mid = (short) (_lower + (((_upper-_lower) >> 1) & ~1));
if ( data[p] < _selector_trans_keys[_mid] )
_upper = (short) (_mid - 2);
else if ( data[p] > _selector_trans_keys[_mid+1] )
_lower = (short) (_mid + 2);
else {
_trans += (short)((_mid - _keys)>>1);
goto _match;
}
}
_trans += (short) _klen;
}
_match:
cs = _selector_trans_targs[_trans];
if ( cs == 0 )
goto _out;
if ( ++p != pe )
goto _resume;
_test_eof: {}
_out: {}
}
/* #line 46 "Parser.rl" */
}
/* #line 73 "../ExCSS/Parser.generated.cs" */
static readonly short[] _selector_key_offsets = new short [] {
0, 0, 12, 16, 27, 31, 49, 50,
72, 74, 76, 78, 80, 82, 84, 86,
88, 90, 95, 96, 97, 98, 99, 100,
101, 103, 127, 135, 156, 160, 180, 195,
215, 237, 240, 243, 246, 249, 252, 255,
258, 261, 264, 270, 283, 288, 300, 305,
323, 325, 347, 350, 353, 356, 359, 362,
365, 368, 371, 374, 380, 393, 398, 410,
415, 433, 436, 460, 469, 490, 495, 515,
529, 549, 571, 575, 579, 583, 587, 591,
595, 599, 603, 607, 614, 628, 634, 647,
653, 671, 675, 699, 709, 730, 736, 740,
763, 776, 797, 820, 841, 862, 882, 894,
906, 924, 937, 950, 963, 976, 989, 1001,
1004, 1007, 1010, 1017, 1020, 1023, 1045, 1047,
1069, 1070, 1073, 1076, 1079, 1082, 1085, 1088,
1091, 1094, 1097, 1103, 1116, 1121, 1133, 1138,
1156, 1161, 1164, 1188, 1197, 1218, 1223, 1243,
1258, 1279, 1302, 1305, 1329, 1338, 1359, 1362,
1385, 1399, 1421, 1442, 1463, 1483, 1495, 1507,
1525, 1538, 1551, 1564, 1577, 1590, 1602, 1604,
1606, 1608, 1614, 1616, 1618, 1620, 1642, 1643,
1646, 1649, 1652, 1655, 1658, 1661, 1664, 1667,
1670, 1676, 1689, 1694, 1706, 1711, 1729, 1732,
1756, 1765, 1786, 1791, 1811, 1826, 1846, 1868,
1872, 1876, 1880, 1884, 1888, 1892, 1896, 1900,
1904, 1911, 1925, 1931, 1944, 1950, 1968, 1972,
1996, 2006, 2027, 2033, 2037, 2060, 2074, 2095,
2118, 2139, 2160, 2180, 2192, 2204, 2222, 2235,
2248, 2261, 2274, 2287, 2299, 2302, 2305, 2308,
2315, 2318, 2321, 2343, 2345, 2349, 2353, 2357,
2361, 2365, 2369, 2373, 2377, 2381, 2388, 2402,
2408, 2421, 2427, 2445, 2451, 2455, 2479, 2489,
2510, 2516, 2536, 2551, 2572, 2595, 2599, 2603,
2607, 2611, 2615, 2619, 2623, 2627, 2631, 2638,
2652, 2658, 2671, 2677, 2695, 2699, 2723, 2733,
2754, 2774, 2788, 2810, 2814, 2837, 2858, 2879,
2899, 2911, 2923, 2941, 2954, 2967, 2980, 2993,
3006, 3018, 3021, 3024, 3027, 3034, 3037, 3040,
3051, 3054, 3057, 3060, 3063, 3066, 3086, 3091,
3111, 3132, 3153, 3174, 3193, 3214, 3221, 3228,
3235, 3242, 3245, 3248, 3269, 3287, 3303, 3327,
3340, 3353, 3359, 3377, 3392, 3416, 3419, 3442,
3463, 3484, 3504, 3516, 3528, 3546, 3559, 3572,
3585, 3598, 3611, 3623, 3625, 3627, 3629, 3635,
3637, 3639, 3649, 3651, 3653, 3655, 3657, 3659,
3679, 3683, 3703, 3724, 3736, 3758, 3772, 3796,
3798, 3821, 3842, 3863, 3883, 3895, 3907, 3925,
3938, 3951, 3964, 3977, 3990, 4002, 4003, 4004,
4005, 4010, 4011, 4012, 4021, 4041, 4044, 4064,
4085, 4098, 4111, 4124, 4126, 4128, 4130, 4132,
4134, 4136, 4142, 4144, 4146, 4168, 4183, 4207,
4210, 4233, 4254, 4275, 4295, 4307, 4319, 4337,
4350, 4363, 4376, 4389, 4402, 4414, 4416, 4418,
4420, 4426, 4428, 4430, 4440, 4442, 4444, 4446,
4448, 4450, 4470, 4474, 4494, 4515, 4529, 4543,
4557, 4560, 4563, 4566, 4569, 4572, 4575, 4582,
4585, 4588, 4603, 4618, 4630, 4644, 4658, 4679,
4702, 4723, 4744, 4764, 4776, 4788, 4806, 4819,
4832, 4845, 4858, 4871, 4883, 4886, 4889, 4892,
4899, 4902, 4905, 4916, 4919, 4922, 4925, 4928,
4931, 4951, 4956, 4976, 4997, 5019, 5023, 5046,
5067, 5088, 5107, 5128, 5135, 5142, 5149, 5156,
5159, 5162, 5183, 5201, 5217, 5241, 5254, 5267,
5273, 5291, 5306, 5330, 5333, 5356, 5377, 5398,
5418, 5430, 5442, 5460, 5473, 5486, 5499, 5512,
5525, 5537, 5539, 5541, 5543, 5549, 5551, 5553,
5563, 5565, 5567, 5569, 5571, 5573, 5593, 5597,
5617, 5638, 5650, 5662, 5667, 5685, 5696, 5708,
5720, 5732, 5733, 5734, 5735, 5736, 5737, 5738,
5743, 5744, 5745, 5758, 5771, 5784, 5786, 5788,
5790, 5792, 5794, 5796, 5802, 5804, 5806, 5819,
5825, 5843, 5855, 5868, 5881, 5894, 5896, 5898,
5900, 5902, 5904, 5906, 5912, 5914, 5916, 5930,
5944, 5958, 5961, 5964, 5967, 5970, 5973, 5976,
5983, 5986, 5989, 6004, 6019, 6031, 6045, 6059,
6070, 6073, 6076, 6079, 6082, 6085, 6105, 6110,
6130, 6151, 6173, 6194, 6215, 6234, 6255, 6262,
6269, 6276, 6283, 6286, 6289, 6310, 6328, 6344,
6368, 6381, 6403, 6416, 6422, 6440, 6455, 6479,
6489, 6491, 6493, 6495, 6497, 6499, 6519, 6523,
6543, 6564, 6576, 6589, 6602, 6615, 6617, 6619,
6621, 6623, 6625, 6627, 6633, 6635, 6637, 6651,
6665, 6679, 6682, 6685, 6688, 6691, 6694, 6697,
6704, 6707, 6710, 6725, 6740, 6752, 6766, 6780,
6801, 6824, 6845, 6868, 6890, 6911, 6932, 6951,
6972, 6978, 6984, 6990, 6996, 6998, 7000, 7021,
7035, 7049, 7060, 7073, 7086, 7107, 7128, 7147,
7168, 7174, 7180, 7186, 7192, 7194, 7196, 7217,
7238, 7261, 7283, 7304, 7325, 7344, 7365, 7371,
7377, 7383, 7389, 7391, 7393, 7414, 7428, 7442,
7453, 7466, 7479, 7490, 7493, 7496, 7499, 7502,
7505, 7525, 7530, 7550, 7571, 7593, 7614, 7635,
7654, 7675, 7682, 7689, 7696, 7703, 7706, 7709,
7730, 7748, 7764, 7788, 7801, 7823, 7845, 7859,
7873, 7887, 7890, 7893, 7896, 7899, 7902, 7905,
7912, 7915, 7918, 7933, 7948, 7960, 7974, 7988,
8010, 8031, 8052, 8071, 8092, 8098, 8104, 8110,
8116, 8118, 8120, 8141, 8155, 8169, 8180, 8193,
8206, 8220, 8234, 8245, 8258, 8271, 8292, 8315,
8337, 8358, 8379, 8398, 8419, 8424, 8429, 8434,
8439, 8440, 8441, 8462, 8475, 8488, 8498, 8510,
8522, 8523, 8529, 8550, 8573, 8581, 8602, 8623,
8646, 8653, 8674, 8697, 8718, 8741, 8748, 8762,
8771, 8792, 8815, 8823, 8844, 8865, 8888, 8895,
8909, 8918, 8939, 8962, 8970, 8991, 9012, 9035,
9042, 9056, 9065, 9086, 9099, 9107, 9128, 9149,
9162, 9170, 9191, 9214, 9222, 9243, 9257, 9266,
9287, 9300, 9308, 9321, 9329, 9350, 9362
};
static readonly char[] _selector_trans_keys = new char [] {
'\u0020', '\u002d', '\u0037', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u0031', '\u0037', '\u005c', '\u0000', '\u0031',
'\u0020', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u003a', '\u0009', '\u000d', '\u0020',
'\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0022', '\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c',
'\u002d', '\u002f', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0049', '\u0069', '\u004d', '\u006d', '\u0050', '\u0070', '\u004f', '\u006f',
'\u0052', '\u0072', '\u0054', '\u0074', '\u0041', '\u0061', '\u004e', '\u006e',
'\u0054', '\u0074', '\u0020', '\u003b', '\u007d', '\u0009', '\u000d', '\u002d',
'\u003e', '\u0021', '\u002d', '\u002d', '\u0027', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d', '\u002e', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0037',
'\u005c', '\u0000', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0029', '\u0009', '\u000d',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u000a', '\u0022', '\u0027', '\u0028',
'\u005c', '\u0075', '\u007d', '\u000c', '\u000d', '\u0030', '\u0039', '\u0041',
'\u0046', '\u0061', '\u0066', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0049', '\u0069',
'\u0022', '\u004d', '\u006d', '\u0022', '\u0050', '\u0070', '\u0022', '\u004f',
'\u006f', '\u0022', '\u0052', '\u0072', '\u0022', '\u0054', '\u0074', '\u0022',
'\u0041', '\u0061', '\u0022', '\u004e', '\u006e', '\u0022', '\u0054', '\u0074',
'\u0020', '\u0022', '\u003b', '\u007d', '\u0009', '\u000d', '\u0020', '\u0022',
'\u002d', '\u0037', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u0031', '\u0022', '\u0037', '\u005c', '\u0000', '\u0031',
'\u0020', '\u0022', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u003a', '\u0009',
'\u000d', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c',
'\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0020', '\u0021', '\u0022',
'\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0027', '\u0049', '\u0069', '\u0027', '\u004d',
'\u006d', '\u0027', '\u0050', '\u0070', '\u0027', '\u004f', '\u006f', '\u0027',
'\u0052', '\u0072', '\u0027', '\u0054', '\u0074', '\u0027', '\u0041', '\u0061',
'\u0027', '\u004e', '\u006e', '\u0027', '\u0054', '\u0074', '\u0020', '\u0027',
'\u003b', '\u007d', '\u0009', '\u000d', '\u0020', '\u0027', '\u002d', '\u0037',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u0031', '\u0027', '\u0037', '\u005c', '\u0000', '\u0031', '\u0020', '\u0027',
'\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0027', '\u003a', '\u0009', '\u000d', '\u0020',
'\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0027', '\u0037', '\u005c', '\u0000',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0027', '\u0029', '\u0009', '\u000d', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u000a', '\u0022', '\u0028', '\u005c', '\u0075',
'\u007d', '\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061',
'\u0066', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0049', '\u0069', '\u0022',
'\u0027', '\u004d', '\u006d', '\u0022', '\u0027', '\u0050', '\u0070', '\u0022',
'\u0027', '\u004f', '\u006f', '\u0022', '\u0027', '\u0052', '\u0072', '\u0022',
'\u0027', '\u0054', '\u0074', '\u0022', '\u0027', '\u0041', '\u0061', '\u0022',
'\u0027', '\u004e', '\u006e', '\u0022', '\u0027', '\u0054', '\u0074', '\u0020',
'\u0022', '\u0027', '\u003b', '\u007d', '\u0009', '\u000d', '\u0020', '\u0022',
'\u0027', '\u002d', '\u0037', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u0031', '\u0022', '\u0027', '\u0037', '\u005c',
'\u0000', '\u0031', '\u0020', '\u0022', '\u0027', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020',
'\u0022', '\u0027', '\u003a', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027',
'\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022',
'\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0037', '\u005c', '\u0000',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0029', '\u0009', '\u000d',
'\u0022', '\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0031', '\u0032', '\u0039', '\u000a', '\u0028', '\u005c', '\u0075', '\u007d',
'\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u0029', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0029', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0072', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u006c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0030', '\u0039',
'\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u0031', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u002c', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u0036', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027',
'\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u000d', '\u0022', '\u0027', '\u000a', '\u0022', '\u0027', '\u0022',
'\u0027', '\u007c', '\u0020', '\u0022', '\u0027', '\u0009', '\u000a', '\u000c',
'\u000d', '\u0022', '\u0027', '\u0029', '\u0022', '\u0027', '\u003f', '\u0020',
'\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0020',
'\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0022', '\u0049',
'\u0069', '\u0022', '\u004d', '\u006d', '\u0022', '\u0050', '\u0070', '\u0022',
'\u004f', '\u006f', '\u0022', '\u0052', '\u0072', '\u0022', '\u0054', '\u0074',
'\u0022', '\u0041', '\u0061', '\u0022', '\u004e', '\u006e', '\u0022', '\u0054',
'\u0074', '\u0020', '\u0022', '\u003b', '\u007d', '\u0009', '\u000d', '\u0020',
'\u0022', '\u002d', '\u0037', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u0031', '\u0022', '\u0037', '\u005c', '\u0000',
'\u0031', '\u0020', '\u0022', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u003a',
'\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d', '\u0037',
'\u005c', '\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u0029', '\u0009',
'\u000d', '\u0022', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0037', '\u005c', '\u0000',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0022', '\u0029', '\u0009', '\u000d', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u000a', '\u0022', '\u0027', '\u0028', '\u005c',
'\u0075', '\u007d', '\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046',
'\u0061', '\u0066', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u0029',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0029', '\u002b', '\u002c', '\u002d', '\u002f',
'\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d',
'\u002e', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0022', '\u0037', '\u005c', '\u0000', '\u002f', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0022',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u002b',
'\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032',
'\u0039', '\u000a', '\u0027', '\u0028', '\u005c', '\u0075', '\u007d', '\u000c',
'\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0072',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u006c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020',
'\u0022', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0027', '\u0028', '\u0020', '\u0022', '\u0029', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0030',
'\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0022', '\u0029',
'\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0027', '\u0028', '\u0020', '\u0022', '\u0029', '\u0031', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0020',
'\u0022', '\u0029', '\u002c', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u0027', '\u0028', '\u0020', '\u0022', '\u0029', '\u0036',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027',
'\u0028', '\u0020', '\u0022', '\u0029', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u000d', '\u0022', '\u000a', '\u0022', '\u0022', '\u007c',
'\u0020', '\u0022', '\u0009', '\u000a', '\u000c', '\u000d', '\u0022', '\u0029',
'\u0022', '\u003f', '\u0022', '\u0027', '\u0020', '\u0021', '\u0022', '\u0027',
'\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0027', '\u0027', '\u0049', '\u0069', '\u0027', '\u004d',
'\u006d', '\u0027', '\u0050', '\u0070', '\u0027', '\u004f', '\u006f', '\u0027',
'\u0052', '\u0072', '\u0027', '\u0054', '\u0074', '\u0027', '\u0041', '\u0061',
'\u0027', '\u004e', '\u006e', '\u0027', '\u0054', '\u0074', '\u0020', '\u0027',
'\u003b', '\u007d', '\u0009', '\u000d', '\u0020', '\u0027', '\u002d', '\u0037',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u0031', '\u0027', '\u0037', '\u005c', '\u0000', '\u0031', '\u0020', '\u0027',
'\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0027', '\u003a', '\u0009', '\u000d', '\u0020',
'\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0027', '\u0037', '\u005c', '\u0000',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0027', '\u0029', '\u0009', '\u000d', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u000a', '\u0022', '\u0027', '\u0028', '\u005c',
'\u0075', '\u007d', '\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046',
'\u0061', '\u0066', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0049', '\u0069',
'\u0022', '\u0027', '\u004d', '\u006d', '\u0022', '\u0027', '\u0050', '\u0070',
'\u0022', '\u0027', '\u004f', '\u006f', '\u0022', '\u0027', '\u0052', '\u0072',
'\u0022', '\u0027', '\u0054', '\u0074', '\u0022', '\u0027', '\u0041', '\u0061',
'\u0022', '\u0027', '\u004e', '\u006e', '\u0022', '\u0027', '\u0054', '\u0074',
'\u0020', '\u0022', '\u0027', '\u003b', '\u007d', '\u0009', '\u000d', '\u0020',
'\u0022', '\u0027', '\u002d', '\u0037', '\u003b', '\u005c', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u0031', '\u0022', '\u0027', '\u0037',
'\u005c', '\u0000', '\u0031', '\u0020', '\u0022', '\u0027', '\u003a', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f',
'\u0020', '\u0022', '\u0027', '\u003a', '\u0009', '\u000d', '\u0020', '\u0022',
'\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0022', '\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0037', '\u005c',
'\u0000', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0029', '\u0009',
'\u000d', '\u0022', '\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0031', '\u0032', '\u0039', '\u000a', '\u0027', '\u0028', '\u005c',
'\u0075', '\u007d', '\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046',
'\u0061', '\u0066', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u0029',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0029', '\u002b', '\u002c', '\u002d', '\u002f',
'\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0072', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u006c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u0031', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u002c', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027',
'\u0028', '\u0029', '\u0036', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020',
'\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u000d', '\u0022', '\u0027', '\u000a', '\u0022',
'\u0027', '\u0022', '\u0027', '\u007c', '\u0020', '\u0022', '\u0027', '\u0009',
'\u000a', '\u000c', '\u000d', '\u0022', '\u0027', '\u0029', '\u0022', '\u0027',
'\u003f', '\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d',
'\u002f', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022',
'\u0027', '\u0022', '\u0027', '\u0049', '\u0069', '\u0022', '\u0027', '\u004d',
'\u006d', '\u0022', '\u0027', '\u0050', '\u0070', '\u0022', '\u0027', '\u004f',
'\u006f', '\u0022', '\u0027', '\u0052', '\u0072', '\u0022', '\u0027', '\u0054',
'\u0074', '\u0022', '\u0027', '\u0041', '\u0061', '\u0022', '\u0027', '\u004e',
'\u006e', '\u0022', '\u0027', '\u0054', '\u0074', '\u0020', '\u0022', '\u0027',
'\u003b', '\u007d', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u002d',
'\u0037', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u0031', '\u0022', '\u0027', '\u0037', '\u005c', '\u0000', '\u0031',
'\u0020', '\u0022', '\u0027', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0027',
'\u003a', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d',
'\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u0027',
'\u0029', '\u0009', '\u000d', '\u0022', '\u0027', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d', '\u002e', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022',
'\u0027', '\u0037', '\u005c', '\u0000', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022',
'\u0027', '\u0029', '\u0009', '\u000d', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u000a', '\u0022', '\u0027', '\u0028', '\u005c', '\u0075', '\u007d', '\u000c',
'\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u0029', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0029', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0049', '\u0069', '\u0022',
'\u0027', '\u004d', '\u006d', '\u0022', '\u0027', '\u0050', '\u0070', '\u0022',
'\u0027', '\u004f', '\u006f', '\u0022', '\u0027', '\u0052', '\u0072', '\u0022',
'\u0027', '\u0054', '\u0074', '\u0022', '\u0027', '\u0041', '\u0061', '\u0022',
'\u0027', '\u004e', '\u006e', '\u0022', '\u0027', '\u0054', '\u0074', '\u0020',
'\u0022', '\u0027', '\u003b', '\u007d', '\u0009', '\u000d', '\u0020', '\u0022',
'\u0027', '\u002d', '\u0037', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u0031', '\u0022', '\u0027', '\u0037', '\u005c',
'\u0000', '\u0031', '\u0020', '\u0022', '\u0027', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020',
'\u0022', '\u0027', '\u003a', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027',
'\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022',
'\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u0037', '\u005c', '\u0000',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u000a', '\u0022',
'\u0028', '\u005c', '\u0075', '\u007d', '\u000c', '\u000d', '\u0030', '\u0039',
'\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007b', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0022', '\u0027', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0025', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0072',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u006c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020',
'\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0030',
'\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0022', '\u0027',
'\u0028', '\u0029', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u0031',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020',
'\u0022', '\u0027', '\u0028', '\u0029', '\u002c', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u0036', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u000d', '\u0022', '\u0027', '\u000a', '\u0022', '\u0027',
'\u0022', '\u0027', '\u007c', '\u0020', '\u0022', '\u0027', '\u0009', '\u000a',
'\u000c', '\u000d', '\u0022', '\u0027', '\u0029', '\u0022', '\u0027', '\u003f',
'\u0022', '\u0027', '\u002d', '\u0037', '\u005c', '\u0000', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u003e', '\u0022', '\u0027',
'\u002d', '\u0021', '\u0022', '\u0027', '\u0022', '\u0027', '\u002d', '\u0022',
'\u0027', '\u002d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0022', '\u0027',
'\u002d', '\u0049', '\u0069', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002d', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u003e', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u0031', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022',
'\u0027', '\u002b', '\u002d', '\u0036', '\u0037', '\u005c', '\u0075', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u000d', '\u0020',
'\u0022', '\u0027', '\u0029', '\u0009', '\u000c', '\u000a', '\u0020', '\u0022',
'\u0027', '\u0029', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u0029',
'\u007c', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u0009', '\u000a',
'\u000c', '\u000d', '\u0022', '\u0027', '\u0029', '\u0022', '\u0027', '\u003f',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027',
'\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0022', '\u0027', '\u002d', '\u0037', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d', '\u002e', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u000a',
'\u0022', '\u0027', '\u003a', '\u005c', '\u000c', '\u000d', '\u0030', '\u0039',
'\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0027', '\u0029', '\u003a',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e',
'\u002f', '\u0020', '\u0027', '\u0029', '\u003a', '\u0009', '\u000d', '\u0020',
'\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0020', '\u0027', '\u002d', '\u0037', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d', '\u002e',
'\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0072', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u006c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0030', '\u0039', '\u0041', '\u0046',
'\u0061', '\u0066', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020',
'\u0022', '\u0027', '\u0028', '\u0029', '\u0031', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u002c', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u0036', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u000d',
'\u0027', '\u000a', '\u0027', '\u0027', '\u007c', '\u0020', '\u0027', '\u0009',
'\u000a', '\u000c', '\u000d', '\u0027', '\u0029', '\u0027', '\u003f', '\u0027',
'\u002d', '\u0037', '\u005c', '\u0000', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0027', '\u003e', '\u0027', '\u002d', '\u0021', '\u0027', '\u0027',
'\u002d', '\u0027', '\u002d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0027',
'\u002d', '\u0049', '\u0069', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002d', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u003e', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u000a', '\u0027', '\u003a', '\u005c',
'\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066',
'\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f',
'\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u002d',
'\u0037', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0025', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0072',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u006c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020',
'\u0022', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0027', '\u0028', '\u0020', '\u0022', '\u0029', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0030',
'\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0022', '\u0029',
'\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0027', '\u0028', '\u0020', '\u0022', '\u0029', '\u0031', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0020',
'\u0022', '\u0029', '\u002c', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u0027', '\u0028', '\u0020', '\u0022', '\u0029', '\u0036',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027',
'\u0028', '\u0020', '\u0022', '\u0029', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u000d', '\u000a', '\u007c', '\u0020', '\u0009', '\u000a',
'\u000c', '\u000d', '\u0029', '\u003f', '\u002d', '\u0037', '\u005c', '\u0000',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u002d', '\u0049', '\u0069', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u003e', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0027', '\u003a',
'\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0027', '\u0031', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020',
'\u0027', '\u002c', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002b', '\u002e', '\u002f', '\u0027', '\u0036', '\u0027', '\u007d',
'\u0027', '\u0028', '\u000d', '\u0027', '\u000a', '\u0027', '\u0027', '\u007c',
'\u0020', '\u0027', '\u0009', '\u000a', '\u000c', '\u000d', '\u0027', '\u0029',
'\u0027', '\u003f', '\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c',
'\u002d', '\u002f', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0022', '\u002d', '\u0037', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d', '\u002e', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u002b',
'\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0072', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u006c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0029', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0020',
'\u0022', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0027', '\u0028', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061',
'\u0066', '\u0020', '\u0022', '\u0029', '\u005c', '\u007b', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0020', '\u0022',
'\u0029', '\u0031', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0027', '\u0028', '\u0020', '\u0022', '\u0029', '\u002c', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0027', '\u0028',
'\u0020', '\u0022', '\u0029', '\u0036', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0027', '\u0028', '\u0020', '\u0022', '\u0029',
'\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0027', '\u0028', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u000d', '\u0022',
'\u000a', '\u0022', '\u0022', '\u007c', '\u0020', '\u0022', '\u0009', '\u000a',
'\u000c', '\u000d', '\u0022', '\u0029', '\u0022', '\u003f', '\u0022', '\u002d',
'\u0037', '\u005c', '\u0000', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0022', '\u003e', '\u0022', '\u002d', '\u0021', '\u0022', '\u0022', '\u002d',
'\u0022', '\u002d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0022', '\u002d',
'\u0049', '\u0069', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002d', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u003e',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u003a', '\u005c',
'\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e',
'\u002f', '\u0020', '\u0022', '\u0027', '\u0031', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020',
'\u0022', '\u0027', '\u002c', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002b', '\u002e', '\u002f', '\u0022', '\u0027', '\u0036',
'\u0022', '\u0027', '\u007d', '\u0022', '\u0027', '\u0028', '\u000d', '\u0022',
'\u0027', '\u000a', '\u0022', '\u0027', '\u0022', '\u0027', '\u007c', '\u0020',
'\u0022', '\u0027', '\u0009', '\u000a', '\u000c', '\u000d', '\u0022', '\u0027',
'\u0029', '\u0022', '\u0027', '\u003f', '\u0020', '\u0022', '\u0027', '\u003a',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0027', '\u002d', '\u0037',
'\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u0031', '\u0020', '\u0022', '\u0027', '\u002d', '\u003a', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0020', '\u0022',
'\u0027', '\u003a', '\u003e', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021', '\u0022', '\u0027',
'\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u0029',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0029', '\u002b', '\u002c', '\u002d', '\u002f',
'\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0072', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u006c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u0031', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u002c', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027',
'\u0028', '\u0029', '\u0036', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020',
'\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u000d', '\u0022', '\u0027', '\u000a', '\u0022',
'\u0027', '\u0022', '\u0027', '\u007c', '\u0020', '\u0022', '\u0027', '\u0009',
'\u000a', '\u000c', '\u000d', '\u0022', '\u0027', '\u0029', '\u0022', '\u0027',
'\u003f', '\u0022', '\u0027', '\u002d', '\u0037', '\u005c', '\u0000', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0027', '\u003e', '\u0022',
'\u0027', '\u002d', '\u0021', '\u0022', '\u0027', '\u0022', '\u0027', '\u002d',
'\u0022', '\u0027', '\u002d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0022',
'\u0027', '\u002d', '\u0049', '\u0069', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u003e', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007b', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0022', '\u0027', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f',
'\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u0031',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u0020', '\u0022', '\u0027', '\u002b', '\u002d', '\u0036', '\u0037', '\u005c',
'\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u000d', '\u0020', '\u0022', '\u0027', '\u0029', '\u0009', '\u000c', '\u000a',
'\u0020', '\u0022', '\u0027', '\u0029', '\u0009', '\u000d', '\u0020', '\u0022',
'\u0027', '\u0029', '\u007c', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027',
'\u0009', '\u000a', '\u000c', '\u000d', '\u0022', '\u0027', '\u0029', '\u0022',
'\u0027', '\u003f', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0020', '\u0022', '\u0027', '\u002d', '\u0037', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d',
'\u002e', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u000a', '\u0022', '\u0027', '\u003a', '\u005c', '\u000c', '\u000d',
'\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0027',
'\u0029', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0027', '\u0029', '\u003a', '\u0009',
'\u000d', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c',
'\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0020', '\u0027', '\u002d', '\u0037', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u002b',
'\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0027', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0072', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u006c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0030', '\u0039',
'\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0022', '\u0027', '\u0028',
'\u0029', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u0031', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022',
'\u0027', '\u0028', '\u0029', '\u002c', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027', '\u0028', '\u0029',
'\u0036', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u001f',
'\u0020', '\u0022', '\u0027', '\u0028', '\u0029', '\u005c', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u001f', '\u0020', '\u0022', '\u0027',
'\u0028', '\u0029', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u001f', '\u000d', '\u0027', '\u000a', '\u0027', '\u0027', '\u007c', '\u0020',
'\u0027', '\u0009', '\u000a', '\u000c', '\u000d', '\u0027', '\u0029', '\u0027',
'\u003f', '\u0027', '\u002d', '\u0037', '\u005c', '\u0000', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0027', '\u003e', '\u0027', '\u002d', '\u0021',
'\u0027', '\u0027', '\u002d', '\u0027', '\u002d', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0027', '\u002d', '\u0049', '\u0069', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u003e', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u000a', '\u0027',
'\u003a', '\u005c', '\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046',
'\u0061', '\u0066', '\u0020', '\u0029', '\u003a', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0029',
'\u003a', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d',
'\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u000a', '\u003a', '\u005c',
'\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066',
'\u0020', '\u003a', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0031', '\u003a', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f',
'\u0020', '\u002c', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002b', '\u002e', '\u002f', '\u0036', '\u007d', '\u0028', '\u000d',
'\u000a', '\u007c', '\u0020', '\u0009', '\u000a', '\u000c', '\u000d', '\u0029',
'\u003f', '\u0020', '\u0027', '\u003a', '\u005c', '\u007b', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0027',
'\u0031', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0027', '\u002c', '\u003a', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002b', '\u002e', '\u002f',
'\u0027', '\u0036', '\u0027', '\u007d', '\u0027', '\u0028', '\u000d', '\u0027',
'\u000a', '\u0027', '\u0027', '\u007c', '\u0020', '\u0027', '\u0009', '\u000a',
'\u000c', '\u000d', '\u0027', '\u0029', '\u0027', '\u003f', '\u0020', '\u0022',
'\u0029', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0029', '\u003a', '\u0009',
'\u000d', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d', '\u0037', '\u005c',
'\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u000a', '\u0022', '\u003a', '\u005c', '\u000c',
'\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020',
'\u0022', '\u003a', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0031', '\u003a',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e',
'\u002f', '\u0020', '\u0022', '\u002c', '\u003a', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002b', '\u002e', '\u002f', '\u0022', '\u0036',
'\u0022', '\u007d', '\u0022', '\u0028', '\u000d', '\u0022', '\u000a', '\u0022',
'\u0022', '\u007c', '\u0020', '\u0022', '\u0009', '\u000a', '\u000c', '\u000d',
'\u0022', '\u0029', '\u0022', '\u003f', '\u0020', '\u0022', '\u0027', '\u003a',
'\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0022', '\u0027', '\u0031', '\u003a', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f',
'\u0020', '\u0022', '\u0027', '\u002c', '\u003a', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002b', '\u002e', '\u002f', '\u0022', '\u0027',
'\u0036', '\u0022', '\u0027', '\u007d', '\u0022', '\u0027', '\u0028', '\u000d',
'\u0022', '\u0027', '\u000a', '\u0022', '\u0027', '\u0022', '\u0027', '\u007c',
'\u0020', '\u0022', '\u0027', '\u0009', '\u000a', '\u000c', '\u000d', '\u0022',
'\u0027', '\u0029', '\u0022', '\u0027', '\u003f', '\u0020', '\u0022', '\u0027',
'\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0027', '\u002d',
'\u0037', '\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u0031', '\u0020', '\u0022', '\u0027', '\u002d', '\u003a',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0020',
'\u0022', '\u0027', '\u003a', '\u003e', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021', '\u0022',
'\u0027', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0022', '\u0027', '\u002d', '\u0037', '\u005c',
'\u0000', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022', '\u0027',
'\u003e', '\u0022', '\u0027', '\u002d', '\u0021', '\u0022', '\u0027', '\u0022',
'\u0027', '\u002d', '\u0022', '\u0027', '\u002d', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0022', '\u0027', '\u002d', '\u0049', '\u0069', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u003e', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u0031', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0022', '\u0027', '\u002b', '\u002d', '\u0036', '\u0037', '\u005c', '\u0075',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u000d',
'\u0020', '\u0022', '\u0027', '\u0029', '\u0009', '\u000c', '\u000a', '\u0020',
'\u0022', '\u0027', '\u0029', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027',
'\u0029', '\u007c', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u0009',
'\u000a', '\u000c', '\u000d', '\u0022', '\u0027', '\u0029', '\u0022', '\u0027',
'\u003f', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022',
'\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0022', '\u0027', '\u002d', '\u0037', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d', '\u002e',
'\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u000a', '\u0022', '\u0027', '\u003a', '\u005c', '\u000c', '\u000d', '\u0030',
'\u0039', '\u0041', '\u0046', '\u0061', '\u0066', '\u0020', '\u0021', '\u0022',
'\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u0029', '\u003a', '\u005c',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f',
'\u0020', '\u0022', '\u0029', '\u003a', '\u0009', '\u000d', '\u0020', '\u0022',
'\u0027', '\u002b', '\u002d', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0022', '\u002d', '\u0037', '\u005c', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u002b', '\u002d', '\u002e', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u002c', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0022',
'\u002d', '\u0037', '\u005c', '\u0000', '\u002f', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0022', '\u003e', '\u0022', '\u002d', '\u0021', '\u0022', '\u0022',
'\u002d', '\u0022', '\u002d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0022',
'\u002d', '\u0049', '\u0069', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002d', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u003e', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u000a', '\u0022', '\u003a', '\u005c',
'\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061', '\u0066',
'\u0020', '\u0022', '\u003a', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0031',
'\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0022', '\u002c', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002b', '\u002e', '\u002f', '\u0022',
'\u0036', '\u0022', '\u007d', '\u0022', '\u0028', '\u000d', '\u0022', '\u000a',
'\u0022', '\u0022', '\u007c', '\u0020', '\u0022', '\u0009', '\u000a', '\u000c',
'\u000d', '\u0022', '\u0029', '\u0022', '\u003f', '\u0020', '\u0022', '\u0027',
'\u003a', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0027', '\u0031', '\u003a',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e',
'\u002f', '\u0020', '\u0022', '\u0027', '\u002c', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002b', '\u002e', '\u002f', '\u0022',
'\u0027', '\u0036', '\u0022', '\u0027', '\u007d', '\u0022', '\u0027', '\u0028',
'\u000d', '\u0022', '\u0027', '\u000a', '\u0022', '\u0027', '\u0022', '\u0027',
'\u007c', '\u0020', '\u0022', '\u0027', '\u0009', '\u000a', '\u000c', '\u000d',
'\u0022', '\u0027', '\u0029', '\u0022', '\u0027', '\u003f', '\u0020', '\u0022',
'\u0027', '\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0027',
'\u002d', '\u0037', '\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u0031', '\u0020', '\u0022', '\u0027', '\u002d',
'\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f',
'\u0020', '\u0022', '\u0027', '\u003a', '\u003e', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021',
'\u0022', '\u0027', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u0029', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0029', '\u002b', '\u002c',
'\u002d', '\u002f', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u0029', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0029', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007b', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u0031', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u002b',
'\u002d', '\u0036', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u000d', '\u0020', '\u0027', '\u0029',
'\u0009', '\u000c', '\u000a', '\u0020', '\u0027', '\u0029', '\u0009', '\u000d',
'\u0020', '\u0027', '\u0029', '\u007c', '\u0009', '\u000d', '\u0020', '\u0027',
'\u0009', '\u000a', '\u000c', '\u000d', '\u0027', '\u0029', '\u0027', '\u003f',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0027', '\u003a',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0027', '\u002d', '\u0037', '\u003a',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u0031', '\u0020', '\u0027', '\u002d', '\u003a', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0020', '\u0027', '\u003a', '\u003e',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e',
'\u002f', '\u0020', '\u0021', '\u0027', '\u003a', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u0031',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u0020', '\u0022', '\u0027', '\u002b', '\u002d', '\u0036', '\u0037', '\u005c',
'\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u000d', '\u0020', '\u0022', '\u0029', '\u0009', '\u000c', '\u000a', '\u0020',
'\u0022', '\u0029', '\u0009', '\u000d', '\u0020', '\u0022', '\u0029', '\u007c',
'\u0009', '\u000d', '\u0020', '\u0022', '\u0009', '\u000a', '\u000c', '\u000d',
'\u0022', '\u0029', '\u0022', '\u003f', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007b',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u0029', '\u002b',
'\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0029', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022',
'\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c',
'\u0075', '\u007b', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002e', '\u002f', '\u0031', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027',
'\u002b', '\u002d', '\u0036', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u000d', '\u0020', '\u0022',
'\u0029', '\u0009', '\u000c', '\u000a', '\u0020', '\u0022', '\u0029', '\u0009',
'\u000d', '\u0020', '\u0022', '\u0029', '\u007c', '\u0009', '\u000d', '\u0020',
'\u0022', '\u0009', '\u000a', '\u000c', '\u000d', '\u0022', '\u0029', '\u0022',
'\u003f', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022',
'\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u002d', '\u0037',
'\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u0031', '\u0020', '\u0022', '\u002d', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0020', '\u0022', '\u003a',
'\u003e', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0021', '\u0022', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0022',
'\u0027', '\u002d', '\u0037', '\u005c', '\u0000', '\u002f', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0022', '\u0027', '\u003e', '\u0022', '\u0027', '\u002d',
'\u0021', '\u0022', '\u0027', '\u0022', '\u0027', '\u002d', '\u0022', '\u0027',
'\u002d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0022', '\u0027', '\u002d',
'\u0049', '\u0069', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002d', '\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u003e',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007b',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u0031', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d',
'\u0036', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u000d', '\u0020', '\u0022', '\u0027', '\u0029',
'\u0009', '\u000c', '\u000a', '\u0020', '\u0022', '\u0027', '\u0029', '\u0009',
'\u000d', '\u0020', '\u0022', '\u0027', '\u0029', '\u007c', '\u0009', '\u000d',
'\u0020', '\u0022', '\u0027', '\u0009', '\u000a', '\u000c', '\u000d', '\u0022',
'\u0027', '\u0029', '\u0022', '\u0027', '\u003f', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007b', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d', '\u0037',
'\u005c', '\u0075', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u0027', '\u002d',
'\u0037', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u002b', '\u002d', '\u002e', '\u0037', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u002c', '\u002f',
'\u0030', '\u0031', '\u0032', '\u0039', '\u000a', '\u0022', '\u0027', '\u003a',
'\u005c', '\u000c', '\u000d', '\u0030', '\u0039', '\u0041', '\u0046', '\u0061',
'\u0066', '\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d',
'\u002f', '\u0037', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u0027',
'\u003a', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0027', '\u0031', '\u003a',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e',
'\u002f', '\u0020', '\u0022', '\u0027', '\u002c', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002b', '\u002e', '\u002f', '\u0022',
'\u0027', '\u0036', '\u0022', '\u0027', '\u007d', '\u0022', '\u0027', '\u0028',
'\u000d', '\u0022', '\u0027', '\u000a', '\u0022', '\u0027', '\u0022', '\u0027',
'\u007c', '\u0020', '\u0022', '\u0027', '\u0009', '\u000a', '\u000c', '\u000d',
'\u0022', '\u0027', '\u0029', '\u0022', '\u0027', '\u003f', '\u0020', '\u0022',
'\u0027', '\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u0027',
'\u002d', '\u0037', '\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u0031', '\u0020', '\u0022', '\u0027', '\u002d',
'\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f',
'\u0020', '\u0022', '\u0027', '\u003a', '\u003e', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021',
'\u0022', '\u0027', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021', '\u0022', '\u0025',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075',
'\u007b', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002e', '\u002f', '\u0031', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u002b',
'\u002d', '\u0036', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u000d', '\u0020', '\u0027', '\u0029',
'\u0009', '\u000c', '\u000a', '\u0020', '\u0027', '\u0029', '\u0009', '\u000d',
'\u0020', '\u0027', '\u0029', '\u007c', '\u0009', '\u000d', '\u0020', '\u0027',
'\u0009', '\u000a', '\u000c', '\u000d', '\u0027', '\u0029', '\u0027', '\u003f',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0027', '\u003a',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u0027', '\u002d', '\u0037', '\u003a',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u0031', '\u0020', '\u0027', '\u002d', '\u003a', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0020', '\u0027', '\u003a', '\u003e',
'\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e',
'\u002f', '\u0020', '\u0021', '\u0027', '\u003a', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022',
'\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0022', '\u002d', '\u0037',
'\u003a', '\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u0031', '\u0020', '\u0022', '\u002d', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0020', '\u0022', '\u003a',
'\u003e', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u0020', '\u0021', '\u0022', '\u003a', '\u005c', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u0029', '\u002b', '\u002c', '\u002e',
'\u002f', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0029', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0020', '\u0021', '\u0022', '\u0025', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002e', '\u002f', '\u005c', '\u0075', '\u007b',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002a', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u0031', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u002b', '\u002d',
'\u0036', '\u0037', '\u005c', '\u0075', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002f', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0025', '\u0027', '\u0028', '\u002b', '\u002c', '\u002e', '\u002f',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002a', '\u0030', '\u0039', '\u000d', '\u0020', '\u0029', '\u0009', '\u000c',
'\u000a', '\u0020', '\u0029', '\u0009', '\u000d', '\u0020', '\u0029', '\u007c',
'\u0009', '\u000d', '\u0020', '\u0009', '\u000a', '\u000c', '\u000d', '\u0029',
'\u003f', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002e', '\u002f', '\u005c', '\u0075', '\u007b', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002a', '\u0030', '\u0039', '\u0020', '\u003a',
'\u003b', '\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002c', '\u002e', '\u002f', '\u0020', '\u002d', '\u0037', '\u003a', '\u003b',
'\u005c', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u0031',
'\u0020', '\u002d', '\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002f', '\u0020', '\u003a', '\u003e', '\u005c', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002c', '\u002e', '\u002f', '\u0020', '\u0021',
'\u003a', '\u005c', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002c',
'\u002e', '\u002f', '\u007b', '\u0020', '\u002d', '\u003c', '\u007b', '\u0009',
'\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u003c',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u0027',
'\u002d', '\u003c', '\u007b', '\u0009', '\u000d', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u003c', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0027',
'\u002d', '\u003c', '\u007b', '\u0009', '\u000d', '\u0020', '\u0021', '\u0022',
'\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u003c', '\u005c',
'\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e',
'\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c',
'\u002d', '\u002f', '\u0037', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0021',
'\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u003c',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u002d',
'\u003c', '\u007b', '\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u002d',
'\u003a', '\u003c', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002f', '\u0020', '\u0022', '\u0027', '\u002d', '\u003a', '\u003c',
'\u007b', '\u0009', '\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f',
'\u0037', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020',
'\u0022', '\u0027', '\u002d', '\u003c', '\u007b', '\u0009', '\u000d', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f',
'\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u003c', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d',
'\u002f', '\u0037', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039',
'\u0020', '\u0027', '\u002d', '\u003c', '\u007b', '\u0009', '\u000d', '\u0020',
'\u0022', '\u0027', '\u002d', '\u003a', '\u003c', '\u005c', '\u007b', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002f', '\u0020', '\u0022', '\u0027',
'\u002d', '\u003a', '\u003c', '\u007b', '\u0009', '\u000d', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u003c',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027', '\u002b',
'\u002c', '\u002d', '\u002f', '\u0037', '\u003c', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0031',
'\u0032', '\u0039', '\u0020', '\u0022', '\u0027', '\u002d', '\u003c', '\u007b',
'\u0009', '\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f',
'\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0021', '\u0022', '\u0027',
'\u002b', '\u002c', '\u002d', '\u002f', '\u0037', '\u003c', '\u005c', '\u0075',
'\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030',
'\u0031', '\u0032', '\u0039', '\u0020', '\u0022', '\u002d', '\u003c', '\u007b',
'\u0009', '\u000d', '\u0020', '\u0022', '\u0027', '\u002d', '\u003a', '\u003c',
'\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002f',
'\u0020', '\u0022', '\u0027', '\u002d', '\u003a', '\u003c', '\u007b', '\u0009',
'\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0027',
'\u002d', '\u003a', '\u003c', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002f', '\u0020', '\u0027', '\u002d', '\u003a', '\u003c',
'\u007b', '\u0009', '\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028',
'\u002b', '\u002c', '\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d',
'\u0000', '\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039',
'\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002d',
'\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009',
'\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u0022', '\u002d',
'\u003a', '\u003c', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002f', '\u0020', '\u0022', '\u002d', '\u003a', '\u003c', '\u007b',
'\u0009', '\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020',
'\u0021', '\u0022', '\u0027', '\u002b', '\u002c', '\u002d', '\u002f', '\u0037',
'\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002e', '\u0030', '\u0031', '\u0032', '\u0039', '\u0020', '\u0022',
'\u0027', '\u002d', '\u003c', '\u007b', '\u0009', '\u000d', '\u0020', '\u0021',
'\u0022', '\u0027', '\u0028', '\u002b', '\u002c', '\u002d', '\u002f', '\u003c',
'\u005c', '\u0075', '\u007d', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002e', '\u0030', '\u0039', '\u0020', '\u0022', '\u0027', '\u002d', '\u003a',
'\u003c', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002f', '\u0020', '\u0022', '\u0027', '\u002d', '\u003a', '\u003c', '\u007b',
'\u0009', '\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b',
'\u002c', '\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000',
'\u0008', '\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020',
'\u0027', '\u002d', '\u003a', '\u003c', '\u005c', '\u007b', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002f', '\u0020', '\u0027', '\u002d', '\u003a',
'\u003c', '\u007b', '\u0009', '\u000d', '\u0020', '\u0022', '\u002d', '\u003a',
'\u003c', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d', '\u000e',
'\u002f', '\u0020', '\u0022', '\u002d', '\u003a', '\u003c', '\u007b', '\u0009',
'\u000d', '\u0020', '\u0021', '\u0022', '\u0027', '\u0028', '\u002b', '\u002c',
'\u002d', '\u002f', '\u003c', '\u005c', '\u0075', '\u007d', '\u0000', '\u0008',
'\u0009', '\u000d', '\u000e', '\u002e', '\u0030', '\u0039', '\u0020', '\u002d',
'\u003a', '\u003c', '\u005c', '\u007b', '\u0000', '\u0008', '\u0009', '\u000d',
'\u000e', '\u002f', '\u0020', '\u002d', '\u003a', '\u003c', '\u007b', '\u0009',
'\u000d', (char) 0
};
static readonly sbyte[] _selector_single_lengths = new sbyte [] {
0, 6, 2, 3, 2, 8, 1, 12,
2, 2, 2, 2, 2, 2, 2, 2,
2, 3, 1, 1, 1, 1, 1, 1,
0, 12, 2, 13, 2, 12, 7, 12,
12, 3, 3, 3, 3, 3, 3, 3,
3, 3, 4, 7, 3, 4, 3, 8,
2, 12, 3, 3, 3, 3, 3, 3,
3, 3, 3, 4, 7, 3, 4, 3,
8, 1, 12, 3, 13, 3, 12, 6,
12, 12, 4, 4, 4, 4, 4, 4,
4, 4, 4, 5, 8, 4, 5, 4,
8, 2, 12, 4, 13, 4, 2, 13,
5, 13, 13, 13, 13, 12, 6, 6,
6, 7, 7, 7, 7, 7, 6, 3,
3, 3, 3, 3, 3, 12, 2, 12,
1, 3, 3, 3, 3, 3, 3, 3,
3, 3, 4, 7, 3, 4, 3, 8,
3, 1, 12, 3, 13, 3, 12, 7,
13, 13, 1, 12, 3, 13, 1, 13,
6, 14, 13, 13, 12, 6, 4, 4,
5, 5, 5, 5, 5, 6, 2, 2,
2, 2, 2, 2, 2, 12, 1, 3,
3, 3, 3, 3, 3, 3, 3, 3,
4, 7, 3, 4, 3, 8, 1, 12,
3, 13, 3, 12, 7, 12, 12, 4,
4, 4, 4, 4, 4, 4, 4, 4,
5, 8, 4, 5, 4, 8, 2, 12,
4, 13, 4, 2, 13, 6, 13, 13,
13, 13, 12, 6, 6, 6, 7, 7,
7, 7, 7, 6, 3, 3, 3, 3,
3, 3, 12, 2, 4, 4, 4, 4,
4, 4, 4, 4, 4, 5, 8, 4,
5, 4, 8, 4, 2, 12, 4, 13,
4, 12, 7, 13, 13, 4, 4, 4,
4, 4, 4, 4, 4, 4, 5, 8,
4, 5, 4, 8, 2, 12, 4, 13,
12, 6, 14, 2, 13, 13, 13, 12,
6, 6, 6, 7, 7, 7, 7, 7,
6, 3, 3, 3, 3, 3, 3, 5,
3, 3, 3, 3, 3, 12, 5, 12,
13, 13, 13, 9, 13, 5, 5, 5,
3, 3, 3, 13, 8, 6, 12, 5,
5, 4, 8, 5, 12, 1, 13, 13,
13, 12, 6, 6, 6, 7, 7, 7,
7, 7, 6, 2, 2, 2, 2, 2,
2, 4, 2, 2, 2, 2, 2, 12,
4, 12, 13, 4, 12, 4, 12, 0,
13, 13, 13, 12, 6, 4, 4, 5,
5, 5, 5, 5, 6, 1, 1, 1,
1, 1, 1, 3, 12, 3, 12, 13,
5, 5, 5, 2, 2, 2, 2, 2,
2, 2, 2, 2, 12, 5, 12, 1,
13, 13, 13, 12, 6, 4, 4, 5,
5, 5, 5, 5, 6, 2, 2, 2,
2, 2, 2, 4, 2, 2, 2, 2,
2, 12, 4, 12, 13, 6, 6, 6,
3, 3, 3, 3, 3, 3, 3, 3,
3, 7, 9, 6, 6, 6, 13, 13,
13, 13, 12, 6, 6, 6, 7, 7,
7, 7, 7, 6, 3, 3, 3, 3,
3, 3, 5, 3, 3, 3, 3, 3,
12, 5, 12, 13, 14, 2, 13, 13,
13, 9, 13, 5, 5, 5, 3, 3,
3, 13, 8, 6, 12, 5, 5, 4,
8, 5, 12, 1, 13, 13, 13, 12,
6, 6, 6, 7, 7, 7, 7, 7,
6, 2, 2, 2, 2, 2, 2, 4,
2, 2, 2, 2, 2, 12, 4, 12,
13, 4, 4, 3, 8, 3, 4, 4,
4, 1, 1, 1, 1, 1, 1, 1,
1, 1, 5, 5, 5, 2, 2, 2,
2, 2, 2, 2, 2, 2, 5, 4,
8, 4, 5, 5, 5, 2, 2, 2,
2, 2, 2, 2, 2, 2, 6, 6,
6, 3, 3, 3, 3, 3, 3, 3,
3, 3, 7, 9, 6, 6, 6, 5,
3, 3, 3, 3, 3, 12, 5, 12,
13, 14, 13, 13, 9, 13, 5, 5,
5, 3, 3, 3, 13, 8, 6, 12,
5, 12, 5, 4, 8, 5, 12, 4,
2, 2, 2, 2, 2, 12, 4, 12,
13, 4, 5, 5, 5, 2, 2, 2,
2, 2, 2, 2, 2, 2, 6, 6,
6, 3, 3, 3, 3, 3, 3, 3,
3, 3, 7, 9, 6, 6, 6, 13,
13, 13, 13, 14, 13, 13, 9, 13,
4, 4, 4, 2, 2, 2, 13, 6,
8, 5, 5, 5, 13, 13, 9, 13,
4, 4, 4, 2, 2, 2, 13, 13,
13, 14, 13, 13, 9, 13, 4, 4,
4, 2, 2, 2, 13, 6, 8, 5,
5, 5, 5, 3, 3, 3, 3, 3,
12, 5, 12, 13, 14, 13, 13, 9,
13, 5, 5, 5, 3, 3, 3, 13,
8, 6, 12, 5, 12, 12, 6, 6,
6, 3, 3, 3, 3, 3, 3, 3,
3, 3, 7, 9, 6, 6, 6, 14,
13, 13, 9, 13, 4, 4, 4, 2,
2, 2, 13, 6, 8, 5, 5, 5,
6, 8, 5, 5, 5, 13, 13, 14,
13, 13, 9, 13, 3, 3, 3, 1,
1, 1, 13, 5, 7, 4, 4, 4,
1, 4, 13, 13, 6, 13, 13, 13,
5, 13, 13, 13, 13, 5, 8, 7,
13, 13, 6, 13, 13, 13, 5, 8,
7, 13, 13, 6, 13, 13, 13, 5,
8, 7, 13, 7, 6, 13, 13, 7,
6, 13, 13, 6, 13, 8, 7, 13,
7, 6, 7, 6, 13, 6, 5
};
static readonly sbyte[] _selector_range_lengths = new sbyte [] {
0, 3, 1, 4, 1, 5, 0, 5,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0,
1, 6, 3, 4, 1, 4, 4, 4,
5, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 3, 1, 4, 1, 5,
0, 5, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 3, 1, 4, 1,
5, 1, 6, 3, 4, 1, 4, 4,
4, 5, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 3, 1, 4, 1,
5, 1, 6, 3, 4, 1, 1, 5,
4, 4, 5, 4, 4, 4, 3, 3,
6, 3, 3, 3, 3, 3, 3, 0,
0, 0, 2, 0, 0, 5, 0, 5,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 3, 1, 4, 1, 5,
1, 1, 6, 3, 4, 1, 4, 4,
4, 5, 1, 6, 3, 4, 1, 5,
4, 4, 4, 4, 4, 3, 4, 7,
4, 4, 4, 4, 4, 3, 0, 0,
0, 2, 0, 0, 0, 5, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 3, 1, 4, 1, 5, 1, 6,
3, 4, 1, 4, 4, 4, 5, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 3, 1, 4, 1, 5, 1, 6,
3, 4, 1, 1, 5, 4, 4, 5,
4, 4, 4, 3, 3, 6, 3, 3,
3, 3, 3, 3, 0, 0, 0, 2,
0, 0, 5, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 3, 1,
4, 1, 5, 1, 1, 6, 3, 4,
1, 4, 4, 4, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 3,
1, 4, 1, 5, 1, 6, 3, 4,
4, 4, 4, 1, 5, 4, 4, 4,
3, 3, 6, 3, 3, 3, 3, 3,
3, 0, 0, 0, 2, 0, 0, 3,
0, 0, 0, 0, 0, 4, 0, 4,
4, 4, 4, 5, 4, 1, 1, 1,
2, 0, 0, 4, 5, 5, 6, 4,
4, 1, 5, 5, 6, 1, 5, 4,
4, 4, 3, 3, 6, 3, 3, 3,
3, 3, 3, 0, 0, 0, 2, 0,
0, 3, 0, 0, 0, 0, 0, 4,
0, 4, 4, 4, 5, 5, 6, 1,
5, 4, 4, 4, 3, 4, 7, 4,
4, 4, 4, 4, 3, 0, 0, 0,
2, 0, 0, 3, 4, 0, 4, 4,
4, 4, 4, 0, 0, 0, 0, 0,
0, 2, 0, 0, 5, 5, 6, 1,
5, 4, 4, 4, 3, 4, 7, 4,
4, 4, 4, 4, 3, 0, 0, 0,
2, 0, 0, 3, 0, 0, 0, 0,
0, 4, 0, 4, 4, 4, 4, 4,
0, 0, 0, 0, 0, 0, 2, 0,
0, 4, 3, 3, 4, 4, 4, 5,
4, 4, 4, 3, 3, 6, 3, 3,
3, 3, 3, 3, 0, 0, 0, 2,
0, 0, 3, 0, 0, 0, 0, 0,
4, 0, 4, 4, 4, 1, 5, 4,
4, 5, 4, 1, 1, 1, 2, 0,
0, 4, 5, 5, 6, 4, 4, 1,
5, 5, 6, 1, 5, 4, 4, 4,
3, 3, 6, 3, 3, 3, 3, 3,
3, 0, 0, 0, 2, 0, 0, 3,
0, 0, 0, 0, 0, 4, 0, 4,
4, 4, 4, 1, 5, 4, 4, 4,
4, 0, 0, 0, 0, 0, 0, 2,
0, 0, 4, 4, 4, 0, 0, 0,
0, 0, 0, 2, 0, 0, 4, 1,
5, 4, 4, 4, 4, 0, 0, 0,
0, 0, 0, 2, 0, 0, 4, 4,
4, 0, 0, 0, 0, 0, 0, 2,
0, 0, 4, 3, 3, 4, 4, 3,
0, 0, 0, 0, 0, 4, 0, 4,
4, 4, 4, 4, 5, 4, 1, 1,
1, 2, 0, 0, 4, 5, 5, 6,
4, 5, 4, 1, 5, 5, 6, 3,
0, 0, 0, 0, 0, 4, 0, 4,
4, 4, 4, 4, 4, 0, 0, 0,
0, 0, 0, 2, 0, 0, 4, 4,
4, 0, 0, 0, 0, 0, 0, 2,
0, 0, 4, 3, 3, 4, 4, 4,
5, 4, 5, 4, 4, 4, 5, 4,
1, 1, 1, 2, 0, 0, 4, 4,
3, 3, 4, 4, 4, 4, 5, 4,
1, 1, 1, 2, 0, 0, 4, 4,
5, 4, 4, 4, 5, 4, 1, 1,
1, 2, 0, 0, 4, 4, 3, 3,
4, 4, 3, 0, 0, 0, 0, 0,
4, 0, 4, 4, 4, 4, 4, 5,
4, 1, 1, 1, 2, 0, 0, 4,
5, 5, 6, 4, 5, 5, 4, 4,
4, 0, 0, 0, 0, 0, 0, 2,
0, 0, 4, 3, 3, 4, 4, 4,
4, 4, 5, 4, 1, 1, 1, 2,
0, 0, 4, 4, 3, 3, 4, 4,
4, 3, 3, 4, 4, 4, 5, 4,
4, 4, 5, 4, 1, 1, 1, 2,
0, 0, 4, 4, 3, 3, 4, 4,
0, 1, 4, 5, 1, 4, 4, 5,
1, 4, 5, 4, 5, 1, 3, 1,
4, 5, 1, 4, 4, 5, 1, 3,
1, 4, 5, 1, 4, 4, 5, 1,
3, 1, 4, 3, 1, 4, 4, 3,
1, 4, 5, 1, 4, 3, 1, 4,
3, 1, 3, 1, 4, 3, 1
};
static readonly short[] _selector_index_offsets = new short [] {
0, 0, 10, 14, 22, 26, 40, 42,
60, 63, 66, 69, 72, 75, 78, 81,
84, 87, 92, 94, 96, 98, 100, 102,
104, 106, 125, 131, 149, 153, 170, 182,
199, 217, 221, 225, 229, 233, 237, 241,
245, 249, 253, 259, 270, 275, 284, 289,
303, 306, 324, 328, 332, 336, 340, 344,
348, 352, 356, 360, 366, 377, 382, 391,
396, 410, 413, 432, 439, 457, 462, 479,
490, 507, 525, 530, 535, 540, 545, 550,
555, 560, 565, 570, 577, 589, 595, 605,
611, 625, 629, 648, 656, 674, 680, 684,
703, 713, 731, 750, 768, 786, 803, 813,
823, 836, 847, 858, 869, 880, 891, 901,
905, 909, 913, 919, 923, 927, 945, 948,
966, 968, 972, 976, 980, 984, 988, 992,
996, 1000, 1004, 1010, 1021, 1026, 1035, 1040,
1054, 1059, 1062, 1081, 1088, 1106, 1111, 1128,
1140, 1158, 1177, 1180, 1199, 1206, 1224, 1227,
1246, 1257, 1276, 1294, 1312, 1329, 1339, 1348,
1360, 1370, 1380, 1390, 1400, 1410, 1420, 1423,
1426, 1429, 1434, 1437, 1440, 1443, 1461, 1463,
1467, 1471, 1475, 1479, 1483, 1487, 1491, 1495,
1499, 1505, 1516, 1521, 1530, 1535, 1549, 1552,
1571, 1578, 1596, 1601, 1618, 1630, 1647, 1665,
1670, 1675, 1680, 1685, 1690, 1695, 1700, 1705,
1710, 1717, 1729, 1735, 1745, 1751, 1765, 1769,
1788, 1796, 1814, 1820, 1824, 1843, 1854, 1872,
1891, 1909, 1927, 1944, 1954, 1964, 1977, 1988,
1999, 2010, 2021, 2032, 2042, 2046, 2050, 2054,
2060, 2064, 2068, 2086, 2089, 2094, 2099, 2104,
2109, 2114, 2119, 2124, 2129, 2134, 2141, 2153,
2159, 2169, 2175, 2189, 2195, 2199, 2218, 2226,
2244, 2250, 2267, 2279, 2297, 2316, 2321, 2326,
2331, 2336, 2341, 2346, 2351, 2356, 2361, 2368,
2380, 2386, 2396, 2402, 2416, 2420, 2439, 2447,
2465, 2482, 2493, 2512, 2516, 2535, 2553, 2571,
2588, 2598, 2608, 2621, 2632, 2643, 2654, 2665,
2676, 2686, 2690, 2694, 2698, 2704, 2708, 2712,
2721, 2725, 2729, 2733, 2737, 2741, 2758, 2764,
2781, 2799, 2817, 2835, 2850, 2868, 2875, 2882,
2889, 2895, 2899, 2903, 2921, 2935, 2947, 2966,
2976, 2986, 2992, 3006, 3017, 3036, 3039, 3058,
3076, 3094, 3111, 3121, 3131, 3144, 3155, 3166,
3177, 3188, 3199, 3209, 3212, 3215, 3218, 3223,
3226, 3229, 3237, 3240, 3243, 3246, 3249, 3252,
3269, 3274, 3291, 3309, 3318, 3336, 3346, 3365,
3367, 3386, 3404, 3422, 3439, 3449, 3458, 3470,
3480, 3490, 3500, 3510, 3520, 3530, 3532, 3534,
3536, 3540, 3542, 3544, 3551, 3568, 3572, 3589,
3607, 3617, 3627, 3637, 3640, 3643, 3646, 3649,
3652, 3655, 3660, 3663, 3666, 3684, 3695, 3714,
3717, 3736, 3754, 3772, 3789, 3799, 3808, 3820,
3830, 3840, 3850, 3860, 3870, 3880, 3883, 3886,
3889, 3894, 3897, 3900, 3908, 3911, 3914, 3917,
3920, 3923, 3940, 3945, 3962, 3980, 3991, 4002,
4013, 4017, 4021, 4025, 4029, 4033, 4037, 4043,
4047, 4051, 4063, 4076, 4086, 4097, 4108, 4126,
4145, 4163, 4181, 4198, 4208, 4218, 4231, 4242,
4253, 4264, 4275, 4286, 4296, 4300, 4304, 4308,
4314, 4318, 4322, 4331, 4335, 4339, 4343, 4347,
4351, 4368, 4374, 4391, 4409, 4428, 4432, 4451,
4469, 4487, 4502, 4520, 4527, 4534, 4541, 4547,
4551, 4555, 4573, 4587, 4599, 4618, 4628, 4638,
4644, 4658, 4669, 4688, 4691, 4710, 4728, 4746,
4763, 4773, 4783, 4796, 4807, 4818, 4829, 4840,
4851, 4861, 4864, 4867, 4870, 4875, 4878, 4881,
4889, 4892, 4895, 4898, 4901, 4904, 4921, 4926,
4943, 4961, 4970, 4979, 4984, 4998, 5006, 5015,
5024, 5033, 5035, 5037, 5039, 5041, 5043, 5045,
5049, 5051, 5053, 5063, 5073, 5083, 5086, 5089,
5092, 5095, 5098, 5101, 5106, 5109, 5112, 5122,
5128, 5142, 5151, 5161, 5171, 5181, 5184, 5187,
5190, 5193, 5196, 5199, 5204, 5207, 5210, 5221,
5232, 5243, 5247, 5251, 5255, 5259, 5263, 5267,
5273, 5277, 5281, 5293, 5306, 5316, 5327, 5338,
5347, 5351, 5355, 5359, 5363, 5367, 5384, 5390,
5407, 5425, 5444, 5462, 5480, 5495, 5513, 5520,
5527, 5534, 5540, 5544, 5548, 5566, 5580, 5592,
5611, 5621, 5639, 5649, 5655, 5669, 5680, 5699,
5707, 5710, 5713, 5716, 5719, 5722, 5739, 5744,
5761, 5779, 5788, 5798, 5808, 5818, 5821, 5824,
5827, 5830, 5833, 5836, 5841, 5844, 5847, 5858,
5869, 5880, 5884, 5888, 5892, 5896, 5900, 5904,
5910, 5914, 5918, 5930, 5943, 5953, 5964, 5975,
5993, 6012, 6030, 6049, 6068, 6086, 6104, 6119,
6137, 6143, 6149, 6155, 6160, 6163, 6166, 6184,
6195, 6207, 6216, 6226, 6236, 6254, 6272, 6287,
6305, 6311, 6317, 6323, 6328, 6331, 6334, 6352,
6370, 6389, 6408, 6426, 6444, 6459, 6477, 6483,
6489, 6495, 6500, 6503, 6506, 6524, 6535, 6547,
6556, 6566, 6576, 6585, 6589, 6593, 6597, 6601,
6605, 6622, 6628, 6645, 6663, 6682, 6700, 6718,
6733, 6751, 6758, 6765, 6772, 6778, 6782, 6786,
6804, 6818, 6830, 6849, 6859, 6877, 6895, 6906,
6917, 6928, 6932, 6936, 6940, 6944, 6948, 6952,
6958, 6962, 6966, 6978, 6991, 7001, 7012, 7023,
7042, 7060, 7078, 7093, 7111, 7117, 7123, 7129,
7134, 7137, 7140, 7158, 7169, 7181, 7190, 7200,
7210, 7221, 7233, 7242, 7252, 7262, 7280, 7299,
7318, 7336, 7354, 7369, 7387, 7392, 7397, 7402,
7406, 7408, 7410, 7428, 7438, 7449, 7457, 7466,
7475, 7477, 7483, 7501, 7520, 7528, 7546, 7564,
7583, 7590, 7608, 7627, 7645, 7664, 7671, 7683,
7692, 7710, 7729, 7737, 7755, 7773, 7792, 7799,
7811, 7820, 7838, 7857, 7865, 7883, 7901, 7920,
7927, 7939, 7948, 7966, 7977, 7985, 8003, 8021,
8032, 8040, 8058, 8077, 8085, 8103, 8115, 8124,
8142, 8153, 8161, 8172, 8180, 8198, 8208
};
static readonly short[] _selector_trans_targs = new short [] {
1, 2, 0, 811, 549, 869, 0, 1,
0, 3, 0, 549, 0, 3, 4, 548,
549, 0, 4, 0, 0, 3, 4, 5,
4, 0, 5, 6, 23, 24, 26, 25,
30, 377, 0, 5, 0, 25, 27, 29,
7, 6, 7, 8, 6, 23, 24, 5,
26, 5, 25, 30, 377, 825, 0, 7,
0, 25, 27, 29, 9, 9, 0, 10,
10, 0, 11, 11, 0, 12, 12, 0,
13, 13, 0, 14, 14, 0, 15, 15,
0, 16, 16, 0, 17, 17, 0, 17,
1, 817, 17, 0, 19, 0, 817, 0,
21, 0, 22, 0, 817, 0, 7, 23,
25, 0, 7, 8, 6, 7, 23, 24,
26, 375, 25, 30, 377, 825, 0, 7,
0, 5, 25, 27, 29, 25, 30, 0,
25, 27, 29, 7, 8, 6, 7, 23,
28, 24, 5, 375, 5, 30, 377, 825,
0, 7, 0, 27, 29, 28, 7, 28,
0, 7, 8, 6, 23, 28, 24, 5,
0, 5, 30, 377, 825, 0, 7, 0,
27, 29, 7, 31, 70, 797, 30, 377,
825, 7, 799, 810, 810, 29, 32, 33,
32, 48, 136, 146, 47, 6, 47, 152,
154, 845, 6, 32, 6, 149, 31, 32,
33, 32, 48, 146, 47, 148, 47, 147,
152, 154, 845, 6, 32, 6, 147, 149,
31, 7, 34, 34, 6, 7, 35, 35,
6, 7, 36, 36, 6, 7, 37, 37,
6, 7, 38, 38, 6, 7, 39, 39,
6, 7, 40, 40, 6, 7, 41, 41,
6, 7, 42, 42, 6, 42, 7, 43,
847, 42, 6, 43, 7, 44, 6, 792,
649, 866, 6, 43, 6, 45, 7, 6,
649, 6, 45, 46, 7, 636, 649, 6,
46, 6, 6, 45, 46, 7, 47, 46,
6, 47, 32, 48, 146, 148, 147, 152,
154, 6, 47, 6, 147, 149, 31, 49,
32, 48, 49, 50, 48, 49, 65, 64,
67, 64, 66, 71, 343, 822, 23, 49,
23, 66, 68, 70, 7, 51, 51, 23,
7, 52, 52, 23, 7, 53, 53, 23,
7, 54, 54, 23, 7, 55, 55, 23,
7, 56, 56, 23, 7, 57, 57, 23,
7, 58, 58, 23, 7, 59, 59, 23,
59, 7, 60, 824, 59, 23, 60, 7,
61, 23, 787, 371, 864, 23, 60, 23,
62, 7, 23, 371, 23, 62, 63, 7,
338, 371, 23, 63, 23, 23, 62, 63,
7, 64, 63, 23, 64, 48, 49, 65,
67, 66, 71, 343, 23, 64, 23, 66,
68, 70, 7, 66, 23, 49, 50, 48,
49, 49, 65, 67, 341, 66, 71, 343,
822, 23, 49, 23, 64, 66, 68, 70,
7, 66, 71, 23, 66, 68, 70, 49,
50, 48, 49, 49, 69, 65, 64, 341,
64, 71, 343, 822, 23, 49, 23, 68,
70, 69, 7, 49, 69, 23, 49, 50,
48, 49, 69, 65, 64, 23, 64, 71,
343, 822, 23, 49, 23, 68, 70, 49,
72, 679, 71, 343, 822, 49, 775, 786,
786, 70, 73, 74, 73, 73, 93, 89,
88, 48, 88, 96, 99, 857, 48, 73,
48, 92, 72, 73, 74, 73, 73, 89,
88, 91, 88, 90, 96, 99, 857, 48,
73, 48, 90, 92, 72, 49, 32, 75,
75, 48, 49, 32, 76, 76, 48, 49,
32, 77, 77, 48, 49, 32, 78, 78,
48, 49, 32, 79, 79, 48, 49, 32,
80, 80, 48, 49, 32, 81, 81, 48,
49, 32, 82, 82, 48, 49, 32, 83,
83, 48, 83, 49, 32, 84, 859, 83,
48, 84, 49, 32, 85, 48, 770, 755,
861, 48, 84, 48, 86, 49, 32, 48,
755, 48, 86, 87, 49, 32, 752, 755,
48, 87, 48, 48, 86, 87, 49, 32,
88, 87, 48, 88, 73, 73, 89, 91,
90, 96, 99, 48, 88, 48, 90, 92,
72, 49, 32, 90, 48, 73, 74, 73,
73, 73, 89, 91, 94, 90, 96, 99,
857, 48, 73, 48, 88, 90, 92, 72,
49, 32, 90, 96, 48, 90, 92, 72,
73, 74, 73, 73, 73, 93, 89, 88,
94, 88, 96, 99, 857, 48, 73, 48,
92, 72, 93, 49, 32, 73, 93, 48,
49, 32, 95, 48, 73, 74, 73, 73,
73, 89, 88, 91, 88, 90, 96, 99,
857, 48, 73, 48, 90, 92, 72, 73,
97, 96, 99, 857, 73, 740, 751, 751,
72, 98, 74, 73, 73, 93, 73, 89,
88, 48, 88, 96, 99, 857, 48, 98,
48, 92, 72, 98, 74, 73, 73, 73,
89, 88, 91, 88, 90, 96, 99, 857,
48, 98, 48, 90, 92, 72, 73, 74,
73, 73, 93, 89, 88, 48, 88, 96,
100, 99, 857, 48, 73, 48, 92, 72,
73, 74, 73, 73, 93, 89, 88, 48,
88, 96, 101, 99, 857, 48, 73, 48,
92, 72, 73, 74, 73, 73, 102, 89,
88, 48, 88, 96, 99, 857, 48, 73,
48, 92, 72, 102, 117, 198, 48, 73,
104, 48, 102, 48, 103, 93, 49, 32,
48, 73, 104, 48, 93, 48, 103, 93,
49, 32, 48, 73, 104, 48, 93, 48,
105, 105, 105, 103, 93, 49, 32, 48,
73, 104, 106, 48, 93, 48, 103, 93,
49, 32, 48, 73, 107, 104, 48, 93,
48, 103, 93, 49, 32, 48, 73, 108,
104, 48, 93, 48, 103, 93, 49, 32,
48, 73, 109, 104, 48, 93, 48, 103,
93, 49, 32, 48, 73, 104, 110, 48,
93, 48, 103, 93, 49, 32, 111, 73,
104, 48, 93, 48, 103, 112, 49, 32,
48, 113, 49, 32, 48, 49, 32, 114,
48, 115, 49, 32, 115, 115, 48, 49,
32, 116, 48, 49, 32, 103, 48, 117,
269, 93, 117, 284, 283, 286, 283, 285,
289, 293, 818, 118, 117, 118, 285, 287,
288, 69, 119, 118, 119, 121, 136, 118,
137, 135, 139, 135, 138, 143, 417, 827,
120, 119, 120, 138, 140, 142, 28, 120,
28, 122, 122, 120, 28, 123, 123, 120,
28, 124, 124, 120, 28, 125, 125, 120,
28, 126, 126, 120, 28, 127, 127, 120,
28, 128, 128, 120, 28, 129, 129, 120,
28, 130, 130, 120, 130, 28, 131, 829,
130, 120, 131, 28, 132, 120, 725, 577,
855, 120, 131, 120, 133, 28, 120, 577,
120, 133, 134, 28, 576, 577, 120, 134,
120, 120, 133, 134, 28, 135, 134, 120,
135, 136, 118, 137, 139, 138, 143, 417,
120, 135, 120, 138, 140, 142, 136, 7,
32, 136, 6, 28, 138, 120, 119, 121,
136, 119, 118, 137, 139, 415, 138, 143,
417, 827, 120, 119, 120, 135, 138, 140,
142, 28, 138, 143, 120, 138, 140, 142,
119, 121, 136, 119, 118, 141, 137, 135,
415, 135, 143, 417, 827, 120, 119, 120,
140, 142, 141, 28, 119, 141, 120, 119,
121, 136, 118, 141, 137, 135, 120, 135,
143, 417, 827, 120, 119, 120, 140, 142,
119, 144, 288, 711, 143, 417, 827, 119,
713, 724, 724, 142, 145, 33, 32, 48,
136, 32, 146, 47, 6, 47, 152, 154,
845, 6, 145, 6, 149, 31, 145, 33,
32, 48, 32, 146, 47, 148, 47, 147,
152, 154, 845, 6, 145, 6, 147, 149,
31, 7, 147, 6, 32, 33, 32, 32,
48, 146, 148, 150, 147, 152, 154, 845,
6, 32, 6, 47, 147, 149, 31, 7,
147, 152, 6, 147, 149, 31, 32, 33,
32, 32, 48, 136, 146, 47, 150, 47,
152, 154, 845, 6, 32, 6, 149, 31,
7, 151, 6, 32, 33, 32, 32, 48,
146, 47, 148, 47, 147, 152, 154, 845,
6, 32, 6, 147, 149, 31, 32, 72,
144, 152, 154, 845, 32, 153, 710, 710,
31, 32, 33, 32, 32, 48, 136, 146,
47, 150, 47, 152, 154, 700, 845, 6,
32, 6, 149, 31, 32, 33, 32, 48,
136, 146, 47, 6, 47, 152, 155, 154,
845, 6, 32, 6, 149, 31, 32, 33,
32, 48, 136, 146, 47, 6, 47, 152,
156, 154, 845, 6, 32, 6, 149, 31,
32, 33, 32, 48, 157, 146, 47, 6,
47, 152, 154, 845, 6, 32, 6, 149,
31, 157, 119, 172, 6, 32, 159, 6,
157, 6, 158, 136, 7, 32, 159, 6,
136, 6, 6, 158, 136, 7, 32, 159,
6, 136, 6, 6, 160, 160, 160, 158,
136, 7, 32, 159, 161, 6, 136, 6,
6, 158, 136, 7, 32, 162, 159, 6,
136, 6, 6, 158, 136, 7, 32, 163,
159, 6, 136, 6, 6, 158, 136, 7,
32, 164, 159, 6, 136, 6, 6, 158,
136, 7, 32, 159, 165, 6, 136, 6,
6, 158, 136, 7, 6, 166, 32, 159,
6, 136, 6, 158, 167, 7, 6, 168,
7, 6, 7, 169, 6, 170, 7, 170,
170, 6, 7, 171, 6, 7, 158, 6,
173, 136, 172, 173, 175, 172, 69, 190,
189, 192, 189, 191, 196, 517, 836, 174,
173, 174, 191, 193, 195, 28, 174, 28,
176, 176, 174, 28, 177, 177, 174, 28,
178, 178, 174, 28, 179, 179, 174, 28,
180, 180, 174, 28, 181, 181, 174, 28,
182, 182, 174, 28, 183, 183, 174, 28,
184, 184, 174, 184, 28, 185, 838, 184,
174, 185, 28, 186, 174, 695, 545, 851,
174, 185, 174, 187, 28, 174, 545, 174,
187, 188, 28, 512, 545, 174, 188, 174,
174, 187, 188, 28, 189, 188, 174, 189,
172, 69, 190, 192, 191, 196, 517, 174,
189, 174, 191, 193, 195, 28, 191, 174,
173, 175, 172, 173, 69, 190, 192, 515,
191, 196, 517, 836, 174, 173, 174, 189,
191, 193, 195, 28, 191, 196, 174, 191,
193, 195, 173, 175, 172, 173, 69, 194,
190, 189, 515, 189, 196, 517, 836, 174,
173, 174, 193, 195, 194, 28, 173, 194,
174, 173, 175, 172, 69, 194, 190, 189,
174, 189, 196, 517, 836, 174, 173, 174,
193, 195, 173, 197, 679, 681, 196, 517,
836, 173, 683, 694, 694, 195, 198, 199,
198, 93, 218, 214, 213, 172, 213, 221,
224, 841, 172, 198, 172, 217, 197, 198,
199, 198, 93, 214, 213, 216, 213, 215,
221, 224, 841, 172, 198, 172, 215, 217,
197, 173, 136, 200, 200, 172, 173, 136,
201, 201, 172, 173, 136, 202, 202, 172,
173, 136, 203, 203, 172, 173, 136, 204,
204, 172, 173, 136, 205, 205, 172, 173,
136, 206, 206, 172, 173, 136, 207, 207,
172, 173, 136, 208, 208, 172, 208, 173,
136, 209, 843, 208, 172, 209, 173, 136,
210, 172, 674, 632, 848, 172, 209, 172,
211, 173, 136, 172, 632, 172, 211, 212,
173, 136, 629, 632, 172, 212, 172, 172,
211, 212, 173, 136, 213, 212, 172, 213,
198, 93, 214, 216, 215, 221, 224, 172,
213, 172, 215, 217, 197, 173, 136, 215,
172, 198, 199, 198, 198, 93, 214, 216,
219, 215, 221, 224, 841, 172, 198, 172,
213, 215, 217, 197, 173, 136, 215, 221,
172, 215, 217, 197, 198, 199, 198, 198,
93, 218, 214, 213, 219, 213, 221, 224,
841, 172, 198, 172, 217, 197, 218, 173,
136, 198, 218, 172, 173, 136, 220, 172,
198, 199, 198, 198, 93, 214, 213, 216,
213, 215, 221, 224, 841, 172, 198, 172,
215, 217, 197, 198, 97, 222, 221, 224,
841, 198, 617, 628, 628, 197, 223, 199,
198, 93, 218, 198, 214, 213, 172, 213,
221, 224, 841, 172, 223, 172, 217, 197,
223, 199, 198, 93, 198, 214, 213, 216,
213, 215, 221, 224, 841, 172, 223, 172,
215, 217, 197, 198, 199, 198, 93, 218,
214, 213, 172, 213, 221, 225, 224, 841,
172, 198, 172, 217, 197, 198, 199, 198,
93, 218, 214, 213, 172, 213, 221, 226,
224, 841, 172, 198, 172, 217, 197, 198,
199, 198, 93, 227, 214, 213, 172, 213,
221, 224, 841, 172, 198, 172, 217, 197,
227, 242, 218, 172, 198, 229, 172, 227,
172, 228, 218, 173, 136, 172, 198, 229,
172, 218, 172, 228, 218, 173, 136, 172,
198, 229, 172, 218, 172, 230, 230, 230,
228, 218, 173, 136, 172, 198, 229, 231,
172, 218, 172, 228, 218, 173, 136, 172,
198, 232, 229, 172, 218, 172, 228, 218,
173, 136, 172, 198, 233, 229, 172, 218,
172, 228, 218, 173, 136, 172, 198, 234,
229, 172, 218, 172, 228, 218, 173, 136,
172, 198, 229, 235, 172, 218, 172, 228,
218, 173, 136, 236, 198, 229, 172, 218,
172, 228, 237, 173, 136, 172, 238, 173,
136, 172, 173, 136, 239, 172, 240, 173,
136, 240, 240, 172, 173, 136, 241, 172,
173, 136, 228, 172, 242, 244, 218, 259,
260, 258, 262, 258, 261, 266, 464, 832,
243, 242, 243, 261, 263, 265, 194, 141,
243, 194, 141, 245, 245, 243, 194, 141,
246, 246, 243, 194, 141, 247, 247, 243,
194, 141, 248, 248, 243, 194, 141, 249,
249, 243, 194, 141, 250, 250, 243, 194,
141, 251, 251, 243, 194, 141, 252, 252,
243, 194, 141, 253, 253, 243, 253, 194,
141, 254, 834, 253, 243, 254, 194, 141,
255, 243, 602, 509, 839, 243, 254, 243,
256, 194, 141, 243, 509, 243, 256, 257,
194, 141, 506, 509, 243, 257, 243, 243,
256, 257, 194, 141, 258, 257, 243, 258,
218, 259, 260, 262, 261, 266, 464, 243,
258, 243, 261, 263, 265, 259, 69, 119,
117, 259, 118, 194, 141, 261, 243, 242,
244, 218, 242, 259, 260, 262, 493, 261,
266, 464, 832, 243, 242, 243, 258, 261,
263, 265, 194, 141, 261, 266, 243, 261,
263, 265, 242, 244, 218, 242, 259, 264,
260, 258, 493, 258, 266, 464, 832, 243,
242, 243, 263, 265, 264, 194, 141, 242,
264, 243, 242, 244, 218, 259, 264, 260,
258, 243, 258, 266, 464, 832, 243, 242,
243, 263, 265, 242, 222, 267, 462, 266,
464, 832, 242, 492, 505, 505, 265, 268,
269, 93, 117, 259, 117, 284, 283, 118,
283, 289, 293, 818, 118, 268, 118, 287,
288, 268, 269, 93, 117, 117, 284, 283,
286, 283, 285, 289, 293, 818, 118, 268,
118, 285, 287, 288, 69, 119, 270, 270,
118, 69, 119, 271, 271, 118, 69, 119,
272, 272, 118, 69, 119, 273, 273, 118,
69, 119, 274, 274, 118, 69, 119, 275,
275, 118, 69, 119, 276, 276, 118, 69,
119, 277, 277, 118, 69, 119, 278, 278,
118, 278, 69, 119, 279, 820, 278, 118,
279, 69, 119, 280, 118, 457, 335, 830,
118, 279, 118, 281, 69, 119, 118, 335,
118, 281, 282, 69, 119, 332, 335, 118,
282, 118, 118, 281, 282, 69, 119, 283,
282, 118, 283, 93, 117, 284, 286, 285,
289, 293, 118, 283, 118, 285, 287, 288,
69, 119, 285, 118, 117, 269, 93, 117,
117, 284, 286, 291, 285, 289, 293, 818,
118, 117, 118, 283, 285, 287, 288, 69,
119, 285, 289, 118, 285, 287, 288, 117,
269, 93, 117, 117, 259, 284, 283, 291,
283, 289, 293, 818, 118, 117, 118, 287,
288, 117, 269, 93, 117, 259, 284, 283,
118, 283, 289, 293, 818, 118, 117, 118,
287, 288, 117, 97, 267, 289, 293, 818,
117, 290, 331, 331, 288, 117, 269, 93,
117, 117, 259, 284, 283, 291, 283, 289,
293, 321, 818, 118, 117, 118, 287, 288,
69, 119, 292, 118, 117, 269, 93, 117,
117, 284, 283, 286, 283, 285, 289, 293,
818, 118, 117, 118, 285, 287, 288, 117,
269, 93, 117, 259, 284, 283, 118, 283,
289, 294, 293, 818, 118, 117, 118, 287,
288, 117, 269, 93, 117, 259, 284, 283,
118, 283, 289, 295, 293, 818, 118, 117,
118, 287, 288, 117, 269, 93, 117, 296,
284, 283, 118, 283, 289, 293, 818, 118,
117, 118, 287, 288, 296, 259, 242, 118,
117, 298, 118, 296, 118, 297, 259, 69,
119, 118, 117, 298, 118, 259, 118, 297,
259, 69, 119, 118, 117, 298, 118, 259,
118, 299, 299, 299, 297, 259, 69, 119,
118, 117, 298, 300, 118, 259, 118, 297,
259, 69, 119, 118, 117, 301, 298, 118,
259, 118, 297, 259, 69, 119, 118, 117,
302, 298, 118, 259, 118, 297, 259, 69,
119, 118, 117, 303, 298, 118, 259, 118,
297, 259, 69, 119, 118, 117, 298, 304,
118, 259, 118, 297, 259, 69, 119, 305,
117, 298, 118, 259, 118, 297, 306, 69,
119, 118, 307, 69, 119, 118, 69, 119,
308, 118, 309, 69, 119, 309, 309, 118,
69, 119, 310, 118, 69, 119, 297, 118,
69, 119, 312, 285, 289, 118, 285, 287,
288, 69, 119, 820, 118, 69, 119, 312,
118, 315, 69, 119, 118, 69, 119, 316,
118, 69, 119, 820, 118, 117, 318, 93,
117, 259, 284, 283, 118, 283, 289, 293,
818, 118, 117, 118, 287, 288, 69, 119,
316, 270, 270, 118, 117, 269, 93, 117,
259, 284, 283, 320, 283, 289, 293, 818,
118, 117, 118, 287, 288, 117, 269, 93,
117, 259, 284, 283, 118, 283, 818, 289,
293, 818, 118, 117, 118, 287, 288, 117,
269, 93, 117, 259, 284, 283, 118, 283,
322, 289, 293, 818, 118, 117, 118, 287,
288, 117, 269, 93, 117, 117, 259, 284,
323, 291, 283, 289, 293, 818, 118, 117,
118, 287, 288, 283, 93, 117, 284, 286,
324, 285, 289, 293, 118, 283, 118, 285,
287, 288, 117, 269, 93, 117, 117, 259,
284, 283, 291, 283, 289, 293, 821, 118,
117, 118, 287, 288, 326, 259, 69, 119,
117, 259, 118, 327, 259, 69, 119, 117,
259, 118, 259, 69, 119, 117, 328, 259,
118, 329, 69, 119, 329, 329, 118, 69,
119, 330, 118, 69, 119, 288, 118, 117,
269, 93, 117, 259, 284, 283, 118, 283,
289, 293, 321, 818, 118, 117, 118, 287,
288, 283, 93, 117, 284, 333, 334, 289,
293, 118, 283, 118, 334, 287, 288, 282,
69, 119, 281, 334, 289, 118, 282, 118,
334, 287, 288, 117, 269, 93, 117, 117,
284, 333, 291, 334, 289, 293, 818, 118,
117, 118, 283, 334, 287, 288, 282, 336,
412, 332, 335, 282, 445, 445, 445, 281,
337, 7, 49, 338, 371, 23, 337, 23,
23, 62, 337, 7, 49, 64, 337, 23,
64, 48, 49, 65, 339, 340, 71, 343,
23, 64, 23, 340, 68, 70, 63, 7,
62, 340, 71, 23, 63, 23, 340, 68,
70, 49, 50, 48, 49, 49, 65, 339,
341, 340, 71, 343, 822, 23, 49, 23,
64, 340, 68, 70, 7, 342, 23, 49,
50, 48, 49, 49, 65, 64, 67, 64,
66, 71, 343, 822, 23, 49, 23, 66,
68, 70, 49, 50, 48, 49, 69, 65,
64, 23, 64, 71, 344, 343, 822, 23,
49, 23, 68, 70, 49, 50, 48, 49,
69, 65, 64, 23, 64, 71, 345, 343,
822, 23, 49, 23, 68, 70, 49, 50,
48, 49, 346, 65, 64, 23, 64, 71,
343, 822, 23, 49, 23, 68, 70, 346,
118, 173, 23, 49, 348, 23, 346, 23,
347, 69, 23, 7, 23, 49, 348, 23,
69, 23, 347, 69, 23, 7, 23, 49,
348, 23, 69, 23, 349, 349, 349, 347,
69, 23, 7, 23, 49, 348, 350, 23,
69, 23, 347, 69, 23, 7, 23, 49,
351, 348, 23, 69, 23, 347, 69, 23,
7, 23, 49, 352, 348, 23, 69, 23,
347, 69, 23, 7, 23, 49, 353, 348,
23, 69, 23, 347, 69, 23, 7, 23,
49, 348, 354, 23, 69, 23, 347, 69,
23, 7, 355, 49, 348, 23, 69, 23,
347, 356, 7, 23, 357, 7, 23, 7,
358, 23, 359, 7, 359, 359, 23, 7,
360, 23, 7, 347, 23, 7, 362, 66,
71, 23, 66, 68, 70, 7, 824, 23,
7, 362, 23, 365, 7, 23, 7, 366,
23, 7, 824, 23, 49, 368, 48, 49,
69, 65, 64, 23, 64, 71, 343, 822,
23, 49, 23, 68, 70, 7, 366, 51,
51, 23, 49, 50, 48, 49, 69, 65,
64, 370, 64, 71, 343, 822, 23, 49,
23, 68, 70, 49, 50, 48, 49, 69,
65, 64, 23, 64, 822, 71, 343, 822,
23, 49, 23, 68, 70, 63, 372, 338,
371, 63, 400, 400, 400, 62, 7, 8,
6, 23, 24, 5, 373, 5, 374, 30,
377, 825, 0, 7, 0, 374, 27, 29,
4, 3, 374, 30, 0, 4, 0, 374,
27, 29, 7, 8, 6, 7, 23, 24,
373, 375, 374, 30, 377, 825, 0, 7,
0, 5, 374, 27, 29, 376, 0, 7,
8, 6, 7, 23, 24, 5, 26, 5,
25, 30, 377, 825, 0, 7, 0, 25,
27, 29, 7, 8, 6, 23, 28, 24,
5, 0, 5, 30, 378, 377, 825, 0,
7, 0, 27, 29, 7, 8, 6, 23,
28, 24, 5, 0, 5, 30, 379, 377,
825, 0, 7, 0, 27, 29, 7, 8,
6, 23, 380, 24, 5, 0, 5, 30,
377, 825, 0, 7, 0, 27, 29, 380,
120, 174, 0, 7, 382, 0, 380, 0,
381, 28, 0, 7, 382, 0, 28, 0,
0, 381, 28, 0, 7, 382, 0, 28,
0, 0, 383, 383, 383, 381, 28, 0,
7, 382, 384, 0, 28, 0, 0, 381,
28, 0, 7, 385, 382, 0, 28, 0,
0, 381, 28, 0, 7, 386, 382, 0,
28, 0, 0, 381, 28, 0, 7, 387,
382, 0, 28, 0, 0, 381, 28, 0,
7, 382, 388, 0, 28, 0, 0, 381,
28, 0, 0, 389, 7, 382, 0, 28,
0, 381, 390, 0, 391, 0, 392, 0,
393, 393, 393, 0, 394, 0, 381, 0,
19, 25, 30, 0, 25, 27, 29, 7,
397, 6, 23, 28, 24, 5, 0, 5,
30, 377, 825, 0, 7, 0, 27, 29,
22, 9, 9, 0, 7, 8, 6, 23,
28, 24, 5, 399, 5, 30, 377, 825,
0, 7, 0, 27, 29, 7, 8, 6,
23, 28, 24, 5, 0, 5, 825, 30,
377, 825, 0, 7, 0, 27, 29, 63,
7, 338, 371, 401, 23, 63, 23, 23,
62, 63, 7, 402, 338, 371, 23, 63,
23, 23, 62, 63, 7, 403, 338, 371,
23, 63, 23, 23, 62, 7, 404, 23,
7, 405, 23, 7, 406, 23, 407, 7,
23, 408, 7, 23, 7, 409, 23, 410,
7, 410, 410, 23, 7, 411, 23, 7,
62, 23, 119, 121, 136, 118, 137, 135,
413, 135, 414, 143, 417, 827, 120, 119,
120, 414, 140, 142, 134, 28, 133, 414,
143, 120, 134, 120, 414, 140, 142, 119,
121, 136, 119, 118, 137, 413, 415, 414,
143, 417, 827, 120, 119, 120, 135, 414,
140, 142, 28, 416, 120, 119, 121, 136,
119, 118, 137, 135, 139, 135, 138, 143,
417, 827, 120, 119, 120, 138, 140, 142,
119, 121, 136, 118, 141, 137, 135, 120,
135, 143, 418, 417, 827, 120, 119, 120,
140, 142, 119, 121, 136, 118, 141, 137,
135, 120, 135, 143, 419, 417, 827, 120,
119, 120, 140, 142, 119, 121, 136, 118,
420, 137, 135, 120, 135, 143, 417, 827,
120, 119, 120, 140, 142, 420, 141, 243,
120, 119, 422, 120, 420, 120, 421, 141,
28, 119, 422, 120, 141, 120, 120, 421,
141, 28, 119, 422, 120, 141, 120, 120,
423, 423, 423, 421, 141, 28, 119, 422,
424, 120, 141, 120, 120, 421, 141, 28,
119, 425, 422, 120, 141, 120, 120, 421,
141, 28, 119, 426, 422, 120, 141, 120,
120, 421, 141, 28, 119, 427, 422, 120,
141, 120, 120, 421, 141, 28, 119, 422,
428, 120, 141, 120, 120, 421, 141, 28,
120, 429, 119, 422, 120, 141, 120, 421,
430, 28, 120, 431, 28, 120, 28, 432,
120, 433, 28, 433, 433, 120, 28, 434,
120, 28, 421, 120, 28, 436, 138, 143,
120, 138, 140, 142, 28, 829, 120, 28,
436, 120, 439, 28, 120, 28, 440, 120,
28, 829, 120, 119, 442, 136, 118, 141,
137, 135, 120, 135, 143, 417, 827, 120,
119, 120, 140, 142, 28, 440, 122, 122,
120, 119, 121, 136, 118, 141, 137, 135,
444, 135, 143, 417, 827, 120, 119, 120,
140, 142, 119, 121, 136, 118, 141, 137,
135, 120, 135, 827, 143, 417, 827, 120,
119, 120, 140, 142, 282, 69, 119, 332,
335, 446, 118, 282, 118, 118, 281, 282,
69, 119, 447, 332, 335, 118, 282, 118,
118, 281, 282, 69, 119, 448, 332, 335,
118, 282, 118, 118, 281, 69, 119, 449,
118, 69, 119, 450, 118, 69, 119, 451,
118, 452, 69, 119, 118, 453, 69, 119,
118, 69, 119, 454, 118, 455, 69, 119,
455, 455, 118, 69, 119, 456, 118, 69,
119, 281, 118, 458, 69, 119, 332, 457,
335, 830, 118, 458, 118, 118, 281, 458,
69, 119, 280, 118, 332, 457, 335, 830,
118, 458, 118, 281, 282, 69, 119, 460,
332, 335, 118, 282, 118, 281, 282, 69,
119, 332, 830, 335, 118, 282, 118, 118,
281, 282, 315, 69, 119, 332, 335, 118,
282, 118, 118, 281, 463, 244, 218, 259,
264, 242, 260, 258, 243, 258, 266, 464,
832, 243, 463, 243, 263, 265, 463, 244,
218, 259, 242, 260, 258, 262, 258, 261,
266, 464, 832, 243, 463, 243, 261, 263,
265, 242, 244, 218, 259, 264, 260, 258,
243, 258, 266, 465, 464, 832, 243, 242,
243, 263, 265, 242, 244, 218, 259, 264,
260, 258, 243, 258, 266, 466, 464, 832,
243, 242, 243, 263, 265, 242, 244, 218,
259, 467, 260, 258, 243, 258, 266, 464,
832, 243, 242, 243, 263, 265, 467, 264,
264, 243, 242, 469, 243, 467, 243, 468,
264, 194, 141, 243, 242, 469, 243, 264,
243, 468, 264, 194, 141, 243, 242, 469,
243, 264, 243, 470, 470, 470, 468, 264,
194, 141, 243, 242, 469, 471, 243, 264,
243, 468, 264, 194, 141, 243, 242, 472,
469, 243, 264, 243, 468, 264, 194, 141,
243, 242, 473, 469, 243, 264, 243, 468,
264, 194, 141, 243, 242, 474, 469, 243,
264, 243, 468, 264, 194, 141, 243, 242,
469, 475, 243, 264, 243, 468, 264, 194,
141, 476, 242, 469, 243, 264, 243, 468,
477, 194, 141, 243, 478, 194, 141, 243,
194, 141, 479, 243, 480, 194, 141, 480,
480, 243, 194, 141, 481, 243, 194, 141,
468, 243, 194, 141, 483, 261, 266, 243,
261, 263, 265, 194, 141, 834, 243, 194,
141, 483, 243, 486, 194, 141, 243, 194,
141, 487, 243, 194, 141, 834, 243, 242,
489, 218, 259, 264, 260, 258, 243, 258,
266, 464, 832, 243, 242, 243, 263, 265,
194, 141, 487, 245, 245, 243, 242, 244,
218, 259, 264, 260, 258, 491, 258, 266,
464, 832, 243, 242, 243, 263, 265, 242,
244, 218, 259, 264, 260, 258, 243, 258,
832, 266, 464, 832, 243, 242, 243, 263,
265, 242, 244, 218, 242, 259, 264, 260,
258, 493, 258, 266, 464, 495, 832, 243,
242, 243, 263, 265, 194, 141, 494, 243,
242, 244, 218, 242, 259, 260, 258, 262,
258, 261, 266, 464, 832, 243, 242, 243,
261, 263, 265, 242, 244, 218, 259, 264,
260, 258, 243, 258, 496, 266, 464, 832,
243, 242, 243, 263, 265, 242, 244, 218,
242, 259, 264, 260, 497, 493, 258, 266,
464, 832, 243, 242, 243, 263, 265, 258,
218, 259, 260, 262, 498, 261, 266, 464,
243, 258, 243, 261, 263, 265, 242, 244,
218, 242, 259, 264, 260, 258, 493, 258,
266, 464, 835, 243, 242, 243, 263, 265,
500, 264, 194, 141, 242, 264, 243, 501,
264, 194, 141, 242, 264, 243, 264, 194,
141, 242, 502, 264, 243, 503, 194, 141,
503, 503, 243, 194, 141, 504, 243, 194,
141, 265, 243, 242, 244, 218, 259, 264,
260, 258, 243, 258, 266, 464, 495, 832,
243, 242, 243, 263, 265, 258, 218, 259,
260, 507, 508, 266, 464, 243, 258, 243,
508, 263, 265, 257, 194, 141, 256, 508,
266, 243, 257, 243, 508, 263, 265, 242,
244, 218, 242, 259, 260, 507, 493, 508,
266, 464, 832, 243, 242, 243, 258, 508,
263, 265, 257, 510, 574, 506, 509, 257,
590, 590, 590, 256, 511, 28, 173, 512,
545, 174, 511, 174, 174, 187, 511, 28,
173, 189, 511, 174, 189, 172, 69, 190,
513, 514, 196, 517, 174, 189, 174, 514,
193, 195, 188, 28, 187, 514, 196, 174,
188, 174, 514, 193, 195, 173, 175, 172,
173, 69, 190, 513, 515, 514, 196, 517,
836, 174, 173, 174, 189, 514, 193, 195,
28, 516, 174, 173, 175, 172, 173, 69,
190, 189, 192, 189, 191, 196, 517, 836,
174, 173, 174, 191, 193, 195, 173, 175,
172, 69, 194, 190, 189, 174, 189, 196,
518, 517, 836, 174, 173, 174, 193, 195,
173, 175, 172, 69, 194, 190, 189, 174,
189, 196, 519, 517, 836, 174, 173, 174,
193, 195, 173, 175, 172, 69, 520, 190,
189, 174, 189, 196, 517, 836, 174, 173,
174, 193, 195, 520, 243, 194, 174, 173,
522, 174, 520, 174, 521, 194, 174, 28,
174, 173, 522, 174, 194, 174, 521, 194,
174, 28, 174, 173, 522, 174, 194, 174,
523, 523, 523, 521, 194, 174, 28, 174,
173, 522, 524, 174, 194, 174, 521, 194,
174, 28, 174, 173, 525, 522, 174, 194,
174, 521, 194, 174, 28, 174, 173, 526,
522, 174, 194, 174, 521, 194, 174, 28,
174, 173, 527, 522, 174, 194, 174, 521,
194, 174, 28, 174, 173, 522, 528, 174,
194, 174, 521, 194, 174, 28, 529, 173,
522, 174, 194, 174, 521, 530, 28, 174,
531, 28, 174, 28, 532, 174, 533, 28,
533, 533, 174, 28, 534, 174, 28, 521,
174, 28, 536, 191, 196, 174, 191, 193,
195, 28, 838, 174, 28, 536, 174, 539,
28, 174, 28, 540, 174, 28, 838, 174,
173, 542, 172, 69, 194, 190, 189, 174,
189, 196, 517, 836, 174, 173, 174, 193,
195, 28, 540, 176, 176, 174, 173, 175,
172, 69, 194, 190, 189, 544, 189, 196,
517, 836, 174, 173, 174, 193, 195, 173,
175, 172, 69, 194, 190, 189, 174, 189,
836, 196, 517, 836, 174, 173, 174, 193,
195, 188, 546, 512, 545, 188, 562, 562,
562, 187, 547, 7, 548, 549, 0, 547,
0, 0, 3, 547, 7, 5, 547, 0,
5, 6, 23, 24, 373, 374, 30, 377,
0, 5, 0, 374, 27, 29, 4, 548,
549, 4, 550, 550, 550, 3, 4, 548,
549, 551, 0, 4, 0, 0, 3, 4,
552, 548, 549, 0, 4, 0, 0, 3,
4, 553, 548, 549, 0, 4, 0, 0,
3, 554, 0, 555, 0, 556, 0, 557,
0, 558, 0, 559, 0, 560, 560, 560,
0, 561, 0, 3, 0, 188, 28, 512,
545, 563, 174, 188, 174, 174, 187, 188,
28, 564, 512, 545, 174, 188, 174, 174,
187, 188, 28, 565, 512, 545, 174, 188,
174, 174, 187, 28, 566, 174, 28, 567,
174, 28, 568, 174, 569, 28, 174, 570,
28, 174, 28, 571, 174, 572, 28, 572,
572, 174, 28, 573, 174, 28, 187, 174,
575, 28, 119, 576, 577, 120, 575, 120,
120, 133, 575, 28, 119, 135, 575, 120,
135, 136, 118, 137, 413, 414, 143, 417,
120, 135, 120, 414, 140, 142, 134, 546,
576, 577, 134, 578, 578, 578, 133, 134,
28, 576, 577, 579, 120, 134, 120, 120,
133, 134, 28, 580, 576, 577, 120, 134,
120, 120, 133, 134, 28, 581, 576, 577,
120, 134, 120, 120, 133, 28, 582, 120,
28, 583, 120, 28, 584, 120, 585, 28,
120, 586, 28, 120, 28, 587, 120, 588,
28, 588, 588, 120, 28, 589, 120, 28,
133, 120, 257, 194, 141, 506, 509, 591,
243, 257, 243, 243, 256, 257, 194, 141,
592, 506, 509, 243, 257, 243, 243, 256,
257, 194, 141, 593, 506, 509, 243, 257,
243, 243, 256, 194, 141, 594, 243, 194,
141, 595, 243, 194, 141, 596, 243, 597,
194, 141, 243, 598, 194, 141, 243, 194,
141, 599, 243, 600, 194, 141, 600, 600,
243, 194, 141, 601, 243, 194, 141, 256,
243, 603, 194, 141, 506, 602, 509, 839,
243, 603, 243, 243, 256, 603, 194, 141,
255, 243, 506, 602, 509, 839, 243, 603,
243, 256, 257, 194, 141, 605, 506, 509,
243, 257, 243, 256, 257, 194, 141, 506,
839, 509, 243, 257, 243, 243, 256, 257,
486, 194, 141, 506, 509, 243, 257, 243,
243, 256, 173, 136, 608, 215, 221, 172,
215, 217, 197, 173, 136, 843, 172, 173,
136, 608, 172, 611, 173, 136, 172, 173,
136, 612, 172, 173, 136, 843, 172, 198,
614, 198, 93, 218, 214, 213, 172, 213,
221, 224, 841, 172, 198, 172, 217, 197,
173, 136, 612, 200, 200, 172, 198, 199,
198, 93, 218, 214, 213, 616, 213, 221,
224, 841, 172, 198, 172, 217, 197, 198,
199, 198, 93, 218, 214, 213, 172, 213,
841, 221, 224, 841, 172, 198, 172, 217,
197, 198, 199, 198, 198, 93, 218, 214,
213, 219, 213, 221, 224, 618, 841, 172,
198, 172, 217, 197, 198, 199, 198, 93,
218, 214, 213, 172, 213, 619, 221, 224,
841, 172, 198, 172, 217, 197, 198, 199,
198, 198, 93, 218, 214, 620, 219, 213,
221, 224, 841, 172, 198, 172, 217, 197,
213, 198, 93, 214, 216, 621, 215, 221,
224, 172, 213, 172, 215, 217, 197, 198,
199, 198, 198, 93, 218, 214, 213, 219,
213, 221, 224, 844, 172, 198, 172, 217,
197, 623, 218, 173, 136, 198, 218, 172,
624, 218, 173, 136, 198, 218, 172, 218,
173, 136, 198, 625, 218, 172, 626, 173,
136, 626, 626, 172, 173, 136, 627, 172,
173, 136, 197, 172, 198, 199, 198, 93,
218, 214, 213, 172, 213, 221, 224, 618,
841, 172, 198, 172, 217, 197, 213, 198,
93, 214, 630, 631, 221, 224, 172, 213,
172, 631, 217, 197, 212, 173, 136, 211,
631, 221, 172, 212, 172, 631, 217, 197,
198, 199, 198, 198, 93, 214, 630, 219,
631, 221, 224, 841, 172, 198, 172, 213,
631, 217, 197, 212, 633, 634, 629, 632,
212, 662, 662, 662, 211, 173, 175, 172,
69, 190, 189, 513, 189, 514, 196, 517,
836, 174, 173, 174, 514, 193, 195, 635,
7, 32, 636, 649, 6, 635, 6, 6,
45, 635, 7, 32, 47, 635, 6, 47,
32, 48, 146, 637, 638, 152, 154, 6,
47, 6, 638, 149, 31, 46, 7, 45,
638, 152, 6, 46, 6, 638, 149, 31,
32, 33, 32, 32, 48, 146, 637, 150,
638, 152, 154, 845, 6, 32, 6, 47,
638, 149, 31, 7, 640, 147, 152, 6,
147, 149, 31, 7, 847, 6, 7, 640,
6, 643, 7, 6, 7, 644, 6, 7,
847, 6, 32, 646, 32, 48, 136, 146,
47, 6, 47, 152, 154, 845, 6, 32,
6, 149, 31, 7, 644, 34, 34, 6,
32, 33, 32, 48, 136, 146, 47, 648,
47, 152, 154, 845, 6, 32, 6, 149,
31, 32, 33, 32, 48, 136, 146, 47,
6, 47, 845, 152, 154, 845, 6, 32,
6, 149, 31, 46, 372, 636, 649, 46,
650, 650, 650, 45, 46, 7, 636, 649,
651, 6, 46, 6, 6, 45, 46, 7,
652, 636, 649, 6, 46, 6, 6, 45,
46, 7, 653, 636, 649, 6, 46, 6,
6, 45, 7, 654, 6, 7, 655, 6,
7, 656, 6, 657, 7, 6, 658, 7,
6, 7, 659, 6, 660, 7, 660, 660,
6, 7, 661, 6, 7, 45, 6, 212,
173, 136, 629, 632, 663, 172, 212, 172,
172, 211, 212, 173, 136, 664, 629, 632,
172, 212, 172, 172, 211, 212, 173, 136,
665, 629, 632, 172, 212, 172, 172, 211,
173, 136, 666, 172, 173, 136, 667, 172,
173, 136, 668, 172, 669, 173, 136, 172,
670, 173, 136, 172, 173, 136, 671, 172,
672, 173, 136, 672, 672, 172, 173, 136,
673, 172, 173, 136, 211, 172, 675, 173,
136, 629, 674, 632, 848, 172, 675, 172,
172, 211, 675, 173, 136, 210, 172, 629,
674, 632, 848, 172, 675, 172, 211, 212,
173, 136, 677, 629, 632, 172, 212, 172,
211, 212, 173, 136, 629, 848, 632, 172,
212, 172, 172, 211, 212, 611, 173, 136,
629, 632, 172, 212, 172, 172, 211, 680,
50, 48, 49, 69, 49, 65, 64, 23,
64, 71, 343, 822, 23, 680, 23, 68,
70, 680, 50, 48, 49, 49, 65, 64,
67, 64, 66, 71, 343, 822, 23, 680,
23, 66, 68, 70, 682, 175, 172, 69,
194, 173, 190, 189, 174, 189, 196, 517,
836, 174, 682, 174, 193, 195, 682, 175,
172, 69, 173, 190, 189, 192, 189, 191,
196, 517, 836, 174, 682, 174, 191, 193,
195, 173, 175, 172, 173, 69, 194, 190,
189, 515, 189, 196, 517, 684, 836, 174,
173, 174, 193, 195, 173, 175, 172, 69,
194, 190, 189, 174, 189, 685, 196, 517,
836, 174, 173, 174, 193, 195, 173, 175,
172, 173, 69, 194, 190, 686, 515, 189,
196, 517, 836, 174, 173, 174, 193, 195,
189, 172, 69, 190, 192, 687, 191, 196,
517, 174, 189, 174, 191, 193, 195, 173,
175, 172, 173, 69, 194, 190, 189, 515,
189, 196, 517, 850, 174, 173, 174, 193,
195, 689, 194, 28, 173, 194, 174, 690,
194, 28, 173, 194, 174, 194, 28, 173,
691, 194, 174, 692, 28, 692, 692, 174,
28, 693, 174, 28, 195, 174, 173, 175,
172, 69, 194, 190, 189, 174, 189, 196,
517, 684, 836, 174, 173, 174, 193, 195,
696, 28, 512, 695, 545, 851, 174, 696,
174, 174, 187, 696, 28, 186, 174, 512,
695, 545, 851, 174, 696, 174, 187, 188,
28, 698, 512, 545, 174, 188, 174, 187,
188, 28, 512, 851, 545, 174, 188, 174,
174, 187, 188, 539, 28, 512, 545, 174,
188, 174, 174, 187, 32, 33, 32, 48,
136, 146, 47, 6, 47, 701, 152, 154,
845, 6, 32, 6, 149, 31, 32, 33,
32, 32, 48, 136, 146, 702, 150, 47,
152, 154, 845, 6, 32, 6, 149, 31,
47, 32, 48, 146, 148, 703, 147, 152,
154, 6, 47, 6, 147, 149, 31, 32,
33, 32, 32, 48, 136, 146, 47, 150,
47, 152, 154, 853, 6, 32, 6, 149,
31, 705, 136, 7, 32, 136, 6, 706,
136, 7, 32, 136, 6, 136, 7, 32,
707, 136, 6, 708, 7, 708, 708, 6,
7, 709, 6, 7, 31, 6, 32, 33,
32, 48, 136, 146, 47, 6, 47, 152,
154, 700, 845, 6, 32, 6, 149, 31,
712, 121, 136, 118, 141, 119, 137, 135,
120, 135, 143, 417, 827, 120, 712, 120,
140, 142, 712, 121, 136, 118, 119, 137,
135, 139, 135, 138, 143, 417, 827, 120,
712, 120, 138, 140, 142, 119, 121, 136,
119, 118, 141, 137, 135, 415, 135, 143,
417, 714, 827, 120, 119, 120, 140, 142,
119, 121, 136, 118, 141, 137, 135, 120,
135, 715, 143, 417, 827, 120, 119, 120,
140, 142, 119, 121, 136, 119, 118, 141,
137, 716, 415, 135, 143, 417, 827, 120,
119, 120, 140, 142, 135, 136, 118, 137,
139, 717, 138, 143, 417, 120, 135, 120,
138, 140, 142, 119, 121, 136, 119, 118,
141, 137, 135, 415, 135, 143, 417, 854,
120, 119, 120, 140, 142, 719, 141, 28,
119, 141, 120, 720, 141, 28, 119, 141,
120, 141, 28, 119, 721, 141, 120, 722,
28, 722, 722, 120, 28, 723, 120, 28,
142, 120, 119, 121, 136, 118, 141, 137,
135, 120, 135, 143, 417, 714, 827, 120,
119, 120, 140, 142, 726, 28, 576, 725,
577, 855, 120, 726, 120, 120, 133, 726,
28, 132, 120, 576, 725, 577, 855, 120,
726, 120, 133, 134, 28, 728, 576, 577,
120, 134, 120, 133, 134, 28, 576, 855,
577, 120, 134, 120, 120, 133, 134, 439,
28, 576, 577, 120, 134, 120, 120, 133,
49, 32, 731, 90, 96, 48, 90, 92,
72, 49, 32, 859, 48, 49, 32, 731,
48, 734, 49, 32, 48, 49, 32, 735,
48, 49, 32, 859, 48, 73, 737, 73,
73, 93, 89, 88, 48, 88, 96, 99,
857, 48, 73, 48, 92, 72, 49, 32,
735, 75, 75, 48, 73, 74, 73, 73,
93, 89, 88, 739, 88, 96, 99, 857,
48, 73, 48, 92, 72, 73, 74, 73,
73, 93, 89, 88, 48, 88, 857, 96,
99, 857, 48, 73, 48, 92, 72, 73,
74, 73, 73, 73, 93, 89, 88, 94,
88, 96, 99, 741, 857, 48, 73, 48,
92, 72, 73, 74, 73, 73, 93, 89,
88, 48, 88, 742, 96, 99, 857, 48,
73, 48, 92, 72, 73, 74, 73, 73,
73, 93, 89, 743, 94, 88, 96, 99,
857, 48, 73, 48, 92, 72, 88, 73,
73, 89, 91, 744, 90, 96, 99, 48,
88, 48, 90, 92, 72, 73, 74, 73,
73, 73, 93, 89, 88, 94, 88, 96,
99, 860, 48, 73, 48, 92, 72, 746,
93, 49, 32, 73, 93, 48, 747, 93,
49, 32, 73, 93, 48, 93, 49, 32,
73, 748, 93, 48, 749, 49, 32, 749,
749, 48, 49, 32, 750, 48, 49, 32,
72, 48, 73, 74, 73, 73, 93, 89,
88, 48, 88, 96, 99, 741, 857, 48,
73, 48, 92, 72, 88, 73, 73, 89,
753, 754, 96, 99, 48, 88, 48, 754,
92, 72, 87, 49, 32, 86, 754, 96,
48, 87, 48, 754, 92, 72, 73, 74,
73, 73, 73, 89, 753, 94, 754, 96,
99, 857, 48, 73, 48, 88, 754, 92,
72, 87, 756, 757, 752, 755, 87, 758,
758, 758, 86, 49, 50, 48, 49, 65,
64, 339, 64, 340, 71, 343, 822, 23,
49, 23, 340, 68, 70, 32, 33, 32,
48, 146, 47, 637, 47, 638, 152, 154,
845, 6, 32, 6, 638, 149, 31, 87,
49, 32, 752, 755, 759, 48, 87, 48,
48, 86, 87, 49, 32, 760, 752, 755,
48, 87, 48, 48, 86, 87, 49, 32,
761, 752, 755, 48, 87, 48, 48, 86,
49, 32, 762, 48, 49, 32, 763, 48,
49, 32, 764, 48, 765, 49, 32, 48,
766, 49, 32, 48, 49, 32, 767, 48,
768, 49, 32, 768, 768, 48, 49, 32,
769, 48, 49, 32, 86, 48, 771, 49,
32, 752, 770, 755, 861, 48, 771, 48,
48, 86, 771, 49, 32, 85, 48, 752,
770, 755, 861, 48, 771, 48, 86, 87,
49, 32, 773, 752, 755, 48, 87, 48,
86, 87, 49, 32, 752, 861, 755, 48,
87, 48, 48, 86, 87, 734, 49, 32,
752, 755, 48, 87, 48, 48, 86, 49,
50, 48, 49, 49, 69, 65, 64, 341,
64, 71, 343, 776, 822, 23, 49, 23,
68, 70, 49, 50, 48, 49, 69, 65,
64, 23, 64, 777, 71, 343, 822, 23,
49, 23, 68, 70, 49, 50, 48, 49,
49, 69, 65, 778, 341, 64, 71, 343,
822, 23, 49, 23, 68, 70, 64, 48,
49, 65, 67, 779, 66, 71, 343, 23,
64, 23, 66, 68, 70, 49, 50, 48,
49, 49, 69, 65, 64, 341, 64, 71,
343, 863, 23, 49, 23, 68, 70, 781,
69, 7, 49, 69, 23, 782, 69, 7,
49, 69, 23, 69, 7, 49, 783, 69,
23, 784, 7, 784, 784, 23, 7, 785,
23, 7, 70, 23, 49, 50, 48, 49,
69, 65, 64, 23, 64, 71, 343, 776,
822, 23, 49, 23, 68, 70, 788, 7,
338, 787, 371, 864, 23, 788, 23, 23,
62, 788, 7, 61, 23, 338, 787, 371,
864, 23, 788, 23, 62, 63, 7, 790,
338, 371, 23, 63, 23, 62, 63, 7,
338, 864, 371, 23, 63, 23, 23, 62,
63, 365, 7, 338, 371, 23, 63, 23,
23, 62, 793, 7, 636, 792, 649, 866,
6, 793, 6, 6, 45, 793, 7, 44,
6, 636, 792, 649, 866, 6, 793, 6,
45, 46, 7, 795, 636, 649, 6, 46,
6, 45, 46, 7, 636, 866, 649, 6,
46, 6, 6, 45, 46, 643, 7, 636,
649, 6, 46, 6, 6, 45, 798, 8,
6, 23, 28, 7, 24, 5, 0, 5,
30, 377, 825, 0, 798, 0, 27, 29,
798, 8, 6, 23, 7, 24, 5, 26,
5, 25, 30, 377, 825, 0, 798, 0,
25, 27, 29, 7, 8, 6, 7, 23,
28, 24, 5, 375, 5, 30, 377, 800,
825, 0, 7, 0, 27, 29, 7, 8,
6, 23, 28, 24, 5, 0, 5, 801,
30, 377, 825, 0, 7, 0, 27, 29,
7, 8, 6, 7, 23, 28, 24, 802,
375, 5, 30, 377, 825, 0, 7, 0,
27, 29, 5, 6, 23, 24, 26, 803,
25, 30, 377, 0, 5, 0, 25, 27,
29, 7, 8, 6, 7, 23, 28, 24,
5, 375, 5, 30, 377, 868, 0, 7,
0, 27, 29, 805, 28, 7, 28, 0,
806, 28, 7, 28, 0, 28, 7, 807,
28, 0, 808, 808, 808, 0, 809, 0,
29, 0, 7, 8, 6, 23, 28, 24,
5, 0, 5, 30, 377, 800, 825, 0,
7, 0, 27, 29, 812, 548, 811, 549,
869, 0, 812, 0, 0, 3, 812, 2,
0, 548, 811, 549, 869, 0, 812, 0,
3, 4, 814, 548, 549, 0, 4, 0,
3, 4, 548, 869, 549, 0, 4, 0,
0, 3, 4, 21, 548, 549, 0, 4,
0, 0, 3, 1, 0, 817, 18, 20,
1, 817, 0, 819, 269, 93, 117, 259,
284, 283, 319, 283, 317, 289, 293, 818,
118, 819, 118, 287, 288, 819, 269, 93,
117, 284, 283, 311, 283, 285, 317, 289,
293, 818, 118, 819, 118, 285, 287, 288,
820, 69, 119, 313, 314, 279, 820, 118,
819, 269, 93, 117, 325, 284, 283, 319,
283, 317, 289, 293, 818, 118, 819, 118,
287, 288, 823, 50, 48, 49, 69, 65,
64, 369, 64, 367, 71, 343, 822, 23,
823, 23, 68, 70, 823, 50, 48, 49,
65, 64, 361, 64, 66, 367, 71, 343,
822, 23, 823, 23, 66, 68, 70, 824,
7, 363, 364, 60, 824, 23, 826, 8,
6, 23, 28, 24, 5, 398, 5, 396,
30, 377, 825, 0, 826, 0, 27, 29,
826, 8, 6, 23, 24, 5, 395, 5,
25, 396, 30, 377, 825, 0, 826, 0,
25, 27, 29, 828, 121, 136, 118, 141,
137, 135, 443, 135, 441, 143, 417, 827,
120, 828, 120, 140, 142, 828, 121, 136,
118, 137, 135, 435, 135, 138, 441, 143,
417, 827, 120, 828, 120, 138, 140, 142,
829, 28, 437, 438, 131, 829, 120, 831,
69, 119, 459, 332, 461, 335, 457, 118,
831, 118, 281, 831, 69, 119, 313, 283,
314, 279, 831, 118, 833, 244, 218, 259,
264, 260, 258, 490, 258, 488, 266, 464,
832, 243, 833, 243, 263, 265, 833, 244,
218, 259, 260, 258, 482, 258, 261, 488,
266, 464, 832, 243, 833, 243, 261, 263,
265, 834, 194, 141, 484, 485, 254, 834,
243, 833, 244, 218, 259, 499, 260, 258,
490, 258, 488, 266, 464, 832, 243, 833,
243, 263, 265, 837, 175, 172, 69, 194,
190, 189, 543, 189, 541, 196, 517, 836,
174, 837, 174, 193, 195, 837, 175, 172,
69, 190, 189, 535, 189, 191, 541, 196,
517, 836, 174, 837, 174, 191, 193, 195,
838, 28, 537, 538, 185, 838, 174, 840,
194, 141, 604, 506, 606, 509, 602, 243,
840, 243, 256, 840, 194, 141, 484, 258,
485, 254, 840, 243, 842, 199, 198, 93,
218, 214, 213, 615, 213, 613, 221, 224,
841, 172, 842, 172, 217, 197, 842, 199,
198, 93, 214, 213, 607, 213, 215, 613,
221, 224, 841, 172, 842, 172, 215, 217,
197, 843, 173, 136, 609, 610, 209, 843,
172, 842, 199, 198, 93, 622, 214, 213,
615, 213, 613, 221, 224, 841, 172, 842,
172, 217, 197, 846, 33, 32, 48, 136,
146, 47, 647, 47, 645, 152, 154, 845,
6, 846, 6, 149, 31, 846, 33, 32,
48, 146, 47, 639, 47, 147, 645, 152,
154, 845, 6, 846, 6, 147, 149, 31,
847, 7, 641, 642, 43, 847, 6, 849,
173, 136, 676, 629, 678, 632, 674, 172,
849, 172, 211, 849, 173, 136, 609, 213,
610, 209, 849, 172, 837, 175, 172, 69,
688, 190, 189, 543, 189, 541, 196, 517,
836, 174, 837, 174, 193, 195, 852, 28,
697, 512, 699, 545, 695, 174, 852, 174,
187, 852, 28, 537, 189, 538, 185, 852,
174, 846, 33, 32, 48, 704, 146, 47,
647, 47, 645, 152, 154, 845, 6, 846,
6, 149, 31, 828, 121, 136, 118, 718,
137, 135, 443, 135, 441, 143, 417, 827,
120, 828, 120, 140, 142, 856, 28, 727,
576, 729, 577, 725, 120, 856, 120, 133,
856, 28, 437, 135, 438, 131, 856, 120,
858, 74, 73, 73, 93, 89, 88, 738,
88, 736, 96, 99, 857, 48, 858, 48,
92, 72, 858, 74, 73, 73, 89, 88,
730, 88, 90, 736, 96, 99, 857, 48,
858, 48, 90, 92, 72, 859, 49, 32,
732, 733, 84, 859, 48, 858, 74, 73,
73, 745, 89, 88, 738, 88, 736, 96,
99, 857, 48, 858, 48, 92, 72, 862,
49, 32, 772, 752, 774, 755, 770, 48,
862, 48, 86, 862, 49, 32, 732, 88,
733, 84, 862, 48, 823, 50, 48, 49,
780, 65, 64, 369, 64, 367, 71, 343,
822, 23, 823, 23, 68, 70, 865, 7,
789, 338, 791, 371, 787, 23, 865, 23,
62, 865, 7, 363, 64, 364, 60, 865,
23, 867, 7, 794, 636, 796, 649, 792,
6, 867, 6, 45, 867, 7, 641, 47,
642, 43, 867, 6, 826, 8, 6, 23,
804, 24, 5, 398, 5, 396, 30, 377,
825, 0, 826, 0, 27, 29, 870, 813,
548, 815, 549, 811, 0, 870, 0, 3,
870, 18, 5, 20, 1, 870, 0, 0
};
const int selector_start = 816;
const int selector_first_final = 816;
const int selector_error = 0;
const int selector_en_main = 816;
/* #line 58 "Parser.rl" */
#endregion
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
namespace ExCSS
{
public sealed class CssParser
{
CssSelectorConstructor selector;
Stack<FunctionBuffer> function;
Boolean skipExceptions;
Lexer tokenizer;
Boolean fraction;
CSSProperty property;
CSSValue value;
List<CSSValue> mvalues;
CSSValueList cvalues;
Boolean started;
Boolean quirks;
CSSStyleSheet sheet;
Stack<CSSRule> open;
StringBuilder buffer;
CssState state;
Object sync;
Task task;
#region ctor
/// <summary>
/// Creates a new CSS parser instance parser with the specified stylesheet
/// based on the given source manager.
/// </summary>
/// <param name="stylesheet">The stylesheet to be constructed.</param>
/// <param name="source">The source to use.</param>
internal CssParser(StylesheetReader reader)
{
selector = Pool.NewSelectorConstructor();
sync = new Object();
skipExceptions = true;
tokenizer = new Lexer(reader);
started = false;
function = new Stack<FunctionBuffer>();
sheet = stylesheet;
open = new Stack<CSSRule>();
SwitchTo(CssState.Data);
}
#endregion
#region Properties
/// <summary>
/// Gets if the parser has been started asynchronously.
/// </summary>
public Boolean IsAsync
{
get { return task != null; }
}
/// <summary>
/// Gets or sets if the quirks-mode is activated.
/// </summary>
public Boolean IsQuirksMode
{
get { return quirks; }
set { quirks = value; }
}
/// <summary>
/// Gets the current rule if any.
/// </summary>
internal CSSRule CurrentRule
{
get { return open.Count > 0 ? open.Peek() : null; }
}
#endregion
#region Methods
/// <summary>
/// Parses the given source asynchronously and creates the stylesheet.
/// </summary>
/// <returns>The task which could be awaited or continued differently.</returns>
public Task ParseAsync()
{
lock (sync)
{
if (!started)
{
started = true;
task = Task.Run(() => Kernel());
}
else if (task == null)
throw new InvalidOperationException("The parser has already run synchronously.");
return task;
}
}
/// <summary>
/// Parses the given source code.
/// </summary>
public void Parse()
{
var run = false;
lock (sync)
{
if (!started)
{
started = true;
run = true;
}
}
if (run)
{
Kernel();
}
}
#endregion
#region States
/// <summary>
/// The general state.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean Data(CssToken token)
{
if (token.Type == CssTokenType.AtKeyword)
{
switch (((CssKeywordToken)token).Data)
{
case RuleNames.MEDIA:
{
AddRule(new CSSMediaRule());
SwitchTo(CssState.InMediaList);
break;
}
case RuleNames.PAGE:
{
AddRule(new CSSPageRule());
SwitchTo(CssState.InSelector);
break;
}
case RuleNames.IMPORT:
{
AddRule(new CSSImportRule());
SwitchTo(CssState.BeforeImport);
break;
}
case RuleNames.FONT_FACE:
{
AddRule(new CSSFontFaceRule());
SwitchTo(CssState.InDeclaration);
break;
}
case RuleNames.CHARSET:
{
AddRule(new CSSCharsetRule());
SwitchTo(CssState.BeforeCharset);
break;
}
case RuleNames.NAMESPACE:
{
AddRule(new CSSNamespaceRule());
SwitchTo(CssState.BeforeNamespacePrefix);
break;
}
case RuleNames.SUPPORTS:
{
buffer = Pool.NewStringBuilder();
AddRule(new CSSSupportsRule());
SwitchTo(CssState.InCondition);
break;
}
case RuleNames.KEYFRAMES:
{
AddRule(new CSSKeyframesRule());
SwitchTo(CssState.BeforeKeyframesName);
break;
}
case RuleNames.DOCUMENT:
{
AddRule(new CSSDocumentRule());
SwitchTo(CssState.BeforeDocumentFunction);
break;
}
default:
{
buffer = Pool.NewStringBuilder();
AddRule(new CSSUnknownRule());
SwitchTo(CssState.InUnknown);
InUnknown(token);
break;
}
}
return true;
}
else if (token.Type == CssTokenType.CurlyBracketClose)
{
return CloseRule();
}
else
{
AddRule(new CSSStyleRule());
SwitchTo(CssState.InSelector);
InSelector(token);
return true;
}
}
/// <summary>
/// State that is called once in the head of an unknown @ rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InUnknown(CssToken token)
{
switch (token.Type)
{
case CssTokenType.Semicolon:
CurrentRuleAs<CSSUnknownRule>().SetInstruction(buffer.ToPool());
SwitchTo(CssState.Data);
return CloseRule();
case CssTokenType.CurlyBracketOpen:
CurrentRuleAs<CSSUnknownRule>().SetCondition(buffer.ToPool());
SwitchTo(CssState.Data);
break;
default:
buffer.Append(token.ToValue());
break;
}
return true;
}
/// <summary>
/// State that is called once we are in a CSS selector.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InSelector(CssToken token)
{
if (token.Type == CssTokenType.CurlyBracketOpen)
{
var rule = CurrentRule as ICssSelector;
if (rule != null)
rule.Selector = selector.Result;
SwitchTo(CurrentRule is CSSStyleRule ? CssState.InDeclaration : CssState.Data);
}
else if (token.Type == CssTokenType.CurlyBracketClose)
return false;
else
selector.Apply(token);
return true;
}
/// <summary>
/// Called before the property name has been detected.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InDeclaration(CssToken token)
{
if (token.Type == CssTokenType.CurlyBracketClose)
{
CloseProperty();
SwitchTo(CurrentRule is CSSKeyframeRule ? CssState.KeyframesData : CssState.Data);
return CloseRule();
}
else if (token.Type == CssTokenType.Ident)
{
AddDeclaration(CSSProperty.Create(((CssKeywordToken)token).Data));
SwitchTo(CssState.AfterProperty);
return true;
}
return false;
}
/// <summary>
/// After instruction rules a semicolon is required.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean AfterInstruction(CssToken token)
{
if (token.Type == CssTokenType.Semicolon)
{
SwitchTo(CssState.Data);
return CloseRule();
}
return false;
}
/// <summary>
/// In the condition text of a supports rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InCondition(CssToken token)
{
switch (token.Type)
{
case CssTokenType.CurlyBracketOpen:
CurrentRuleAs<CSSSupportsRule>().ConditionText = buffer.ToPool();
SwitchTo(CssState.Data);
break;
default:
buffer.Append(token.ToValue());
break;
}
return true;
}
/// <summary>
/// Called before a prefix has been found for the namespace rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforePrefix(CssToken token)
{
if (token.Type == CssTokenType.Ident)
{
CurrentRuleAs<CSSNamespaceRule>().Prefix = ((CssKeywordToken)token).Data;
SwitchTo(CssState.AfterNamespacePrefix);
return true;
}
SwitchTo(CssState.AfterInstruction);
return AfterInstruction(token);
}
/// <summary>
/// Called before a namespace has been found for the namespace rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforeNamespace(CssToken token)
{
SwitchTo(CssState.AfterInstruction);
if (token.Type == CssTokenType.String)
{
CurrentRuleAs<CSSNamespaceRule>().NamespaceURI = ((CssStringToken)token).Data;
return true;
}
return AfterInstruction(token);
}
/// <summary>
/// Before a charset string has been found.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforeCharset(CssToken token)
{
SwitchTo(CssState.AfterInstruction);
if (token.Type == CssTokenType.String)
{
CurrentRuleAs<CSSCharsetRule>().Encoding = ((CssStringToken)token).Data;
return true;
}
return AfterInstruction(token);
}
/// <summary>
/// Before an URL has been found for the import rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforeImport(CssToken token)
{
if (token.Type == CssTokenType.String || token.Type == CssTokenType.Url)
{
CurrentRuleAs<CSSImportRule>().Href = ((CssStringToken)token).Data;
SwitchTo(CssState.InMediaList);
return true;
}
SwitchTo(CssState.AfterInstruction);
return false;
}
/// <summary>
/// Called before the property separating colon has been seen.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean AfterProperty(CssToken token)
{
if (token.Type == CssTokenType.Colon)
{
fraction = false;
SwitchTo(CssState.BeforeValue);
return true;
}
else if (token.Type == CssTokenType.Semicolon || token.Type == CssTokenType.CurlyBracketClose)
AfterValue(token);
return false;
}
/// <summary>
/// Called before any token in the value regime had been seen.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforeValue(CssToken token)
{
if (token.Type == CssTokenType.Semicolon)
SwitchTo(CssState.InDeclaration);
else if (token.Type == CssTokenType.CurlyBracketClose)
InDeclaration(token);
else
{
SwitchTo(CssState.InSingleValue);
return InSingleValue(token);
}
return false;
}
/// <summary>
/// Called when a value has to be computed.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InSingleValue(CssToken token)
{
switch (token.Type)
{
case CssTokenType.Dimension: // e.g. "3px"
return AddValue(new CSSPrimitiveValue(((CssUnitToken)token).Unit, ((CssUnitToken)token).Data));
case CssTokenType.Hash:// e.g. "#ABCDEF"
return InSingleValueHexColor(((CssKeywordToken)token).Data);
case CssTokenType.Delim:// e.g. "#"
return InSingleValueDelim((CssDelimToken)token);
case CssTokenType.Ident: // e.g. "auto"
return InSingleValueIdent((CssKeywordToken)token);
case CssTokenType.String:// e.g. "'i am a string'"
return AddValue(new CSSPrimitiveValue(CssUnit.String, ((CssStringToken)token).Data));
case CssTokenType.Url:// e.g. "url('this is a valid URL')"
return AddValue(new CSSPrimitiveValue(CssUnit.Uri, ((CssStringToken)token).Data));
case CssTokenType.Percentage: // e.g. "5%"
return AddValue(new CSSPrimitiveValue(CssUnit.Percentage, ((CssUnitToken)token).Data));
case CssTokenType.Number: // e.g. "173"
return AddValue(new CSSPrimitiveValue(CssUnit.Number, ((CssNumberToken)token).Data));
case CssTokenType.Whitespace: // e.g. " "
SwitchTo(CssState.InValueList);
return true;
case CssTokenType.Function: //e.g. rgba(...)
function.Push(new FunctionBuffer(((CssKeywordToken)token).Data));
SwitchTo(CssState.InFunction);
return true;
case CssTokenType.Comma: // e.g. ","
SwitchTo(CssState.InValuePool);
return true;
case CssTokenType.Semicolon: // e.g. ";"
case CssTokenType.CurlyBracketClose: // e.g. "}"
return AfterValue(token);
default:
return false;
}
}
/// <summary>
/// Gathers a value inside a function.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InValueFunction(CssToken token)
{
switch (token.Type)
{
case CssTokenType.RoundBracketClose:
SwitchTo(CssState.InSingleValue);
return AddValue(function.Pop().Done());
case CssTokenType.Comma:
function.Peek().Include();
return true;
default:
return InSingleValue(token);
}
}
/// <summary>
/// Called when a new value is seen from the zero-POV (whitespace seen previously).
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InValueList(CssToken token)
{
if (token.Type == CssTokenType.Semicolon || token.Type == CssTokenType.CurlyBracketClose)
AfterValue(token);
else if (token.Type == CssTokenType.Comma)
SwitchTo(CssState.InValuePool);
else
{
//TDO
SwitchTo(CssState.InSingleValue);
return InSingleValue(token);
}
return true;
}
/// <summary>
/// Called when a new value is seen from the zero-POV (comma seen previously).
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InValuePool(CssToken token)
{
if (token.Type == CssTokenType.Semicolon || token.Type == CssTokenType.CurlyBracketClose)
AfterValue(token);
else
{
//TODO
SwitchTo(CssState.InSingleValue);
return InSingleValue(token);
}
return false;
}
/// <summary>
/// Called if a # sign has been found.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InHexValue(CssToken token)
{
switch (token.Type)
{
case CssTokenType.Number:
case CssTokenType.Dimension:
case CssTokenType.Ident:
var rest = token.ToValue();
if (buffer.Length + rest.Length <= 6)
{
buffer.Append(rest);
return true;
}
break;
}
var s = buffer.ToPool();
InSingleValueHexColor(buffer.ToString());
SwitchTo(CssState.InSingleValue);
return InSingleValue(token);
}
/// <summary>
/// Called after the value is known to be over.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean AfterValue(CssToken token)
{
if (token.Type == CssTokenType.Semicolon)
{
CloseProperty();
SwitchTo(CssState.InDeclaration);
return true;
}
else if (token.Type == CssTokenType.CurlyBracketClose)
return InDeclaration(token);
return false;
}
/// <summary>
/// Called once an important instruction is expected.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean ValueImportant(CssToken token)
{
if (token.Type == CssTokenType.Ident && ((CssKeywordToken)token).Data == "important")
{
SwitchTo(CssState.AfterValue);
property.Important = true;
return true;
}
return AfterValue(token);
}
/// <summary>
/// Before the name of an @keyframes rule has been detected.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforeKeyframesName(CssToken token)
{
SwitchTo(CssState.BeforeKeyframesData);
if (token.Type == CssTokenType.Ident)
{
CurrentRuleAs<CSSKeyframesRule>().Name = ((CssKeywordToken)token).Data;
return true;
}
else if (token.Type == CssTokenType.CurlyBracketOpen)
{
SwitchTo(CssState.KeyframesData);
}
return false;
}
/// <summary>
/// Before the curly bracket of an @keyframes rule has been seen.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforeKeyframesData(CssToken token)
{
if (token.Type == CssTokenType.CurlyBracketOpen)
{
SwitchTo(CssState.BeforeKeyframesData);
return true;
}
return false;
}
/// <summary>
/// Called in the @keyframes rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean KeyframesData(CssToken token)
{
if (token.Type == CssTokenType.CurlyBracketClose)
{
SwitchTo(CssState.Data);
return CloseRule();
}
else
{
buffer = Pool.NewStringBuilder();
return InKeyframeText(token);
}
}
/// <summary>
/// Called in the text for a frame in the @keyframes rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InKeyframeText(CssToken token)
{
if (token.Type == CssTokenType.CurlyBracketOpen)
{
var frame = new CSSKeyframeRule();
frame.KeyText = buffer.ToPool();
AddRule(frame);
SwitchTo(CssState.InDeclaration);
return true;
}
else if (token.Type == CssTokenType.CurlyBracketClose)
{
buffer.ToPool();
KeyframesData(token);
return false;
}
buffer.Append(token.ToValue());
return true;
}
/// <summary>
/// Called before a document function has been found.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BeforeDocumentFunction(CssToken token)
{
switch (token.Type)
{
case CssTokenType.Url:
CurrentRuleAs<CSSDocumentRule>().Conditions.Add(Tuple.Create(CSSDocumentRule.DocumentFunction.Url, ((CssStringToken)token).Data));
break;
case CssTokenType.UrlPrefix:
CurrentRuleAs<CSSDocumentRule>().Conditions.Add(Tuple.Create(CSSDocumentRule.DocumentFunction.UrlPrefix, ((CssStringToken)token).Data));
break;
case CssTokenType.Domain:
CurrentRuleAs<CSSDocumentRule>().Conditions.Add(Tuple.Create(CSSDocumentRule.DocumentFunction.Domain, ((CssStringToken)token).Data));
break;
case CssTokenType.Function:
if (String.Compare(((CssKeywordToken)token).Data, "regexp", StringComparison.OrdinalIgnoreCase) == 0)
{
SwitchTo(CssState.InDocumentFunction);
return true;
}
SwitchTo(CssState.AfterDocumentFunction);
return false;
default:
SwitchTo(CssState.Data);
return false;
}
SwitchTo(CssState.BetweenDocumentFunctions);
return true;
}
/// <summary>
/// Called before the argument of a document function has been found.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InDocumentFunction(CssToken token)
{
SwitchTo(CssState.AfterDocumentFunction);
if (token.Type == CssTokenType.String)
{
CurrentRuleAs<CSSDocumentRule>().Conditions.Add(Tuple.Create(CSSDocumentRule.DocumentFunction.RegExp, ((CssStringToken)token).Data));
return true;
}
return false;
}
/// <summary>
/// Called after the arguments of a document function has been found.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean AfterDocumentFunction(CssToken token)
{
SwitchTo(CssState.BetweenDocumentFunctions);
return token.Type == CssTokenType.RoundBracketClose;
}
/// <summary>
/// Called after a function has been completed.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean BetweenDocumentFunctions(CssToken token)
{
if (token.Type == CssTokenType.Comma)
{
SwitchTo(CssState.BeforeDocumentFunction);
return true;
}
else if (token.Type == CssTokenType.CurlyBracketOpen)
{
SwitchTo(CssState.Data);
return true;
}
SwitchTo(CssState.Data);
return false;
}
/// <summary>
/// Before any medium has been found for the @media or @import rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InMediaList(CssToken token)
{
if (token.Type == CssTokenType.Semicolon)
{
CloseRule();
SwitchTo(CssState.Data);
return true;
}
buffer = Pool.NewStringBuilder();
SwitchTo(CssState.InMediaValue);
return InMediaValue(token);
}
/// <summary>
/// Scans the current medium for the @media or @import rule.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean InMediaValue(CssToken token)
{
switch (token.Type)
{
case CssTokenType.CurlyBracketOpen:
case CssTokenType.Semicolon:
{
var container = CurrentRule as ICssMedia;
var s = buffer.ToPool();
if (container != null)
container.Media.AppendMedium(s);
if (CurrentRule is CSSImportRule)
return AfterInstruction(token);
SwitchTo(CssState.Data);
return token.Type == CssTokenType.CurlyBracketClose;
}
case CssTokenType.Comma:
{
var container = CurrentRule as ICssMedia;
if (container != null)
container.Media.AppendMedium(buffer.ToString());
buffer.Clear();
return true;
}
case CssTokenType.Whitespace:
{
buffer.Append(' ');
return true;
}
default:
{
buffer.Append(token.ToValue());
return true;
}
}
}
#endregion
#region Substates
/// <summary>
/// Called in a value - a delimiter has been found.
/// </summary>
/// <param name="token">The current delim token.</param>
/// <returns>The status.</returns>
Boolean InSingleValueDelim(CssDelimToken token)
{
switch (token.Data)
{
case Specification.EM:
SwitchTo(CssState.ValueImportant);
return true;
case Specification.NUM:
buffer = Pool.NewStringBuilder();
SwitchTo(CssState.InHexValue);
return true;
case Specification.SOLIDUS:
fraction = true;
return true;
default:
return false;
}
}
/// <summary>
/// Called in a value - an identifier has been found.
/// </summary>
/// <param name="token">The current keyword token.</param>
/// <returns>The status.</returns>
Boolean InSingleValueIdent(CssKeywordToken token)
{
if (token.Data == "inherit")
{
property.Value = CSSValue.Inherit;
SwitchTo(CssState.AfterValue);
return true;
}
return AddValue(new CSSPrimitiveValue(CssUnit.Ident, token.Data));
}
/// <summary>
/// Called in a value - a hash (probably hex) value has been found.
/// </summary>
/// <param name="token">The value of the token.</param>
/// <returns>The status.</returns>
Boolean InSingleValueHexColor(String color)
{
CSSColor value;
if (CSSColor.TryFromHex(color, out value))
return AddValue(new CSSPrimitiveValue(value));
return false;
}
#endregion
#region Rule management
/// <summary>
/// Adds the new value to the current value (or replaces it).
/// </summary>
/// <param name="value">The value to add.</param>
/// <returns>The status.</returns>
Boolean AddValue(CSSValue value)
{
if (fraction)
{
if (this.value != null)
{
value = new CSSPrimitiveValue(CssUnit.Unknown, this.value.ToCss() + "/" + value.ToCss());
this.value = null;
}
fraction = false;
}
if (function.Count > 0)
function.Peek().Arguments.Add(value);
else if (this.value == null)
this.value = value;
else
return false;
return true;
}
/// <summary>
/// Closes a property.
/// </summary>
void CloseProperty()
{
if (property != null)
property.Value = value;
value = null;
property = null;
}
/// <summary>
/// Closes the current rule (if any).
/// </summary>
/// <returns>The status.</returns>
Boolean CloseRule()
{
if (open.Count > 0)
{
open.Pop();
return true;
}
return false;
}
/// <summary>
/// Adds a new rule.
/// </summary>
/// <param name="rule">The new rule.</param>
void AddRule(CSSRule rule)
{
rule.ParentStyleSheet = sheet;
if (open.Count > 0)
{
var container = open.Peek() as ICssRules;
if (container != null)
{
container.CssRules.List.Add(rule);
rule.ParentRule = open.Peek();
}
}
else
sheet.CssRules.List.Add(rule);
open.Push(rule);
}
/// <summary>
/// Adds a declaration.
/// </summary>
/// <param name="property">The new property.</param>
void AddDeclaration(CSSProperty property)
{
this.property = property;
var rule = CurrentRule as IStyleDeclaration;
if (rule != null)
rule.Style.List.Add(property);
}
#endregion
#region Helpers
/// <summary>
/// Gets the current rule casted to the given type.
/// </summary>
T CurrentRuleAs<T>()
where T : CSSRule
{
if (open.Count > 0)
return open.Peek() as T;
return default(T);
}
/// <summary>
/// Switches the current state to the given one.
/// </summary>
/// <param name="newState">The state to switch to.</param>
void SwitchTo(CssState newState)
{
switch (newState)
{
case CssState.InSelector:
tokenizer.IgnoreComments = true;
tokenizer.IgnoreWhitespace = false;
selector.Reset();
selector.IgnoreErrors = skipExceptions;
break;
case CssState.InHexValue:
case CssState.InUnknown:
case CssState.InCondition:
case CssState.InSingleValue:
case CssState.InMediaValue:
tokenizer.IgnoreComments = true;
tokenizer.IgnoreWhitespace = false;
break;
default:
tokenizer.IgnoreComments = true;
tokenizer.IgnoreWhitespace = true;
break;
}
state = newState;
}
/// <summary>
/// The kernel that is pulling the tokens into the parser.
/// </summary>
void Kernel()
{
var tokens = tokenizer.Tokens;
foreach (var token in tokens)
{
if (General(token) == false)
RaiseErrorOccurred(ErrorCode.InputUnexpected);
}
if (property != null)
General(CssSpecialCharacter.Semicolon);
selector.ToPool();
}
/// <summary>
/// Examines the token by using the current state.
/// </summary>
/// <param name="token">The current token.</param>
/// <returns>The status.</returns>
Boolean General(CssToken token)
{
switch (state)
{
case CssState.Data:
return Data(token);
case CssState.InSelector:
return InSelector(token);
case CssState.InDeclaration:
return InDeclaration(token);
case CssState.AfterProperty:
return AfterProperty(token);
case CssState.BeforeValue:
return BeforeValue(token);
case CssState.InValuePool:
return InValuePool(token);
case CssState.InValueList:
return InValueList(token);
case CssState.InSingleValue:
return InSingleValue(token);
case CssState.ValueImportant:
return ValueImportant(token);
case CssState.AfterValue:
return AfterValue(token);
case CssState.InMediaList:
return InMediaList(token);
case CssState.InMediaValue:
return InMediaValue(token);
case CssState.BeforeImport:
return BeforeImport(token);
case CssState.AfterInstruction:
return AfterInstruction(token);
case CssState.BeforeCharset:
return BeforeCharset(token);
case CssState.BeforeNamespacePrefix:
return BeforePrefix(token);
case CssState.AfterNamespacePrefix:
return BeforeNamespace(token);
case CssState.InCondition:
return InCondition(token);
case CssState.InUnknown:
return InUnknown(token);
case CssState.InKeyframeText:
return InKeyframeText(token);
case CssState.BeforeDocumentFunction:
return BeforeDocumentFunction(token);
case CssState.InDocumentFunction:
return InDocumentFunction(token);
case CssState.AfterDocumentFunction:
return AfterDocumentFunction(token);
case CssState.BetweenDocumentFunctions:
return BetweenDocumentFunctions(token);
case CssState.BeforeKeyframesName:
return BeforeKeyframesName(token);
case CssState.BeforeKeyframesData:
return BeforeKeyframesData(token);
case CssState.KeyframesData:
return KeyframesData(token);
case CssState.InHexValue:
return InHexValue(token);
case CssState.InFunction:
return InValueFunction(token);
default:
return false;
}
}
#endregion
#region Public static methods
/// <summary>
/// Takes a string and transforms it into a selector object.
/// </summary>
/// <param name="selector">The string to parse.</param>
/// <returns>The Selector object.</returns>
public static Selector ParseSelector(String selector)
{
var tokenizer = new CssTokenizer(new SourceManager(selector));
var tokens = tokenizer.Tokens;
var selctor = Pool.NewSelectorConstructor();
foreach (var token in tokens)
selctor.Apply(token);
var result = selctor.Result;
selctor.ToPool();
return result;
}
/// <summary>
/// Takes a string and transforms it into a CSS stylesheet.
/// </summary>
/// <param name="stylesheet">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSStyleSheet object.</returns>
public static CSSStyleSheet ParseStyleSheet(String stylesheet, Boolean quirksMode = false)
{
var parser = new CssParser(stylesheet);
parser.IsQuirksMode = quirksMode;
return parser.Result;
}
/// <summary>
/// Takes a string and transforms it into a CSS rule.
/// </summary>
/// <param name="rule">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSRule object.</returns>
public static CSSRule ParseRule(String rule, Boolean quirksMode = false)
{
var parser = new CssParser(rule);
parser.skipExceptions = false;
parser.IsQuirksMode = quirksMode;
parser.Parse();
if (parser.sheet.CssRules.Length > 0)
return parser.sheet.CssRules[0];
return null;
}
/// <summary>
/// Takes a string and transforms it into CSS declarations.
/// </summary>
/// <param name="declarations">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSStyleDeclaration object.</returns>
public static CSSStyleDeclaration ParseDeclarations(String declarations, Boolean quirksMode = false)
{
var decl = new CSSStyleDeclaration();
AppendDeclarations(decl, declarations, quirksMode);
return decl;
}
/// <summary>
/// Takes a string and transforms it into a CSS declaration (CSS property).
/// </summary>
/// <param name="declarations">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSProperty object.</returns>
public static CSSProperty ParseDeclaration(String declarations, Boolean quirksMode = false)
{
var parser = new CssParser(declarations);
parser.state = CssState.InDeclaration;
parser.IsQuirksMode = quirksMode;
parser.skipExceptions = false;
parser.Parse();
return parser.property;
}
/// <summary>
/// Takes a string and transforms it into a CSS value.
/// </summary>
/// <param name="source">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSValue object.</returns>
public static CSSValue ParseValue(String source, Boolean quirksMode = false)
{
var parser = new CssParser(source);
var property = new CSSProperty(String.Empty);
parser.property = property;
parser.IsQuirksMode = quirksMode;
parser.skipExceptions = false;
parser.state = CssState.BeforeValue;
parser.Parse();
return property.Value;
}
#endregion
#region Internal static methods
/// <summary>
/// Takes a string and transforms it into a list of CSS values.
/// </summary>
/// <param name="source">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSValueList object.</returns>
internal static CSSValueList ParseValueList(String source, Boolean quirksMode = false)
{
var parser = new CssParser(source);
var list = new CSSValueList();
var property = new CSSProperty(String.Empty);
property.Value = list;
parser.property = property;
parser.IsQuirksMode = quirksMode;
parser.skipExceptions = false;
parser.state = CssState.InValueList;
parser.Parse();
return list;
}
/// <summary>
/// Takes a comma separated string and transforms it into a list of CSS values.
/// </summary>
/// <param name="source">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSValueList object.</returns>
internal static CSSValuePool ParseMultipleValues(String source, Boolean quirksMode = false)
{
var parser = new CssParser(source);
var pool = new CSSValuePool();
var property = new CSSProperty(String.Empty);
property.Value = pool;
parser.property = property;
parser.IsQuirksMode = quirksMode;
parser.skipExceptions = false;
parser.state = CssState.InValuePool;
parser.Parse();
return pool;
}
/// <summary>
/// Takes a string and transforms it into a CSS keyframe rule.
/// </summary>
/// <param name="rule">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
/// <returns>The CSSKeyframeRule object.</returns>
internal static CSSKeyframeRule ParseKeyframeRule(String rule, Boolean quirksMode = false)
{
var parser = new CssParser(rule);
var keyframe = new CSSKeyframeRule();
parser.AddRule(keyframe);
parser.IsQuirksMode = quirksMode;
parser.skipExceptions = false;
parser.state = CssState.InKeyframeText;
parser.Parse();
return keyframe;
}
/// <summary>
/// Takes a string and appends all rules to the given list of properties.
/// </summary>
/// <param name="list">The list of css properties to append to.</param>
/// <param name="declarations">The string to parse.</param>
/// <param name="quirksMode">Optional: The status of the quirks mode flag (usually not set).</param>
internal static void AppendDeclarations(CSSStyleDeclaration list, String declarations, Boolean quirksMode = false)
{
var parser = new CssParser(declarations);
parser.IsQuirksMode = quirksMode;
parser.skipExceptions = false;
if (list.ParentRule != null)
parser.AddRule(list.ParentRule);
else
parser.AddRule(new CSSStyleRule(list));
parser.state = CssState.InDeclaration;
parser.Parse();
}
#endregion
#region State Enumeration
/// <summary>
/// The enumeration with possible state values.
/// </summary>
enum CssState
{
Data,
InSelector,
InDeclaration,
AfterProperty,
BeforeValue,
InValuePool,
InValueList,
InSingleValue,
InMediaList,
InMediaValue,
BeforeImport,
BeforeCharset,
BeforeNamespacePrefix,
AfterNamespacePrefix,
AfterInstruction,
InCondition,
BeforeKeyframesName,
BeforeKeyframesData,
KeyframesData,
InKeyframeText,
BeforeDocumentFunction,
InDocumentFunction,
AfterDocumentFunction,
BetweenDocumentFunctions,
InUnknown,
ValueImportant,
AfterValue,
InHexValue,
InFunction
}
/// <summary>
/// A buffer for functions.
/// </summary>
class FunctionBuffer
{
#region Members
String name;
List<CSSValue> arguments;
CSSValue value;
#endregion
#region ctor
internal FunctionBuffer(String name)
{
this.arguments = new List<CSSValue>();
this.name = name;
}
#endregion
#region Properties
public List<CSSValue> Arguments
{
get { return arguments; }
}
public CSSValue Value
{
get { return value; }
set { this.value = value; }
}
#endregion
#region Methods
public void Include()
{
if (value != null)
arguments.Add(value);
value = null;
}
public CSSValue Done()
{
Include();
return CSSFunction.Create(name, arguments);
}
#endregion
}
#endregion
}
}
...@@ -3,21 +3,6 @@ using System.Reflection; ...@@ -3,21 +3,6 @@ using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Svg")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("Svg")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2006")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)] [assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM // The following GUID is for the ID of the typelib if this project is exposed to COM
...@@ -32,7 +17,7 @@ using System.Runtime.InteropServices; ...@@ -32,7 +17,7 @@ using System.Runtime.InteropServices;
// //
// You can specify all the values or you can default the Revision and Build Numbers // You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
[assembly: AssemblyVersion("2.4.0.*")] //[assembly: AssemblyVersion("2.4.0")]
//[assembly: AssemblyFileVersion("1.0.1.*")] //[assembly: AssemblyFileVersion("1.0.1.*")]
[assembly: CLSCompliant(true)] [assembly: CLSCompliant(true)]
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <TargetFrameworks>net45;net4.0;net3.5;netstandard2.0</TargetFrameworks>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{886A98C5-37C0-4E8B-885E-30C1D2F98B47}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Svg</RootNamespace> <RootNamespace>Svg</RootNamespace>
<AssemblyName>Svg</AssemblyName> <AssemblyName>Svg</AssemblyName>
<RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent> <Company></Company>
<FileUpgradeFlags> <Authors>davescriven,jvenema,owaits,ddpruitt,Ralf1108,Tebjan Halm,and others</Authors>
</FileUpgradeFlags> <PackageId>Svg</PackageId>
<OldToolsVersion>3.5</OldToolsVersion> <Product>SVG Rendering Library</Product>
<UpgradeBackupLocation> <Summary>SVG Rendering Library</Summary>
</UpgradeBackupLocation> <Description>Public fork of the C# SVG rendering library on codeplex: https://svg.codeplex.com/
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<IsWebBootstrapper>false</IsWebBootstrapper> This started out as a minor modification to enable the writing of proper SVG strings. But now after almost two years we have so many fixes and improvements that we decided to share our current codebase to the public in order to improve it even further.
<SccProjectName>
</SccProjectName> So please feel free to fork it and open pull requests for any fix, improvement or feature you add.
<SccLocalPath>
</SccLocalPath> License: Microsoft Public License: https://svg.codeplex.com/license</Description>
<SccAuxPath> <Copyright>Copyright © vvvv.org</Copyright>
</SccAuxPath> <Tags>svg, vector graphics, rendering</Tags>
<SccProvider> <ProjectGuid>{886A98C5-37C0-4E8B-885E-30C1D2F98B47}</ProjectGuid>
</SccProvider> <DocumentationFile>$(OutputPath)Svg.XML</DocumentationFile>
<PublishUrl>publish\</PublishUrl> <Configurations>Debug;Release</Configurations>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<NoWin32Manifest>False</NoWin32Manifest>
<DelaySign>False</DelaySign>
<AssemblyOriginatorKeyMode>File</AssemblyOriginatorKeyMode>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>Full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\vvvv\public\common\src\thirdparty\</OutputPath>
<DefineConstants>TRACE;DEBUG;REFLECTION</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugSymbols>true</DebugSymbols>
<DocumentationFile>
</DocumentationFile>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<NoWarn>1591</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>PdbOnly</DebugType>
<Optimize>True</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRules>
</CodeAnalysisRules>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<DebugSymbols>false</DebugSymbols>
<DocumentationFile>bin\Release\Svg.XML</DocumentationFile>
<NoWarn>1591</NoWarn> <NoWarn>1591</NoWarn>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<SignAssembly>true</SignAssembly> <SignAssembly>true</SignAssembly>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<AssemblyOriginatorKeyFile>svgkey.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>svgkey.snk</AssemblyOriginatorKeyFile>
<AssemblyVersion>2.3.1.0</AssemblyVersion>
<FileVersion>2.3.1.0</FileVersion>
<PackageLicenseUrl>http://opensource.org/licenses/MS-PL.html</PackageLicenseUrl>
<Version>2.3.1</Version>
<PackageTags>svg, vector graphics, rendering</PackageTags>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageReleaseNotes>Added support to .Net Standard 2.0 using System.Drawing.Common</PackageReleaseNotes>
<PackageProjectUrl>https://github.com/vvvv/SVG</PackageProjectUrl>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>TRACE;DEBUG</DefineConstants>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Basic Shapes\SvgImage.cs" />
<Compile Include="Basic Shapes\SvgPathBasedElement.cs" />
<Compile Include="Basic Shapes\SvgVisualElement.cs" />
<Compile Include="Basic Shapes\SvgCircle.cs" />
<Compile Include="Basic Shapes\SvgEllipse.cs" />
<Compile Include="Basic Shapes\SvgLine.cs" />
<Compile Include="Basic Shapes\SvgPolygon.cs" />
<Compile Include="Basic Shapes\SvgPolyline.cs" />
<Compile Include="Clipping and Masking\ISvgClipable.cs" />
<Compile Include="Clipping and Masking\SvgClipRule.cs" />
<Compile Include="Clipping and Masking\SvgClipPath.cs" />
<Compile Include="Clipping and Masking\SvgMask.cs" />
<Compile Include="DataTypes\ISvgSupportsCoordinateUnits.cs" />
<Compile Include="DataTypes\SvgPointCollection.cs" />
<Compile Include="DataTypes\SvgTextTransformation.cs" />
<Compile Include="DataTypes\SvgTextDecoration.cs" />
<Compile Include="DataTypes\SvgTextLengthAdjust.cs" />
<Compile Include="DataTypes\SvgTextPathMethod.cs" />
<Compile Include="DataTypes\SvgTextPathSpacing.cs" />
<Compile Include="DataTypes\XmlSpaceHandling.cs" />
<Compile Include="Document Structure\SvgSymbol.cs" />
<Compile Include="Exceptions\SvgMemoryException.cs" />
<Compile Include="ExtensionMethods\UriExtensions.cs" />
<Compile Include="Filter Effects\ImageBuffer.cs" />
<Compile Include="Painting\GenericBoundable.cs" />
<Compile Include="Painting\SvgFallbackPaintServer .cs" />
<Compile Include="Paths\CoordinateParser.cs" />
<Compile Include="Rendering\IGraphicsProvider.cs" />
<Compile Include="Rendering\ISvgRenderer.cs" />
<Compile Include="Rendering\SvgRendering.cs" />
<Compile Include="SvgElementStyle.cs" />
<Compile Include="SvgNodeReader.cs" />
<Compile Include="Css\CssQuery.cs" />
<Compile Include="Css\SvgElementOps.cs" />
<Compile Include="DataTypes\SvgAspectRatioConverter.cs" />
<Compile Include="DataTypes\SvgFontStyle.cs" />
<Compile Include="DataTypes\SvgFontVariant.cs" />
<Compile Include="DataTypes\SvgMarkerUnits.cs" />
<Compile Include="DataTypes\SvgOrient.cs" />
<Compile Include="DataTypes\ISvgViewPort.cs" />
<Compile Include="DataTypes\SvgAspectRatio.cs" />
<Compile Include="DataTypes\SvgColourInterpolation.cs" />
<Compile Include="DataTypes\SvgElementStyle.cs" />
<Compile Include="DataTypes\SvgCoordinateUnits.cs" />
<Compile Include="DataTypes\SvgFontWeight.cs" />
<Compile Include="DataTypes\SvgOrientConverter.cs" />
<Compile Include="DataTypes\SvgOverflow.cs" />
<Compile Include="DataTypes\SvgUnitCollection.cs" />
<Compile Include="DataTypes\SvgViewBox.cs" />
<Compile Include="Document Structure\SvgSwitch.cs" />
<Compile Include="Document Structure\SvgTitle.cs" />
<Compile Include="Document Structure\SvgDocumentMetadata.cs" />
<Compile Include="External\ExCSS\IToString.cs" />
<Compile Include="External\ExCSS\Lexer.cs" />
<Compile Include="External\ExCSS\Model\Enumerations.cs" />
<Compile Include="External\ExCSS\Model\Extensions\CharacterExtensions.cs" />
<Compile Include="External\ExCSS\Model\Extensions\StringExtensions.cs" />
<Compile Include="External\ExCSS\Model\FunctionBuffer.cs" />
<Compile Include="External\ExCSS\Model\HtmlEncoding.cs" />
<Compile Include="External\ExCSS\Model\ICssRules.cs" />
<Compile Include="External\ExCSS\Model\ICssSelector.cs" />
<Compile Include="External\ExCSS\Model\IStyleDeclaration.cs" />
<Compile Include="External\ExCSS\Model\ISupportsMedia.cs" />
<Compile Include="External\ExCSS\Model\MediaTypeList.cs" />
<Compile Include="External\ExCSS\Model\Rules\AggregateRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\CharacterSetRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\ConditionalRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\DocumentRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\FontFaceRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\GenericRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\ImportRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\IRuleContainer.cs" />
<Compile Include="External\ExCSS\Model\Rules\KeyframeRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\KeyframesRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\MediaRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\NamespaceRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\PageRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\RuleSet.cs" />
<Compile Include="External\ExCSS\Model\Rules\StyleDeclaration.cs" />
<Compile Include="External\ExCSS\Model\Rules\StyleRule.cs" />
<Compile Include="External\ExCSS\Model\Rules\SupportsRule.cs" />
<Compile Include="External\ExCSS\Model\Selector\AggregateSelectorList.cs" />
<Compile Include="External\ExCSS\Model\Selector\BaseSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\CombinatorSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\ComplexSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\FirstChildSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\LastChildSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\MultipleSelectorList.cs" />
<Compile Include="External\ExCSS\Model\Selector\NthChildSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\NthFirstChildSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\NthLastChildSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\NthLastOfTypeSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\NthOfTypeSelector.cs" />
<Compile Include="External\ExCSS\Model\Selector\SelectorFactory.cs" />
<Compile Include="External\ExCSS\Model\Selector\SelectorList.cs" />
<Compile Include="External\ExCSS\Model\Selector\SimpleSelector.cs" />
<Compile Include="External\ExCSS\Model\Specification.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\Block.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\BracketBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\CharacterBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\CommentBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\DelimiterBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\MatchBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\NumericBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\PipeBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\RangeBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\SpecialCharacter.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\StringBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\SymbolBlock.cs" />
<Compile Include="External\ExCSS\Model\TextBlocks\UnitBlock.cs" />
<Compile Include="External\ExCSS\Model\Values\GenericFunction.cs" />
<Compile Include="External\ExCSS\Model\Values\HtmlColor.cs" />
<Compile Include="External\ExCSS\Model\Values\InheritTerm.cs" />
<Compile Include="External\ExCSS\Model\Values\PrimitiveTerm.cs" />
<Compile Include="External\ExCSS\Model\Values\Property.cs" />
<Compile Include="External\ExCSS\Model\Values\Term.cs" />
<Compile Include="External\ExCSS\Model\Values\TermList.cs" />
<Compile Include="External\ExCSS\Parser.Blocks.cs" />
<Compile Include="External\ExCSS\Parser.cs" />
<Compile Include="External\ExCSS\StyleSheet.cs" />
<Compile Include="External\ExCSS\StylesheetParseError.cs" />
<Compile Include="External\ExCSS\StylesheetReader.cs" />
<Compile Include="Extensibility\SvgForeignObject.cs" />
<Compile Include="Extensions.cs" />
<Compile Include="External\Fizzler\Either.cs" />
<Compile Include="External\Fizzler\HumanReadableSelectorGenerator.cs" />
<Compile Include="External\Fizzler\IElementOps.cs" />
<Compile Include="External\Fizzler\ISelectorGenerator.cs" />
<Compile Include="External\Fizzler\NamespacePrefix.cs" />
<Compile Include="External\Fizzler\Parser.cs" />
<Compile Include="External\Fizzler\Reader.cs" />
<Compile Include="External\Fizzler\Selector.cs" />
<Compile Include="External\Fizzler\SelectorGenerator.cs" />
<Compile Include="External\Fizzler\SelectorGeneratorTee.cs" />
<Compile Include="External\Fizzler\SelectorsCachingCompiler.cs" />
<Compile Include="External\Fizzler\Token.cs" />
<Compile Include="External\Fizzler\Tokener.cs" />
<Compile Include="External\Fizzler\TokenKind.cs" />
<Compile Include="Painting\ISvgBoundable.cs" />
<Compile Include="Painting\SvgDeferredPaintServer.cs" />
<Compile Include="Painting\SvgMarker.cs" />
<Compile Include="Document Structure\SvgDefinitionList.cs" />
<Compile Include="Document Structure\SvgDescription.cs" />
<Compile Include="Document Structure\SvgFragment.cs" />
<Compile Include="Document Structure\SvgGroup.cs" />
<Compile Include="Document Structure\SvgUse.cs" />
<Compile Include="Filter Effects\feColourMatrix\SvgColourMatrix.cs" />
<Compile Include="Filter Effects\feColourMatrix\SvgColourMatrixType.cs" />
<Compile Include="Filter Effects\feGaussianBlur\RawBitmap.cs" />
<Compile Include="Filter Effects\feMerge\SvgMergeNode.cs" />
<Compile Include="Filter Effects\feOffset\SvgOffset.cs" />
<Compile Include="Filter Effects\ISvgFilterable.cs" />
<Compile Include="Filter Effects\SvgFilter.cs" />
<Compile Include="Filter Effects\SvgFilterPrimitive.cs" />
<Compile Include="Filter Effects\feGaussianBlur\SvgGaussianBlur.cs" />
<Compile Include="Filter Effects\feMerge\SvgMerge.cs" />
<Compile Include="Painting\EnumConverters.cs" />
<Compile Include="SvgContentNode.cs" />
<Compile Include="SvgDefinitionDefaults.cs" />
<Compile Include="NonSvgElement.cs" />
<Compile Include="SvgUnknownElement.cs" />
<Compile Include="SvgElementAttribute.cs" />
<Compile Include="SvgExtentions.cs" />
<Compile Include="Rendering\SvgRenderer.cs" />
<Compile Include="Painting\SvgColourConverter.cs" />
<Compile Include="Painting\SvgGradientSpreadMethod.cs" />
<Compile Include="SvgDtdResolver.cs" />
<Compile Include="Exceptions\SvgException.cs" />
<Compile Include="Painting\SvgFillRule.cs" />
<Compile Include="Painting\SvgGradientServer.cs" />
<Compile Include="Painting\SvgGradientStop.cs" />
<Compile Include="Painting\ISvgStylable.cs" />
<Compile Include="Painting\SvgColourServer.cs" />
<Compile Include="Painting\SvgLinearGradientServer.cs" />
<Compile Include="Painting\SvgPaintServer.cs" />
<Compile Include="Painting\SvgPaintServerFactory.cs" />
<Compile Include="Painting\SvgPatternServer.cs" />
<Compile Include="Painting\SvgRadialGradientServer.cs" />
<Compile Include="Painting\SvgStrokeLineCap.cs" />
<Compile Include="Painting\SvgStrokeLineJoin.cs" />
<Compile Include="Basic Shapes\SvgVisualElementStyle.cs" />
<Compile Include="Paths\SvgArcSegment.cs" />
<Compile Include="Paths\SvgClosePathSegment.cs" />
<Compile Include="Paths\SvgCubicCurveSegment.cs" />
<Compile Include="Paths\SvgLineSegment.cs" />
<Compile Include="Paths\SvgMoveToSegment.cs" />
<Compile Include="Paths\SvgPath.cs" />
<Compile Include="Basic Shapes\SvgRectangle.cs" />
<Compile Include="Paths\SvgPathSegment.cs" />
<Compile Include="Paths\SvgPathSegmentList.cs" />
<Compile Include="Paths\SvgQuadraticCurveSegment.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SvgDocument.cs" />
<Compile Include="SvgAttributeAttribute.cs" />
<Compile Include="SvgAttributeCollection.cs" />
<Compile Include="SvgElement.cs" />
<Compile Include="SvgElementCollection.cs" />
<Compile Include="SvgElementFactory.cs" />
<Compile Include="Paths\SvgPathBuilder.cs" />
<Compile Include="DataTypes\SvgPoint.cs" />
<Compile Include="SvgElementIdManager.cs" />
<Compile Include="DataTypes\SvgUnit.cs" />
<Compile Include="DataTypes\SvgUnitConverter.cs" />
<Compile Include="SvgTextReader.cs" />
<Compile Include="Text\SvgFontFaceUri.cs" />
<Compile Include="Text\FontFamily.cs" />
<Compile Include="Text\GdiFontDefn.cs" />
<Compile Include="Text\IFontDefn.cs" />
<Compile Include="Text\SvgFont.cs" />
<Compile Include="Text\SvgFontDefn.cs" />
<Compile Include="Text\SvgFontFace.cs" />
<Compile Include="Text\SvgFontFaceSrc.cs" />
<Compile Include="Text\SvgGlyph.cs" />
<Compile Include="Text\SvgKern.cs" />
<Compile Include="Text\SvgMissingGlyph.cs" />
<Compile Include="Text\SvgText.cs" />
<Compile Include="Text\SvgTextBase.cs" />
<Compile Include="Text\SvgTextAnchor.cs" />
<Compile Include="Text\SvgTextPath.cs" />
<Compile Include="Text\SvgTextSpan.cs" />
<Compile Include="Text\SvgTextRef.cs" />
<Compile Include="Text\PathStatistics.cs" />
<Compile Include="Transforms\ISvgTransformable.cs" />
<Compile Include="Transforms\SvgMatrix.cs" />
<Compile Include="Transforms\SvgRotate.cs" />
<Compile Include="Transforms\SvgScale.cs" />
<Compile Include="Transforms\SvgShear.cs" />
<Compile Include="Transforms\SvgSkew.cs" />
<Compile Include="Transforms\SvgTransform.cs" />
<Compile Include="Transforms\SvgTransformCollection.cs" />
<Compile Include="Transforms\SvgTransformConverter.cs" />
<Compile Include="Transforms\SvgTranslate.cs" />
<Compile Include="Web\SvgHandler.cs" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Resources\svg11.dtd" /> <EmbeddedResource Include="Resources\svg11.dtd" />
</ItemGroup> </ItemGroup>
...@@ -362,30 +53,23 @@ ...@@ -362,30 +53,23 @@
<None Include="Svg.nuspec" /> <None Include="Svg.nuspec" />
<None Include="svgkey.snk" /> <None Include="svgkey.snk" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <ItemGroup Condition="'$(TargetFramework)' == 'netstandard1.5' or '$(TargetFramework)' == 'netstandard2.0'">
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <PackageReference Include="System.Drawing.Common">
Other similar extension points exist, see Microsoft.Common.targets. <Version>4.5.1</Version>
<Target Name="BeforeBuild"> </PackageReference>
</Target> </ItemGroup>
<Target Name="AfterBuild">
</Target> <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.5'">
--> <DefineConstants>$(DefineConstants);NETCORE;NETSTANDARD;NETSTANDARD1_5</DefineConstants>
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<FileAlignment>4096</FileAlignment>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard2.0'">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <DefineConstants>$(DefineConstants);NETCORE;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <PropertyGroup Condition=" '$(TargetFramework)' != 'netstandard1.5' And '$(TargetFramework)' != 'netstandard2.0'">
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath> <DefineConstants>$(DefineConstants);NET40;NETFULL</DefineConstants>
</PropertyGroup> </PropertyGroup>
</Project> </Project>
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14 # Visual Studio 15
VisualStudioVersion = 14.0.25123.0 VisualStudioVersion = 15.0.26711.1
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Svg", "Svg.csproj", "{886A98C5-37C0-4E8B-885E-30C1D2F98B47}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SVGViewer", "..\Samples\SVGViewer\SVGViewer.csproj", "{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SVGViewer", "..\Samples\SVGViewer\SVGViewer.csproj", "{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Svg.UnitTests", "..\Tests\Svg.UnitTests\Svg.UnitTests.csproj", "{E702EB7D-D01D-438A-BADD-E72D4E49109F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Svg.UnitTests", "..\Tests\Svg.UnitTests\Svg.UnitTests.csproj", "{E702EB7D-D01D-438A-BADD-E72D4E49109F}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A417AF1E-BEDB-4715-B4FD-D795579217F9}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A417AF1E-BEDB-4715-B4FD-D795579217F9}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
...@@ -18,7 +16,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution ...@@ -18,7 +16,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SvgW3CTestRunner", "..\Tests\SvgW3CTestRunner\SvgW3CTestRunner.csproj", "{8ED74C39-6CFF-421E-952A-30F9E6957108}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SvgW3CTestRunner", "..\Tests\SvgW3CTestRunner\SvgW3CTestRunner.csproj", "{8ED74C39-6CFF-421E-952A-30F9E6957108}"
EndProject EndProject
Project("{FF286327-C783-4F7A-AB73-9BCBAD0D4460}") = "Svg.Package", "SvgNuget\Svg.Package.nuproj", "{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Svg", "Svg.csproj", "{886A98C5-37C0-4E8B-885E-30C1D2F98B47}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
...@@ -30,66 +28,61 @@ Global ...@@ -30,66 +28,61 @@ Global
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Any CPU.ActiveCfg = Release|Any CPU {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Any CPU.Build.0 = Release|Any CPU {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|x86.ActiveCfg = Debug|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Any CPU.Build.0 = Release|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|x86.ActiveCfg = Release|Any CPU
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Any CPU.ActiveCfg = Release|Any CPU
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Any CPU.Build.0 = Release|Any CPU
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Mixed Platforms.Build.0 = Debug|x86 {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|Mixed Platforms.Build.0 = Debug|x86
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|x86.ActiveCfg = Debug|x86 {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|x86.ActiveCfg = Debug|x86
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|x86.Build.0 = Debug|Any CPU {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Debug|x86.Build.0 = Debug|x86
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Any CPU.ActiveCfg = Release|Any CPU {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Any CPU.Build.0 = Release|Any CPU {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Any CPU.Build.0 = Release|Any CPU
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Mixed Platforms.ActiveCfg = Release|x86 {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Mixed Platforms.ActiveCfg = Release|x86
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Mixed Platforms.Build.0 = Release|x86 {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|Mixed Platforms.Build.0 = Release|x86
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|x86.ActiveCfg = Release|Any CPU {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|x86.ActiveCfg = Release|Any CPU
{1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|x86.Build.0 = Release|Any CPU {1B8F3C8A-CCAC-474E-B09D-522FBA93DCFD}.Release|x86.Build.0 = Release|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Any CPU.Build.0 = Release|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|x86.ActiveCfg = Debug|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|x86.ActiveCfg = Debug|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Debug|x86.Build.0 = Debug|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Any CPU.ActiveCfg = Release|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Any CPU.Build.0 = Release|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Any CPU.Build.0 = Release|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Mixed Platforms.Build.0 = Release|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|x86.ActiveCfg = Release|Any CPU {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|x86.ActiveCfg = Release|Any CPU
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Any CPU.ActiveCfg = Release|x86 {E702EB7D-D01D-438A-BADD-E72D4E49109F}.Release|x86.Build.0 = Release|Any CPU
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Any CPU.Build.0 = Release|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Mixed Platforms.Build.0 = Debug|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|Mixed Platforms.Build.0 = Debug|x86
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|x86.ActiveCfg = Debug|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|x86.ActiveCfg = Debug|x86
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|x86.Build.0 = Debug|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Debug|x86.Build.0 = Debug|x86
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Any CPU.ActiveCfg = Release|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Any CPU.Build.0 = Release|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Any CPU.Build.0 = Release|Any CPU
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Mixed Platforms.ActiveCfg = Release|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Mixed Platforms.ActiveCfg = Release|x86
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Mixed Platforms.Build.0 = Release|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|Mixed Platforms.Build.0 = Release|x86
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|x86.ActiveCfg = Release|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|x86.ActiveCfg = Release|x86
{8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|x86.Build.0 = Release|x86 {8ED74C39-6CFF-421E-952A-30F9E6957108}.Release|x86.Build.0 = Release|x86
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Debug|x86.ActiveCfg = Debug|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|x86.ActiveCfg = Debug|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Debug|x86.Build.0 = Debug|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Debug|x86.Build.0 = Debug|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Release|Any CPU.Build.0 = Release|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Any CPU.Build.0 = Release|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Release|Mixed Platforms.Build.0 = Release|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Release|x86.ActiveCfg = Release|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|x86.ActiveCfg = Release|Any CPU
{AEEFC0CC-6D17-439D-B8E0-53B713485E3B}.Release|x86.Build.0 = Release|Any CPU {886A98C5-37C0-4E8B-885E-30C1D2F98B47}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {50151C35-4F36-4A79-AB72-646E670C40E2}
EndGlobalSection
GlobalSection(TestCaseManagementSettings) = postSolution GlobalSection(TestCaseManagementSettings) = postSolution
CategoryFile = Svg.vsmdi CategoryFile = Svg.vsmdi
EndGlobalSection EndGlobalSection
......
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Text; using System.Drawing.Text;
using System.Reflection; using SystemFontStyle = System.Drawing.FontStyle;
using SystemFontFamily = System.Drawing.FontFamily;
using System.ComponentModel; using System.ComponentModel;
using Svg.DataTypes;
using System.Text.RegularExpressions;
using System.Linq; using System.Linq;
namespace Svg namespace Svg
...@@ -373,7 +372,7 @@ namespace Svg ...@@ -373,7 +372,7 @@ namespace Svg
if (sFaces == null) if (sFaces == null)
{ {
var fontStyle = System.Drawing.FontStyle.Regular; var fontStyle = SystemFontStyle.Regular;
// Get the font-weight // Get the font-weight
switch (this.FontWeight) switch (this.FontWeight)
...@@ -384,7 +383,7 @@ namespace Svg ...@@ -384,7 +383,7 @@ namespace Svg
case SvgFontWeight.W700: case SvgFontWeight.W700:
case SvgFontWeight.W800: case SvgFontWeight.W800:
case SvgFontWeight.W900: case SvgFontWeight.W900:
fontStyle |= System.Drawing.FontStyle.Bold; fontStyle |= SystemFontStyle.Bold;
break; break;
} }
...@@ -393,7 +392,7 @@ namespace Svg ...@@ -393,7 +392,7 @@ namespace Svg
{ {
case SvgFontStyle.Italic: case SvgFontStyle.Italic:
case SvgFontStyle.Oblique: case SvgFontStyle.Oblique:
fontStyle |= System.Drawing.FontStyle.Italic; fontStyle |= SystemFontStyle.Italic;
break; break;
} }
...@@ -401,10 +400,10 @@ namespace Svg ...@@ -401,10 +400,10 @@ namespace Svg
switch (this.TextDecoration) switch (this.TextDecoration)
{ {
case SvgTextDecoration.LineThrough: case SvgTextDecoration.LineThrough:
fontStyle |= System.Drawing.FontStyle.Strikeout; fontStyle |= SystemFontStyle.Strikeout;
break; break;
case SvgTextDecoration.Underline: case SvgTextDecoration.Underline:
fontStyle |= System.Drawing.FontStyle.Underline; fontStyle |= SystemFontStyle.Underline;
break; break;
} }
...@@ -415,7 +414,7 @@ namespace Svg ...@@ -415,7 +414,7 @@ namespace Svg
} }
// Get the font-family // Get the font-family
return new GdiFontDefn(new System.Drawing.Font(ff, fontSize, fontStyle, System.Drawing.GraphicsUnit.Pixel)); return new GdiFontDefn(new Font(ff, fontSize, fontStyle, GraphicsUnit.Pixel));
} }
else else
{ {
...@@ -429,12 +428,12 @@ namespace Svg ...@@ -429,12 +428,12 @@ namespace Svg
} }
} }
public static System.Drawing.Text.PrivateFontCollection PrivateFonts = new System.Drawing.Text.PrivateFontCollection(); public static PrivateFontCollection PrivateFonts = new PrivateFontCollection();
public static object ValidateFontFamily(string fontFamilyList, SvgDocument doc) public static object ValidateFontFamily(string fontFamilyList, SvgDocument doc)
{ {
// Split font family list on "," and then trim start and end spaces and quotes. // Split font family list on "," and then trim start and end spaces and quotes.
var fontParts = (fontFamilyList ?? string.Empty).Split(new[] { ',' }).Select(fontName => fontName.Trim(new[] { '"', ' ', '\'' })); var fontParts = (fontFamilyList ?? string.Empty).Split(new[] { ',' }).Select(fontName => fontName.Trim(new[] { '"', ' ', '\'' }));
var families = System.Drawing.FontFamily.Families; var families = SystemFontFamily.Families;
Func<FontFamily, bool> getFamily; Func<FontFamily, bool> getFamily;
FontFamily family; FontFamily family;
IEnumerable<SvgFontFace> sFaces; IEnumerable<SvgFontFace> sFaces;
...@@ -454,16 +453,16 @@ namespace Svg ...@@ -454,16 +453,16 @@ namespace Svg
switch (f.ToLower()) switch (f.ToLower())
{ {
case "serif": case "serif":
return System.Drawing.FontFamily.GenericSerif; return SystemFontFamily.GenericSerif;
case "sans-serif": case "sans-serif":
return System.Drawing.FontFamily.GenericSansSerif; return SystemFontFamily.GenericSansSerif;
case "monospace": case "monospace":
return System.Drawing.FontFamily.GenericMonospace; return SystemFontFamily.GenericMonospace;
} }
} }
// No valid font family found from the list requested. // No valid font family found from the list requested.
return System.Drawing.FontFamily.GenericSansSerif; return SystemFontFamily.GenericSansSerif;
} }
} }
} }
...@@ -2,18 +2,6 @@ ...@@ -2,18 +2,6 @@
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Svg.UnitTests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Svg.UnitTests")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible // Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from // to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type. // COM, set the ComVisible attribute to true on that type.
...@@ -21,15 +9,3 @@ using System.Runtime.InteropServices; ...@@ -21,15 +9,3 @@ using System.Runtime.InteropServices;
// The following GUID is for the ID of the typelib if this project is exposed to COM // The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("6ab1d266-f201-46c0-9d14-523768eb18db")] [assembly: Guid("6ab1d266-f201-46c0-9d14-523768eb18db")]
\ No newline at end of file
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Svg.UnitTests</RootNamespace> <RootNamespace>Svg.UnitTests</RootNamespace>
<AssemblyName>Svg.UnitTests</AssemblyName> <AssemblyName>Svg.UnitTests</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworks>net4.5;netstandard2.0;netcoreapp2.0</TargetFrameworks>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup> </PropertyGroup>
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType> <DebugType>pdbonly</DebugType>
...@@ -31,6 +32,7 @@ ...@@ -31,6 +32,7 @@
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<SignAssembly>true</SignAssembly> <SignAssembly>true</SignAssembly>
...@@ -38,22 +40,12 @@ ...@@ -38,22 +40,12 @@
<PropertyGroup> <PropertyGroup>
<AssemblyOriginatorKeyFile>svgkey.snk</AssemblyOriginatorKeyFile> <AssemblyOriginatorKeyFile>svgkey.snk</AssemblyOriginatorKeyFile>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies"> <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
<Visible>False</Visible> <Visible>False</Visible>
</CodeAnalysisDependentAssemblyPaths> </CodeAnalysisDependentAssemblyPaths>
</ItemGroup> </ItemGroup>
<!--
<ItemGroup> <ItemGroup>
<Compile Include="BoundsTests.cs" /> <Compile Include="BoundsTests.cs" />
<Compile Include="CssQueryTest.cs" /> <Compile Include="CssQueryTest.cs" />
...@@ -70,6 +62,7 @@ ...@@ -70,6 +62,7 @@
<Compile Include="SvgTextElementDeepCopyTest.cs" /> <Compile Include="SvgTextElementDeepCopyTest.cs" />
<Compile Include="ImageComparisonTest.cs" /> <Compile Include="ImageComparisonTest.cs" />
</ItemGroup> </ItemGroup>
-->
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\Source\Svg.csproj"> <ProjectReference Include="..\..\Source\Svg.csproj">
<Project>{886A98C5-37C0-4E8B-885E-30C1D2F98B47}</Project> <Project>{886A98C5-37C0-4E8B-885E-30C1D2F98B47}</Project>
...@@ -78,6 +71,7 @@ ...@@ -78,6 +71,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Resources\Issue204_PrivateFont\BrushScriptMT2.ttf" /> <EmbeddedResource Include="Resources\Issue204_PrivateFont\BrushScriptMT2.ttf" />
<None Include="packages.config" />
<None Include="AllTests.csv" /> <None Include="AllTests.csv" />
<None Include="PassingTests.csv" /> <None Include="PassingTests.csv" />
<None Include="svgkey.snk" /> <None Include="svgkey.snk" />
...@@ -107,11 +101,35 @@ ...@@ -107,11 +101,35 @@
<EmbeddedResource Include="Resources\Issue_Threading\TestFile.svg" /> <EmbeddedResource Include="Resources\Issue_Threading\TestFile.svg" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. <ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp2.0' or '$(TargetFramework)' == 'netstandard1.5' or '$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'netstandard15' or '$(TargetFramework)' == 'netstandard20' or '$(TargetFramework)' == 'netcoreapp20'">
<Target Name="BeforeBuild"> <PackageReference Include="System.Drawing.Common">
</Target> <Version>4.5.1</Version>
<Target Name="AfterBuild"> </PackageReference>
</Target> </ItemGroup>
--> <ItemGroup>
<PackageReference Include="MSTest.TestAdapter" Version="1.2.0-beta" />
<PackageReference Include="MSTest.TestFramework" Version="1.2.0-beta" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0-preview-20170628-02" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
</ItemGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netcoreapp2.0'">
<DefineConstants>$(DefineConstants);NETCORE;NETSTANDARD;NETCOREAPP2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard1.5'">
<DefineConstants>$(DefineConstants);NETCORE;NETSTANDARD;NETSTANDARD1_5</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<DefineConstants>$(DefineConstants);NETCORE;NETSTANDARD;NETSTANDARD2_0</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)' != 'netstandard2.0' And '$(TargetFramework)' != 'netstandard1.5' And '$(TargetFramework)' != 'netcoreapp2.0'">
<DefineConstants>$(DefineConstants);NET40;NETFULL</DefineConstants>
</PropertyGroup>
</Project> </Project>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.18444 // Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace SvgW3CTestRunner.Properties namespace SvgW3CTestRunner.Properties {
{ using System;
/// <summary> /// <summary>
...@@ -19,31 +19,26 @@ namespace SvgW3CTestRunner.Properties ...@@ -19,31 +19,26 @@ namespace SvgW3CTestRunner.Properties
// class via a tool like ResGen or Visual Studio. // class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen // To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project. // with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources internal class Resources {
{
private static global::System.Resources.ResourceManager resourceMan; private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture; private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() internal Resources() {
{
} }
/// <summary> /// <summary>
/// Returns the cached ResourceManager instance used by this class. /// Returns the cached ResourceManager instance used by this class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager internal static global::System.Resources.ResourceManager ResourceManager {
{ get {
get if (object.ReferenceEquals(resourceMan, null)) {
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SvgW3CTestRunner.Properties.Resources", typeof(Resources).Assembly); global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SvgW3CTestRunner.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp; resourceMan = temp;
} }
...@@ -56,14 +51,11 @@ namespace SvgW3CTestRunner.Properties ...@@ -56,14 +51,11 @@ namespace SvgW3CTestRunner.Properties
/// resource lookups using this strongly typed resource class. /// resource lookups using this strongly typed resource class.
/// </summary> /// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture internal static global::System.Globalization.CultureInfo Culture {
{ get {
get
{
return resourceCulture; return resourceCulture;
} }
set set {
{
resourceCulture = value; resourceCulture = value;
} }
} }
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform> <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SvgW3CTestRunner</RootNamespace> <RootNamespace>SvgW3CTestRunner</RootNamespace>
<AssemblyName>SvgW3CTestRunner</AssemblyName> <AssemblyName>SvgW3CTestRunner</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors> <TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath> <RuntimeIdentifier>win</RuntimeIdentifier>
<TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget> <PlatformTarget>x86</PlatformTarget>
...@@ -35,16 +36,38 @@ ...@@ -35,16 +36,38 @@
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'x86' "> <PropertyGroup Condition=" '$(Platform)' == 'x86' ">
<BaseAddress>4194304</BaseAddress>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>Full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<StartupObject>SvgW3CTestRunner.Program</StartupObject>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
...@@ -76,7 +99,9 @@ ...@@ -76,7 +99,9 @@
<Compile Include="Properties\Resources.Designer.cs"> <Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile> </Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
......
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment