Browse Source

Start news project

master
Milad Karbasizadeh 11 years ago
parent
commit
9c5283e867
254 changed files with 133272 additions and 0 deletions
  1. +15
    -0
      Sevomin.News/404.cshtml
  2. +23
    -0
      Sevomin.News/Global.asax
  3. +59
    -0
      Sevomin.News/Index.cshtml
  4. +121
    -0
      Sevomin.News/Web.config
  5. +212
    -0
      Sevomin.News/app_code/code/Blog.cs
  6. +118
    -0
      Sevomin.News/app_code/code/Comment.cs
  7. +76
    -0
      Sevomin.News/app_code/code/Post.cs
  8. +178
    -0
      Sevomin.News/app_code/code/Storage.cs
  9. +187
    -0
      Sevomin.News/app_code/handlers/CommentHandler.cs
  10. +59
    -0
      Sevomin.News/app_code/handlers/FeedHandler.cs
  11. +188
    -0
      Sevomin.News/app_code/handlers/MetaWeblogHandler.cs
  12. +60
    -0
      Sevomin.News/app_code/handlers/MinifyHandler.cs
  13. +117
    -0
      Sevomin.News/app_code/handlers/PostHandler.cs
  14. +94
    -0
      Sevomin.News/css/admin.css
  15. +1
    -0
      Sevomin.News/css/bootstrap-theme.min.css
  16. +839
    -0
      Sevomin.News/css/bootstrap.min.css
  17. BIN
      Sevomin.News/favicon.ico
  18. BIN
      Sevomin.News/fonts/BKoodakBold.eot
  19. BIN
      Sevomin.News/fonts/BKoodakBold.ttf
  20. BIN
      Sevomin.News/fonts/BKoodakBold.woff
  21. BIN
      Sevomin.News/fonts/WebYekan.eot
  22. +612
    -0
      Sevomin.News/fonts/WebYekan.svg
  23. BIN
      Sevomin.News/fonts/WebYekan.ttf
  24. BIN
      Sevomin.News/fonts/WebYekan.woff
  25. BIN
      Sevomin.News/fonts/glyphicons-halflings-regular.eot
  26. +229
    -0
      Sevomin.News/fonts/glyphicons-halflings-regular.svg
  27. BIN
      Sevomin.News/fonts/glyphicons-halflings-regular.ttf
  28. BIN
      Sevomin.News/fonts/glyphicons-halflings-regular.woff
  29. BIN
      Sevomin.News/images/revert-logo.png
  30. +10
    -0
      Sevomin.News/packages.config
  31. +14
    -0
      Sevomin.News/posts/05e94568-232b-42d2-81c1-d4bf5ef46b5d.xml
  32. +14
    -0
      Sevomin.News/posts/504c5b77-1965-476b-8405-0e47db1309d1.xml
  33. +61
    -0
      Sevomin.News/posts/files/9fa751db-c036-435b-97e3-bd6373b0991b.xml
  34. +5
    -0
      Sevomin.News/scripts/_references.js
  35. +226
    -0
      Sevomin.News/scripts/admin.js
  36. +217
    -0
      Sevomin.News/scripts/bootstrap-wysiwyg.js
  37. +271
    -0
      Sevomin.News/scripts/comments.js
  38. +2670
    -0
      Sevomin.News/scripts/jquery-2.0.2.intellisense.js
  39. +8842
    -0
      Sevomin.News/scripts/jquery-2.0.2.js
  40. +46
    -0
      Sevomin.News/themes/Sevomin/Comment.cshtml
  41. +109
    -0
      Sevomin.News/themes/Sevomin/Post.cshtml
  42. +119
    -0
      Sevomin.News/themes/Sevomin/_Layout.cshtml
  43. +106
    -0
      Sevomin.News/themes/Sevomin/common.css
  44. +247
    -0
      Sevomin.News/themes/Sevomin/site.css
  45. +78
    -0
      Sevomin.News/views/AdminMenu.cshtml
  46. +38
    -0
      Sevomin.News/views/CommentForm.cshtml
  47. +59
    -0
      Sevomin.News/views/Login.cshtml
  48. +14
    -0
      Sevomin.News/views/Robots/RSD.cshtml
  49. +8
    -0
      Sevomin.News/views/Robots/Robots.cshtml
  50. +15
    -0
      Sevomin.News/views/Robots/Sitemap.cshtml
  51. +28
    -0
      Sevomin.News/wlwmanifest.xml
  52. +26
    -0
      Sevomin.sln
  53. BIN
      packages/AjaxMin.5.8.5172.27710/AjaxMin.5.8.5172.27710.nupkg
  54. BIN
      packages/AjaxMin.5.8.5172.27710/lib/net20/AjaxMin.dll
  55. BIN
      packages/AjaxMin.5.8.5172.27710/lib/net35/AjaxMin.dll
  56. BIN
      packages/AjaxMin.5.8.5172.27710/lib/net40/AjaxMin.dll
  57. BIN
      packages/AjaxMin.5.8.5172.27710/tools/net35/AjaxMin.dll
  58. +38
    -0
      packages/AjaxMin.5.8.5172.27710/tools/net35/AjaxMin.targets
  59. BIN
      packages/AjaxMin.5.8.5172.27710/tools/net35/AjaxMinTask.dll
  60. BIN
      packages/AjaxMin.5.8.5172.27710/tools/net40/AjaxMin.dll
  61. +38
    -0
      packages/AjaxMin.5.8.5172.27710/tools/net40/AjaxMin.targets
  62. BIN
      packages/AjaxMin.5.8.5172.27710/tools/net40/AjaxMinTask.dll
  63. BIN
      packages/AjaxMin.5.9.5229.26438/AjaxMin.5.9.5229.26438.nupkg
  64. BIN
      packages/AjaxMin.5.9.5229.26438/lib/net20/AjaxMin.dll
  65. BIN
      packages/AjaxMin.5.9.5229.26438/lib/net35/AjaxMin.dll
  66. BIN
      packages/AjaxMin.5.9.5229.26438/lib/net40/AjaxMin.dll
  67. BIN
      packages/AjaxMin.5.9.5229.26438/tools/net35/AjaxMin.dll
  68. +38
    -0
      packages/AjaxMin.5.9.5229.26438/tools/net35/AjaxMin.targets
  69. BIN
      packages/AjaxMin.5.9.5229.26438/tools/net35/AjaxMinTask.dll
  70. BIN
      packages/AjaxMin.5.9.5229.26438/tools/net40/AjaxMin.dll
  71. +38
    -0
      packages/AjaxMin.5.9.5229.26438/tools/net40/AjaxMin.targets
  72. BIN
      packages/AjaxMin.5.9.5229.26438/tools/net40/AjaxMinTask.dll
  73. BIN
      packages/DotNetOpenAuth.AspNet.4.1.4.12333/DotNetOpenAuth.AspNet.4.1.4.12333.nupkg
  74. BIN
      packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net40-full/DotNetOpenAuth.AspNet.dll
  75. +1740
    -0
      packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net40-full/DotNetOpenAuth.AspNet.xml
  76. BIN
      packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net45-full/DotNetOpenAuth.AspNet.dll
  77. +1740
    -0
      packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net45-full/DotNetOpenAuth.AspNet.xml
  78. BIN
      packages/DotNetOpenAuth.Core.4.1.4.12333/DotNetOpenAuth.Core.4.1.4.12333.nupkg
  79. BIN
      packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.Core.dll
  80. +10192
    -0
      packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.Core.xml
  81. BIN
      packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.Core.dll
  82. +10192
    -0
      packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.Core.xml
  83. BIN
      packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333.nupkg
  84. BIN
      packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.Consumer.dll
  85. +397
    -0
      packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.Consumer.xml
  86. BIN
      packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.Consumer.dll
  87. +397
    -0
      packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.Consumer.xml
  88. BIN
      packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/DotNetOpenAuth.OAuth.Core.4.1.4.12333.nupkg
  89. BIN
      packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.dll
  90. +1858
    -0
      packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.xml
  91. BIN
      packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.dll
  92. +1858
    -0
      packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.xml
  93. BIN
      packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/DotNetOpenAuth.OpenId.Core.4.1.4.12333.nupkg
  94. BIN
      packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.dll
  95. +10788
    -0
      packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.xml
  96. BIN
      packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OpenId.dll
  97. +10788
    -0
      packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OpenId.xml
  98. BIN
      packages/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333.nupkg
  99. BIN
      packages/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.RelyingParty.dll
  100. +3568
    -0
      packages/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.RelyingParty.xml

+ 15
- 0
Sevomin.News/404.cshtml View File

@ -0,0 +1,15 @@
@{
Page.Title = "The page does not exist";
Layout = "~/themes/" + Blog.Theme + "/_Layout.cshtml";
Response.StatusCode = 404;
}
<article>
<h1>The page doesn't exist</h1>
<p>Sorry about that. </p>
<p>
<a href="~/">Go to the front page</a>
</p>
</article>

+ 23
- 0
Sevomin.News/Global.asax View File

@ -0,0 +1,23 @@
<%@ Application Language="C#" %>
<script RunAt="server">
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "authenticated")
{
HttpCookie cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
return cookie.Value;
}
return base.GetVaryByCustomString(context, arg);
}
public void Application_BeginRequest(object sender, EventArgs e)
{
Context.Items["IIS_WasUrlRewritten"] = "false";
}
</script>

+ 59
- 0
Sevomin.News/Index.cshtml View File

@ -0,0 +1,59 @@
@using System.Web.Caching;
@{
Page.Title = Blog.Title;
Layout = "~/themes/" + Blog.Theme + "/_Layout.cshtml";
DateTime lastModified = DateTime.MinValue;
if (string.IsNullOrEmpty(Blog.CurrentSlug))
{
Page.ShowPaging = true;
var posts = Blog.GetPosts(Blog.PostsPerPage);
foreach (var post in posts)
{
@RenderPage("~/themes/" + Blog.Theme + "/Post.cshtml", post);
}
if (posts.Any())
{
lastModified = posts.Max(p => p.LastModified);
}
Response.AddCacheItemDependency("posts");
Response.Cache.VaryByParams["page"] = true;
Response.Cache.VaryByParams["category"] = true;
}
else
{
Post post = Blog.IsNewPost ? new Post() : Blog.CurrentPost;
if (Blog.IsNewPost && !User.Identity.IsAuthenticated)
{
FormsAuthentication.RedirectToLoginPage();
}
if (post == null) { throw new HttpException(404, "Post not found"); }
Page.Title = post.Title;
lastModified = post.LastModified;
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/posts/" + post.ID + ".xml")));
@RenderPage("~/themes/" + Blog.Theme + "/Post.cshtml", post)
}
if (!Request.IsLocal)
{
Response.Cache.AppendCacheExtension("max-age=0");
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
Response.Cache.SetVaryByCustom("authenticated");
Response.Cache.VaryByParams["slug"] = true;
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/")));
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/scripts")));
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/css")));
Response.AddCacheDependency(new CacheDependency(Server.MapPath("~/themes/" + Blog.Theme)));
Blog.SetConditionalGetHeaders(lastModified, Context);
}
}

+ 121
- 0
Sevomin.News/Web.config View File

@ -0,0 +1,121 @@
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="blog:theme" value="Sevomin"/>
<add key="blog:name" value="اخبار سومین"/>
<add key="blog:description" value="آخرین اخبار توسعه وب سایت سومین"/>
<add key="blog:image" value="http://www.sevom.in/content/images/logo.png"/>
<add key="blog:postsPerPage" value="12"/>
<add key="blog:daysToComment" value="20"/>
<add key="blog:moderateComments" value="true"/>
<add key="blog:email" value="[email protected]"/>
<add key="PreserveLoginUrl" value="true"/>
<add key="webpages:Enabled" value="true"/>
<add key="webpages:Version" value="3.0.0.0"/>
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5" enableVersionHeader="false" requestValidationMode="2.0"/>
<pages validateRequest="false"/>
<customErrors mode="RemoteOnly" defaultRedirect="~/">
<error statusCode="404" redirect="~/404/"/>
</customErrors>
<authentication mode="Forms">
<forms defaultUrl="~/" loginUrl="~/views/login.cshtml" name="miniblog" timeout="10080">
<credentials passwordFormat="SHA1">
<!-- Password is "demo". Generate your hash password here http://www.stringfunction.com/sha1-hash.html -->
<user name="sevomin" password="b7986da6e43a61189f546cc51a0b37dcad99e079"/>
</credentials>
</forms>
</authentication>
<machineKey decryption="AES" validation="SHA1" decryptionKey="435D9CC99471D1E7C70FFEBA5EC71F28048BF9016605B82CC69B091FD317B294" validationKey="25C5D98CE093E77C2F886A6D8C6DA8FBC77CD764A1BF49E5D30CD123C5E19553"/>
</system.web>
<system.net>
<mailSettings>
<smtp>
<network host="ml01.anaxanet.com" port="25" enableSsl="false"/>
</smtp>
</mailSettings>
</system.net>
<system.webServer>
<urlCompression doDynamicCompression="true" doStaticCompression="true"/>
<handlers>
<add name="CommentHandler" verb="*" type="CommentHandler" path="/comment.ashx"/>
<add name="PostHandler" verb="POST" type="PostHandler" path="/post.ashx"/>
<add name="MetaWebLogHandler" verb="POST,GET" type="MetaWeblogHandler" path="/metaweblog"/>
<add name="FeedHandler" verb="GET" type="FeedHandler" path="/feed/*"/>
<add name="CssHandler" verb="GET" type="MinifyHandler" path="*.css"/>
<add name="JsHandler" verb="GET" type="MinifyHandler" path="*.js"/>
</handlers>
<httpErrors>
<remove statusCode="404"/>
<error statusCode="404" responseMode="ExecuteURL" path="/404.cshtml"/>
</httpErrors>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365:00:00"/>
</staticContent>
<security>
<requestFiltering allowDoubleEscaping="true">
<fileExtensions>
<remove fileExtension=".cshtml"/>
<add fileExtension=".cshtml" allowed="true"/>
</fileExtensions>
</requestFiltering>
</security>
<defaultDocument>
<files>
<remove value="index.cshtml"/>
<add value="index.cshtml"/>
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
<match url="*"/>
<conditions>
<add input="{CACHE_URL}" pattern="*://www.*"/>
</conditions>
<action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent"/>
</rule>
<rule name="BlogEngine slug" stopProcessing="true">
<match url="^post/(.*)\.aspx" ignoreCase="true"/>
<action type="Redirect" redirectType="Permanent" url="/post/{R:1}"/>
</rule>
<rule name="slug" stopProcessing="true">
<match url="^post/(.*)" ignoreCase="true"/>
<action type="Rewrite" url="/?slug={R:1}"/>
</rule>
<rule name="paging" stopProcessing="true">
<match url="^(page/)([\d]{0,})" ignoreCase="true"/>
<action type="Rewrite" url="/?page={R:2}"/>
</rule>
<rule name="category" stopProcessing="true">
<match url="^category/([^/]+)(/page/)?([\d]+)?" ignoreCase="true"/>
<action type="Rewrite" url="/?category={R:1}&amp;page={R:3}"/>
</rule>
<rule name="robots.txt" stopProcessing="true">
<match url="robots.txt"/>
<action type="Rewrite" url="views/robots/robots.cshtml"/>
</rule>
<rule name="sitemap" stopProcessing="true">
<match url="sitemap.xml"/>
<action type="Rewrite" url="views/robots/sitemap.cshtml"/>
</rule>
<rule name="fingerprint" stopProcessing="true">
<match url="(.*)(v-[0-9]+/)([\S]+)"/>
<action type="Rewrite" url="{R:1}/{R:3}"/>
</rule>
</rules>
<outboundRules>
<rule name="Remove ETag">
<match serverVariable="RESPONSE_ETag" pattern=".+"/>
<action type="Rewrite" value=""/>
</rule>
<rule name="Send correct Vary">
<match serverVariable="RESPONSE_Vary" pattern=".+"/>
<action type="Rewrite" value="Accept-Encoding, If-Modified-Since"/>
</rule>
</outboundRules>
</rewrite>
</system.webServer>
</configuration>

+ 212
- 0
Sevomin.News/app_code/code/Blog.cs View File

@ -0,0 +1,212 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Caching;
using System.Web.Hosting;
public static class Blog
{
static Blog()
{
Theme = ConfigurationManager.AppSettings.Get("blog:theme");
Title = ConfigurationManager.AppSettings.Get("blog:name");
Description = ConfigurationManager.AppSettings.Get("blog:description");
PostsPerPage = int.Parse(ConfigurationManager.AppSettings.Get("blog:postsPerPage"));
DaysToComment = int.Parse(ConfigurationManager.AppSettings.Get("blog:daysToComment"));
Image = ConfigurationManager.AppSettings.Get("blog:image");
ModerateComments = bool.Parse(ConfigurationManager.AppSettings.Get("blog:moderateComments"));
}
public static string Title { get; private set; }
public static string Description { get; private set; }
public static string Theme { get; private set; }
public static string Image { get; private set; }
public static int PostsPerPage { get; private set; }
public static int DaysToComment { get; private set; }
public static bool ModerateComments { get; private set; }
public static int UniqueId
{
get { return FingerPrint("/web.config").GetHashCode(); }
}
public static string CurrentSlug
{
get { return (HttpContext.Current.Request.QueryString["slug"] ?? string.Empty).Trim().ToLowerInvariant(); }
}
public static string CurrentCategory
{
get { return (HttpContext.Current.Request.QueryString["category"] ?? string.Empty).Trim().ToLowerInvariant(); }
}
public static bool IsNewPost
{
get { return HttpContext.Current.Request.RawUrl.Trim('/') == "post/new"; }
}
public static Post CurrentPost
{
get
{
if (HttpContext.Current.Items["currentpost"] == null && !string.IsNullOrEmpty(CurrentSlug))
{
var post = Storage.GetAllPosts().FirstOrDefault(p => p.Slug == CurrentSlug);
if (post != null && (post.IsPublished || HttpContext.Current.User.Identity.IsAuthenticated))
HttpContext.Current.Items["currentpost"] = Storage.GetAllPosts().FirstOrDefault(p => p.Slug == CurrentSlug);
}
return HttpContext.Current.Items["currentpost"] as Post;
}
}
public static string GetNextPage()
{
if (!string.IsNullOrEmpty(CurrentSlug))
{
var current = Storage.GetAllPosts().IndexOf(CurrentPost);
if (current > 0)
return Storage.GetAllPosts()[current - 1].Url.ToString();
}
else if (CurrentPage > 1)
{
return GetPagingUrl(-1);
}
return null;
}
public static string GetPrevPage()
{
if (!string.IsNullOrEmpty(CurrentSlug))
{
var current = Storage.GetAllPosts().IndexOf(CurrentPost);
if (current > -1)
return Storage.GetAllPosts()[current + 1].Url.ToString();
}
else
{
return GetPagingUrl(1);
}
return null;
}
public static int CurrentPage
{
get
{
int page = 0;
if (int.TryParse(HttpContext.Current.Request.QueryString["page"], out page))
return page;
return 1;
}
}
public static IEnumerable<Post> GetPosts(int postsPerPage = 0)
{
var posts = from p in Storage.GetAllPosts()
where (p.IsPublished && p.PubDate <= DateTime.UtcNow) || HttpContext.Current.User.Identity.IsAuthenticated
select p;
string category = HttpContext.Current.Request.QueryString["category"];
if (!string.IsNullOrEmpty(category))
{
posts = posts.Where(p => p.Categories.Any(c => string.Equals(c, category, StringComparison.OrdinalIgnoreCase)));
}
if (postsPerPage > 0)
{
posts = posts.Skip(postsPerPage * (CurrentPage - 1)).Take(postsPerPage);
}
return posts;
}
public static bool MatchesUniqueId(HttpContext context)
{
int token;
return int.TryParse(context.Request.Form["token"], out token) && token == Blog.UniqueId;
}
public static string SaveFileToDisk(byte[] bytes, string extension)
{
string relative = "~/posts/files/" + Guid.NewGuid() + "." + extension.Trim('.');
string file = HostingEnvironment.MapPath(relative);
File.WriteAllBytes(file, bytes);
var cruncher = new ImageCruncher.Cruncher();
cruncher.CrunchImages(file);
return VirtualPathUtility.ToAbsolute(relative);
}
public static string GetPagingUrl(int move)
{
string url = "/page/{0}/";
string category = HttpContext.Current.Request.QueryString["category"];
if (!string.IsNullOrEmpty(category))
{
url = "/category/" + HttpUtility.UrlEncode(category.ToLowerInvariant()) + "/" + url;
}
string relative = string.Format("~" + url, Blog.CurrentPage + move);
return VirtualPathUtility.ToAbsolute(relative);
}
public static string FingerPrint(string rootRelativePath, string cdnPath = "")
{
if (!string.IsNullOrEmpty(cdnPath) && !HttpContext.Current.IsDebuggingEnabled)
{
return cdnPath;
}
if (HttpRuntime.Cache[rootRelativePath] == null)
{
string relative = VirtualPathUtility.ToAbsolute("~" + rootRelativePath);
string absolute = HostingEnvironment.MapPath(relative);
if (!File.Exists(absolute))
{
throw new FileNotFoundException("File not found", absolute);
}
DateTime date = File.GetLastWriteTime(absolute);
int index = relative.LastIndexOf('/');
string result = relative.Insert(index, "/v-" + date.Ticks);
HttpRuntime.Cache.Insert(rootRelativePath, result, new CacheDependency(absolute));
}
return HttpRuntime.Cache[rootRelativePath] as string;
}
public static void SetConditionalGetHeaders(DateTime lastModified, HttpContextBase context)
{
HttpResponseBase response = context.Response;
HttpRequestBase request = context.Request;
lastModified = new DateTime(lastModified.Year, lastModified.Month, lastModified.Day, lastModified.Hour, lastModified.Minute, lastModified.Second);
string incomingDate = request.Headers["If-Modified-Since"];
response.Cache.SetLastModified(lastModified);
DateTime testDate = DateTime.MinValue;
if (DateTime.TryParse(incomingDate, out testDate) && testDate == lastModified)
{
response.ClearContent();
response.StatusCode = (int)System.Net.HttpStatusCode.NotModified;
response.SuppressContent = true;
}
}
}

+ 118
- 0
Sevomin.News/app_code/code/Comment.cs View File

@ -0,0 +1,118 @@
using System;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Web.Security;
public class Comment
{
private static readonly Regex _linkRegex = new Regex("((http://|https://|www\\.)([A-Z0-9.\\-]{1,})\\.[0-9A-Z?;~&%\\(\\)#,=\\-_\\./\\+]{2,}[0-9A-Z?~&%#=\\-_/\\+])", RegexOptions.Compiled | RegexOptions.IgnoreCase);
private const string Link = "<a href=\"{0}{1}\" rel=\"nofollow\">{2}</a>";
public Comment()
{
ID = Guid.NewGuid().ToString();
PubDate = DateTime.UtcNow;
}
public string ID { get; set; }
public string Author { get; set; }
public string Email { get; set; }
public string Website { get; set; }
public string Content { get; set; }
public DateTime PubDate { get; set; }
public string Ip { get; set; }
public string UserAgent { get; set; }
public bool IsAdmin { get; set; }
public bool IsApproved { get; set; }
public string GravatarUrl(int size)
{
var hash = FormsAuthentication.HashPasswordForStoringInConfigFile(Email.ToLowerInvariant(), "MD5").ToLower();
return string.Format("http://gravatar.com/avatar/{0}?s={1}&d=mm", hash, size);
}
public string ContentWithLinks()
{
return _linkRegex.Replace(Content, new MatchEvaluator(Evaluator));
}
private static string Evaluator(Match match)
{
var info = CultureInfo.InvariantCulture;
return string.Format(info, Link, !match.Value.Contains("://") ? "http://" : string.Empty, match.Value, ShortenUrl(match.Value, 50));
}
private static string ShortenUrl(string url, int max)
{
if (url.Length <= max)
{
return url;
}
// Remove the protocal
var startIndex = url.IndexOf("://");
if (startIndex > -1)
{
url = url.Substring(startIndex + 3);
}
if (url.Length <= max)
{
return url;
}
// Compress folder structure
var firstIndex = url.IndexOf("/") + 1;
var lastIndex = url.LastIndexOf("/");
if (firstIndex < lastIndex)
{
url = url.Remove(firstIndex, lastIndex - firstIndex);
url = url.Insert(firstIndex, "...");
}
if (url.Length <= max)
{
return url;
}
// Remove URL parameters
var queryIndex = url.IndexOf("?");
if (queryIndex > -1)
{
url = url.Substring(0, queryIndex);
}
if (url.Length <= max)
{
return url;
}
// Remove URL fragment
var fragmentIndex = url.IndexOf("#");
if (fragmentIndex > -1)
{
url = url.Substring(0, fragmentIndex);
}
if (url.Length <= max)
{
return url;
}
// Compress page
firstIndex = url.LastIndexOf("/") + 1;
lastIndex = url.LastIndexOf(".");
if (lastIndex - firstIndex > 10)
{
var page = url.Substring(firstIndex, lastIndex - firstIndex);
var length = url.Length - max + 3;
if (page.Length > length)
{
url = url.Replace(page, string.Format("...{0}", page.Substring(length)));
}
}
return url;
}
}

+ 76
- 0
Sevomin.News/app_code/code/Post.cs View File

@ -0,0 +1,76 @@
using CookComputing.XmlRpc;
using System;
using System.Linq;
using System.Collections.Generic;
using System.Web;
[XmlRpcMissingMapping(MappingAction.Ignore)]
public class Post
{
public Post()
{
ID = Guid.NewGuid().ToString();
Title = "My new post";
Author = HttpContext.Current.User.Identity.Name;
Content = "the content";
PubDate = DateTime.UtcNow;
LastModified = DateTime.UtcNow;
Categories = new string[0];
Comments = new List<Comment>();
IsPublished = true;
}
[XmlRpcMember("postid")]
public string ID { get; set; }
[XmlRpcMember("title")]
public string Title { get; set; }
[XmlRpcMember("author")]
public string Author { get; set; }
[XmlRpcMember("wp_slug")]
public string Slug { get; set; }
[XmlRpcMember("description")]
public string Content { get; set; }
[XmlRpcMember("dateCreated")]
public DateTime PubDate { get; set; }
[XmlRpcMember("dateModified")]
public DateTime LastModified { get; set; }
public bool IsPublished { get; set; }
[XmlRpcMember("categories")]
public string[] Categories { get; set; }
public List<Comment> Comments { get; private set; }
public Uri AbsoluteUrl
{
get
{
Uri requestUrl = HttpContext.Current.Request.Url;
return new Uri(requestUrl.Scheme + "://" + requestUrl.Authority + Url, UriKind.Absolute);
}
}
public Uri Url
{
get
{
return new Uri(VirtualPathUtility.ToAbsolute("~/post/" + Slug), UriKind.Relative);
}
}
public bool AreCommentsOpen(HttpContextBase context)
{
return PubDate > DateTime.UtcNow.AddDays(-Blog.DaysToComment) || context.User.Identity.IsAuthenticated;
}
public int CountApprovedComments(HttpContextBase context)
{
return (Blog.ModerateComments && !context.User.Identity.IsAuthenticated) ? this.Comments.Count(c => c.IsApproved) : this.Comments.Count;
}
}

+ 178
- 0
Sevomin.News/app_code/code/Storage.cs View File

@ -0,0 +1,178 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.Hosting;
using System.Xml.Linq;
using System.Xml.XPath;
public static class Storage
{
private static string _folder = HostingEnvironment.MapPath("~/posts/");
public static List<Post> GetAllPosts()
{
if (HttpRuntime.Cache["posts"] == null)
LoadPosts();
if (HttpRuntime.Cache["posts"] != null)
{
return (List<Post>)HttpRuntime.Cache["posts"];
}
return new List<Post>();
}
public static void Save(Post post)
{
string file = Path.Combine(_folder, post.ID + ".xml");
post.LastModified = DateTime.UtcNow;
XDocument doc = new XDocument(
new XElement("post",
new XElement("title", post.Title),
new XElement("slug", post.Slug),
new XElement("author", post.Author),
new XElement("pubDate", post.PubDate.ToString("yyyy-MM-dd HH:mm:ss")),
new XElement("lastModified", post.LastModified.ToString("yyyy-MM-dd HH:mm:ss")),
new XElement("content", post.Content),
new XElement("ispublished", post.IsPublished),
new XElement("categories", string.Empty),
new XElement("comments", string.Empty)
));
XElement categories = doc.XPathSelectElement("post/categories");
foreach (string category in post.Categories)
{
categories.Add(new XElement("category", category));
}
XElement comments = doc.XPathSelectElement("post/comments");
foreach (Comment comment in post.Comments)
{
comments.Add(
new XElement("comment",
new XElement("author", comment.Author),
new XElement("email", comment.Email),
new XElement("website", comment.Website),
new XElement("ip", comment.Ip),
new XElement("userAgent", comment.UserAgent),
new XElement("date", comment.PubDate.ToString("yyyy-MM-dd HH:m:ss")),
new XElement("content", comment.Content),
new XAttribute("isAdmin", comment.IsAdmin),
new XAttribute("isApproved", comment.IsApproved),
new XAttribute("id", comment.ID)
));
}
if (!File.Exists(file)) // New post
{
var posts = GetAllPosts();
posts.Insert(0, post);
posts.Sort((p1, p2) => p2.PubDate.CompareTo(p1.PubDate));
HttpRuntime.Cache.Insert("posts", posts);
}
doc.Save(file);
}
public static void Delete(Post post)
{
var posts = GetAllPosts();
string file = Path.Combine(_folder, post.ID + ".xml");
File.Delete(file);
posts.Remove(post);
}
private static void LoadPosts()
{
if (!Directory.Exists(_folder))
Directory.CreateDirectory(_folder);
List<Post> list = new List<Post>();
foreach (string file in Directory.GetFiles(_folder, "*.xml", SearchOption.TopDirectoryOnly))
{
XElement doc = XElement.Load(file);
Post post = new Post()
{
ID = Path.GetFileNameWithoutExtension(file),
Title = ReadValue(doc, "title"),
Author = ReadValue(doc, "author"),
Content = ReadValue(doc, "content"),
Slug = ReadValue(doc, "slug").ToLowerInvariant(),
PubDate = DateTime.Parse(ReadValue(doc, "pubDate")),
LastModified = DateTime.Parse(ReadValue(doc, "lastModified", DateTime.Now.ToString())),
IsPublished = bool.Parse(ReadValue(doc, "ispublished", "true")),
};
LoadCategories(post, doc);
LoadComments(post, doc);
list.Add(post);
}
if (list.Count > 0)
{
list.Sort((p1, p2) => p2.PubDate.CompareTo(p1.PubDate));
HttpRuntime.Cache.Insert("posts", list);
}
}
private static void LoadCategories(Post post, XElement doc)
{
XElement categories = doc.Element("categories");
if (categories == null)
return;
List<string> list = new List<string>();
foreach (var node in categories.Elements("category"))
{
list.Add(node.Value);
}
post.Categories = list.ToArray();
}
private static void LoadComments(Post post, XElement doc)
{
var comments = doc.Element("comments");
if (comments == null)
return;
foreach (var node in comments.Elements("comment"))
{
Comment comment = new Comment()
{
ID = ReadAttribute(node, "id"),
Author = ReadValue(node, "author"),
Email = ReadValue(node, "email"),
Website = ReadValue(node, "website"),
Ip = ReadValue(node, "ip"),
UserAgent = ReadValue(node, "userAgent"),
IsAdmin = bool.Parse(ReadAttribute(node, "isAdmin", "false")),
IsApproved = bool.Parse(ReadAttribute(node, "isApproved", "true")),
Content = ReadValue(node, "content").Replace("\n", "<br />"),
PubDate = DateTime.Parse(ReadValue(node, "date", "2000-01-01")),
};
post.Comments.Add(comment);
}
}
private static string ReadValue(XElement doc, XName name, string defaultValue = "")
{
if (doc.Element(name) != null)
return doc.Element(name).Value;
return defaultValue;
}
private static string ReadAttribute(XElement element, XName name, string defaultValue = "")
{
if (element.Attribute(name) != null)
return element.Attribute(name).Value;
return defaultValue;
}
}

+ 187
- 0
Sevomin.News/app_code/handlers/CommentHandler.cs View File

@ -0,0 +1,187 @@
using System;
using System.Configuration;
using System.Linq;
using System.Net.Mail;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.WebPages;
public class CommentHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Post post = Storage.GetAllPosts().SingleOrDefault(p => p.ID == context.Request["postId"]);
if (post == null)
throw new HttpException(404, "The post does not exist");
string mode = context.Request["mode"];
if (mode == "save" && context.Request.HttpMethod == "POST" && post.AreCommentsOpen(new HttpContextWrapper(context)) && Blog.MatchesUniqueId(context))
{
Save(context, post);
}
else if (mode == "delete")
{
Delete(context, post);
}
else if (mode == "approve")
{
Approve(context, post);
}
}
private static void Save(HttpContext context, Post post)
{
string name = context.Request.Form["name"];
string email = context.Request.Form["email"];
string website = context.Request.Form["website"];
string content = context.Request.Form["content"];
Validate(name, email, content);
Comment comment = new Comment()
{
Author = name.Trim(),
Email = email.Trim(),
Website = GetUrl(website),
Ip = context.Request.UserHostAddress,
UserAgent = context.Request.UserAgent,
IsAdmin = context.User.Identity.IsAuthenticated,
Content = HttpUtility.HtmlEncode(content.Trim()).Replace("\n", "<br />"),
IsApproved = !Blog.ModerateComments,
};
post.Comments.Add(comment);
Storage.Save(post);
if (!context.User.Identity.IsAuthenticated)
System.Threading.ThreadPool.QueueUserWorkItem((s) => SendEmail(comment, post, context.Request));
RenderComment(context, comment);
}
private static void RenderComment(HttpContext context, Comment comment)
{
var page = (WebPage)WebPageBase.CreateInstanceFromVirtualPath("~/themes/" + Blog.Theme + "/comment.cshtml");
page.Context = new HttpContextWrapper(context);
page.ExecutePageHierarchy(new WebPageContext(page.Context, page: null, model: comment), context.Response.Output);
}
private static void SendEmail(Comment comment, Post post, HttpRequest request)
{
try
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress(comment.Email, comment.Author);
mail.ReplyToList.Add(comment.Email);
mail.To.Add(ConfigurationManager.AppSettings.Get("blog:email"));
mail.Subject = "Blog comment: " + post.Title;
mail.IsBodyHtml = true;
string absoluteUrl = request.Url.Scheme + "://" + request.Url.Authority;
string deleteUrl = absoluteUrl + request.RawUrl + "?postId=" + post.ID + "&commentId=" + comment.ID + "&mode=delete";
string approveUrl = absoluteUrl + request.RawUrl + "?postId=" + post.ID + "&commentId=" + comment.ID + "&mode=approve";
mail.Body = "<div style=\"font: 11pt/1.5 calibri, arial;\">" +
comment.Author + " on <a href=\"" + absoluteUrl + post.Url + "\">" + post.Title + "</a>:<br /><br />" +
comment.Content + "<br /><br />" +
(Blog.ModerateComments ? "<a href=\"" + approveUrl + "\">Approve comment</a> | " : string.Empty) +
"<a href=\"" + deleteUrl + "\">Delete comment</a>" +
"<br /><br /><hr />" +
"Website: " + comment.Website + "<br />" +
"E-mail: " + comment.Email + "<br />" +
"IP-address: " + comment.Ip +
"</div>";
SmtpClient client = new SmtpClient();
client.Send(mail);
}
catch
{ }
}
private static void Validate(string name, string email, string content)
{
bool isName = !string.IsNullOrEmpty(name);
bool isMail = !string.IsNullOrEmpty(email) && Regex.IsMatch(email, @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
bool isContent = !string.IsNullOrEmpty(content);
if (!isName || !isMail || !isContent)
{
if (!isName)
HttpContext.Current.Response.Status = "403 Please enter a valid name";
else if (!isMail)
HttpContext.Current.Response.Status = "403 Please enter a valid e-mail address";
else if (!isContent)
HttpContext.Current.Response.Status = "403 Please enter a valid comment";
HttpContext.Current.Response.End();
}
}
private static string GetUrl(string website)
{
if (!website.Contains("://"))
website = "http://" + website;
Uri url;
if (Uri.TryCreate(website, UriKind.Absolute, out url))
return url.ToString();
return string.Empty;
}
private static void Delete(HttpContext context, Post post)
{
if (!context.User.Identity.IsAuthenticated)
throw new HttpException(403, "No access");
string commentId = context.Request["commentId"];
Comment comment = post.Comments.SingleOrDefault(c => c.ID == commentId);
if (comment != null)
{
post.Comments.Remove(comment);
Storage.Save(post);
}
else
{
throw new HttpException(404, "Comment could not be found");
}
if (context.Request.HttpMethod == "GET")
{
context.Response.Redirect(post.AbsoluteUrl.ToString() + "#comments", true);
}
}
private static void Approve(HttpContext context, Post post)
{
if (!context.User.Identity.IsAuthenticated)
throw new HttpException(403, "No access");
string commentId = context.Request["commentId"];
Comment comment = post.Comments.SingleOrDefault(c => c.ID == commentId);
if (comment != null)
{
comment.IsApproved = true;
Storage.Save(post);
}
else
{
throw new HttpException(404, "Comment could not be found");
}
if (context.Request.HttpMethod == "GET")
{
context.Response.Redirect(post.AbsoluteUrl.ToString() + "#comments", true);
}
}
public bool IsReusable
{
get { return false; }
}
}

+ 59
- 0
Sevomin.News/app_code/handlers/FeedHandler.cs View File

@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.ServiceModel.Syndication;
using System.Web;
using System.Xml;
public class FeedHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
SyndicationFeed feed = new SyndicationFeed()
{
Title = new TextSyndicationContent(Blog.Title),
Description = new TextSyndicationContent("Latest blog posts"),
BaseUri = new Uri(context.Request.Url.Scheme + "://" + context.Request.Url.Authority),
Items = GetItems(),
};
feed.Links.Add(new SyndicationLink(feed.BaseUri));
using (var writer = new XmlTextWriter(context.Response.Output))
{
var formatter = GetFormatter(context, feed);
formatter.WriteTo(writer);
}
context.Response.ContentType = "text/xml";
}
private IEnumerable<SyndicationItem> GetItems()
{
foreach (Post p in Blog.GetPosts(10))
{
var item = new SyndicationItem(p.Title, p.Content, p.AbsoluteUrl, p.AbsoluteUrl.ToString(), p.LastModified);
item.Authors.Add(new SyndicationPerson("", p.Author, ""));
yield return item;
}
}
private SyndicationFeedFormatter GetFormatter(HttpContext context, SyndicationFeed feed)
{
string path = context.Request.Path.Trim('/');
int index = path.LastIndexOf('/');
if (index > -1 && path.Substring(index + 1) == "atom")
{
context.Response.ContentType = "application/atom+xml";
return new Atom10FeedFormatter(feed);
}
context.Response.ContentType = "application/rss+xml";
return new Rss20FeedFormatter(feed);
}
public bool IsReusable
{
get { return false; }
}
}

+ 188
- 0
Sevomin.News/app_code/handlers/MetaWeblogHandler.cs View File

@ -0,0 +1,188 @@
using CookComputing.XmlRpc;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web.Security;
public interface IMetaWeblog
{
#region MetaWeblog API
[XmlRpcMethod("metaWeblog.newPost")]
string AddPost(string blogid, string username, string password, Post post, bool publish);
[XmlRpcMethod("metaWeblog.editPost")]
bool UpdatePost(string postid, string username, string password, Post post, bool publish);
[XmlRpcMethod("metaWeblog.getPost")]
object GetPost(string postid, string username, string password);
[XmlRpcMethod("metaWeblog.getCategories")]
object[] GetCategories(string blogid, string username, string password);
[XmlRpcMethod("metaWeblog.getRecentPosts")]
object[] GetRecentPosts(string blogid, string username, string password, int numberOfPosts);
[XmlRpcMethod("metaWeblog.newMediaObject")]
object NewMediaObject(string blogid, string username, string password, MediaObject mediaObject);
#endregion
#region Blogger API
[XmlRpcMethod("blogger.deletePost")]
[return: XmlRpcReturnValue(Description = "Returns true.")]
bool DeletePost(string key, string postid, string username, string password, bool publish);
[XmlRpcMethod("blogger.getUsersBlogs")]
object[] GetUsersBlogs(string key, string username, string password);
#endregion
}
public class MetaWeblogHandler : XmlRpcService, IMetaWeblog
{
string IMetaWeblog.AddPost(string blogid, string username, string password, Post post, bool publish)
{
ValidateUser(username, password);
post.Slug = PostHandler.CreateSlug(post.Title);
post.IsPublished = publish;
Storage.Save(post);
return post.ID;
}
bool IMetaWeblog.UpdatePost(string postid, string username, string password, Post post, bool publish)
{
ValidateUser(username, password);
Post match = Storage.GetAllPosts().FirstOrDefault(p => p.ID == postid);
if (match != null)
{
match.Title = post.Title;
match.Content = post.Content;
match.Slug = post.Slug;
match.Categories = post.Categories;
match.IsPublished = publish;
match.PubDate = post.PubDate;
Storage.Save(match);
}
return match != null;
}
bool IMetaWeblog.DeletePost(string key, string postid, string username, string password, bool publish)
{
ValidateUser(username, password);
Post post = Storage.GetAllPosts().FirstOrDefault(p => p.ID == postid);
if (post != null)
{
Storage.Delete(post);
}
return post != null;
}
object IMetaWeblog.GetPost(string postid, string username, string password)
{
ValidateUser(username, password);
Post post = Storage.GetAllPosts().FirstOrDefault(p => p.ID == postid);
if (post == null)
throw new XmlRpcFaultException(0, "Post does not exist");
return new
{
description = post.Content,
title = post.Title,
dateCreated = post.PubDate,
wp_slug = post.Slug,
categories = post.Categories.ToArray(),
postid = post.ID
};
}
object[] IMetaWeblog.GetRecentPosts(string blogid, string username, string password, int numberOfPosts)
{
ValidateUser(username, password);
List<object> list = new List<object>();
foreach (var post in Storage.GetAllPosts().Take(numberOfPosts))
{
var info = new
{
description = post.Content,
title = post.Title,
dateCreated = post.PubDate,
wp_slug = post.Slug,
postid = post.ID
};
list.Add(info);
}
return list.ToArray();
}
object[] IMetaWeblog.GetCategories(string blogid, string username, string password)
{
ValidateUser(username, password);
var list = new List<object>();
var categories = Storage.GetAllPosts().SelectMany(p => p.Categories);
foreach (string category in categories.Distinct())
{
list.Add(new { title = category });
}
return list.ToArray();
}
object IMetaWeblog.NewMediaObject(string blogid, string username, string password, MediaObject media)
{
ValidateUser(username, password);
string path = Blog.SaveFileToDisk(media.bits, Path.GetExtension(media.name));
return new { url = path };
}
object[] IMetaWeblog.GetUsersBlogs(string key, string username, string password)
{
ValidateUser(username, password);
return new[]
{
new
{
blogid = "1",
blogName = ConfigurationManager.AppSettings.Get("blog:name"),
url = Context.Request.Url.Scheme + "://" + Context.Request.Url.Authority
}
};
}
private void ValidateUser(string username, string password)
{
if (!FormsAuthentication.Authenticate(username, password))
{
throw new XmlRpcFaultException(0, "User is not valid!");
}
}
}
[XmlRpcMissingMapping(MappingAction.Ignore)]
public struct MediaObject
{
public string name;
public string type;
public byte[] bits;
}

+ 60
- 0
Sevomin.News/app_code/handlers/MinifyHandler.cs View File

@ -0,0 +1,60 @@
using Microsoft.Ajax.Utilities;
using System;
using System.IO;
using System.Web;
using System.Web.Caching;
public class MinifyHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string file = context.Server.MapPath(context.Request.CurrentExecutionFilePath);
string ext = Path.GetExtension(file);
if (context.IsDebuggingEnabled)
{
context.Response.TransmitFile(file);
}
else
{
Minify(context.Response, file, ext);
}
SetHeaders(context.Response, file, ext);
}
private static void SetHeaders(HttpResponse response, string file, string ext)
{
response.ContentType = ext == ".css" ? "text/css" : "text/javascript";
response.Cache.SetLastModified(File.GetLastWriteTimeUtc(file));
response.Cache.SetValidUntilExpires(true);
response.Cache.SetExpires(DateTime.Now.AddYears(1));
response.Cache.SetCacheability(HttpCacheability.ServerAndPrivate);
response.Cache.SetVaryByCustom("Accept-Encoding");
response.AddCacheDependency(new CacheDependency(file));
}
private static void Minify(HttpResponse response, string file, string ext)
{
string content = File.ReadAllText(file);
Minifier minifier = new Minifier();
if (ext == ".css")
{
CssSettings settings = new CssSettings() { CommentMode = CssComment.None };
response.Write(minifier.MinifyStyleSheet(content, settings));
}
else if (ext == ".js")
{
CodeSettings settings = new CodeSettings() { PreserveImportantComments = false };
response.Write(minifier.MinifyJavaScript(content, settings));
}
}
public bool IsReusable
{
get { return false; }
}
}

+ 117
- 0
Sevomin.News/app_code/handlers/PostHandler.cs View File

@ -0,0 +1,117 @@
using System;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
public class PostHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (!context.User.Identity.IsAuthenticated || Blog.MatchesUniqueId(context))
throw new HttpException(403, "No access");
string mode = context.Request.QueryString["mode"];
string id = context.Request.Form["id"];
if (mode == "delete")
{
DeletePost(id);
}
else if (mode == "save")
{
EditPost(id, context.Request.Form["title"], context.Request.Form["content"], bool.Parse(context.Request.Form["isPublished"]), context.Request.Form["categories"].Split(','));
}
}
private void DeletePost(string id)
{
Post post = Storage.GetAllPosts().FirstOrDefault(p => p.ID == id);
if (post == null)
throw new HttpException(404, "The post does not exist");
Storage.Delete(post);
}
private void EditPost(string id, string title, string content, bool isPublished, string[] categories)
{
Post post = Storage.GetAllPosts().FirstOrDefault(p => p.ID == id);
if (post != null)
{
post.Title = title;
post.Content = content;
post.Categories = categories;
}
else
{
post = new Post() { Title = title, Content = content, Slug = CreateSlug(title), Categories = categories };
HttpContext.Current.Response.Write(post.Url);
}
SaveFilesToDisk(post);
post.IsPublished = isPublished;
Storage.Save(post);
}
private void SaveFilesToDisk(Post post)
{
foreach (Match match in Regex.Matches(post.Content, "(src|href)=\"(data:([^\"]+))\""))
{
string extension = Regex.Match(match.Value, "data:([^/]+)/([a-z]+);base64").Groups[2].Value;
byte[] bytes = ConvertToBytes(match.Groups[2].Value);
string path = Blog.SaveFileToDisk(bytes, extension);
string value = string.Format("src=\"{0}\" alt=\"\" /", path);
if (match.Groups[1].Value == "href")
value = string.Format("href=\"{0}\"", path);
post.Content = post.Content.Replace(match.Value, value);
}
}
private byte[] ConvertToBytes(string base64)
{
int index = base64.IndexOf("base64,", StringComparison.Ordinal) + 7;
return Convert.FromBase64String(base64.Substring(index));
}
public static string CreateSlug(string title)
{
title = title.ToLowerInvariant().Replace(" ", "-");
title = RemoveDiacritics(title);
title = Regex.Replace(title, @"([^0-9a-z-])", string.Empty);
if (Storage.GetAllPosts().Any(p => string.Equals(p.Slug, title)))
throw new HttpException(409, "Already in use");
return title.ToLowerInvariant();
}
static string RemoveDiacritics(string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormD);
var stringBuilder = new StringBuilder();
foreach (var c in normalizedString)
{
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}
public bool IsReusable
{
get { return false; }
}
}

+ 94
- 0
Sevomin.News/css/admin.css View File

@ -0,0 +1,94 @@
@media (max-width: 1024px) {
.nav > li {
display: inline-block;
}
.nav > li button, #ispublished {
padding-left: 8px;
padding-right: 8px;
}
}
.admin {
margin-top: 50px;
}
#admin {
font: 12pt arial;
}
#admin .navbar-inner {
min-height: 0;
padding-top: 8px;
}
#admin form {
position: absolute;
top: 8px;
right: 1em;
margin: 0;
}
#admin .nav {
margin-left: 1em;
}
#admin button:focus {
outline: 0;
white-space: nowrap;
}
#ispublished {
display: none;
position: relative;
top: 7px;
left: 10px;
}
#ispublished label {
display: inline;
position: relative;
left: 4px;
font-weight: normal;
}
#admin #tools {
position: relative;
top: 5px;
left: 10px;
margin: 0 1em;
display: none;
}
#admin #tools a {
font-size: 14px;
font-weight: bold;
padding: 0 9px;
}
#admin #tools div:not(:last-child) {
border-right: 1px solid gray;
}
#admin aside {
position: absolute;
top: 4em;
text-align: center;
width: 100%;
display: none;
}
#admin aside .alert {
display: inline-block;
padding: 8px 1em;
}
[contenteditable] {
outline: thin dashed #ccc;
width: 100%;
display: inline-block;
}
[contenteditable] img {
cursor: move;
}

+ 1
- 0
Sevomin.News/css/bootstrap-theme.min.css
File diff suppressed because it is too large
View File


+ 839
- 0
Sevomin.News/css/bootstrap.min.css
File diff suppressed because it is too large
View File


BIN
Sevomin.News/favicon.ico View File

Before After

BIN
Sevomin.News/fonts/BKoodakBold.eot View File


BIN
Sevomin.News/fonts/BKoodakBold.ttf View File


BIN
Sevomin.News/fonts/BKoodakBold.woff View File


BIN
Sevomin.News/fonts/WebYekan.eot View File


+ 612
- 0
Sevomin.News/fonts/WebYekan.svg View File

@ -0,0 +1,612 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg>
<metadata>
Created by FontForge 1853326994 at Sun Oct 13 04:53:50 2013
By U-zoghal-god\zoghal,S-1-5-21-2758449068-1321902542-3097588897-1003
(c) 1392 Rita Development Corpertion(RitaCo)
</metadata>
<defs>
<font id="WebYekan" horiz-adv-x="0" >
<font-face
font-family="Web Yekan"
font-weight="400"
font-stretch="normal"
units-per-em="2048"
panose-1="0 0 4 0 0 0 0 0 0 0"
ascent="1638"
descent="-410"
bbox="-288 -1044 2334 2090"
underline-thickness="100"
underline-position="-850"
unicode-range="U+0020-FEFC"
/>
<missing-glyph horiz-adv-x="1024"
d="M256 128h512v1834h-512v-1834zM128 0v2090h768v-2090h-768z" />
<glyph glyph-name="uFC60" unicode="&#x651;&#x64e;" arabic-form="isolated"
d="M-6 1475v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM383 1755l-315 -168l-28 47l315 176z" />
<glyph glyph-name="uFC61" unicode="&#x651;&#x64f;" arabic-form="isolated"
d="M15 1486v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM322.5 1813q26.5 30 26.5 60t-26.5 52.5t-60.5 22.5q-78 0 -78 -86q0 -79 86 -79q26 0 52.5 30zM396 1868q0 -89 -50 -116
l-227 -121l-28 47l126 70q-78 45 -78 113q0 91 90 125q26 10 33 10q55 0 94.5 -37t39.5 -91z" />
<glyph glyph-name="uE818" unicode="&#x651;&#x64b;"
d="M-26 1516v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM382 1810l-315 -168l-28 47l315 173zM383 1927l-316 -172l-27 50l315 174z" />
<glyph glyph-name="uFC5E" unicode="&#x651;&#x64c;" arabic-form="isolated"
d="M5 1509v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM375 1881.5q27 29.5 27 59.5t-26.5 53t-59.5 23q-79 0 -79 -87q0 -78 85 -78q26 0 53 29.5zM448 1937q0 -91 -49 -117
l-283 -151l-28 48q51 33 63 53q0 34 -37 34t-57 -11l-20 36q56 19 85 19q57 0 72 -78l77 45q-79 45 -79 124.5t87 113.5q29 11 37 11q54 0 93 -37t39 -90z" />
<glyph glyph-name="uFC62" unicode="&#x651;&#x650;" arabic-form="isolated"
d="M-16 1782v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM378 1534l-314 -169l-29 48l315 175z" />
<glyph glyph-name="uFC5F" unicode="&#x651;&#x64d;" arabic-form="isolated"
d="M-6 2039v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM372 1626l-315 -169l-27 48l315 175zM372 1770l-315 -169l-27 47l315 174z" />
<glyph glyph-name="uFEF5" unicode="&#xfedf;&#xfe82;" horiz-adv-x="1054" arabic-form="isolated"
d="M621 1360h-451q-30 0 -88 -7t-80 -24t-59 -98l-164 64q65 139 121 184t231 57q53 4 193 4t297 -3v-177zM935 275q0 -130 -77.5 -202.5t-208.5 -72.5h-169q-351 0 -351 275v879h180v-800q0 -111 30.5 -142.5t140.5 -31.5h158q79 0 106 43q15 24 15 131v800h176v-879z" />
<glyph glyph-name="uFEF6" unicode="&#xfee0;&#xfe82;" horiz-adv-x="1054" arabic-form="final"
d="M555 1426h-451q-134 0 -169 -30q-21 -17 -59 -99l-164 64q66 139 122 184t231 57q52 4 192 4t298 -2v-178zM1084 0q-157 0 -246 118q-90 -118 -243 -118h-165q-351 0 -351 275v879h176v-800q0 -121 34 -154q20 -20 141 -20h154q78 0 105 43q16 26 16 131v800h180v-818
q0 -156 199 -156v-180z" />
<glyph glyph-name="uFEF7" unicode="&#xfedf;&#xfe84;" horiz-adv-x="1054" arabic-form="isolated"
d="M347 1419l-246 -124l-20 40l84 48q-75 38 -75 110q0 49 35 85t70 36h1q36 0 81 -20l-17 -36q-22 13 -54 13q-70 0 -70 -75t67 -75q54 0 122 42zM935 275q0 -130 -77.5 -202.5t-208.5 -72.5h-169q-351 0 -351 275v879h180v-800q0 -111 30.5 -142.5t140.5 -31.5h158
q79 0 106 43q15 24 15 131v800h176v-879z" />
<glyph glyph-name="uFEF8" unicode="&#xfee0;&#xfe84;" horiz-adv-x="1054" arabic-form="final"
d="M311 1412l-247 -124l-20 40l84 48q-75 38 -75 110q0 48 35 84q36 36 72 36t81 -19l-18 -36q-21 13 -54 13q-70 0 -70 -75t68 -75q54 0 121 42zM1084 0q-157 0 -246 118q-90 -118 -243 -118h-165q-351 0 -351 275v879h176v-800q0 -121 34 -154q20 -20 141 -20h154
q78 0 105 43q16 26 16 131v800h180v-818q0 -156 199 -156v-180z" />
<glyph glyph-name="uFEF9" unicode="&#xfedf;&#xfe88;" horiz-adv-x="1054" arabic-form="isolated"
d="M443 -330l-246 -124l-20 40l84 47q-75 39 -75 110q0 50 34 85q36 35 72 35t81 -18l-17 -37q-22 14 -54 14q-70 0 -70 -75t67 -75q54 0 122 41zM935 275q0 -130 -77.5 -202.5t-208.5 -72.5h-169q-351 0 -351 275v879h180v-800q0 -111 30.5 -142.5t140.5 -31.5h158
q79 0 106 43q15 24 15 131v800h176v-879z" />
<glyph glyph-name="uFEFA" unicode="&#xfee0;&#xfe88;" horiz-adv-x="1054" arabic-form="final"
d="M369 -323l-246 -124l-20 40l84 48q-75 39 -75 110q0 49 35 84.5t71 35.5t81 -19l-17 -36q-21 14 -54 14q-70 0 -70 -75t68 -75q53 0 121 41zM1084 0q-157 0 -246 118q-90 -118 -243 -118h-165q-351 0 -351 275v879h176v-800q0 -121 34 -154q20 -20 141 -20h154
q78 0 105 43q16 26 16 131v800h180v-818q0 -156 199 -156v-180z" />
<glyph glyph-name="uFEFB" unicode="&#xfedf;&#xfe8e;" horiz-adv-x="1054" arabic-form="isolated"
d="M935 275q0 -130 -77.5 -202.5t-208.5 -72.5h-169q-351 0 -351 275v879h180v-800q0 -111 30.5 -142.5t140.5 -31.5h158q79 0 106 43q15 24 15 131v800h176v-879z" />
<glyph glyph-name="uFEFC" unicode="&#xfee0;&#xfe8e;" horiz-adv-x="1054" arabic-form="final"
d="M1084 0q-157 0 -246 118q-90 -118 -243 -118h-165q-351 0 -351 275v879h176v-800q0 -121 34 -154q20 -20 141 -20h154q78 0 105 43q16 26 16 131v800h180v-818q0 -156 199 -156v-180z" />
<glyph glyph-name="uFDF2" unicode="&#xfedf;&#xfee0;&#xfeea;" horiz-adv-x="2253" arabic-form="isolated"
d="M501.5 198.5q51.5 44.5 51.5 111.5t-34 100l-145 144q-84 -79 -105 -106q-53 -68 -53 -137.5t47 -113t117 -43.5t121.5 44.5zM2123 275q0 -130 -77.5 -202.5t-209.5 -72.5h-173q-176 0 -262 70q-65 -54 -107.5 -62t-193 -8t-204.5 31q-27 16 -188 165
q-102 -216 -329 -216q-149 0 -246 97t-97 249.5t209 361.5l-51 58l121 122l539 -573q68 -72 92 -87q49 -30 230 -30q87 0 114 48q19 34 19 128v800h180v-836q0 -98 59 -122q40 -16 277 -16q80 0 106 43q15 24 15 131v800h177v-879zM1638 1415q0 -62 -36.5 -106.5t-89 -44.5
t-117.5 56q-46 -56 -104 -56q-117 0 -126 151h45q0 -100 80.5 -100t83.5 100h50q0 -100 82.5 -100t82.5 100h49z" />
<glyph glyph-name="u0622" unicode="&#x622;" horiz-adv-x="669" arabic-form="isolated"
d="M430 0h-175v1154h175v-1154zM676 1253h-451q-31 0 -89 -7t-80 -24t-59 -98l-163 64q65 140 121 184t231 57q53 4 193 4t297 -3v-177z" />
<glyph glyph-name="Hcircumflex" unicode="&#x622;" horiz-adv-x="575" arabic-form="final"
d="M604 0q-182 0 -266 46q-117 64 -117 229v851h180v-772q0 -122 36 -148t167 -26v-180zM725 1258h-450q-11 -2 -79 -8t-90 -25t-58 -96l-166 62q65 141 112 177q74 56 206 60t385 5h140v-175z" />
<glyph glyph-name="u0623" unicode="&#x623;" horiz-adv-x="575" arabic-form="isolated"
d="M419 1389l-246 -123l-20 40l83 47q-75 39 -75 110q0 49 35 85q36 36 71 36h1q36 0 81 -20l-18 -36q-21 14 -53 14q-70 0 -70 -75t67 -75q54 0 121 41zM374 0h-175v1154h175v-1154z" />
<glyph glyph-name="uFE84" unicode="&#x623;" horiz-adv-x="469" arabic-form="final"
d="M345 1382l-246 -124l-20 40l84 48q-75 38 -75 110q0 48 34 84q36 36 72 36t81 -19l-17 -36q-22 13 -54 13q-70 0 -70 -75t67 -75q54 0 122 42zM509 0q-228 0 -321 88q-62 57 -62 187v851h180v-772q0 -125 42 -153q26 -17 161 -21v-180z" />
<glyph glyph-name="u0624" unicode="&#x624;" horiz-adv-x="893" arabic-form="isolated"
d="M621 180v185q0 176 -139 176t-139 -185q0 -122 86 -157q46 -19 192 -19zM803 -23q0 -186 -134 -309t-321 -123h-233l-22 180h227q124 1 212 77t88 198q-218 0 -322 59q-140 77 -140 271t61 283q74 108 252 108q216 0 288 -165q44 -101 44 -353v-226zM453 890l-304 -154
l-25 50l104 57q-93 47 -93 121t41.5 119.5t104.5 45.5q25 0 87 -23l-23 -47q-25 19 -61 19t-64.5 -30t-28.5 -73q0 -81 79 -81q56 0 156 52z" />
<glyph glyph-name="uFE86" unicode="&#x624;" horiz-adv-x="893" arabic-form="final"
d="M615 180v171q0 112 -53 151t-96 39q-137 0 -137 -185q0 -122 90 -157q48 -19 196 -19zM919 0h-119q0 -201 -132.5 -328t-333.5 -127h-233l-22 180h227q125 1 214 77t89 198q-221 0 -325 58q-140 77 -140 271t62 283q75 107 253 107q221 0 295 -174q46 -109 46 -365h119
v-180zM484 890l-304 -154l-25 50l104 57q-90 49 -90 123t39.5 118.5t105.5 44.5q23 0 85 -23l-23 -47q-30 16 -62 16t-60.5 -29t-28.5 -72q0 -81 79 -81q59 0 156 51z" />
<glyph glyph-name="u0625" unicode="&#x625;" horiz-adv-x="575" arabic-form="isolated"
d="M448 -345l-246 -124l-20 40l84 48q-75 38 -75 110q0 49 35 84.5t71 35.5t81 -19l-17 -36q-21 13 -54 13q-70 0 -70 -75t68 -75q53 0 121 42zM374 0h-175v1154h175v-1154z" />
<glyph glyph-name="uFE88" unicode="&#x625;" horiz-adv-x="469" arabic-form="final"
d="M434 -367l-247 -124l-20 40l84 48q-75 38 -75 110q0 49 35 84.5t71 35.5t82 -19l-18 -36q-21 13 -54 13q-70 0 -70 -75t68 -75q54 0 121 42zM509 0q-228 0 -321 88q-62 57 -62 187v851h180v-772q0 -125 42 -153q26 -17 161 -21v-180z" />
<glyph glyph-name="u0626" unicode="&#x626;" horiz-adv-x="1289" arabic-form="isolated"
d="M1225 9v-3q0 -203 -119 -332t-319 -129h-282q-188 1 -307 137t-119 327v372h169v-392q0 -122 84 -195t209 -73h232q99 0 189 72.5t91 164.5q0 92 -60 110t-358 20v308q0 137 90.5 230t227.5 93h216l7 -169h-216q-105 0 -139 -101q-17 -53 -17 -190q262 -5 327 -43
q94 -53 94 -207zM444 778l-304 -154l-25 50l104 56q-90 50 -90 123t39 118t105 45q24 0 86 -22l-23 -48q-30 17 -64 17t-61.5 -30t-27.5 -73q0 -80 76 -80q62 0 160 51z" />
<glyph glyph-name="uFE8A" unicode="&#x626;" horiz-adv-x="1289" arabic-form="final"
d="M1318 0h-167q9 -31 9 -88q0 -159 -116 -263t-278 -104h-280q-215 0 -328.5 147.5t-114.5 370.5v322h180v-391q1 -129 87 -199t218 -70h231q95 0 159 54t65 147q0 46 -53 58q-58 12 -321 16l-16 180h725v-180zM450 781l-304 -152l-25 49l104 57q-92 49 -92 121t41.5 117.5
t91.5 45.5t99 -21l-22 -47q-29 15 -63 15t-62.5 -29t-28.5 -72q0 -81 79 -81q56 0 156 52z" />
<glyph glyph-name="uFE8B" unicode="&#x626;" horiz-adv-x="609" arabic-form="initial"
d="M339 353l-3 212h184v-272q0 -116 -74 -204.5t-187 -88.5h-295v180q283 0 315 11q60 22 60 162zM446 773l-303 -153l-25 49l103 56q-92 52 -92 124.5t41.5 117t104.5 44.5q24 0 85 -22l-22 -48q-26 19 -54 19q-99 0 -99 -101q0 -81 79 -81q57 0 155 51z" />
<glyph glyph-name="uFE8C" unicode="&#x626;" horiz-adv-x="703" arabic-form="medial"
d="M441 780l-303 -154l-25 50l103 57q-92 48 -92 120.5t41.5 119t104.5 46.5q25 0 86 -23l-22 -47q-28 15 -62.5 15t-63 -29.5t-28.5 -71.5q0 -82 79 -82q56 0 156 53zM728 0h-29q-93 0 -128.5 9.5t-95.5 60.5q-90 -70 -169 -70h-326v180q29 0 123 -1l93 -1h12q106 0 139 35
t33 153v199h184v-247q0 -90 33.5 -112t130.5 -26v-180z" />
<glyph glyph-name="u0627" unicode="&#x627;" horiz-adv-x="575" arabic-form="isolated"
d="M374 0h-175v1154h175v-1154z" />
<glyph glyph-name="uFE8E" unicode="&#x627;" horiz-adv-x="469" arabic-form="final"
d="M509 0q-228 0 -321 88q-62 57 -62 187v851h180v-772q0 -125 42 -153q26 -17 161 -21v-180z" />
<glyph glyph-name="u0628" unicode="&#x628;" horiz-adv-x="1606" arabic-form="isolated"
d="M978 -326q0 -52 -37 -89.5t-88 -37.5q-134 0 -134 127v2q0 103 129.5 103t129.5 -105zM1541 293q0 -113 -74 -203t-186 -90h-950q-115 0 -186.5 86.5t-71.5 203.5v275h180v-247q0 -76 28.5 -107t103.5 -31h840q75 0 104.5 31t29.5 107v247h182v-272z" />
<glyph glyph-name="uFE90" unicode="&#x628;" horiz-adv-x="1713" arabic-form="final"
d="M938 -334q0 -53 -36.5 -88.5t-88.5 -35.5q-135 0 -135 124q0 109 130 109t130 -109zM1746 0q-214 0 -286 70q-92 -70 -174 -70h-948q-112 0 -184 89t-73 204v272h180v-247q0 -77 30 -107.5t105 -30.5h837q75 0 103.5 30.5t28.5 107.5v247h183v-247q0 -138 198 -138v-180z
" />
<glyph glyph-name="uFE91" unicode="&#x628;" horiz-adv-x="586" arabic-form="initial"
d="M308 -336q0 -53 -36.5 -88.5t-88.5 -35.5q-134 0 -134 124q0 108 129.5 108t129.5 -108zM339 353l-3 212h184v-272q0 -116 -74 -204.5t-187 -88.5h-295v180q283 0 315 11q60 22 60 162z" />
<glyph glyph-name="uFE92" unicode="&#x628;" horiz-adv-x="703" arabic-form="medial"
d="M314 -326q0 -53 -36 -89t-89 -36q-135 0 -135 125q0 107 130 107t130 -107zM356 354l-2 211h185v-247q0 -88 60 -117q36 -17 140 -21v-180h-56q-153 0 -233 70q-90 -70 -172 -70h-296v180q279 0 314 13q60 21 60 161z" />
<glyph glyph-name="u067E" unicode="&#x67e;" horiz-adv-x="1606" arabic-form="isolated"
d="M951 -598q-1 -98 -121 -98t-120 98q0 109 114 109q52 0 89.5 -28.5t37.5 -77.5v-3zM786 -343q0 -96 -120 -96t-121 96q0 46 34 77.5t82.5 31.5t86.5 -29t38 -80zM1131 -343q-1 -96 -121 -96t-120 96q0 46 34 77.5t83 31.5t86.5 -28.5t37.5 -77.5v-3zM1541 293
q0 -113 -74 -203t-186 -90h-950q-115 0 -186.5 86.5t-71.5 203.5v275h180v-247q0 -76 28.5 -107t103.5 -31h840q75 0 104.5 31t29.5 107v247h182v-272z" />
<glyph glyph-name="uFB57" unicode="&#x67e;" horiz-adv-x="1713" arabic-form="final"
d="M719 -572v4q0 48 31.5 79t81.5 31t88 -30t38 -80q0 -97 -119.5 -97t-119.5 93zM793 -314v-4q0 -90 -119.5 -90t-119.5 94q0 47 32 79t79 32q128 0 128 -111zM899 -318v4q0 47 32 79t79 32q128 0 128 -111q0 -94 -119.5 -94t-119.5 90zM1746 0q-214 0 -286 70
q-92 -70 -174 -70h-948q-112 0 -184 89t-73 204v272h180v-247q0 -77 30 -107.5t105 -30.5h837q75 0 103.5 30.5t28.5 107.5v247h183v-247q0 -138 198 -138v-180z" />
<glyph glyph-name="uFB58" unicode="&#x67e;" horiz-adv-x="703" arabic-form="initial"
d="M419 -568q-1 -98 -121 -98t-120 98q0 110 112 110q52 0 90 -30t39 -80zM254 -314q0 -96 -120 -96t-121 96q0 48 32.5 79.5t80.5 31.5q128 0 128 -111zM599 -314q-1 -96 -121 -96t-120 96q0 48 32.5 79.5t80.5 31.5q128 0 128 -111zM621 293q0 -117 -71 -205t-185 -88
h-385v180h329q75 0 103.5 30.5t28.5 107.5v247h180v-272z" />
<glyph glyph-name="uFB59" unicode="&#x67e;" horiz-adv-x="739" arabic-form="medial"
d="M389 -568q0 -98 -120.5 -98t-120.5 98q0 110 112 110q52 0 90.5 -29.5t38.5 -80.5zM224 -314q0 -96 -121 -96t-121 96q0 48 33 79.5t81 31.5q128 0 128 -111zM569 -314q0 -96 -120.5 -96t-120.5 96q0 48 32.5 79.5t80.5 31.5q128 0 128 -111zM778 0h-63q-53 0 -102 9
q-46 19 -93 61q-86 -70 -171 -70h-388v180h334q75 0 104 30.5t29 107.5v247h181v-247q0 -89 36.5 -113.5t132.5 -24.5v-180z" />
<glyph glyph-name="u062A" unicode="&#x62a;" horiz-adv-x="1606" arabic-form="isolated"
d="M1541 293q0 -113 -74 -203t-186 -90h-950q-115 0 -186.5 86.5t-71.5 203.5v275h180v-247q0 -76 28.5 -107t103.5 -31h840q75 0 104.5 31t29.5 107v247h182v-272zM719 865q0 -46 -33 -77.5t-80 -31.5q-126 0 -126 109q0 98 119.5 98t119.5 -96v-2zM1064 865
q0 -46 -33.5 -77.5t-80.5 -31.5q-125 0 -125 109v2q0 96 119.5 96t119.5 -98z" />
<glyph glyph-name="uFE96" unicode="&#x62a;" horiz-adv-x="1713" arabic-form="final"
d="M1746 0q-214 0 -286 70q-92 -70 -174 -70h-948q-112 0 -184 89t-73 204v272h180v-247q0 -77 30 -107.5t105 -30.5h837q75 0 103.5 30.5t28.5 107.5v247h183v-247q0 -138 198 -138v-180zM766 865q0 -46 -33.5 -76t-79.5 -30q-128 0 -128 106q1 99 121 99t120 -99z
M1113 865q0 -46 -33.5 -76t-80.5 -30q-128 0 -128 106q0 99 121 99t121 -99z" />
<glyph glyph-name="uFE97" unicode="&#x62a;" horiz-adv-x="680" arabic-form="initial"
d="M606 293q0 -117 -72 -205t-185 -88h-385v180h329q75 0 104 30.5t29 107.5v247h180v-272zM123 851v5q1 99 121 99t120 -99q0 -46 -33 -77t-83 -31t-87.5 27.5t-37.5 75.5zM709 856q0 -46 -33.5 -77t-83.5 -31t-87 29t-37 79q0 99 120 99t121 -99z" />
<glyph glyph-name="uFE98" unicode="&#x62a;" horiz-adv-x="739" arabic-form="medial"
d="M778 0h-63q-53 0 -102 9q-46 19 -93 61q-86 -70 -171 -70h-388v180h334q75 0 104 30.5t29 107.5v247h181v-247q0 -89 36.5 -113.5t132.5 -24.5v-180zM380 863q0 -47 -33 -77t-79 -30q-127 0 -127 107q0 100 119.5 100t119.5 -100zM725 863q0 -47 -33 -77t-79 -30
q-127 0 -127 107q0 100 119.5 100t119.5 -100z" />
<glyph glyph-name="u062B" unicode="&#x62b;" horiz-adv-x="1606" arabic-form="isolated"
d="M1541 293q0 -113 -74 -203t-186 -90h-950q-115 0 -186.5 86.5t-71.5 203.5v275h180v-247q0 -76 28.5 -107t103.5 -31h840q75 0 104.5 31t29.5 107v247h182v-272zM491 798v4q0 97 119.5 97t119.5 -99q0 -45 -34 -77t-82 -32t-85.5 29.5t-37.5 77.5zM1076 800
q0 -46 -34 -77.5t-82 -31.5t-86 30t-38 79q0 99 120 99t120 -99zM901 1054q0 -47 -34.5 -77.5t-82.5 -30.5t-86 30t-38 78q0 100 120 100t121 -100z" />
<glyph glyph-name="uFE9A" unicode="&#x62b;" horiz-adv-x="1713" arabic-form="final"
d="M1746 0q-214 0 -286 70q-92 -70 -174 -70h-948q-112 0 -184 89t-73 204v272h180v-247q0 -77 30 -107.5t105 -30.5h837q75 0 103.5 30.5t28.5 107.5v247h183v-247q0 -138 198 -138v-180zM759 800q0 -45 -33.5 -77t-81.5 -32t-86 30t-38 79q0 99 119.5 99t119.5 -97v-2z
M1106 800q0 -46 -34 -78t-83 -32h-1q-48 0 -85.5 30t-37.5 78v2q1 99 121 99t120 -99zM930 1054q0 -47 -34 -77.5t-81 -30.5q-126 0 -126 108q1 100 121 100t120 -100z" />
<glyph glyph-name="uFE9B" unicode="&#x62b;" horiz-adv-x="680" arabic-form="initial"
d="M606 293q0 -117 -72 -205t-185 -88h-385v180h329q75 0 104 30.5t29 107.5v247h180v-272zM358 800q0 -46 -34 -78.5t-82 -32.5t-88 31q-38 31 -38 80q0 99 121 99t121 -99zM704 800q0 -46 -35 -78t-83 -32l-2 -1q-46 0 -84 31t-39 80v2q0 97 121.5 97t121.5 -99zM529 1054
q0 -48 -34 -79t-84 -31t-88 30t-38 80q0 100 122 100t122 -100z" />
<glyph glyph-name="uFE9C" unicode="&#x62b;" horiz-adv-x="739" arabic-form="medial"
d="M778 0h-63q-53 0 -102 9q-46 19 -93 61q-86 -70 -171 -70h-388v180h334q75 0 104 30.5t29 107.5v247h181v-247q0 -89 36.5 -113.5t132.5 -24.5v-180zM428 800q0 -46 -34 -78.5t-82.5 -32.5t-87 31t-38.5 80q0 99 121 99t121 -99zM774 800q0 -46 -34.5 -78.5t-83 -32.5
t-87 31t-38.5 80q0 99 121.5 99t121.5 -99zM599 1054q0 -48 -34 -79t-84 -31t-88 30t-38 80q0 100 122 100t122 -100z" />
<glyph glyph-name="u062C" unicode="&#x62c;" horiz-adv-x="1104" arabic-form="isolated"
d="M815 -336q0 -53 -35.5 -90t-91.5 -37t-95 33t-39 90q0 112 130 112t131 -108zM43 -310v6q0 296 263 442l550 303q-40 75 -118 88t-479 14l-23 176h435q376 0 377 -371l-593 -332q-241 -135 -241 -334q0 -145 114 -259t260 -114h525l16 -177h-494q-253 0 -422.5 155.5
t-169.5 402.5z" />
<glyph glyph-name="uFE9E" unicode="&#x62c;" horiz-adv-x="1104" arabic-form="final"
d="M350 547h-19c-22 0 -43 -1 -65 -2l-22 174h434c126 0 215 -26 282 -93c62 -61 97 -149 97 -236c0 -14 -1 -28 -3 -42l-164 -93c34 -69 122 -75 221 -75h38v-180c-135 0 -273 25 -311 126c-10 27 -15 57 -24 85l-353 -195c-116 -64 -240 -166 -240 -338
c0 -110 54 -198 114 -256c64 -63 138 -113 260 -113h525l15 -177h-492c-181 0 -322 64 -423 156c-97 88 -170 223 -170 395v13c3 146 62 287 150 366c34 31 74 54 114 76l551 303c-71 90 -204 106 -357 110h-17c-47 0 -94 -4 -141 -4zM691 -220c77 0 133 -33 133 -106
c0 -74 -60 -127 -131 -127c-74 0 -133 50 -133 122c0 75 56 111 131 111z" />
<glyph glyph-name="uFE9F" unicode="&#x62c;" horiz-adv-x="1031" arabic-form="initial"
d="M349 -323q0 -52 -35.5 -89t-91 -37t-95 33t-39.5 90q0 112 130.5 112t130.5 -109zM996 348l-412 -235q-145 -83 -304 -103q-79 -10 -323 -10v180q349 0 493 68q70 32 350 191q-35 74 -116 94q-35 8 -159 8l-315 2l-25 176h444q367 0 367 -371z" />
<glyph glyph-name="uFEA0" unicode="&#x62c;" horiz-adv-x="1031" arabic-form="medial"
d="M519 -334q-1 -50 -37 -88t-90 -38t-94 33t-40 89q0 110 130 110t131 -106zM1059 0q-254 6 -281 118q-12 45 -23 93q-259 -155 -371 -183t-427 -28v180q348 0 493 68q30 13 350 191q-35 73 -116 94q-33 8 -159 8l-315 2l-25 176h444q367 0 367 -371l-167 -92
q0 -76 230 -76v-180z" />
<glyph glyph-name="u0686" unicode="&#x686;" horiz-adv-x="1104" arabic-form="isolated"
d="M834 -478q0 -97 -120 -97t-121 97q0 110 112 110q53 0 91 -30t38 -80zM544 -113h6q45 0 82.5 -29.5t38.5 -80.5q-1 -95 -121 -95t-120 95q0 48 32 79t82 31zM39 -310v6q0 297 262 442l550 303q-39 75 -117 88t-479 14l-22 176h433q376 0 377 -371l-593 -332
q-240 -134 -240 -334q0 -146 113.5 -259.5t260.5 -113.5h525l15 -177h-493q-253 0 -422.5 155.5t-169.5 402.5zM892 -113h6q45 0 82.5 -29.5t38.5 -80.5q-1 -95 -121 -95t-120 95q0 48 32 79t82 31z" />
<glyph glyph-name="uFB7B" unicode="&#x686;" horiz-adv-x="1104" arabic-form="final"
d="M826 -478q0 -97 -120 -97t-120 97q0 110 112 110q51 0 89.5 -29.5t38.5 -80.5zM665 -223q0 -95 -120.5 -95t-120.5 95q0 48 32 79t82 31t88.5 -29.5t38.5 -80.5zM519 551q-82 0 -241 -6l-23 174h434q376 0 376 -371l-164 -93q23 -55 114 -70q30 -5 145 -5v-180
q-163 5 -230 42t-81 84q-10 33 -24 85l-352 -195q-240 -133 -240 -334q0 -146 113.5 -259.5t259.5 -113.5h525l15 -177h-492q-253 0 -423 156.5t-170 407.5q0 296 264 442l551 303q-71 110 -357 110zM1011 -223q0 -95 -120.5 -95t-120.5 95q0 48 33 79t82.5 31t87.5 -29.5
t38 -80.5zM278 543l-14 1q14 0 14 -1z" />
<glyph glyph-name="uFB7C" unicode="&#x686;" horiz-adv-x="1031" arabic-form="initial"
d="M503 -568q0 -97 -121 -97t-121 97q0 110 113 110q51 0 90 -29.5t39 -80.5zM339 -314q0 -94 -120.5 -94t-120.5 94q0 48 32 79.5t82.5 31.5t88.5 -29.5t38 -81.5zM683 -314q0 -94 -120 -94t-120 94q0 48 32 79.5t80 31.5q128 0 128 -111zM996 348l-412 -235
q-145 -83 -304 -103q-79 -10 -323 -10v180q349 0 493 68q70 32 350 191q-35 74 -116 94q-35 8 -159 8l-315 2l-25 176h444q367 0 367 -371z" />
<glyph glyph-name="uFB7D" unicode="&#x686;" horiz-adv-x="1031" arabic-form="medial"
d="M525 -568q-1 -98 -121 -98t-120 98q0 108 120 108t121 -108zM360 -314q0 -96 -120 -96t-120 96q0 45 34 77t80 32q126 0 126 -109zM705 -314q-1 -96 -121 -96t-120 96q0 45 34 77t83 32t86.5 -29t37.5 -80zM1059 0q-254 6 -281 118q-12 45 -23 93q-259 -155 -371 -183
t-427 -28v180q348 0 493 68q30 13 350 191q-35 73 -116 94q-33 8 -159 8l-315 2l-25 176h444q367 0 367 -371l-167 -92q0 -76 230 -76v-180z" />
<glyph glyph-name="u062D" unicode="&#x62d;" horiz-adv-x="1104" arabic-form="isolated"
d="M1131 -868h-493q-288 0 -460 203q-133 155 -133 351v39q1 4 5 39q28 247 259 374l551 303q-61 109 -344 109h-56l-196 -4l-25 173h435q370 0 376 -371l-592 -332q-242 -136 -242 -334q0 -143 115 -258t259 -115h525z" />
<glyph glyph-name="uFEA2" unicode="&#x62d;" horiz-adv-x="1104" arabic-form="final"
d="M1151 0q-272 0 -311 126q-8 25 -25 85l-351 -195q-241 -134 -241 -334q0 -145 114.5 -259t260.5 -114h525l15 -177h-494q-286 0 -459 203q-134 157 -134 351v39q1 1 5 39q31 249 259 374l555 303q-38 71 -106 85t-494 17l-25 176h435q370 0 376 -371l-163 -93
q11 -75 258 -75v-180z" />
<glyph glyph-name="uFEA3" unicode="&#x62d;" horiz-adv-x="1031" arabic-form="initial"
d="M996 348l-412 -235q-138 -79 -304 -100q-68 -9 -323 -13v180h144q198 0 367 76q29 14 332 183q-29 67 -122 92q-24 6 -468 12l-25 176h444q365 0 367 -371z" />
<glyph glyph-name="uFEA4" unicode="&#x62d;" horiz-adv-x="1031" arabic-form="medial"
d="M1059 0q-249 0 -281 118q-6 21 -13 50l-10 43q-243 -147 -363 -177t-435 -34v180h144q192 0 367 76q50 22 332 183q-30 69 -122 92q-23 6 -468 12l-25 176h444q361 0 367 -374l-167 -90q0 -75 230 -75v-180z" />
<glyph glyph-name="u062E" unicode="&#x62e;" horiz-adv-x="1104" arabic-form="isolated"
d="M43 -310v6q0 296 263 442l550 303q-40 75 -118 88t-479 14l-23 176h435q376 0 377 -371l-593 -332q-241 -135 -241 -334q0 -145 114 -259t260 -114h525l16 -177h-494q-253 0 -422.5 155.5t-169.5 402.5zM495 1045v4q0 102 131.5 102t131.5 -106q0 -53 -36.5 -89.5
t-88.5 -36.5q-138 0 -138 126z" />
<glyph glyph-name="uFEA6" unicode="&#x62e;" horiz-adv-x="1104" arabic-form="final"
d="M508 551q-83 0 -242 -6l-22 174h434q376 0 376 -371l-164 -93q22 -55 114 -70q30 -5 145 -5v-180q-164 5 -231 42t-80 84q-10 33 -24 85l-353 -195q-240 -133 -240 -334q0 -146 114 -259.5t260 -113.5h525l15 -177h-492q-254 0 -423.5 156.5t-169.5 407.5q0 296 264 442
l551 303q-71 110 -357 110z" />
<glyph glyph-name="uFEA7" unicode="&#x62e;" horiz-adv-x="1031" arabic-form="initial"
d="M996 348l-412 -235q-145 -83 -304 -103q-79 -10 -323 -10v180q349 0 493 68q70 32 350 191q-35 74 -116 94q-35 8 -159 8l-315 2l-25 176h444q367 0 367 -371zM649 1041q0 -51 -37 -88t-88 -37q-136 0 -136 125q0 108 130.5 108t130.5 -108z" />
<glyph glyph-name="uFEA8" unicode="&#x62e;" horiz-adv-x="1031" arabic-form="medial"
d="M1059 0q-254 6 -281 118q-12 45 -23 93q-259 -155 -371 -183t-427 -28v180q348 0 493 68q30 13 350 191q-35 73 -116 94q-33 8 -159 8l-315 2l-25 176h444q367 0 367 -371l-167 -92q0 -76 230 -76v-180zM609 1070v-3q0.0270386 -1.37842 0.0270386 -2.74585
q0 -49.2272 -35.027 -84.2542q-36 -36 -92 -36t-94.5 34.5t-38.5 91.5q0 106 130 106t130 -106z" />
<glyph glyph-name="u062F" unicode="&#x62f;" horiz-adv-x="986" arabic-form="isolated"
d="M860 439q84 -89 84 -200.5t-78 -175t-188 -63.5h-558l-25 180h571q100 0 100 70q0 36 -27 65l-405 431l121 122z" />
<glyph glyph-name="uFEAA" unicode="&#x62f;" horiz-adv-x="1171" arabic-form="final"
d="M1225 0h-82q-102 0 -228 124q-81 -124 -239 -124h-558l-25 180h572q99 0 99 68q0 38 -28 67l-405 431l122 122l541 -573q70 -75 106 -95t125 -20v-180z" />
<glyph glyph-name="u0630" unicode="&#x630;" horiz-adv-x="986" arabic-form="isolated"
d="M859 439q82 -87 82 -199t-75 -176t-190 -64h-558l-25 180h572q99 0 99 70q0 36 -28 65l-405 431l122 122zM590 1169q0 -53 -36 -89.5t-89 -36.5q-136 0 -136 126q0 106 130.5 106t130.5 -106z" />
<glyph glyph-name="uFEAC" unicode="&#x630;" horiz-adv-x="1171" arabic-form="final"
d="M1224 0h-84q-101 0 -225 124q-50 -72 -100.5 -98t-138.5 -26h-561l-25 180h573q98 0 98 68q0 39 -26 67l-406 431l121 122l541 -573q67 -71 105 -93t128 -22v-180zM475 1076q0 -51 -36.5 -87t-88.5 -36q-136 0 -136 123q0 109 130 109t131 -109z" />
<glyph glyph-name="u0631" unicode="&#x631;" horiz-adv-x="870" arabic-form="isolated"
d="M764 31q0 -199 -125.5 -342.5t-321.5 -143.5h-243l-29 185h203q130 0 230 67t101 192v576h185v-534z" />
<glyph glyph-name="uFEAE" unicode="&#x631;" horiz-adv-x="915" arabic-form="final"
d="M753 85v-8q0 -222 -117.5 -377t-337.5 -155h-233l-29 180h248q116 1 201 75t85 189v576h180v-259q0 -122 196 -126v-180q-136 0 -193 85z" />
<glyph glyph-name="u0632" unicode="&#x632;" horiz-adv-x="870" arabic-form="isolated"
d="M761 31q0 -198 -127 -342t-323 -144h-238l-30 185h202q131 0 231 67t100 192v576h185v-534zM491 1054v4q0 105 131.5 105t131.5 -109q0 -53 -36 -89.5t-89 -36.5q-138 0 -138 126z" />
<glyph glyph-name="uFEB0" unicode="&#x632;" horiz-adv-x="915" arabic-form="final"
d="M753 85v-8q0 -222 -117.5 -377t-337.5 -155h-233l-29 180h248q112 1 199 77t87 187v576h180v-259q0 -126 196 -126v-180q-142 2 -193 85zM481 1045v4q0 102 131.5 102t131.5 -106q0 -53 -36 -89.5t-89 -36.5q-138 0 -138 126z" />
<glyph glyph-name="u0698" unicode="&#x698;" horiz-adv-x="922" arabic-form="isolated"
d="M766 31q0 -199 -127 -342.5t-324 -143.5h-239l-28 185h202q130 0 230.5 67t100.5 192v576h185v-534zM604 800q0 -47 -33 -79t-81.5 -32t-87.5 31t-39 80q0 96 120.5 96t120.5 -96zM954 800q0 -48 -33.5 -79.5t-83.5 -31.5t-88.5 30.5t-38.5 80.5q0 96 122 96t122 -96z
M747 977q-33 -33 -83.5 -33t-89 29.5t-38.5 80.5q0 97 122 97t122 -92q0 -49 -33 -82z" />
<glyph glyph-name="uFB8B" unicode="&#x698;" horiz-adv-x="915" arabic-form="final"
d="M753 85v-8q0 -222 -117.5 -377t-337.5 -155h-233l-29 180h248q112 1 199 77t87 187v576h180v-259q0 -126 196 -126v-180q-142 2 -193 85zM573 808v-4q-1 -46 -35 -78t-82 -32t-85 30.5t-37 79.5q0 97 119.5 97t119.5 -93zM920 804q0 -48 -34 -79t-82 -31t-86 31t-39 79
q1 97 121 97t120 -97zM744 1059q0 -48 -33.5 -79t-82.5 -31t-87 31t-38 79q1 97 121 97t120 -97z" />
<glyph glyph-name="u0633" unicode="&#x633;" horiz-adv-x="2253" arabic-form="isolated"
d="M2163 289q-1 -127 -63 -217t-184 -90t-251 122q-87 -122 -212 -122q-98 0 -203 72q0 -215 -118 -362t-328 -147h-274q-195 0 -320 135t-125 331v374h176v-385q0 -124 81.5 -199.5t207.5 -75.5h234q126 0 205 76t79 202v562h180v-267q0 -62 46.5 -103t109.5 -41
q124 0 124 112v299h177v-265q0 -62 45.5 -104t108.5 -42q126 0 126 112v299h178v-276z" />
<glyph glyph-name="uFEB2" unicode="&#x633;" horiz-adv-x="2298" arabic-form="final"
d="M2334 0q-105 2 -141 13q-69 18 -109 83q-80 -114 -218 -114t-243 122q-97 -127 -229 -127q-95 0 -180 77q0 -212 -120 -360t-325 -149h-280q-194 0 -319 135t-125 331v374h180v-382q0 -123 81.5 -200.5t204.5 -77.5h235q126 0 207 76t81 202v562h180v-267q0 -64 45 -104
t109 -40q121 0 121 112v299h180v-265q0 -62 45.5 -104t108.5 -42q123 0 123 112v299h178v-276q0 -62 66 -93q19 -8 144 -16v-180z" />
<glyph glyph-name="uFEB3" unicode="&#x633;" horiz-adv-x="1455" arabic-form="initial"
d="M1390 289q0 -133 -64 -221t-193 -88t-245 121q-103 -119 -222 -119t-242 142q-108 -124 -235 -124h-229v180h216q125 0 125 134v251h177v-265q0 -64 46 -105t111 -41q123 0 123 112v299h175v-265q0 -63 45.5 -104.5t109.5 -41.5q126 0 126 112v299h176v-276z" />
<glyph glyph-name="uFEB4" unicode="&#x633;" horiz-adv-x="1561" arabic-form="medial"
d="M1589 0q-105 2 -140 13q-70 19 -106 83q-83 -116 -209 -116t-246 119q-104 -119 -256 -119t-247 126q-59 -77 -201 -97q-63 -9 -234 -9v180h151q99 0 144 29t45 127v229h176v-267q0 -63 46 -103.5t109 -40.5q123 0 123 112v299h177v-268q0 -60 45.5 -101.5t109.5 -41.5
q125 0 125 112v299h178v-276q0 -63 65 -93q19 -9 145 -16v-180z" />
<glyph glyph-name="u0634" unicode="&#x634;" horiz-adv-x="2253" arabic-form="isolated"
d="M2163 289q-1 -127 -63 -217t-188 -90t-247 122q-97 -122 -201 -122t-214 72q-3 -212 -122 -360t-324 -149h-274q-192 0 -318 136t-127 330v374h176v-382q1 -127 80.5 -202.5t205.5 -75.5h237q123 0 203.5 77.5t80.5 200.5v562h180v-267q0 -62 46.5 -103t109.5 -41
q124 0 124 112v299h177v-265q0 -64 44.5 -105t109.5 -41q126 0 126 112v299h178v-276zM1311 798v4q0 97 119.5 97t119.5 -99q0 -45 -34 -77t-82 -32t-85.5 29.5t-37.5 77.5zM1896 800q0 -46 -34 -77.5t-82 -31.5t-86 30t-38 79q0 99 120 99t120 -99zM1721 1054
q0 -47 -34.5 -77.5t-82.5 -30.5t-86 30t-38 78q0 100 120 100t121 -100z" />
<glyph glyph-name="uFEB6" unicode="&#x634;" horiz-adv-x="2298" arabic-form="final"
d="M2328 0h-64q-125 0 -189 99q-81 -115 -223 -115t-237 122q-96 -126 -225 -126q-98 0 -182 74q-3 -212 -122 -360.5t-325 -148.5h-278q-192 0 -318 136.5t-126 329.5v374h180v-382q0 -126 80 -202t206 -76h234q123 0 206 77.5t83 200.5v562h180v-267q0 -62 43 -103
t105 -41q127 0 127 112v299h180v-265q0 -65 44 -105.5t109 -40.5q124 0 124 112v299h178v-276q0 -109 210 -109v-180zM1508 795q0 -45 -34.5 -76t-83 -31t-86.5 28.5t-38 78.5q0 100 121 100t121 -100zM1856 795q0 -46 -34 -76.5t-83.5 -30.5t-87.5 28.5t-38 78.5
q0 100 121.5 100t121.5 -100zM1649 974.5q-34 -33.5 -84 -33.5t-87.5 29t-37.5 80q0 99 121 99q45 0 83.5 -25.5t38.5 -70.5t-34 -78.5z" />
<glyph glyph-name="uFEB7" unicode="&#x634;" horiz-adv-x="1455" arabic-form="initial"
d="M1390 289q0 -131 -64 -219t-198 -88t-238 122q-104 -120 -226 -120t-238 142q-121 -126 -237 -126h-229v180h216q125 0 125 131v253l177 1v-265q0 -65 44 -105.5t109 -40.5q127 0 127 112v299h175v-265q0 -64 45 -105t110 -41q126 0 126 112v299h176v-276zM761 800
q0 -46 -33.5 -78.5t-81.5 -32.5t-85.5 31t-37.5 80q0 96 119 96t119 -96zM1109 800q0 -48 -33.5 -79.5t-82.5 -31.5t-87 31t-38 80q0 96 120 96t121 -96zM933 1054q-1 -48 -35 -79t-82 -31t-86 31t-39 79q0 97 121 97t121 -97z" />
<glyph glyph-name="uFEB8" unicode="&#x634;" horiz-adv-x="1561" arabic-form="medial"
d="M1589 0h-69l-65 11q-73 13 -116 88q-83 -117 -208 -117t-246 122q-108 -122 -256 -122t-244 127q-69 -78 -202 -99q-63 -10 -233 -10v180h165q93 0 124 23q51 37 51 133v229h176v-267q0 -64 45.5 -104t109.5 -40q123 0 123 112v299h177v-265q0 -64 45.5 -105t109.5 -41
q125 0 125 112v299h178v-276q0 -109 210 -109v-180zM716 851q0 -46 -33.5 -78t-82 -32t-87 30.5t-38.5 79.5q0 98 120.5 98t120.5 -98zM1065 851q0 -47 -33.5 -78.5t-83 -31.5t-87.5 30t-38 80q0 98 121 98t121 -98zM860 1028.5q-33 -33.5 -83.5 -33.5t-89 30.5t-38.5 80.5
q0 97 121 97q46 0 84.5 -24.5t38.5 -70.5t-33 -79.5z" />
<glyph glyph-name="u0635" unicode="&#x635;" horiz-adv-x="2275" arabic-form="isolated"
d="M2050 346q0 54 -32 124t-78 71q-89 0 -194 -124t-157 -237h346q115 0 115 166zM2224 318q0 -147 -85.5 -232.5t-232.5 -85.5h-488q-154 0 -188 95q0 -219 -119 -384.5t-327 -165.5h-279q-194 1 -319 145t-125 341v354h180v-396q1 -101 89 -180t190 -79h250q106 0 192 77
t86 182v576h185v-267q0 -114 168 -118q79 204 189 345q152 194 306 194t245 -134q14 -21 33 -55q6 -20 28 -82t22 -130z" />
<glyph glyph-name="uFEBA" unicode="&#x635;" horiz-adv-x="2253" arabic-form="final"
d="M1926 180q99 0 99 179.5t-107 179.5q-157 0 -339 -359h347zM2284 0h-818q-202 0 -241 95q0 -238 -112 -394t-340 -156h-278q-201 0 -317.5 140.5t-116.5 345.5v354h175v-396q0 -110 81 -187t192 -77h252q105 0 193.5 80t88.5 184v576h181v-267q0 -117 171 -118
q214 541 495 541q184 0 278 -180q42 -81 42 -176.5t-27 -184.5h101v-180z" />
<glyph glyph-name="uFEBB" unicode="&#x635;" horiz-adv-x="1548" arabic-form="initial"
d="M1269 354q0 121 -55 166q-23 19 -54 19q-159 0 -345 -359h353q101 0 101 174zM1449 349q0 -76 -23 -158q-34 -123 -98 -157t-194 -34h-456q-187 0 -257 146q-107 -146 -243 -146h-218v180h200q126 0 126 134v251h178v-231q0 -153 174 -154q208 539 497 539q66 0 140 -41
q174 -98 174 -329z" />
<glyph glyph-name="uFEBC" unicode="&#x635;" horiz-adv-x="1561" arabic-form="medial"
d="M1269 354q0 121 -55 166q-23 19 -54 19q-159 0 -345 -359h353q101 0 101 174zM1589 0h-911q-187 0 -257 146q-107 -146 -243 -146h-218v180h200q126 0 126 134v251h178v-231q0 -153 174 -154q208 539 497 539q72 0 143 -41q171 -100 171 -330q0 -69 -28 -168h168v-180z
" />
<glyph glyph-name="u0636" unicode="&#x636;" horiz-adv-x="2275" arabic-form="isolated"
d="M2053 340q0 60 -31.5 130.5t-81.5 70.5q-89 0 -195 -125.5t-156 -235.5h349q115 0 115 160zM1908 719q143 0 229.5 -125.5t86.5 -274.5t-85 -234t-233 -85h-488q-163 0 -188 95q-2 -217 -122 -383.5t-327 -166.5h-276q-196 0 -320 143.5t-124 342.5v354h180v-396
q0 -103 87.5 -181t191.5 -78h250q99 0 188.5 80.5t89.5 178.5v576h185v-267q0 -118 171 -118q225 539 504 539zM1879 1053q0 -52 -37 -88.5t-88 -36.5q-136 0 -136 125q0 107 130.5 107t130.5 -107z" />
<glyph glyph-name="uFEBE" unicode="&#x636;" horiz-adv-x="2253" arabic-form="final"
d="M1924 180q99 0 99 179.5t-108 179.5q-87 0 -200 -139q-86 -106 -137 -220h346zM2283 0h-819q-213 0 -240 95q-4 -240 -106 -384q-118 -166 -348 -166h-276q-197 0 -316 143t-119 343v354h175v-396q0 -107 82.5 -185.5t189.5 -78.5h253q101 0 191.5 82t90.5 182v576h180
v-267q0 -118 172 -118q222 541 495 541q70 0 146 -43q171 -99 171 -333q0 -86 -26 -165h104v-180zM1863 1039q0 -52 -37 -88t-88 -36q-137 0 -137 124q0 107 131 107t131 -107z" />
<glyph glyph-name="uFEBF" unicode="&#x636;" horiz-adv-x="1548" arabic-form="initial"
d="M1162 539h-2q-90 0 -204 -138q-86 -104 -141 -221h350q101 0 101 179.5t-104 179.5zM1449 351q0 -79 -23 -160q-33 -121 -106 -161q-55 -30 -186 -30h-456q-180 0 -259 146q-105 -146 -243 -146h-216v180h200q126 0 126 131v253l178 1v-231q0 -154 176 -154
q222 539 498 539q71 0 140 -41q171 -103 171 -327zM1023 1068v-4q0 -52 -37 -88.5t-88 -36.5q-134 0 -134 125q0 107 129.5 107t129.5 -103z" />
<glyph glyph-name="uFEC0" unicode="&#x636;" horiz-adv-x="1561" arabic-form="medial"
d="M1162 539h-2q-90 0 -204 -138q-86 -104 -141 -221h350q101 0 101 179.5t-104 179.5zM1589 0h-911q-180 0 -259 146q-105 -146 -243 -146h-216v180h200q126 0 126 131v253l178 1v-231q0 -154 176 -154q222 539 498 539q72 0 140 -41q168 -104 168 -330q0 -85 -27 -168h170
v-180zM1028 1068q0 -52 -37.5 -88t-89.5 -36q-135 0 -135 124q0 108 131 108t131 -108z" />
<glyph glyph-name="u0637" unicode="&#x637;" horiz-adv-x="1054" arabic-form="isolated"
d="M809 369q0 170 -109 170q-89 0 -202 -139q-84 -102 -139 -220h346q44 0 74 48t30 141zM371 511q172 208 311 208t225.5 -126.5t86.5 -266.5t-78.5 -233t-210.5 -93h-624l-36 180h151v974h175v-643z" />
<glyph glyph-name="uFEC2" unicode="&#x637;" horiz-adv-x="1043" arabic-form="final"
d="M809 369q0 170 -109 170q-89 0 -202 -139q-84 -102 -139 -220h346q44 0 74 48t30 141zM1061 0h-985l-36 180h154v974h176v-643q171 208 313 208q57 0 132 -41q174 -97 174 -367q0 -58 -25 -131h97v-180z" />
<glyph glyph-name="uFEC3" unicode="&#x637;" horiz-adv-x="986" arabic-form="initial"
d="M621 536q-87 0 -191 -123t-151 -235h350q104 0 104 163q0 195 -112 195zM629 0h-665v180h154v974h180v-643q172 205 310 205t224 -117t86 -263t-74 -241t-215 -95z" />
<glyph glyph-name="uFEC4" unicode="&#x637;" horiz-adv-x="949" arabic-form="medial"
d="M696 369q0 170 -108 170q-89 0 -203 -139q-85 -104 -140 -220h348q43 0 73 48t30 141zM966 0h-1016v180h131v974h175v-643q172 208 314 208q58 0 133 -41q168 -94 168 -338q0 -95 -23 -160h118v-180z" />
<glyph glyph-name="u0638" unicode="&#x638;" horiz-adv-x="1054" arabic-form="isolated"
d="M703 180q103 0 103 179.5t-107 179.5q-89 0 -192 -123.5t-151 -235.5h347zM703 0h-624l-36 180h151v974h176v-643q166 208 305.5 208t227.5 -121.5t88 -263t-74.5 -238t-213.5 -96.5zM838 1054q0 -53 -36 -89.5t-88 -36.5q-138 0 -138 126q0 109 131 109t131 -109z" />
<glyph glyph-name="uFEC6" unicode="&#x638;" horiz-adv-x="1043" arabic-form="final"
d="M703 180q103 0 103 179.5t-107 179.5q-89 0 -192 -123.5t-151 -235.5h347zM1061 0h-987l-34 180h154v974h176v-643q166 208 310 208q64 0 134 -41q175 -104 175 -304q0 -118 -26 -194h98v-180zM829 1053q0 -52 -37 -88.5t-88 -36.5q-134 0 -134 125q0 107 129.5 107
t129.5 -107z" />
<glyph glyph-name="uFEC7" unicode="&#x638;" horiz-adv-x="986" arabic-form="initial"
d="M621 536q-87 0 -191 -123t-151 -235h350q104 0 104 163q0 195 -112 195zM629 0h-665v180h154v974h180v-643q172 205 310 205t224 -117t86 -263t-74 -241t-215 -95zM744 1036q0 -53 -36 -89.5t-89 -36.5q-136 0 -136 126q1 107 131 107t130 -107z" />
<glyph glyph-name="uFEC8" unicode="&#x638;" horiz-adv-x="949" arabic-form="medial"
d="M590 180q104 0 104 179.5t-108 179.5q-88 0 -203 -138q-92 -109 -139 -221h346zM966 0h-1017l1 180h131v974h175v-643q166 208 312 208q66 0 132 -41q171 -108 171 -302q0 -117 -26 -196h121v-180zM753 1068q0 -53 -36.5 -90t-88.5 -37q-137 0 -137 127q0 106 131 106
t131 -106z" />
<glyph glyph-name="u0639" unicode="&#x639;" horiz-adv-x="1090" arabic-form="isolated"
d="M663 719h7q144 0 305 -135l-85 -138q-153 104 -250 104t-124 -97q-1 -3 -4.5 -16.5t-6.5 -23.5v-30q0 -73 40 -138t109 -65h357l25 -180h-595q-122 0 -187 -95t-65 -241t100 -250.5t264 -104.5h488l24 -177h-472q-247 0 -417 154t-170 399q0 342 379 509q-59 107 -59 216
q0 150 99.5 229.5t237.5 79.5z" />
<glyph glyph-name="uFECA" unicode="&#x639;" horiz-adv-x="1115" arabic-form="final"
d="M860 491q0 25 -30 39t-57 15h-284l199 -209q172 95 172 155zM1026 588q17 -42 17 -58v-18q0 -103 -55.5 -168.5t-173.5 -129.5q80 -34 340 -34v-180q-184 0 -266 15q-152 27 -233 118q-432 -183 -432 -456q0 -138 115 -253t250 -115h525l18 -177h-496q-240 0 -412 163
t-172 402q0 357 472 559l-239 235q58 104 121 228h384q185 0 237 -131z" />
<glyph glyph-name="uFECB" unicode="&#x639;" horiz-adv-x="904" arabic-form="initial"
d="M865 0h-905v180h256q-56 129 -56 231t59.5 182t141.5 103t165 23q144 0 277 -133l-89 -140q-142 108 -241 108q-142 0 -142 -173q0 -75 38 -138t109 -63h358z" />
<glyph glyph-name="uFECC" unicode="&#x639;" horiz-adv-x="831" arabic-form="medial"
d="M586 489q0 24 -28 40t-55 16h-287l197 -207q173 88 173 151zM860 0q-168 0 -248 20t-191 111q-113 -93 -225 -120q-26 -6 -239 -11v180q251 0 316 65l-250 246q58 104 121 228h386q185 0 235 -130q16 -43 16 -69q0 -110 -61 -181q-39 -45 -155 -118q107 -41 295 -41v-180
z" />
<glyph glyph-name="u063A" unicode="&#x63a;" horiz-adv-x="1090" arabic-form="isolated"
d="M1064 -868h-471q-243 0 -415 156t-172 397q0 340 379 509q-61 113 -61 202q0 146 90 236t244 90h2q156 0 314 -138l-86 -138q-147 104 -244 104q-141 0 -141 -162q0 -80 37 -144t111 -64h358l25 -180h-595q-121 0 -186 -96t-65 -222q0 -166 98 -269.5t264 -103.5h489z
M826 1050q0 -53 -36 -89.5t-89 -36.5q-136 0 -136 126q1 108 131 108t130 -108z" />
<glyph glyph-name="uFECE" unicode="&#x63a;" horiz-adv-x="1115" arabic-form="final"
d="M860 494l-9 22q-31 29 -78 29h-284l199 -207q172 91 172 156zM51 -315v6q0 379 472 565l-239 235q58 104 121 228h384q192 0 240 -131q14 -38 14 -67t-9 -91q-14 -98 -219 -216q89 -34 341 -34l-2 -180l-163 5q-227 8 -337 128q-433 -193 -433 -456q0 -141 112 -254.5
t253 -113.5h527l18 -177h-496q-241 0 -412.5 159.5t-171.5 393.5zM838 1045q0 -53 -36 -89.5t-88 -36.5q-138 0 -138 126q0 106 131 106t131 -106z" />
<glyph glyph-name="uFECF" unicode="&#x63a;" horiz-adv-x="904" arabic-form="initial"
d="M865 0h-905v180h256q-58 117 -58 221q0 144 92 232t252 88t301 -135l-89 -140q-148 108 -239 108q-144 0 -144 -169q0 -77 37 -141t110 -64h358zM599 1041q0 -51 -37 -88t-88 -37q-136 0 -136 125q0 108 130 108t131 -108z" />
<glyph glyph-name="uFED0" unicode="&#x63a;" horiz-adv-x="831" arabic-form="medial"
d="M586 489l-10 27q-10 29 -73 29h-287l197 -207q173 90 173 151zM860 0h-13q-145 0 -233 22t-195 109q-143 -119 -276 -128q-34 -3 -82 -3h-106l2 180q254 5 316 65q-161 163 -250 246q66 115 120 228h387q190 0 240 -130q16 -43 16 -64.5t-8 -94.5q-12 -94 -210 -209
q114 -41 292 -41v-180zM503 1068q0 -52 -37 -88t-88 -36q-134 0 -134 124q0 108 129.5 108t129.5 -108z" />
<glyph glyph-name="u0641" unicode="&#x641;" horiz-adv-x="1606" arabic-form="isolated"
d="M1359 483q0 87 -46 147t-129 60q-131 0 -131 -117q0 -88 138 -89q42 0 168 -1zM899 586v6q0 129 87.5 202.5t226.5 73.5t227 -98t92 -242t4 -213q0 -129 -76 -222t-202 -93h-938q-116 0 -186 87t-71 206v272h181v-247q0 -77 28.5 -107.5t103.5 -30.5h860q82 0 103 31
q10 15 24 104q-254 0 -318 23q-146 51 -146 248zM1334 1076q0 -51 -37.5 -87t-88.5 -36q-135 0 -135 123q1 109 131 109t130 -109z" />
<glyph glyph-name="uFED2" unicode="&#x641;" horiz-adv-x="1618" arabic-form="final"
d="M1370 385q0 66 -43.5 113t-103.5 47t-102 -40.5t-42 -94.5q0 -105 182 -191q109 67 109 166zM1230 719h6q138 -1 218 -97t80 -222t-65 -220h174v-180q-314 0 -388 40q-25 -37 -342 -37q-45 -1 -300 -2l-299 -1q-108 0 -174 90t-66 203v272h181v-247q0 -138 133 -138h623
q-101 112 -101 246t93.5 213.5t226.5 79.5zM1359 1054q0 -53 -36 -89.5t-89 -36.5q-136 0 -136 126q0 106 130 106t131 -106z" />
<glyph glyph-name="uFED3" unicode="&#x641;" horiz-adv-x="915" arabic-form="initial"
d="M599 484q-7 199 -169 199q-119 0 -119 -95q0 -76 45 -94q19 -8 112 -9zM800 284v-14q0 -106 -87 -188t-204 -82h-540v180h542q99 0 99 134q-140 1 -317 17q-149 55 -149 245q0 131 82 211.5t201 80.5t208 -57q143 -90 154 -302zM573 1098q0 -52 -37.5 -88.5t-89.5 -36.5
q-132 0 -132 125q0 107 129.5 107t129.5 -107z" />
<glyph glyph-name="uFED4" unicode="&#x641;" horiz-adv-x="856" arabic-form="medial"
d="M564 385q0 60 -44 110t-104 50t-101.5 -39.5t-41.5 -97.5q0 -111 182 -189q109 81 109 166zM904 0q-20 4 -106 5l-178 3q-93 1 -171 40q-83 -48 -512 -48v180h266q-99 111 -99 245t90 214t227 80l2 -1q139 0 222 -92t83 -222t-65 -224h241v-180zM556 1041
q0 -51 -36.5 -88t-88.5 -37q-133 0 -133 125q0 108 129 108t129 -108z" />
<glyph glyph-name="u0642" unicode="&#x642;" horiz-adv-x="1339" arabic-form="isolated"
d="M1079 165v3q0 83 -47.5 142.5t-130.5 59.5q-126 0 -126 -102q0 -108 169 -108q91 0 135 5zM1253 35q0 -39 -9 -143q-14 -164 -141.5 -267.5t-293.5 -103.5h-275q-200 0 -319 135t-119 338v359h170v-366q0 -125 77.5 -211t201.5 -86h250q127 0 205 90t81 219
q-254 0 -320 22q-146 50 -146 247q0 130 86 204t228 74t233 -100t91 -253v-158zM849 741q0 -47 -33.5 -76t-80.5 -29q-126 0 -126 105q0 100 120 100t120 -100zM1196 741q0 -47 -33 -76t-80 -29q-128 0 -128 105q1 100 121 100t120 -100z" />
<glyph glyph-name="uFED6" unicode="&#x642;" horiz-adv-x="1350" arabic-form="final"
d="M1061 180q0 86 -52.5 143.5t-138.5 57.5q-124 0 -124 -91q0 -70 60 -96q32 -14 255 -14zM1385 0h-149q0 -189 -133.5 -322t-322.5 -133h-283q-180 0 -303.5 139.5t-123.5 324.5v376h180v-396q0 -103 95 -181t191 -78h234q116 0 196.5 77t89.5 193q-258 0 -326 25
q-160 59 -160 259q0 131 94 206t241.5 75t240.5 -111t95 -274h144v-180zM809 773q0 -47 -33.5 -77t-80.5 -30q-127 0 -127 107q0 98 120 98t121 -98zM1156 773q0 -47 -33.5 -77t-79.5 -30q-128 0 -128 107q1 98 121 98t120 -98z" />
<glyph glyph-name="uFED7" unicode="&#x642;" horiz-adv-x="915" arabic-form="initial"
d="M599 484q-7 199 -169 199q-119 0 -119 -95q0 -76 45 -94q19 -8 112 -9zM800 284v-14q0 -106 -87 -188t-204 -82h-540v180h542q99 0 99 134q-140 1 -317 17q-149 55 -149 245q0 131 82 211.5t201 80.5t208 -57q143 -90 154 -302zM388 1061q0 -46 -33.5 -76t-80.5 -30
q-125 0 -125 106q0 99 119.5 99t119.5 -99zM733 1061q0 -46 -33.5 -76t-80.5 -30q-125 0 -125 106q0 99 119.5 99t119.5 -99z" />
<glyph glyph-name="uFED8" unicode="&#x642;" horiz-adv-x="856" arabic-form="medial"
d="M564 385q0 60 -44 110t-104 50t-101.5 -39.5t-41.5 -97.5q0 -111 182 -189q109 81 109 166zM904 0q-20 4 -106 5l-178 3q-93 1 -171 40q-83 -48 -512 -48v180h266q-99 111 -99 245t90 214t227 80l2 -1q139 0 222 -92t83 -222t-65 -224h241v-180zM348 1064
q0 -47 -33.5 -76.5t-80.5 -29.5q-125 0 -125 106v2q0 97 119.5 97t119.5 -99zM691 1064q0 -47 -32.5 -76.5t-79.5 -29.5q-126 0 -126 106q0 99 119 99t119 -99z" />
<glyph glyph-name="u0643" unicode="&#x643;" horiz-adv-x="1606" arabic-form="isolated"
d="M1446 450q87 -91 87 -204.5t-82 -179.5t-196 -66h-926q-115 0 -185.5 88t-70.5 205v272h180v-247q0 -76 28.5 -107t103.5 -31h863q95 0 95 84q0 38 -29 67l-471 487l-25 205l656 236l24 -180l-473 -183z" />
<glyph glyph-name="uFEDA" unicode="&#x6a9;" horiz-adv-x="1760" arabic-form="final"
d="M1806 0q-202 0 -297 129q-48 -129 -231 -129h-944q-114 0 -186 88t-72 205v272h180v-247q0 -76 29.5 -107t104.5 -31h879q90 0 90 65q0 35 -44 81l-467 492l-34 202l664 239l25 -180l-469 -175l500 -555l129 -130q33 -34 143 -39v-180z" />
<glyph glyph-name="uFEDB" unicode="&#x6a9;" horiz-adv-x="843" arabic-form="initial"
d="M803 249v-4q0 -245 -275 -245h-562v180h562q71 0 71 84q0 39 -23 62l-467 492l-30 201l660 240l27 -180l-466 -175l369 -413q39 -45 86.5 -119t47.5 -123z" />
<glyph glyph-name="uFEDC" unicode="&#x6a9;" horiz-adv-x="1009" arabic-form="medial"
d="M1064 0q-230 0 -325 131q-53 -131 -248 -131h-534v180h537q71 0 71 93q0 32 -20 53l-469 492l-33 202l662 239l25 -180l-469 -175l497 -550q84 -94 144 -132t162 -42v-180z" />
<glyph glyph-name="u06AF" unicode="&#x6af;" horiz-adv-x="1606" arabic-form="isolated"
d="M1466 441q89 -98 89 -209t-79.5 -171.5t-202.5 -60.5h-925q-114 0 -186 88t-72 205v272h180v-247q0 -78 30 -108t108 -30h876q34 0 63 24t29 53t-17 47l-499 514l-34 202l665 239l25 -180l-466 -178zM1446 1361l-628 -227l-9 69l632 227z" />
<glyph glyph-name="uFB93" unicode="&#x6af;" horiz-adv-x="1760" arabic-form="final"
d="M1794 0q-203 0 -298 129q-47 -129 -232 -129h-944q-116 0 -186 87t-71 206v272h181v-247q0 -77 28.5 -107.5t103.5 -30.5h879q90 0 90 68q0 34 -42 78l-472 492l-31 202l664 239l25 -180l-469 -175l499 -555q0 -1 127 -130q33 -34 148 -39v-180zM1419 1361l-626 -227
l-9 69l631 227z" />
<glyph glyph-name="uFB94" unicode="&#x6af;" horiz-adv-x="856" arabic-form="initial"
d="M719 388q50 -56 50 -160t-84 -166t-202 -62h-526v180h526q103 0 103 68q0 37 -33 72l-479 498l-34 202l665 239l25 -180l-474 -180zM660 1361l-629 -227l-8 69l632 227z" />
<glyph glyph-name="uFB95" unicode="&#x6af;" horiz-adv-x="1031" arabic-form="medial"
d="M1054 0q-222 0 -315 144q-61 -144 -228 -144h-536v180h539q92 0 92 68q0 34 -42 78l-471 492l-30 202l661 239l29 -180l-480 -180l502 -550q53 -59 158 -150q39 -19 75 -19h46v-180zM680 1361l-629 -227l-8 69l633 227z" />
<glyph glyph-name="u0644" unicode="&#x644;" horiz-adv-x="1361" arabic-form="isolated"
d="M1264 23q0 -204 -124 -341t-326 -137h-278q-178 0 -309.5 141.5t-131.5 322.5v376h180v-396q1 -111 91 -185t204 -74h233q109 0 195 76t86 183v1165h180v-1131z" />
<glyph glyph-name="uFEDE" unicode="&#x644;" horiz-adv-x="1408" arabic-form="final"
d="M1446 0q-145 0 -202 85q0 -226 -118 -383t-337 -157h-278q-185 1 -308.5 138.5t-123.5 322.5v379h176v-396q0 -116 86 -190t204 -74h233q117 0 200 74t83 190v1165h180v-848q0 -124 205 -126v-180z" />
<glyph glyph-name="uFEDF" unicode="&#x644;" horiz-adv-x="516" arabic-form="initial"
d="M388 275q0 -130 -77.5 -202.5t-209.5 -72.5h-137v180l123 -1q86 6 109 44q15 23 15 131v800h177v-879z" />
<glyph glyph-name="uFEE0" unicode="&#x644;" horiz-adv-x="598" arabic-form="medial"
d="M635 0h-54q-175 0 -261 70q-65 -54 -108 -62t-246 -8v180q54 -2 134 -2t104 40t24 136v800h180v-836q0 -98 58 -122q28 -11 169 -16v-180z" />
<glyph glyph-name="u0645" unicode="&#x645;" horiz-adv-x="1149" arabic-form="isolated"
d="M778 176q132 0 132 151.5t-31 180.5t-250 35v-250q0 -52 47.5 -84.5t101.5 -32.5zM1086 295q0 -136 -91.5 -218t-229.5 -82t-224 93.5t-86 234.5v220q-31 2 -37 2q-70 0 -117.5 -55t-47.5 -125v-820h-177v798q0 173 92.5 274.5t264.5 101.5h365q180 0 245 -131
q43 -89 43 -293z" />
<glyph glyph-name="uFEE2" unicode="&#x645;" horiz-adv-x="1233" arabic-form="final"
d="M906 331q0 137 -34 173t-248 39v-253q0 -57 43 -89t102 -32q137 0 137 162zM1281 0q-113 0 -165 22t-107 109q-56 -142 -228 -142q-147 0 -239 93t-92 241v220q-82 0 -141 -49t-59 -129v-820h-176v798q0 175 90 275t264 101h365q288 0 288 -421q0 -116 200 -118v-180z
" />
<glyph glyph-name="uFEE3" unicode="&#x645;" horiz-adv-x="843" arabic-form="initial"
d="M624 348.5q0 194.5 -156.5 194.5t-156.5 -194.5t156.5 -194.5t156.5 194.5zM474 719q150 0 228.5 -112.5t78.5 -268t-80.5 -259.5t-231.5 -104q-115 0 -203 68q-87 -38 -305 -43v180q153 0 179 30q8 10 11 138q9 371 323 371z" />
<glyph glyph-name="uFEE4" unicode="&#x645;" horiz-adv-x="904" arabic-form="medial"
d="M458 154q152 0 152 194.5t-152 194.5q-158 0 -158 -194.5t158 -194.5zM930 0q-89 0 -135 19t-87 85q-77 -129 -248 -129q-63 0 -131.5 38t-103.5 91q-20 -102 -273 -104v180q150 0 177 30q14 15 14 158.5t81 247t234 103.5t232.5 -109.5t82.5 -261.5q1 -57 2 -73
q6 -65 48 -82q20 -9 107 -13v-180z" />
<glyph glyph-name="u0646" unicode="&#x646;" horiz-adv-x="1339" arabic-form="isolated"
d="M1239 29q-1 -211 -123 -347t-330 -137h-277q-185 1 -309 139t-124 325v376h177v-396q0 -114 87 -189t203 -75h232q117 0 200.5 74t83.5 190v576h180v-536zM471 606v4q0 104 129.5 104t129.5 -108q0 -51 -36.5 -87t-88.5 -36q-134 0 -134 123z" />
<glyph glyph-name="uFEE6" unicode="&#x646;" horiz-adv-x="1361" arabic-form="final"
d="M1440 0q-148 0 -199 85q0 -226 -117 -383t-338 -157h-277q-185 1 -309 139t-124 325v376h177v-396q0 -116 86 -190t204 -74h232q117 0 200.5 74t83.5 190v576h180v-259q0 -124 201 -126v-180zM736 606q0 -51 -36.5 -87t-88.5 -36q-136 0 -136 123q1 108 131 108t130 -108
z" />
<glyph glyph-name="uFEE7" unicode="&#x646;" horiz-adv-x="586" arabic-form="initial"
d="M339 353l-3 212h184v-272q0 -116 -74 -204.5t-187 -88.5h-295v180q283 0 315 11q60 22 60 162zM343 848q0 -53 -36.5 -90t-88.5 -37q-137 0 -137 127q0 107 131 107t131 -107z" />
<glyph glyph-name="uFEE8" unicode="&#x646;" horiz-adv-x="703" arabic-form="medial"
d="M331 353l-2 212h182v-247q0 -133 224 -138v-180h-59q-170 0 -250 70q-90 -70 -173 -70h-296v180q279 0 314 13q60 21 60 160zM343 848q0 -53 -36.5 -90t-88.5 -37q-137 0 -137 127q0 107 131 107t131 -107z" />
<glyph glyph-name="u0648" unicode="&#x648;" horiz-adv-x="893" arabic-form="isolated"
d="M601 180v185q0 176 -141 176q-86 0 -116 -58q-21 -41 -21 -147t91 -138q49 -18 187 -18zM781 -23q0 -180 -135.5 -306t-316.5 -126h-233l-23 180h227q128 0 212 74t89 201q-225 0 -327 60q-136 80 -136 297t107 308q66 56 220 56q205 0 274 -172q42 -107 42 -346v-226z
" />
<glyph glyph-name="uFEEE" unicode="&#x648;" horiz-adv-x="893" arabic-form="final"
d="M329 351v-15q0 -106 95 -138q51 -18 191 -18v171q-1 75 -38.5 132.5t-111.5 57.5h-6q-79 -1 -104.5 -48t-25.5 -142zM919 0h-119q0 -198 -132.5 -326.5t-331.5 -128.5h-232l-25 180h227q128 0 213 74t90 201q-223 0 -328 61q-137 81 -137 297t109 307q63 54 213 54
q215 0 288 -178q42 -104 46 -361h119v-180z" />
<glyph glyph-name="u0647" unicode="&#x647;" horiz-adv-x="809" arabic-form="isolated"
d="M534.5 199q44.5 46 44.5 109t-29 93l-145 153q-161 -153 -161 -243q0 -69 52 -113.5t123 -44.5t115.5 46zM674 528q84 -87 84 -225t-105 -230.5t-249.5 -92.5t-239 100.5t-94.5 251.5t205 356l-52 58l122 122z" />
<glyph glyph-name="uFEEA" unicode="&#x647;" horiz-adv-x="1031" arabic-form="final"
d="M501.5 198.5q51.5 44.5 51.5 111.5t-34 100l-145 144q-84 -79 -105 -106q-53 -68 -53 -137.5t47 -113t117 -43.5t121.5 44.5zM1068 0q-118 0 -158.5 23.5t-201.5 172.5q-102 -216 -329 -216q-149 0 -246 97t-97 249.5t209 361.5l-51 58l121 122l539 -573
q71 -75 100 -92.5t114 -22.5v-180z" />
<glyph glyph-name="uFEEB" unicode="&#x647;" horiz-adv-x="1171" arabic-form="initial"
d="M548 415q0 61 -45 101t-100.5 40t-84.5 -39t-29 -89q0 -117 144 -173q115 51 115 160zM786 115q118 0 118 110.5t-238 350.5q55 -62 55 -171q0 -172 -111 -229q102 -61 176 -61zM1093 239q0 -119 -89 -214t-219 -95t-357 133q-116 -59 -259 -60l-200 -3v180h250
q-99 130 -99 253t82 205.5t204.5 82.5t222.5 -97l-118 122l135 122q447 -427 447 -629z" />
<glyph glyph-name="uFEEC" unicode="&#x647;" horiz-adv-x="798" arabic-form="medial"
d="M586 -208q0 104 -102.5 163t-215.5 59q0 -334 183 -334q135 0 135 112zM264 180q115 0 200.5 70t85.5 185t-120 115q-171 0 -171 -229q0 -14 5 -141zM831 0h-227q132 -91 132 -264q0 -209 -265 -209q-322 0 -350 277l-20 196h-155v180h147q-14 184 -14 201q0 335 336 335
q136 0 220 -76t84 -219t-120 -241h232v-180z" />
<glyph glyph-name="u0629" unicode="&#x629;" horiz-adv-x="809" arabic-form="isolated"
d="M534.5 199q44.5 46 44.5 109t-29 93l-145 153q-161 -153 -161 -243q0 -69 52 -113.5t123 -44.5t115.5 46zM674 528q84 -87 84 -225t-105 -230.5t-249.5 -92.5t-239 100.5t-94.5 251.5t205 356l-52 58l122 122zM466 1093l-303 -153l-25 49l103 56q-90 50 -90 124t39.5 118
t104.5 44q25 0 86 -22l-22 -48q-30 17 -55 17q-99 0 -99 -102q0 -81 76 -81q63 0 160 51z" />
<glyph glyph-name="uFE94" unicode="&#x6c0;" horiz-adv-x="1031" arabic-form="final"
d="M501.5 198.5q51.5 44.5 51.5 111.5t-34 100l-145 144q-84 -79 -105 -106q-53 -68 -53 -137.5t47 -113t117 -43.5t121.5 44.5zM1068 0q-118 0 -158.5 23.5t-201.5 172.5q-102 -216 -329 -216q-149 0 -246 97t-97 249.5t209 361.5l-51 58l121 122l539 -573
q71 -75 100 -92.5t114 -22.5v-180zM450 1143l-304 -154l-25 50l104 56q-92 49 -92 121t41.5 117.5t93 45.5t97.5 -20l-22 -48q-31 17 -64 17t-61.5 -30t-28.5 -73q0 -80 79 -80q58 0 156 51z" />
<glyph glyph-name="u064A" unicode="&#x64a;" horiz-adv-x="1289" arabic-form="isolated"
d="M1225 9q0 -265 -191 -390q-113 -74 -250 -74h-279q-185 0 -305 138t-121 326v372h169v-392q0 -120 86 -194t207 -74h232q106 1 193 71t87 166t-123 125q-33 7 -45 7h-250v309q0 139 89 229.5t229 90.5h216l7 -169h-216q-97 0 -134 -86q-17 -42 -22 -205q213 0 284 -26
q137 -52 137 -224z" />
<glyph glyph-name="uFEF2" unicode="&#x6cc;" horiz-adv-x="1289" arabic-form="final"
d="M1318 0h-167l9 -88q0 -157 -118 -262t-276 -105h-280q-211 0 -326.5 149.5t-116.5 368.5v322h180v-391q1 -129 87 -199t218 -70h231q96 0 160 53t64 148q0 58 -165 71q-30 3 -209 3l-16 180h725v-180z" />
<glyph glyph-name="uFEF3" unicode="&#x6cc;" horiz-adv-x="680" arabic-form="initial"
d="M-9 -347v4q0 98 119.5 98t119.5 -100q0 -46 -33.5 -76t-80.5 -30q-1 1 -2 1q-48 0 -85.5 27.5t-37.5 75.5zM575 -343v-5q0 -44 -33 -73.5t-80 -29.5q-1 1 -2 1q-48 0 -86 28t-38 77q0 100 119.5 100t119.5 -98zM606 293q0 -117 -72 -205t-185 -88h-385v180h329
q75 0 104 30.5t29 107.5v247h180v-272z" />
<glyph glyph-name="uFEF4" unicode="&#x6cc;" horiz-adv-x="739" arabic-form="medial"
d="M270 -343q0 -46 -33 -76t-81.5 -30t-86.5 29t-38 77q0 99 119.5 99t119.5 -99zM615 -343q0 -46 -33 -76t-81.5 -30t-86.5 29t-38 77q0 99 119.5 99t119.5 -99zM775 0h-63q-52 0 -102 9q-43 17 -91 61q-86 -70 -171 -70h-388v180h333q75 0 104 30.5t29 107.5v247h180v-247
q0 -89 37 -113.5t132 -24.5v-180z" />
<glyph glyph-name="u0649" unicode="&#x649;" horiz-adv-x="1289" arabic-form="isolated"
d="M1225 9q0 -265 -191 -390q-113 -74 -250 -74h-279q-185 0 -305 138t-121 326v372h169v-392q0 -120 86 -194t207 -74h232q106 1 193 71t87 166t-123 125q-33 7 -45 7h-250v309q0 139 89 229.5t229 90.5h216l7 -169h-216q-97 0 -134 -86q-17 -42 -22 -205q213 0 284 -26
q137 -52 137 -224z" />
<glyph glyph-name="uFEF0" unicode="&#x649;" horiz-adv-x="1289" arabic-form="final"
d="M1318 0h-167l9 -88q0 -157 -118 -262t-276 -105h-280q-211 0 -326.5 149.5t-116.5 368.5v322h180v-391q1 -129 87 -199t218 -70h231q96 0 160 53t64 148q0 58 -165 71q-30 3 -209 3l-16 180h725v-180z" />
<glyph glyph-name=".notdef" horiz-adv-x="1024"
d="M256 128h512v1834h-512v-1834zM128 0v2090h768v-2090h-768z" />
<glyph glyph-name=".null"
/>
<glyph glyph-name="nonmarkingreturn" horiz-adv-x="469"
/>
<glyph glyph-name="space" unicode=" " horiz-adv-x="469"
/>
<glyph glyph-name="exclam" unicode="!" horiz-adv-x="469"
d="M371 120q0 -120 -131 -120t-131 120q0 110 131 110t131 -110zM326 759q-12 -12 -12 -136l-28 -274h-95l-42 410v395h177v-395z" />
<glyph glyph-name="percent" unicode="%" horiz-adv-x="469"
d="M469 552.5q47 47.5 47 110.5t-53 110t-117.5 47t-110.5 -51t-46 -115.5t52 -106.5t116.5 -42t111.5 47.5zM553.5 853q89.5 -88 89.5 -196.5t-92.5 -187.5t-203.5 -79t-195 81.5t-84 192t88 194t198 83.5t199.5 -88zM1129 930l-646 -1174h-174l640 1174h180zM1228.5 -55
q49.5 49 49.5 110t-50.5 110t-113 49t-114 -51.5t-51.5 -121t76 -117.5q43 -28 98.5 -28t105 49zM1316 247.5q85 -88.5 85 -200t-89.5 -189t-199 -77.5t-198 80.5t-88.5 188.5t91.5 197t202.5 89t196 -88.5z" />
<glyph glyph-name="parenleft" unicode="(" horiz-adv-x="721"
d="M643 1399q-162 -313 -229 -511q-94 -276 -94 -586t74 -580t246 -576h-99q-205 295 -305 560t-101 574q0 309 120 595q82 197 293 524h95z" />
<glyph glyph-name="parenright" unicode=")" horiz-adv-x="721"
d="M178 1399q204 -303 305 -562t101 -568.5t-118 -593.5q-82 -199 -295 -529h-95q323 599 323 1062q0 371 -65.5 595.5t-254.5 595.5h99z" />
<glyph glyph-name="asterisk" unicode="*" horiz-adv-x="680"
/>
<glyph glyph-name="plus" unicode="+" horiz-adv-x="1275"
d="M1191 239h-466v-464h-171v464h-464v176h464v464h171v-464h466v-176z" />
<glyph glyph-name="comma" unicode="," horiz-adv-x="264"
d="M4 34q0 110 136 110q82 0 105 -36t23 -161t-25 -191q-43 -111 -177 -124v65q79 8 107 75q14 38 18 138q-187 0 -187 124z" />
<glyph glyph-name="hyphen" unicode="-" horiz-adv-x="1149"
d="M1076 239h-981v177h981v-177z" />
<glyph glyph-name="period" unicode="." horiz-adv-x="564"
d="M416 96q0 -119 -132 -119t-133 119q1 112 133 112t132 -112z" />
<glyph glyph-name="slash" unicode="/" horiz-adv-x="971"
d="M904 930l-648 -1174h-172l640 1174h180z" />
<glyph glyph-name="zero" unicode="0" horiz-adv-x="1210"
d="M729.5 204.5q51.5 51.5 51.5 120.5t-54 122t-125.5 53t-124.5 -56t-53 -126.5t58 -117.5t127 -47t120.5 51.5zM829.5 542q96.5 -102 96.5 -222t-100.5 -208.5t-222 -88.5t-220.5 88.5t-99 213t100.5 222t224.5 97.5t220.5 -102z" />
<glyph glyph-name="zero" unicode="&#x6f0;" horiz-adv-x="1210"
d="M729.5 204.5q51.5 51.5 51.5 120.5t-54 122t-125.5 53t-124.5 -56t-53 -126.5t58 -117.5t127 -47t120.5 51.5zM829.5 542q96.5 -102 96.5 -222t-100.5 -208.5t-222 -88.5t-220.5 88.5t-99 213t100.5 222t224.5 97.5t220.5 -102z" />
<glyph glyph-name="zero" unicode="&#x660;" horiz-adv-x="1210"
d="M729.5 204.5q51.5 51.5 51.5 120.5t-54 122t-125.5 53t-124.5 -56t-53 -126.5t58 -117.5t127 -47t120.5 51.5zM829.5 542q96.5 -102 96.5 -222t-100.5 -208.5t-222 -88.5t-220.5 88.5t-99 213t100.5 222t224.5 97.5t220.5 -102z" />
<glyph glyph-name="one" unicode="1" horiz-adv-x="1210"
d="M736 -200h-175v551q0 276 -86 562l171 56l62 -241q0 -6 14 -116t14 -261v-551z" />
<glyph glyph-name="one" unicode="&#x6f1;" horiz-adv-x="1210"
d="M736 -200h-175v551q0 276 -86 562l171 56l62 -241q0 -6 14 -116t14 -261v-551z" />
<glyph glyph-name="one" unicode="&#x661;" horiz-adv-x="1210"
d="M736 -200h-175v551q0 276 -86 562l171 56l62 -241q0 -6 14 -116t14 -261v-551z" />
<glyph glyph-name="two" unicode="2" horiz-adv-x="1210"
d="M908 971q50 -246 50 -338t-86 -160t-175.5 -68t-180.5 59l3 -664h-181v525q0 357 -85 588l173 56l72 -295q27 -113 133 -113q74 1 107 48t33 84q0 5 -1 10l-29 215q55 18 167 53z" />
<glyph glyph-name="two" unicode="&#x6f2;" horiz-adv-x="1210"
d="M908 971q50 -246 50 -338t-86 -160t-175.5 -68t-180.5 59l3 -664h-181v525q0 357 -85 588l173 56l72 -295q27 -113 133 -113q74 1 107 48t33 84q0 5 -1 10l-29 215q55 18 167 53z" />
<glyph glyph-name="two" unicode="&#x662;" horiz-adv-x="1210"
d="M908 971q50 -246 50 -338t-86 -160t-175.5 -68t-180.5 59l3 -664h-181v525q0 357 -85 588l173 56l72 -295q27 -113 133 -113q74 1 107 48t33 84q0 5 -1 10l-29 215q55 18 167 53z" />
<glyph glyph-name="three" unicode="3" horiz-adv-x="1210"
d="M1161 654q0 -98 -80 -165.5t-185.5 -67.5t-215.5 124q0 -130 -189 -130q-94 0 -177 46l1 -661h-175v525q0 334 -90 588l178 56l67 -295q26 -113 140 -113q59 1 99 42t40 84q0 8 -1 16l-34 215l169 62q41 -213 41 -304q0 -11 -3 -63q46 -57 106.5 -57t99 37.5t38.5 89.5
q0 10 -1 20l-29 215l166 51l34 -291q1 -11 1 -24z" />
<glyph glyph-name="three" unicode="&#x6f3;" horiz-adv-x="1210"
d="M1161 654q0 -98 -80 -165.5t-185.5 -67.5t-215.5 124q0 -130 -189 -130q-94 0 -177 46l1 -661h-175v525q0 334 -90 588l178 56l67 -295q26 -113 140 -113q59 1 99 42t40 84q0 8 -1 16l-34 215l169 62q41 -213 41 -304q0 -11 -3 -63q46 -57 106.5 -57t99 37.5t38.5 89.5
q0 10 -1 20l-29 215l166 51l34 -291q1 -11 1 -24z" />
<glyph glyph-name="three" unicode="&#x663;" horiz-adv-x="1210"
d="M1161 654q0 -98 -80 -165.5t-185.5 -67.5t-215.5 124q0 -130 -189 -130q-94 0 -177 46l1 -661h-175v525q0 334 -90 588l178 56l67 -295q26 -113 140 -113q59 1 99 42t40 84q0 8 -1 16l-34 215l169 62q41 -213 41 -304q0 -11 -3 -63q46 -57 106.5 -57t99 37.5t38.5 89.5
q0 10 -1 20l-29 215l166 51l34 -291q1 -11 1 -24z" />
<glyph glyph-name="four" unicode="4" horiz-adv-x="1210"
d="M1075 466q-194 -90 -357 -90t-324 70l2 -646h-175v538q0 264 -86 575l169 56q51 -188 79 -351l92 -43q0 403 328 403q102 0 217 -57l-60 -155q-74 54 -148 54t-128.5 -48.5t-54.5 -120.5q0 -117 135 -117q102 0 255 76z" />
<glyph glyph-name="four" unicode="&#x6f4;" horiz-adv-x="1210"
d="M1075 466q-194 -90 -357 -90t-324 70l2 -646h-175v538q0 264 -86 575l169 56q51 -188 79 -351l92 -43q0 403 328 403q102 0 217 -57l-60 -155q-74 54 -148 54t-128.5 -48.5t-54.5 -120.5q0 -117 135 -117q102 0 255 76z" />
<glyph glyph-name="four" unicode="&#x664;" horiz-adv-x="1210"
d="M1075 466q-194 -90 -357 -90t-324 70l2 -646h-175v538q0 264 -86 575l169 56q51 -188 79 -351l92 -43q0 403 328 403q102 0 217 -57l-60 -155q-74 54 -148 54t-128.5 -48.5t-54.5 -120.5q0 -117 135 -117q102 0 255 76z" />
<glyph glyph-name="five" unicode="5" horiz-adv-x="1210"
d="M974 118q0 212 -420 560q-318 -334 -318 -557q0 -169 152 -169q139 0 140 158q-2 11 -9 68h177q12 -24 12 -89t-19 -100q53 -34 117 -34q168 0 168 163zM1163 74q-1 -145 -103 -230t-242 -85t-232 70q-126 -73 -254 -73t-206 104t-78 244q0 220 177 439l196 241l-70 50
l115 137q697 -520 697 -897z" />
<glyph glyph-name="five" unicode="&#x6f5;" horiz-adv-x="1210"
d="M974 118q0 212 -420 560q-318 -334 -318 -557q0 -169 152 -169q139 0 140 158q-2 11 -9 68h177q12 -24 12 -89t-19 -100q53 -34 117 -34q168 0 168 163zM1163 74q-1 -145 -103 -230t-242 -85t-232 70q-126 -73 -254 -73t-206 104t-78 244q0 220 177 439l196 241l-70 50
l115 137q697 -520 697 -897z" />
<glyph glyph-name="five" unicode="&#x665;" horiz-adv-x="1210"
d="M974 118q0 212 -420 560q-318 -334 -318 -557q0 -169 152 -169q139 0 140 158q-2 11 -9 68h177q12 -24 12 -89t-19 -100q53 -34 117 -34q168 0 168 163zM1163 74q-1 -145 -103 -230t-242 -85t-232 70q-126 -73 -254 -73t-206 104t-78 244q0 220 177 439l196 241l-70 50
l115 137q697 -520 697 -897z" />
<glyph glyph-name="six" unicode="6" horiz-adv-x="1210"
d="M971 483q-72 -64 -140 -147l-151 -185q-117 -143 -261 -396l-158 96q85 163 327 480q-157 1 -253 85t-96 232t88.5 241.5t228.5 93.5q99 0 225 -65l-57 -160q-76 40 -144 40t-114.5 -42t-46.5 -107q0 -144 164 -144q111 0 243 85z" />
<glyph glyph-name="six" unicode="&#x6f6;" horiz-adv-x="1210"
d="M971 483q-72 -64 -140 -147l-151 -185q-117 -143 -261 -396l-158 96q85 163 327 480q-157 1 -253 85t-96 232t88.5 241.5t228.5 93.5q99 0 225 -65l-57 -160q-76 40 -144 40t-114.5 -42t-46.5 -107q0 -144 164 -144q111 0 243 85z" />
<glyph glyph-name="six" unicode="&#x666;" horiz-adv-x="1210"
d="M971 483q-72 -64 -140 -147l-151 -185q-117 -143 -261 -396l-158 96q85 163 327 480q-157 1 -253 85t-96 232t88.5 241.5t228.5 93.5q99 0 225 -65l-57 -160q-76 40 -144 40t-114.5 -42t-46.5 -107q0 -144 164 -144q111 0 243 85z" />
<glyph glyph-name="seven" unicode="7" horiz-adv-x="1210"
d="M1109 893l-149 -255q-72 -122 -146 -304t-140 -534h-140q-45 306 -142 539t-288 551l157 81q166 -283 233 -462q6 -16 34 -119l70 -259l20 -2q73 363 193 581l144 261q70 -37 154 -78z" />
<glyph glyph-name="seven" unicode="&#x6f7;" horiz-adv-x="1210"
d="M1109 893l-149 -255q-72 -122 -146 -304t-140 -534h-140q-45 306 -142 539t-288 551l157 81q166 -283 233 -462q6 -16 34 -119l70 -259l20 -2q73 363 193 581l144 261q70 -37 154 -78z" />
<glyph glyph-name="seven" unicode="&#x667;" horiz-adv-x="1210"
d="M1109 893l-149 -255q-72 -122 -146 -304t-140 -534h-140q-45 306 -142 539t-288 551l157 81q166 -283 233 -462q6 -16 34 -119l70 -259l20 -2q73 363 193 581l144 261q70 -37 154 -78z" />
<glyph glyph-name="eight" unicode="8" horiz-adv-x="1210"
d="M1109 -113q-83 -37 -156 -81q-165 282 -232 464q-12 32 -38 134l-65 245l-20 2q-36 -165 -96 -353t-243 -492q-88 49 -158 84q199 332 289 548t146 542l140 -2q73 -446 262 -793q56 -104 171 -298z" />
<glyph glyph-name="eight" unicode="&#x6f8;" horiz-adv-x="1210"
d="M1109 -113q-83 -37 -156 -81q-165 282 -232 464q-12 32 -38 134l-65 245l-20 2q-36 -165 -96 -353t-243 -492q-88 49 -158 84q199 332 289 548t146 542l140 -2q73 -446 262 -793q56 -104 171 -298z" />
<glyph glyph-name="eight" unicode="&#x668;" horiz-adv-x="1210"
d="M1109 -113q-83 -37 -156 -81q-165 282 -232 464q-12 32 -38 134l-65 245l-20 2q-36 -165 -96 -353t-243 -492q-88 49 -158 84q199 332 289 548t146 542l140 -2q73 -446 262 -793q56 -104 171 -298z" />
<glyph glyph-name="nine" unicode="9" horiz-adv-x="1210"
d="M739 599q-7 46 -26 134q-24 64 -73 76q-4 1 -59 11q-68 0 -108 -48t-40 -117q0 -119 121 -119q76 0 185 63zM933 -200h-175v615q-109 -36 -220 -36t-185 71t-74 205q1 134 87 231t224 97q85 0 185 -59q158 -93 158 -539v-585z" />
<glyph glyph-name="nine" unicode="&#x6f9;" horiz-adv-x="1210"
d="M739 599q-7 46 -26 134q-24 64 -73 76q-4 1 -59 11q-68 0 -108 -48t-40 -117q0 -119 121 -119q76 0 185 63zM933 -200h-175v615q-109 -36 -220 -36t-185 71t-74 205q1 134 87 231t224 97q85 0 185 -59q158 -93 158 -539v-585z" />
<glyph glyph-name="nine" unicode="&#x669;" horiz-adv-x="1210"
d="M739 599q-7 46 -26 134q-24 64 -73 76q-4 1 -59 11q-68 0 -108 -48t-40 -117q0 -119 121 -119q76 0 185 63zM933 -200h-175v615q-109 -36 -220 -36t-185 71t-74 205q1 134 87 231t224 97q85 0 185 -59q158 -93 158 -539v-585z" />
<glyph glyph-name="colon" unicode=":" horiz-adv-x="564"
d="M428 120q0 -120 -138 -120q-54 0 -90.5 33t-36.5 87q1 110 133 110t132 -110zM426 543q0 -119 -133 -119t-133 119q0 111 133 111t133 -111z" />
<glyph glyph-name="equal" unicode="=" horiz-adv-x="1225"
d="M1110 0h-989v176h989v-176zM1110 374h-989v176h989v-176z" />
<glyph glyph-name="bracketleft" unicode="[" horiz-adv-x="770"
d="M696 -834h-537l2 2603h535v-169h-350l-3 -2265h353v-169z" />
<glyph glyph-name="bracketright" unicode="]" horiz-adv-x="783"
d="M157 -845v169h352l-2 2267h-350v169h534l2 -2605h-536z" />
<glyph glyph-name="braceleft" unicode="{" horiz-adv-x="1050"
d="M393 54q32 138 32 156v21q0 128 -95.5 215.5t-232.5 103.5v51q328 72 328 302v35q0 32 -29.5 166t-29.5 224q0 210 134 352t347 175v-53q-131 -18 -219 -103t-88 -212q0 -61 29.5 -212.5q29.5 -152.5 29.5 -172.5v-61q0 -309 -392 -463q387 -159 387 -481
q0 -67 -29.5 -208.5t-29.5 -161.5v-60q0 -249 312 -320v-52q-212 39 -349 181t-137 352q0 88 32 226z" />
<glyph glyph-name="braceright" unicode="}" horiz-adv-x="970"
d="M612 1331q0 -80 -29.5 -215t-29.5 -170v-40q0 -231 328 -302v-52q-136 -15 -232 -103t-96 -222q1 -27 31 -165t30 -232q0 -209 -136 -351t-347 -179v49q312 72 312 320q0 77 -31 223t-31 210q0 320 390 481q-395 154 -395 461q0 57 29.5 211.5t29.5 192.5v44
q0 127 -86 209t-218 103v57q213 -37 347 -178t134 -352z" />
<glyph glyph-name="guillemotleft" unicode="&#xab;" horiz-adv-x="926"
d="M419 5l-323 250v194l323 250v-145l-264 -200l264 -203v-146zM829 5l-320 250v194l320 250v-145l-259 -200l259 -203v-146z" />
<glyph glyph-name="guillemotright" unicode="&#xbb;" horiz-adv-x="926"
d="M415 255l-320 -250v144l259 200l-259 204v146l320 -250v-194zM826 255l-321 -250v144l264 200l-264 204v146l321 -250v-194z" />
<glyph glyph-name="multiply" unicode="&#xd7;" horiz-adv-x="1275"
d="M1180 -90l-126 -126l-410 416l-419 -416l-124 123l419 418l-421 419l124 124l417 -418l419 420l121 -126l-414 -419z" />
<glyph glyph-name="divide" unicode="&#xf7;" horiz-adv-x="1171"
d="M663 -25q37 -41 37 -95.5t-42 -93.5t-96.5 -39t-90.5 42.5t-36 98.5t40 92t95.5 36t92.5 -41zM1095 225h-1022v179h1022v-179zM669.5 836.5q40.5 -39.5 40.5 -93.5t-42.5 -96.5t-97.5 -42.5t-90.5 43.5t-35.5 98.5t39.5 92.5t92.5 37.5t93.5 -39.5z" />
<glyph glyph-name="zeronojoin" unicode="&#x200c;" horiz-adv-x="45"
/>
<glyph glyph-name="zerojoin" unicode="&#x200d;" horiz-adv-x="45"
/>
<glyph glyph-name="lefttoright" unicode="&#x200e;" horiz-adv-x="41"
d="M271 1444l-120 -123l-31 26l80 79h-159v-1426h-41v1464h195l-75 75l31 28z" />
<glyph glyph-name="righttoleft" unicode="&#x200f;" horiz-adv-x="41"
d="M41 0h-41v1426h-159l77 -79l-26 -26l-125 123l125 123l26 -28l-74 -75h197v-1464z" />
<glyph glyph-name="quoteleft" unicode="&#x2018;" horiz-adv-x="662"
d="M467 976q0 -110 -137 -110q-81 0 -104 38t-23 161t25 189q43 111 176 124v-65q-77 -9 -105 -77q-16 -40 -20 -136q188 0 188 -124z" />
<glyph glyph-name="quoteright" unicode="&#x2019;" horiz-adv-x="570"
d="M153 1268q0 110 136 110q83 0 105 -36t22 -162t-25 -191q-42 -111 -176 -123v65q79 8 106 75q15 37 19 138q-187 0 -187 124z" />
<glyph glyph-name="quotedblleft" unicode="&#x201c;" horiz-adv-x="618"
d="M604 976q0 -110 -136 -110q-82 0 -105 38t-23 161t25 189q43 111 176 124v-65q-77 -9 -105 -77q-16 -40 -20 -136q188 0 188 -124zM303 971q0 -110 -137 -110q-82 0 -108 43q-19 30 -19 155t25 191q42 111 176 123v-65q-79 -8 -106 -75q-15 -38 -19 -138q188 0 188 -124z
" />
<glyph glyph-name="quotedblright" unicode="&#x201d;" horiz-adv-x="618"
d="M303 1193v-19q0 -124 -25 -189q-43 -111 -177 -124v65q78 9 105 77q16 39 20 136q-187 0 -187 124q0 110 136 110h4q77 -1 100.5 -36.5t23.5 -143.5zM340 1268q0 110 136 110q83 0 109 -43q19 -29 19 -155t-25 -191q-43 -111 -176 -123v65q78 8 106 75q15 37 19 138
q-188 0 -188 124z" />
<glyph glyph-name="guilsinglleft" unicode="&#x2039;" horiz-adv-x="631"
d="M490 5l-320 250v194l320 250v-145l-259 -200l259 -203v-146z" />
<glyph glyph-name="guilsinglright" unicode="&#x203a;" horiz-adv-x="573"
d="M473 255l-321 -250v144l263 200l-263 204v146l321 -250v-194z" />
<glyph glyph-name="u060C" unicode="&#x60c;" horiz-adv-x="516"
d="M388 110q0 -110 -137 -110q-81 0 -104 38t-23 161t25 189q42 111 176 123v-65q-79 -7 -106 -75q-15 -37 -19 -137q188 0 188 -124z" />
<glyph glyph-name="u061B" unicode="&#x61b;" horiz-adv-x="564"
d="M426 110q0 -110 -133 -110t-133 110q0 120 133 120t133 -120zM155 583v19q0 124 25 188q41 105 176 123v-62q-80 -17 -105 -77q-15 -36 -18 -134q191 0 191 -124q0 -111 -136 -111q-86 0 -109.5 35.5t-23.5 142.5z" />
<glyph glyph-name="u061F" unicode="&#x61f;" horiz-adv-x="809"
d="M534 109q0 -49 -38 -79t-86 -30t-82.5 32t-34.5 77q1 101 121 101t120 -101zM741 775h-176q0 223 -157 223q-147 0 -147 -138q0 -51 23 -76l87 -96q85 -92 105 -146t29 -204h-171q0 106 -26 158t-99 122t-103 117t-30 131q0 142 94 216t218 74t211 -50t113 -127t29 -204z
" />
<glyph glyph-name="u0640" unicode="&#x640;" horiz-adv-x="469"
d="M505 0h-525v180h525v-180z" />
<glyph glyph-name="u064B" unicode="&#x64b;"
d="M343 1461l-315 -168l-28 47l315 173zM344 1578l-316 -172l-27 50l315 174z" />
<glyph glyph-name="u064C" unicode="&#x64c;"
d="M287 1452.5q27 29.5 27 59.5t-26.5 53t-59.5 23q-79 0 -79 -87q0 -78 85 -78q26 0 53 29.5zM360 1508q0 -91 -49 -117l-283 -151l-28 48q51 33 63 53q0 34 -37 34t-57 -11l-20 36q56 19 85 19q57 0 72 -78l77 45q-79 45 -79 124.5t87 113.5q29 11 37 11q54 0 93 -37
t39 -90z" />
<glyph glyph-name="u064D" unicode="&#x64d;"
d="M226 -875l-315 -169l-27 48l315 175zM226 -731l-315 -169l-27 47l315 174z" />
<glyph glyph-name="u064E" unicode="&#x64e;"
d="M343 1456l-315 -168l-28 47l315 176z" />
<glyph glyph-name="u064F" unicode="&#x64f;"
d="M231.5 1446q26.5 30 26.5 60t-26.5 52.5t-60.5 22.5q-78 0 -78 -86q0 -79 86 -79q26 0 52.5 30zM305 1501q0 -89 -50 -116l-227 -121l-28 47l126 70q-78 45 -78 113q0 91 90 125q26 10 33 10q55 0 94.5 -37t39.5 -91z" />
<glyph glyph-name="u0650" unicode="&#x650;"
d="M218 -754l-314 -169l-29 48l315 175z" />
<glyph glyph-name="u0651" unicode="&#x651;"
d="M-31 1516v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100z" />
<glyph glyph-name="u0652" unicode="&#x652;"
d="M241 1441q0 60 -60 80q-18 7 -22 7q-34 0 -60 -26.5t-26 -60.5t26 -59.5t58 -25.5t58 27.5t26 57.5zM288 1438q0 -54 -40 -90q-41 -35 -91 -35h-3q-52 1 -88 41t-36 94t40 88t94 34t89 -39t35 -93z" />
<glyph glyph-name="uE820" unicode="&#xe820;"
d="M353 947l-315 -168l-28 47l315 176z" />
<glyph glyph-name="uE821" unicode="&#xe821;"
d="M251.5 983q26.5 30 26.5 60t-26.5 52.5t-60.5 22.5q-78 0 -78 -86q0 -79 86 -79q26 0 52.5 30zM325 1038q0 -89 -50 -116l-227 -121l-28 47l126 70q-78 45 -78 113q0 91 90 125q26 10 33 10q55 0 94.5 -37t39.5 -91z" />
<glyph glyph-name="uE822" unicode="&#xe822;"
d="M210 957q0 60 -60 80q-18 7 -22 7q-34 0 -60 -26.5t-26 -60.5t26 -59.5t58 -25.5t58 27.5t26 57.5zM257 954q0 -54 -40 -90q-41 -35 -91 -35h-3q-52 1 -88 41t-36 94t40 88t94 34t89 -39t35 -93z" />
<glyph glyph-name="uE823" unicode="&#xe823;"
d="M333 972l-315 -168l-28 47l315 173zM334 1089l-316 -172l-27 50l315 174z" />
<glyph glyph-name="uE824" unicode="&#xe824;"
d="M348 984.5q27 29.5 27 59.5t-26.5 53t-59.5 23q-79 0 -79 -87q0 -78 85 -78q26 0 53 29.5zM421 1040q0 -91 -49 -117l-283 -151l-28 48q51 33 63 53q0 34 -37 34t-57 -11l-20 36q56 19 85 19q57 0 72 -78l77 45q-79 45 -79 124.5t87 113.5q29 11 37 11q54 0 93 -37
t39 -90z" />
<glyph glyph-name="uE825" unicode="&#xe825;"
d="M-31 1012v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100z" />
<glyph glyph-name="uE826" unicode="&#xe826;"
d="M138 -367l-314 -169l-29 48l315 175z" />
<glyph glyph-name="uE827" unicode="&#xe827;"
d="M101 -605l-315 -169l-27 48l315 175zM101 -461l-315 -169l-27 47l315 174z" />
<glyph glyph-name="uE828" unicode="&#xe828;"
d="M-16 1035v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM373 1315l-315 -168l-28 47l315 176z" />
<glyph glyph-name="uE829" unicode="&#xe829;"
d="M-16 1035v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM291.5 1362q26.5 30 26.5 60t-26.5 52.5t-60.5 22.5q-78 0 -78 -86q0 -79 86 -79q26 0 52.5 30zM365 1417
q0 -89 -50 -116l-227 -121l-28 47l126 70q-78 45 -78 113q0 91 90 125q26 10 33 10q55 0 94.5 -37t39.5 -91z" />
<glyph glyph-name="uE82A" unicode="&#xe82a;"
d="M-16 1035v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM392 1329l-315 -168l-28 47l315 173zM393 1446l-316 -172l-27 50l315 174z" />
<glyph glyph-name="uE82B" unicode="&#xe82b;"
d="M5 1017v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM375 1389.5q27 29.5 27 59.5t-26.5 53t-59.5 23q-79 0 -79 -87q0 -78 85 -78q26 0 53 29.5zM448 1445q0 -91 -49 -117
l-283 -151l-28 48q51 33 63 53q0 34 -37 34t-57 -11l-20 36q56 19 85 19q57 0 72 -78l77 45q-79 45 -79 124.5t87 113.5q29 11 37 11q54 0 93 -37t39 -90z" />
<glyph glyph-name="uE82C" unicode="&#xe82c;"
d="M-16 1280v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM378 1032l-314 -169l-29 48l315 175z" />
<glyph glyph-name="uE82D" unicode="&#xe82d;"
d="M-16 1496v7h45q0 -100 80 -100t84 100h50q0 -100 82 -100t83 100h48q-1 -62 -37 -107t-88 -45t-117 57q-47 -57 -107 -57h-3q-58 0 -89 45t-31 100zM362 1083l-315 -169l-27 48l315 175zM362 1227l-315 -169l-27 47l315 174z" />
<glyph glyph-name="u0621" unicode="&#x621;" horiz-adv-x="530"
d="M471 194l-376 -194l-32 61l131 70q-115 61 -115 169q0 82 51 134q52 52 118 52t117 -22l-27 -59q-36 21 -74 21q-121 0 -121 -126q0 -106 102 -106q79 0 193 62z" />
<glyph glyph-name="periodcentered" unicode="&#xb7;" horiz-adv-x="512"
d="M253 653q-97 0 -97 106t96 106t96 -107q0 -43 -26 -74t-69 -31z" />
<glyph glyph-name="periodcentered" unicode="&#x2219;" horiz-adv-x="512"
d="M253 653q-97 0 -97 106t96 106t96 -107q0 -43 -26 -74t-69 -31z" />
<glyph glyph-name="periodcentered" unicode="&#x2d9;" horiz-adv-x="512"
d="M253 653q-97 0 -97 106t96 106t96 -107q0 -43 -26 -74t-69 -31z" />
</font>
</defs></svg>

BIN
Sevomin.News/fonts/WebYekan.ttf View File


BIN
Sevomin.News/fonts/WebYekan.woff View File


BIN
Sevomin.News/fonts/glyphicons-halflings-regular.eot View File


+ 229
- 0
Sevomin.News/fonts/glyphicons-halflings-regular.svg View File

@ -0,0 +1,229 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
<font-face units-per-em="1200" ascent="960" descent="-240" />
<missing-glyph horiz-adv-x="500" />
<glyph />
<glyph />
<glyph unicode="&#xd;" />
<glyph unicode=" " />
<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" />
<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" />
<glyph unicode="&#xa0;" />
<glyph unicode="&#x2000;" horiz-adv-x="652" />
<glyph unicode="&#x2001;" horiz-adv-x="1304" />
<glyph unicode="&#x2002;" horiz-adv-x="652" />
<glyph unicode="&#x2003;" horiz-adv-x="1304" />
<glyph unicode="&#x2004;" horiz-adv-x="434" />
<glyph unicode="&#x2005;" horiz-adv-x="326" />
<glyph unicode="&#x2006;" horiz-adv-x="217" />
<glyph unicode="&#x2007;" horiz-adv-x="217" />
<glyph unicode="&#x2008;" horiz-adv-x="163" />
<glyph unicode="&#x2009;" horiz-adv-x="260" />
<glyph unicode="&#x200a;" horiz-adv-x="72" />
<glyph unicode="&#x202f;" horiz-adv-x="260" />
<glyph unicode="&#x205f;" horiz-adv-x="326" />
<glyph unicode="&#x20ac;" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-62.5 -32t-65.5 -67t-50.5 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-205 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" />
<glyph unicode="&#x2212;" d="M200 400h900v300h-900v-300z" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#x2601;" d="M-14 494q0 -80 56.5 -137t135.5 -57h750q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5z" />
<glyph unicode="&#x2709;" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" />
<glyph unicode="&#x270f;" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" />
<glyph unicode="&#xe001;" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" />
<glyph unicode="&#xe002;" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" />
<glyph unicode="&#xe003;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" />
<glyph unicode="&#xe005;" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" />
<glyph unicode="&#xe006;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1z" />
<glyph unicode="&#xe007;" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM168 71l2 1zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" />
<glyph unicode="&#xe008;" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" />
<glyph unicode="&#xe009;" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" />
<glyph unicode="&#xe010;" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe011;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe012;" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe013;" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" />
<glyph unicode="&#xe014;" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" />
<glyph unicode="&#xe015;" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" />
<glyph unicode="&#xe016;" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" />
<glyph unicode="&#xe017;" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" />
<glyph unicode="&#xe018;" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" />
<glyph unicode="&#xe019;" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" />
<glyph unicode="&#xe020;" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" />
<glyph unicode="&#xe021;" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" />
<glyph unicode="&#xe022;" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" />
<glyph unicode="&#xe023;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 500v400h100 v-300h200v-100h-300z" />
<glyph unicode="&#xe024;" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" />
<glyph unicode="&#xe025;" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" />
<glyph unicode="&#xe026;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM188 600q0 -170 121 -291t291 -121t291 121t121 291t-121 291t-291 121 t-291 -121t-121 -291zM350 600h150v300h200v-300h150l-250 -300z" />
<glyph unicode="&#xe027;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM350 600l250 300 l250 -300h-150v-300h-200v300h-150z" />
<glyph unicode="&#xe028;" d="M0 25v475l200 700h800l199 -700l1 -475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" />
<glyph unicode="&#xe029;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM500 397v401 l297 -200z" />
<glyph unicode="&#xe030;" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" />
<glyph unicode="&#xe031;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" />
<glyph unicode="&#xe032;" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" />
<glyph unicode="&#xe033;" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" />
<glyph unicode="&#xe034;" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" />
<glyph unicode="&#xe035;" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" />
<glyph unicode="&#xe036;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" />
<glyph unicode="&#xe037;" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" />
<glyph unicode="&#xe038;" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 110 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" />
<glyph unicode="&#xe039;" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" />
<glyph unicode="&#xe040;" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" />
<glyph unicode="&#xe041;" d="M0 700l1 475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" />
<glyph unicode="&#xe042;" d="M1 700l1 475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" />
<glyph unicode="&#xe043;" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" />
<glyph unicode="&#xe044;" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" />
<glyph unicode="&#xe045;" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" />
<glyph unicode="&#xe046;" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" />
<glyph unicode="&#xe047;" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391l82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140l116 -317h-340 z" />
<glyph unicode="&#xe048;" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 14t-49 14.5v71l471 -1q120 0 213 -88t93 -228q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129q0 -84 -59 -156.5t-142 -111 t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" />
<glyph unicode="&#xe049;" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" />
<glyph unicode="&#xe050;" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " />
<glyph unicode="&#xe051;" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" />
<glyph unicode="&#xe052;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe053;" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" />
<glyph unicode="&#xe054;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe055;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe056;" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe057;" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" />
<glyph unicode="&#xe058;" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" />
<glyph unicode="&#xe059;" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" />
<glyph unicode="&#xe060;" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " />
<glyph unicode="&#xe062;" d="M148 745q0 124 60.5 231.5t165 172t226.5 64.5q123 0 227 -63t164.5 -169.5t60.5 -229.5t-73 -272q-73 -114 -166.5 -237t-150.5 -189l-57 -66q-10 9 -27 26t-66.5 70.5t-96 109t-104 135.5t-100.5 155q-63 139 -63 262zM342 772q0 -107 75.5 -182.5t181.5 -75.5 q107 0 182.5 75.5t75.5 182.5t-75.5 182t-182.5 75t-182 -75.5t-75 -181.5z" />
<glyph unicode="&#xe063;" d="M1 600q0 122 47.5 233t127.5 191t191 127.5t233 47.5t233 -47.5t191 -127.5t127.5 -191t47.5 -233t-47.5 -233t-127.5 -191t-191 -127.5t-233 -47.5t-233 47.5t-191 127.5t-127.5 191t-47.5 233zM173 600q0 -177 125.5 -302t301.5 -125v854q-176 0 -301.5 -125 t-125.5 -302z" />
<glyph unicode="&#xe064;" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 139t-64 210zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" />
<glyph unicode="&#xe065;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM995 1015l113 -113l113 113l-21 85l-92 28z" />
<glyph unicode="&#xe066;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" />
<glyph unicode="&#xe067;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q61 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l567 567l-137 137l-430 -431l-146 147z" />
<glyph unicode="&#xe068;" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" />
<glyph unicode="&#xe069;" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe070;" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe071;" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" />
<glyph unicode="&#xe072;" d="M200 0l900 550l-900 550v-1100z" />
<glyph unicode="&#xe073;" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe074;" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" />
<glyph unicode="&#xe075;" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" />
<glyph unicode="&#xe076;" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" />
<glyph unicode="&#xe077;" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" />
<glyph unicode="&#xe078;" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" />
<glyph unicode="&#xe079;" d="M185 599l592 -592l240 240l-353 353l353 353l-240 240z" />
<glyph unicode="&#xe080;" d="M272 194l353 353l-353 353l241 240l572 -571l21 -22l-1 -1v-1l-592 -591z" />
<glyph unicode="&#xe081;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" />
<glyph unicode="&#xe082;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM300 500h600v200h-600v-200z" />
<glyph unicode="&#xe083;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM246 459l213 -213l141 142l141 -142l213 213l-142 141l142 141l-213 212l-141 -141l-141 142l-212 -213l141 -141 z" />
<glyph unicode="&#xe084;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" />
<glyph unicode="&#xe085;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM364 700h143q4 0 11.5 -1t11 -1t6.5 3t3 9t1 11t3.5 8.5t3.5 6t5.5 4t6.5 2.5t9 1.5t9 0.5h11.5h12.5 q19 0 30 -10t11 -26q0 -22 -4 -28t-27 -22q-5 -1 -12.5 -3t-27 -13.5t-34 -27t-26.5 -46t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 45.5t31 69t14 94q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5t-53.5 -74.5t-19 -114zM500 300h200v100h-200 v-100z" />
<glyph unicode="&#xe086;" d="M3 600q0 162 80 299.5t217.5 217.5t299.5 80t299.5 -80t217.5 -217.5t80 -299.5t-80 -299.5t-217.5 -217.5t-299.5 -80t-299.5 80t-217.5 217.5t-80 299.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200v100h-200v-100z" />
<glyph unicode="&#xe087;" d="M0 500v200h195q31 125 98.5 199.5t206.5 100.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h203v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206h200v-206 q149 48 201 206h-201v200h200q-25 74 -75.5 127t-124.5 77v-204h-200v203q-75 -23 -130 -77t-79 -126h209v-200h-210z" />
<glyph unicode="&#xe088;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM356 465l135 135 l-135 135l109 109l135 -135l135 135l109 -109l-135 -135l135 -135l-109 -109l-135 135l-135 -135z" />
<glyph unicode="&#xe089;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM322 537l141 141 l87 -87l204 205l142 -142l-346 -345z" />
<glyph unicode="&#xe090;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -115 62 -215l568 567q-100 62 -216 62q-171 0 -292.5 -121.5t-121.5 -292.5zM391 245q97 -59 209 -59q171 0 292.5 121.5t121.5 292.5 q0 112 -59 209z" />
<glyph unicode="&#xe091;" d="M0 547l600 453v-300h600v-300h-600v-301z" />
<glyph unicode="&#xe092;" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" />
<glyph unicode="&#xe093;" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" />
<glyph unicode="&#xe094;" d="M104 600h296v600h300v-600h298l-449 -600z" />
<glyph unicode="&#xe095;" d="M0 200q6 132 41 238.5t103.5 193t184 138t271.5 59.5v271l600 -453l-600 -448v301q-95 -2 -183 -20t-170 -52t-147 -92.5t-100 -135.5z" />
<glyph unicode="&#xe096;" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" />
<glyph unicode="&#xe097;" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -141l-295 -295l129 -130h-400z" />
<glyph unicode="&#xe101;" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5h-207q-21 0 -33 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" />
<glyph unicode="&#xe102;" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111q1 1 1 6.5t-1.5 15t-3.5 17.5l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6 h-111v-100zM100 0h400v400h-400v-400zM200 900q-3 0 14 48t36 96l18 47l213 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" />
<glyph unicode="&#xe103;" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" />
<glyph unicode="&#xe104;" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-5 -33 -20.5 -69.5t-37.5 -80.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5t30.5 2.5 t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5t8 -43t6 -39.5 t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" />
<glyph unicode="&#xe105;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" />
<glyph unicode="&#xe106;" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM120 600q210 -282 393 -336l37 141q-107 18 -178.5 101.5t-71.5 193.5 q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59 69t-44 68l-14 26zM780 161l38 145q22 15 44.5 34t46 44t40.5 44t41 50.5t33.5 43.5t33 44t24.5 34q-97 127 -140 175l39 146q67 -54 131.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40 q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" />
<glyph unicode="&#xe107;" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 34 -48 36.5t-48 -29.5l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" />
<glyph unicode="&#xe108;" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" />
<glyph unicode="&#xe109;" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" />
<glyph unicode="&#xe110;" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" />
<glyph unicode="&#xe111;" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" />
<glyph unicode="&#xe112;" d="M100 600v200h300v-250q0 -113 6 -145q17 -92 102 -117q39 -11 92 -11q37 0 66.5 5.5t50 15.5t36 24t24 31.5t14 37.5t7 42t2.5 45t0 47v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5t-89 96.5 t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" />
<glyph unicode="&#xe113;" d="M-30 411l227 -227l352 353l353 -353l226 227l-578 579z" />
<glyph unicode="&#xe114;" d="M70 797l580 -579l578 579l-226 227l-353 -353l-352 353z" />
<glyph unicode="&#xe115;" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-198l299 -283l299 283h-200v600h-796z" />
<glyph unicode="&#xe116;" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -20 -14.5 -35t-35.5 -15t-35.5 15t-14.5 35v50h-300v-50q0 -20 -14.5 -35t-35.5 -15 t-35.5 15t-14.5 35v50h-50q-21 0 -35.5 15t-14.5 35q0 21 14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" />
<glyph unicode="&#xe117;" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" />
<glyph unicode="&#xe118;" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" />
<glyph unicode="&#xe119;" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" />
<glyph unicode="&#xe120;" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" />
<glyph unicode="&#xe121;" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" />
<glyph unicode="&#xe122;" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" />
<glyph unicode="&#xe123;" d="M74 350q0 21 13.5 35.5t33.5 14.5h18l117 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-8 -3 -23 -8.5 t-65 -20t-103 -25t-132.5 -19.5t-158.5 -9q-125 0 -245.5 20.5t-178.5 40.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" />
<glyph unicode="&#xe124;" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" />
<glyph unicode="&#xe125;" d="M0 200h200v600h-200v-600zM300 275q0 -75 100 -75h61q124 -100 139 -100h250q46 0 83 57l238 344q29 31 29 74v100q0 44 -30.5 84.5t-69.5 40.5h-328q28 118 28 125v150q0 44 -30.5 84.5t-69.5 40.5h-50q-27 0 -51 -20t-38 -48l-96 -198l-145 -196q-20 -26 -20 -63v-400z M400 300v375l150 213l100 212h50v-175l-50 -225h450v-125l-250 -375h-214l-136 100h-100z" />
<glyph unicode="&#xe126;" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q124 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63zM400 525l150 -212l100 -213h50v175l-50 225h450v125l-250 375h-214l-136 -100h-100v-375z" />
<glyph unicode="&#xe127;" d="M8 200v600h200v-600h-200zM308 275v525q0 17 14 35.5t28 28.5l14 9l362 230q14 6 25 6q17 0 29 -12l109 -112q14 -14 14 -34q0 -18 -11 -32l-85 -121h302q85 0 138.5 -38t53.5 -110t-54.5 -111t-138.5 -39h-107l-130 -339q-7 -22 -20.5 -41.5t-28.5 -19.5h-341 q-7 0 -90 81t-83 94zM408 289l100 -89h293l131 339q6 21 19.5 41t28.5 20h203q16 0 25 15t9 36q0 20 -9 34.5t-25 14.5h-457h-6.5h-7.5t-6.5 0.5t-6 1t-5 1.5t-5.5 2.5t-4 4t-4 5.5q-5 12 -5 20q0 14 10 27l147 183l-86 83l-339 -236v-503z" />
<glyph unicode="&#xe128;" d="M-101 651q0 72 54 110t139 38l302 -1l-85 121q-11 16 -11 32q0 21 14 34l109 113q13 12 29 12q11 0 25 -6l365 -230q7 -4 17 -10.5t26.5 -26t16.5 -36.5v-526q0 -13 -86 -93.5t-94 -80.5h-341q-16 0 -29.5 20t-19.5 41l-130 339h-107q-84 0 -139 39t-55 111zM-1 601h222 q15 0 28.5 -20.5t19.5 -40.5l131 -339h293l107 89v502l-343 237l-87 -83l145 -184q10 -11 10 -26q0 -11 -5 -20q-1 -3 -3.5 -5.5l-4 -4t-5 -2.5t-5.5 -1.5t-6.5 -1t-6.5 -0.5h-7.5h-6.5h-476v-100zM1000 201v600h200v-600h-200z" />
<glyph unicode="&#xe129;" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6.5v7.5v6.5v456q0 22 25 31t50 -0.5t25 -30.5v-202q0 -16 20 -29.5t41 -19.5l339 -130v-294l-89 -100h-503zM400 0v200h600v-200h-600z" />
<glyph unicode="&#xe130;" d="M2 585q-16 -31 6 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM77 565l236 339h503 l89 -100v-294l-340 -130q-20 -6 -40 -20t-20 -29v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" />
<glyph unicode="&#xe131;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM298 701l2 -201h300l-2 -194l402 294l-402 298v-197h-300z" />
<glyph unicode="&#xe132;" d="M0 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t231.5 47.5q122 0 232.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-218 -217.5t-300 -80t-299.5 80t-217.5 217.5t-80 299.5zM200 600l402 -294l-2 194h300l2 201h-300v197z" />
<glyph unicode="&#xe133;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600h200v-300h200v300h200l-300 400z" />
<glyph unicode="&#xe134;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q162 0 299.5 -80t217.5 -218t80 -300t-80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM300 600l300 -400l300 400h-200v300h-200v-300h-200z" />
<glyph unicode="&#xe135;" d="M5 597q0 122 47.5 232.5t127.5 190.5t190.5 127.5t232.5 47.5q121 0 231.5 -47.5t190.5 -127.5t127.5 -190.5t47.5 -232.5q0 -162 -80 -299.5t-217.5 -217.5t-299.5 -80t-300 80t-218 217.5t-80 299.5zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60 q12 0 23 -5.5t23 -15t20 -13.5q24 -12 108 -42q22 -8 53 -31.5t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49t20.5 62q-14 9 -37 9.5t-36 7.5q-14 7 -49 15t-52 19q-9 0 -39.5 -0.5 t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5 q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5t34 21.5q-6 18 10 37q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 39 2 44q31 -13 58 -14.5t39 3.5l11 4q7 36 -16.5 53.5t-64.5 28.5t-56 23q-19 -3 -37 0 q-15 -12 -36.5 -21t-34.5 -12t-44 -8t-39 -6q-15 -3 -45.5 0.5t-45.5 -2.5q-21 -7 -52 -26.5t-34 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -24 17 -66.5t17 -43.5 q-9 2 -31 5t-36 5t-32 8t-30 14zM692 1003h1h-1z" />
<glyph unicode="&#xe136;" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" />
<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" />
<glyph unicode="&#xe138;" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" />
<glyph unicode="&#xe139;" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" />
<glyph unicode="&#xe140;" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" />
<glyph unicode="&#xe141;" d="M0 596q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 596q0 -172 121.5 -293t292.5 -121t292.5 121t121.5 293q0 171 -121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM291 655 q0 23 15.5 38.5t38.5 15.5t39 -16t16 -38q0 -23 -16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM514 609q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5 q22 0 38 -16t16 -39t-16 -39t-38 -16q-14 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5zM800 655q0 22 16 38t39 16t38.5 -15.5t15.5 -38.5t-16 -39t-38 -16q-23 0 -39 16t-16 39z" />
<glyph unicode="&#xe142;" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -78.5 -16.5t-67.5 -51.5l-389 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23 q38 0 53 -36q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60 l517 511q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-40 -24 -111 -95l-512 -512q-68 -68 -81 -163z" />
<glyph unicode="&#xe143;" d="M80 784q0 131 98.5 229.5t230.5 98.5q143 0 241 -129q103 129 246 129q129 0 226 -98.5t97 -229.5q0 -46 -17.5 -91t-61 -99t-77 -89.5t-104.5 -105.5q-197 -191 -293 -322l-17 -23l-16 23q-43 58 -100 122.5t-92 99.5t-101 100q-71 70 -104.5 105.5t-77 89.5t-61 99 t-17.5 91zM250 784q0 -27 30.5 -70t61.5 -75.5t95 -94.5l22 -22q93 -90 190 -201q82 92 195 203l12 12q64 62 97.5 97t64.5 79t31 72q0 71 -48 119.5t-105 48.5q-74 0 -132 -83l-118 -171l-114 174q-51 80 -123 80q-60 0 -109.5 -49.5t-49.5 -118.5z" />
<glyph unicode="&#xe144;" d="M57 353q0 -95 66 -159l141 -142q68 -66 159 -66q93 0 159 66l283 283q66 66 66 159t-66 159l-141 141q-8 9 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q7 -7 19 -17l105 105 l-212 212l389 389l247 -247l-95 -96l18 -17q47 -49 77 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" />
<glyph unicode="&#xe145;" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" />
<glyph unicode="&#xe146;" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" />
<glyph unicode="&#xe148;" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -29 8 -51t16.5 -34t29.5 -22.5t31 -13.5t38 -10q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5 zM700 237q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" />
<glyph unicode="&#xe149;" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q33 1 103 -16t103 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" />
<glyph unicode="&#xe150;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" />
<glyph unicode="&#xe151;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" />
<glyph unicode="&#xe152;" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" />
<glyph unicode="&#xe153;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" />
<glyph unicode="&#xe154;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" />
<glyph unicode="&#xe155;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" />
<glyph unicode="&#xe156;" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" />
<glyph unicode="&#xe157;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" />
<glyph unicode="&#xe158;" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" />
<glyph unicode="&#xe159;" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" />
<glyph unicode="&#xe160;" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" />
<glyph unicode="&#xe161;" d="M0 400v300h300v200l400 -350l-400 -350v200h-300zM500 0v200h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-500v200h400q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-400z" />
<glyph unicode="&#xe162;" d="M217 519q8 -19 31 -19h302q-155 -438 -160 -458q-5 -21 4 -32l9 -8h9q14 0 26 15q11 13 274.5 321.5t264.5 308.5q14 19 5 36q-8 17 -31 17l-301 -1q1 4 78 219.5t79 227.5q2 15 -5 27l-9 9h-9q-15 0 -25 -16q-4 -6 -98 -111.5t-228.5 -257t-209.5 -237.5q-16 -19 -6 -41 z" />
<glyph unicode="&#xe163;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q47 0 100 15v185h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h500v185q-14 4 -114 7.5t-193 5.5l-93 2q-165 0 -282.5 -117.5t-117.5 -282.5v-300zM600 400v300h300v200l400 -350l-400 -350v200h-300z " />
<glyph unicode="&#xe164;" d="M0 400q0 -165 117.5 -282.5t282.5 -117.5h300q163 0 281.5 117.5t118.5 282.5v98l-78 73l-122 -123v-148q0 -41 -29.5 -70.5t-70.5 -29.5h-500q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5h156l118 122l-74 78h-100q-165 0 -282.5 -117.5t-117.5 -282.5 v-300zM496 709l353 342l-149 149h500v-500l-149 149l-342 -353z" />
<glyph unicode="&#xe165;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM406 600 q0 80 57 137t137 57t137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137z" />
<glyph unicode="&#xe166;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 800l445 -500l450 500h-295v400h-300v-400h-300zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe167;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 700h300v-300h300v300h295l-445 500zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe168;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 705l305 -305l596 596l-154 155l-442 -442l-150 151zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe169;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM100 988l97 -98l212 213l-97 97zM200 400l697 1l3 699l-250 -239l-149 149l-212 -212l149 -149zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe170;" d="M0 0v275q0 11 7 18t18 7h1048q11 0 19 -7.5t8 -17.5v-275h-1100zM200 612l212 -212l98 97l-213 212zM300 1200l239 -250l-149 -149l212 -212l149 148l249 -237l-1 697zM900 150h100v50h-100v-50z" />
<glyph unicode="&#xe171;" d="M23 415l1177 784v-1079l-475 272l-310 -393v416h-392zM494 210l672 938l-672 -712v-226z" />
<glyph unicode="&#xe172;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-850q0 -21 -15 -35.5t-35 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe173;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-218l-276 -275l-120 120l-126 -127h-378v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM581 306l123 123l120 -120l353 352l123 -123l-475 -476zM600 1000h100v200h-100v-200z" />
<glyph unicode="&#xe174;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-269l-103 -103l-170 170l-298 -298h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 1000h100v200h-100v-200zM700 133l170 170l-170 170l127 127l170 -170l170 170l127 -128l-170 -169l170 -170 l-127 -127l-170 170l-170 -170z" />
<glyph unicode="&#xe175;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-300h-400v-200h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300l300 -300l300 300h-200v300h-200v-300h-200zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe176;" d="M0 150v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100l200 -200v-402l-200 200l-298 -298h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5zM600 300h200v-300h200v300h200l-300 300zM600 1000v200h100v-200h-100z" />
<glyph unicode="&#xe177;" d="M0 250q0 -21 14.5 -35.5t35.5 -14.5h1100q21 0 35.5 14.5t14.5 35.5v550h-1200v-550zM0 900h1200v150q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 300v200h400v-200h-400z" />
<glyph unicode="&#xe178;" d="M0 400l300 298v-198h400v-200h-400v-198zM100 800v200h100v-200h-100zM300 800v200h100v-200h-100zM500 800v200h400v198l300 -298l-300 -298v198h-400zM800 300v200h100v-200h-100zM1000 300h100v200h-100v-200z" />
<glyph unicode="&#xe179;" d="M100 700v400l50 100l50 -100v-300h100v300l50 100l50 -100v-300h100v300l50 100l50 -100v-400l-100 -203v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447zM800 597q0 -29 10.5 -55.5t25 -43t29 -28.5t25.5 -18l10 -5v-397q0 -21 14.5 -35.5 t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v1106q0 31 -18 40.5t-44 -7.5l-276 -116q-25 -17 -43.5 -51.5t-18.5 -65.5v-359z" />
<glyph unicode="&#xe180;" d="M100 0h400v56q-75 0 -87.5 6t-12.5 44v394h500v-394q0 -38 -12.5 -44t-87.5 -6v-56h400v56q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v888q0 22 25 34.5t50 13.5l25 2v56h-400v-56q75 0 87.5 -6t12.5 -44v-394h-500v394q0 38 12.5 44t87.5 6v56h-400v-56q4 0 11 -0.5 t24 -3t30 -7t24 -15t11 -24.5v-888q0 -22 -25 -34.5t-50 -13.5l-25 -2v-56z" />
<glyph unicode="&#xe181;" d="M0 300q0 -41 29.5 -70.5t70.5 -29.5h300q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-300q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM100 100h400l200 200h105l295 98v-298h-425l-100 -100h-375zM100 300v200h300v-200h-300zM100 600v200h300v-200h-300z M100 1000h400l200 -200v-98l295 98h105v200h-425l-100 100h-375zM700 402v163l400 133v-163z" />
<glyph unicode="&#xe182;" d="M16.5 974.5q0.5 -21.5 16 -90t46.5 -140t104 -177.5t175 -208q103 -103 207.5 -176t180 -103.5t137 -47t92.5 -16.5l31 1l163 162q17 18 13.5 41t-22.5 37l-192 136q-19 14 -45 12t-42 -19l-118 -118q-142 101 -268 227t-227 268l118 118q17 17 20 41.5t-11 44.5 l-139 194q-14 19 -36.5 22t-40.5 -14l-162 -162q-1 -11 -0.5 -32.5z" />
<glyph unicode="&#xe183;" d="M0 50v212q0 20 10.5 45.5t24.5 39.5l365 303v50q0 4 1 10.5t12 22.5t30 28.5t60 23t97 10.5t97 -10t60 -23.5t30 -27.5t12 -24l1 -10v-50l365 -303q14 -14 24.5 -39.5t10.5 -45.5v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-20 0 -35 14.5t-15 35.5zM0 712 q0 -21 14.5 -33.5t34.5 -8.5l202 33q20 4 34.5 21t14.5 38v146q141 24 300 24t300 -24v-146q0 -21 14.5 -38t34.5 -21l202 -33q20 -4 34.5 8.5t14.5 33.5v200q-6 8 -19 20.5t-63 45t-112 57t-171 45t-235 20.5q-92 0 -175 -10.5t-141.5 -27t-108.5 -36.5t-81.5 -40 t-53.5 -36.5t-31 -27.5l-9 -10v-200z" />
<glyph unicode="&#xe184;" d="M100 0v100h1100v-100h-1100zM175 200h950l-125 150v250l100 100v400h-100v-200h-100v200h-200v-200h-100v200h-200v-200h-100v200h-100v-400l100 -100v-250z" />
<glyph unicode="&#xe185;" d="M100 0h300v400q0 41 -29.5 70.5t-70.5 29.5h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-400zM500 0v1000q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-1000h-300zM900 0v700q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-700h-300z" />
<glyph unicode="&#xe186;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe187;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h100v200h100v-200h100v500h-100v-200h-100v200h-100v-500zM600 300h200v100h100v300h-100v100h-200v-500 zM700 400v300h100v-300h-100z" />
<glyph unicode="&#xe188;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v100h-200v300h200v100h-300v-500zM600 300h300v100h-200v300h200v100h-300v-500z" />
<glyph unicode="&#xe189;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 550l300 -150v300zM600 400l300 150l-300 150v-300z" />
<glyph unicode="&#xe190;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300v500h700v-500h-700zM300 400h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130v-300zM575 549 q0 -65 27 -107t68 -42h130v300h-130q-38 0 -66.5 -43t-28.5 -108z" />
<glyph unicode="&#xe191;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v300h-200v100h200v100h-300v-300h200v-100h-200v-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe192;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 300h300v400h-200v100h-100v-500zM301 400v200h100v-200h-100zM601 300h100v100h-100v-100zM700 700h100 v-400h100v500h-200v-100z" />
<glyph unicode="&#xe193;" d="M-100 300v500q0 124 88 212t212 88h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212zM100 200h900v700h-900v-700zM200 700v100h300v-300h-99v-100h-100v100h99v200h-200zM201 300v100h100v-100h-100zM601 300v100h100v-100h-100z M700 700v100h200v-500h-100v400h-100z" />
<glyph unicode="&#xe194;" d="M4 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM186 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 500v200 l100 100h300v-100h-300v-200h300v-100h-300z" />
<glyph unicode="&#xe195;" d="M0 600q0 162 80 299t217 217t299 80t299 -80t217 -217t80 -299t-80 -299t-217 -217t-299 -80t-299 80t-217 217t-80 299zM182 600q0 -171 121.5 -292.5t292.5 -121.5t292.5 121.5t121.5 292.5t-121.5 292.5t-292.5 121.5t-292.5 -121.5t-121.5 -292.5zM400 400v400h300 l100 -100v-100h-100v100h-200v-100h200v-100h-200v-100h-100zM700 400v100h100v-100h-100z" />
<glyph unicode="&#xe197;" d="M-14 494q0 -80 56.5 -137t135.5 -57h222v300h400v-300h128q120 0 205 86.5t85 207.5t-85 207t-205 86q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200h200v300h200v-300h200 l-300 -300z" />
<glyph unicode="&#xe198;" d="M-14 494q0 -80 56.5 -137t135.5 -57h8l414 414l403 -403q94 26 154.5 104.5t60.5 178.5q0 120 -85 206.5t-205 86.5q-46 0 -90 -14q-44 97 -134.5 156.5t-200.5 59.5q-152 0 -260 -107.5t-108 -260.5q0 -25 2 -37q-66 -14 -108.5 -67.5t-42.5 -122.5zM300 200l300 300 l300 -300h-200v-300h-200v300h-200z" />
<glyph unicode="&#xe199;" d="M100 200h400v-155l-75 -45h350l-75 45v155h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170z" />
<glyph unicode="&#xe200;" d="M121 700q0 -53 28.5 -97t75.5 -65q-4 -16 -4 -38q0 -74 52.5 -126.5t126.5 -52.5q56 0 100 30v-306l-75 -45h350l-75 45v306q46 -30 100 -30q74 0 126.5 52.5t52.5 126.5q0 24 -9 55q50 32 79.5 83t29.5 112q0 90 -61.5 155.5t-150.5 71.5q-26 89 -99.5 145.5 t-167.5 56.5q-116 0 -197.5 -81.5t-81.5 -197.5q0 -4 1 -11.5t1 -11.5q-14 2 -23 2q-74 0 -126.5 -52.5t-52.5 -126.5z" />
</font>
</defs></svg>

BIN
Sevomin.News/fonts/glyphicons-halflings-regular.ttf View File


BIN
Sevomin.News/fonts/glyphicons-halflings-regular.woff View File


BIN
Sevomin.News/images/revert-logo.png View File

Before After
Width: 302  |  Height: 302  |  Size: 4.6 KiB

+ 10
- 0
Sevomin.News/packages.config View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AjaxMin" version="5.8.5172.27710" targetFramework="net45" />
<package id="AjaxMin" version="5.9.5229.26438" targetFramework="net451" />
<package id="Microsoft.AspNet.Razor" version="3.1.2" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="3.1.2" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="xmlrpcnet" version="3.0.0.266" targetFramework="net45" />
<package id="xmlrpcnet-server" version="3.0.0.266" targetFramework="net45" />
</packages>

+ 14
- 0
Sevomin.News/posts/05e94568-232b-42d2-81c1-d4bf5ef46b5d.xml View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<post>
<title>این یک پست جدید است</title>
<slug>----</slug>
<author>sevomin</author>
<pubDate>2014-04-30 12:54:13</pubDate>
<lastModified>2014-04-30 12:54:13</lastModified>
<content>بله این پست بسیار خوب و وزین است</content>
<ispublished>true</ispublished>
<categories>
<category></category>
</categories>
<comments></comments>
</post>

+ 14
- 0
Sevomin.News/posts/504c5b77-1965-476b-8405-0e47db1309d1.xml View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<post>
<title>پستی در پست‌های موجود</title>
<slug>---</slug>
<author>sevomin</author>
<pubDate>2014-04-30 12:52:38</pubDate>
<lastModified>2014-04-30 12:52:38</lastModified>
<content>&lt;div style="text-align: right;direction:rtl"&gt;&lt;span style="line-height: 1.428571429;"&gt;این پست شامل کلیه پست‌هایی می‌باشد که در وب سایت نمایش داده خواهد شد.&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;/div&gt;</content>
<ispublished>true</ispublished>
<categories>
<category></category>
</categories>
<comments></comments>
</post>

+ 61
- 0
Sevomin.News/posts/files/9fa751db-c036-435b-97e3-bd6373b0991b.xml View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<post>
<title>Web Developer Checklist</title>
<slug>chrome-extension-web-developer-checklist</slug>
<author></author>
<pubDate>2013-06-06 11:44:23</pubDate>
<lastModified>2014-04-16 19:00:53</lastModified>
<content>&lt;p&gt;Earlier this year, &lt;a href="http://sedodream.com/" target="_blank"&gt;Sayed&lt;/a&gt; and I released &lt;a href="http://webdevchecklist.com/" target="_blank"&gt;Web Developer Checklist&lt;/a&gt; to help web developer adhere to best practices. Checklists like these can be really helpful to make sure we don’t forget anything before releasing new or updated websites. &lt;/p&gt; &lt;p&gt;&lt;img width="279" height="580" title="image" style="padding-left: 10px; float: right;" alt="image" src="/posts/files/image.png" /&gt;Now we’re introducing Web Developer Checklist as a &lt;a href="https://chrome.google.com/webstore/detail/web-developer-checklist/iahamcpedabephpcgkeikbclmaljebjp" target="_blank"&gt;Chrome extension&lt;/a&gt; that can automate a big portion of the checklist. The extension let’s you run checks for various best practices on any website - including your own running from localhost.&lt;/p&gt; &lt;p&gt;It performs a series of checks by analyzing the DOM as well as integrating with 3&lt;sup&gt;rd&lt;/sup&gt;-party services like &lt;a href="https://developers.google.com/speed/pagespeed/" target="_blank"&gt;Google PageSpeed&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Next steps&lt;/h2&gt; &lt;p&gt;This first version of the &lt;a href="https://chrome.google.com/webstore/detail/web-developer-checklist/iahamcpedabephpcgkeikbclmaljebjp" target="_blank"&gt;Web Developer Checklist Chrome extension&lt;/a&gt; does a series of really valuable checks. The next releases will have even more.&lt;/p&gt; &lt;p&gt;Specifically, we’re looking at adding:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;HTML validation &lt;/li&gt;&lt;li&gt;CSS validation &lt;/li&gt;&lt;li&gt;Accessibility validation &lt;/li&gt;&lt;li&gt;JSHint &lt;/li&gt;&lt;li&gt;CssLint &lt;/li&gt;&lt;li&gt;Guidance for each item&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;We think these checks would be hugely beneficial. If you have ideas for other checks that can be automated, please let us know in the comments below.&lt;/p&gt; &lt;h2&gt;Open source&lt;/h2&gt; &lt;p&gt;The Web Developer Checklist Chrome extension is open source and hosted on our &lt;a href="https://github.com/ligershark/BestPracticesChromeExtension" target="_blank"&gt;GitHub org&lt;/a&gt;. As always, pull requests are more than welcome.&lt;/p&gt;</content>
<ispublished>true</ispublished>
<categories>
<category>Chrome</category>
<category>Best Practices</category>
</categories>
<comments>
<comment isAdmin="false" isApproved="true" id="0a524d41-f95e-4746-a22d-59525d7ea475">
<author>Jason</author>
<email>[email protected]</email>
<website></website>
<ip></ip>
<userAgent></userAgent>
<date>2013-06-06 12:14:47</date>
<content>Very useful extension. In the few minutes I&amp;#39;ve played with it so far I&amp;#39;ve found a few items that can be improved on my site. I&amp;#39;d love to see some guidance baked into the tool. For example, for &amp;quot;Add meaning with Microdata&amp;quot; it would be beneficial to provide a link for further reading/some rudimentary tips, etc. &lt;br /&gt;&lt;br /&gt;Great work - I look forward to seeing this extension evolving!</content>
</comment>
<comment isAdmin="true" isApproved="true" id="5edbaac8-eddf-4e52-90fb-c6cc40e3dad8">
<author>Mads Kristensen</author>
<email>[email protected]</email>
<website></website>
<ip></ip>
<userAgent></userAgent>
<date>2013-06-06 12:23:46</date>
<content>Yes, I should update the roadmap because that is exactly what we are planning for as well. Thanks for the heads up!</content>
</comment>
<comment isAdmin="false" isApproved="true" id="cb6f1e5f-d42c-444f-aa47-4ad7b2bd91fa">
<author>Maiis</author>
<email>[email protected]</email>
<website></website>
<ip></ip>
<userAgent></userAgent>
<date>2013-06-06 12:55:53</date>
<content>This page dosen&amp;#39;t get a green status :p</content>
</comment>
<comment isAdmin="true" isApproved="true" id="ec20fc8c-f2e5-43ec-81d7-f66fcc35e7ee">
<author>Mads Kristensen</author>
<email>[email protected]</email>
<website></website>
<ip></ip>
<userAgent></userAgent>
<date>2013-06-06 13:12:43</date>
<content>Yeah, that is rather ironic :)</content>
</comment>
<comment isAdmin="false" isApproved="false" id="c9005981-89f1-498a-9684-afa05b2448a9">
<author>Maiis</author>
<email>[email protected]</email>
<website></website>
<ip></ip>
<userAgent></userAgent>
<date>2013-06-06 14:55:53</date>
<content>A new not yet approved comment.</content>
</comment>
</comments>
</post>

+ 5
- 0
Sevomin.News/scripts/_references.js View File

@ -0,0 +1,5 @@
/// <autosync enabled="true" />
/// <reference path="admin.js" />
/// <reference path="bootstrap-wysiwyg.js" />
/// <reference path="comments.js" />
/// <reference path="jquery-2.0.2.js" />

+ 226
- 0
Sevomin.News/scripts/admin.js View File

@ -0,0 +1,226 @@
(function ($) {
// #region Helpers
function ConvertMarkupToValidXhtml(markup) {
var docImplementation = document.implementation;
var htmlDocument = docImplementation.createHTMLDocument("temp");
var xHtmlDocument = docImplementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
var xhtmlBody = xHtmlDocument.createElementNS('http://www.w3.org/1999/xhtml', 'body');
htmlDocument.body.innerHTML = "<div>" + markup + "</div>";
xHtmlDocument.documentElement.appendChild(xhtmlBody);
xHtmlDocument.importNode(htmlDocument.body, true);
xhtmlBody.appendChild(htmlDocument.body.firstChild);
/<body.*?><div>(.*?)<\/div><\/body>/im.exec(xHtmlDocument.documentElement.innerHTML);
return RegExp.$1;
}
// #endregion
var postId, isNew,
txtTitle, txtContent, txtMessage, txtImage, chkPublish,
btnNew, btnEdit, btnDelete, btnSave, btnCancel,
editPost = function () {
txtTitle.attr('contentEditable', true);
txtContent.wysiwyg({ hotKeys: {}, activeToolbarClass: "active" });
txtContent.css({ minHeight: "400px" });
txtContent.focus();
btnNew.attr("disabled", true);
btnEdit.attr("disabled", true);
btnSave.removeAttr("disabled");
btnCancel.removeAttr("disabled");
chkPublish.removeAttr("disabled");
showCategoriesForEditing();
toggleSourceView();
$("#tools").fadeIn().css("display", "inline-block");
},
cancelEdit = function () {
if (isNew) {
if (confirm("Do you want to leave this page?")) {
history.back();
}
} else {
txtTitle.removeAttr('contentEditable');
txtContent.removeAttr('contentEditable');
btnCancel.focus();
btnNew.removeAttr("disabled");
btnEdit.removeAttr("disabled");
btnSave.attr("disabled", true);
btnCancel.attr("disabled", true);
chkPublish.attr("disabled", true);
showCategoriesForDisplay();
$("#tools").fadeOut();
}
},
toggleSourceView = function () {
$(".source").bind("click", function () {
var self = $(this);
if (self.attr("data-cmd") === "source") {
self.attr("data-cmd", "design");
self.addClass("active");
txtContent.text(txtContent.html());
} else {
self.attr("data-cmd", "source");
self.removeClass("active");
txtContent.html(txtContent.text());
}
});
},
savePost = function (e) {
if ($(".source").attr("data-cmd") === "design") {
$(".source").click();
}
txtContent.cleanHtml();
var parsedDOM;
/* IE9 doesn't support text/html MimeType https://github.com/madskristensen/MiniBlog/issues/35
parsedDOM = new DOMParser().parseFromString(txtContent.html(), 'text/html');
parsedDOM = new XMLSerializer().serializeToString(parsedDOM);
/<body>(.*)<\/body>/im.exec(parsedDOM);
parsedDOM = RegExp.$1;
*/
/* When its time to drop IE9 support toggle commented region with
the following statement and ConvertMarkupToXhtml function */
parsedDOM = ConvertMarkupToValidXhtml(txtContent.html());
$.post("/post.ashx?mode=save", {
id: postId,
isPublished: chkPublish[0].checked,
title: txtTitle.text().trim(),
content: parsedDOM,
categories: getPostCategories(),
token: document.querySelector("[data-token]").getAttribute("data-token")
})
.success(function (data) {
if (isNew) {
location.href = data;
return;
}
showMessage(true, "The post was saved successfully");
cancelEdit(e);
})
.fail(function (data) {
if (data.status === 409) {
showMessage(false, "The title is already in use");
} else {
showMessage(false, "Something bad happened. Server reported " + data.status + " " + data.statusText);
}
});
},
deletePost = function () {
if (confirm("Are you sure you want to delete this post?")) {
$.post("/post.ashx?mode=delete", { id: postId, token: document.querySelector("[data-token]").getAttribute("data-token") })
.success(function () { location.href = "/"; })
.fail(function () { showMessage(false, "Something went wrong. Please try again"); });
}
},
showMessage = function (success, message) {
var className = success ? "alert-success" : "alert-error";
txtMessage.addClass(className);
txtMessage.text(message);
txtMessage.parent().fadeIn();
setTimeout(function () {
txtMessage.parent().fadeOut("slow", function () {
txtMessage.removeClass(className);
});
}, 4000);
},
getPostCategories = function () {
var categories = '';
if ($("#txtCategories").length > 0) {
categories = $("#txtCategories").val();
} else {
$("ul.categories li a").each(function (index, item) {
if (categories.length > 0) {
categories += ",";
}
categories += $(item).html();
});
}
return categories;
},
showCategoriesForEditing = function () {
var firstItemPassed = false;
var categoriesString = getPostCategories();
$("ul.categories li").each(function (index, item) {
if (!firstItemPassed) {
firstItemPassed = true;
} else {
$(item).remove();
}
});
$("ul.categories").append("<li><input id='txtCategories' class='form-control' /></li>");
$("#txtCategories").val(categoriesString);
},
showCategoriesForDisplay = function () {
if ($("#txtCategories").length > 0) {
var categoriesArray = $("#txtCategories").val().split(',');
$("#txtCategories").parent().remove();
$.each(categoriesArray, function (index, category) {
$("ul.categories").append(' <li itemprop="articleSection" title="' + category + '"> <a href="/category/' + encodeURIComponent(category.toLowerCase()) + '">' + category + '</a> </li> ');
});
}
};
isNew = location.pathname.replace(/\//g, "") === "postnew";
postId = $("[itemprop~='blogPost']").attr("data-id");
txtTitle = $("[itemprop~='blogPost'] [itemprop~='name']");
txtContent = $("[itemprop~='articleBody']");
txtMessage = $("#admin .alert");
txtImage = $("#admin #txtImage");
btnNew = $("#btnNew");
btnEdit = $("#btnEdit").bind("click", editPost);
btnDelete = $("#btnDelete").bind("click", deletePost);
btnSave = $("#btnSave").bind("click", savePost);
btnCancel = $("#btnCancel").bind("click", cancelEdit);
chkPublish = $("#ispublished").find("input[type=checkbox]");
$(document).keyup(function (e) {
if (!document.activeElement.isContentEditable) {
if (e.keyCode === 46) { // Delete key
deletePost();
} else if (e.keyCode === 27) { // ESC key
cancelEdit();
}
}
});
$('.uploadimage').click(function (e) {
e.preventDefault();
$('#txtImage').click();
});
if (isNew) {
editPost();
$("#ispublished").fadeIn();
chkPublish[0].checked = true;
} else if (txtTitle !== null && txtTitle.length === 1 && location.pathname.length > 1) {
btnEdit.removeAttr("disabled");
btnDelete.removeAttr("disabled");
$("#ispublished").css({ "display": "inline" });
}
})(jQuery);

+ 217
- 0
Sevomin.News/scripts/bootstrap-wysiwyg.js View File

@ -0,0 +1,217 @@
/* http://github.com/mindmup/bootstrap-wysiwyg */
/*global jQuery, $, FileReader*/
/*jslint browser:true*/
(function ($) {
'use strict';
var readFileIntoDataUrl = function (fileInfo) {
var loader = $.Deferred(),
fReader = new FileReader();
fReader.onload = function (e) {
loader.resolve(e.target.result);
};
fReader.onerror = loader.reject;
fReader.onprogress = loader.notify;
fReader.readAsDataURL(fileInfo);
return loader.promise();
};
$.fn.cleanHtml = function () {
var html = $(this).html();
return html && html.replace(/(<br>|\s|<div><br><\/div>|&nbsp;)*$/, '');
};
$.fn.wysiwyg = function (userOptions) {
var editor = this,
selectedRange,
options,
toolbarBtnSelector,
updateToolbar = function () {
if (options.activeToolbarClass) {
$(options.toolbarSelector).find(toolbarBtnSelector).each(function () {
var command = $(this).data(options.commandRole);
try {
if (document.queryCommandState(command)) {
$(this).addClass(options.activeToolbarClass);
} else {
$(this).removeClass(options.activeToolbarClass);
}
}
catch (ex) { };
});
}
},
execCommand = function (commandWithArgs, valueArg) {
var commandArr = commandWithArgs.split(' '),
command = commandArr.shift(),
args = commandArr.join(' ') + (valueArg || '');
if (commandWithArgs === "createLink")
args = prompt("Enter the URL for this link:", "http://");
document.execCommand(command, 0, args);
updateToolbar();
},
bindHotkeys = function (hotKeys) {
$.each(hotKeys, function (hotkey, command) {
editor.keydown(hotkey, function (e) {
if (editor.attr('contenteditable') && editor.is(':visible')) {
e.preventDefault();
e.stopPropagation();
execCommand(command);
}
}).keyup(hotkey, function (e) {
if (editor.attr('contenteditable') && editor.is(':visible')) {
e.preventDefault();
e.stopPropagation();
}
});
});
},
getCurrentRange = function () {
var sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
return sel.getRangeAt(0);
}
},
saveSelection = function () {
selectedRange = getCurrentRange();
},
restoreSelection = function () {
var selection = window.getSelection();
if (selectedRange) {
try {
selection.removeAllRanges();
} catch (ex) {
document.body.createTextRange().select();
document.selection.empty();
}
selection.addRange(selectedRange);
}
},
insertFiles = function (files) {
editor.focus();
$.each(files, function (idx, fileInfo) {
if (/^image\//.test(fileInfo.type)) {
$.when(options.readFileIntoUrl(fileInfo)).done(function (dataUrl) {
execCommand('insertimage', dataUrl);
}).fail(function (e) {
options.fileUploadError("file-reader", e);
});
} else {
$.when(options.readFileIntoUrl(fileInfo)).done(function (dataUrl) {
//execCommand('inserthtml', '<a href="' + dataUrl + '">Download</a>');
var frag = document.createDocumentFragment();
var node = document.createElement("a");
node.innerText = fileInfo.name;
node.href = dataUrl;
frag.appendChild(node);
window.getSelection().getRangeAt(0).insertNode(node);
}).fail(function (e) {
options.fileUploadError("file-reader", e);
});
//options.fileUploadError("unsupported-file-type", fileInfo.type);
}
});
},
markSelection = function (input, color) {
restoreSelection();
if (document.queryCommandSupported('hiliteColor')) {
document.execCommand('hiliteColor', 0, color || 'transparent');
}
saveSelection();
input.data(options.selectionMarker, color);
},
bindToolbar = function (toolbar, options) {
toolbar.find(toolbarBtnSelector).click(function () {
restoreSelection();
editor.focus();
execCommand($(this).data(options.commandRole));
saveSelection();
});
toolbar.find('[data-toggle=dropdown]').click(restoreSelection);
toolbar.find('input[type=text][data-' + options.commandRole + ']').on('webkitspeechchange change', function () {
var newValue = this.value; /* ugly but prevents fake double-calls due to selection restoration */
this.value = '';
restoreSelection();
if (newValue) {
editor.focus();
execCommand($(this).data(options.commandRole), newValue);
}
saveSelection();
}).on('focus', function () {
var input = $(this);
if (!input.data(options.selectionMarker)) {
markSelection(input, options.selectionColor);
input.focus();
}
}).on('blur', function () {
var input = $(this);
if (input.data(options.selectionMarker)) {
markSelection(input, false);
}
});
toolbar.find('input[type=file][data-' + options.commandRole + ']').change(function () {
restoreSelection();
if (this.type === 'file' && this.files && this.files.length > 0) {
insertFiles(this.files);
}
saveSelection();
this.value = '';
});
},
initFileDrops = function () {
editor.on('dragenter dragover', false)
.on('drop', function (e) {
var dataTransfer = e.originalEvent.dataTransfer;
e.stopPropagation();
e.preventDefault();
if (dataTransfer && dataTransfer.files && dataTransfer.files.length > 0) {
insertFiles(dataTransfer.files);
}
});
};
options = $.extend({}, $.fn.wysiwyg.defaults, userOptions);
toolbarBtnSelector = 'a[data-' + options.commandRole + '],button[data-' + options.commandRole + '],input[type=button][data-' + options.commandRole + ']';
bindHotkeys(options.hotKeys);
if (options.dragAndDropImages) {
initFileDrops();
}
bindToolbar($(options.toolbarSelector), options);
editor.attr('contenteditable', true)
.on('mouseup keyup mouseout', function () {
saveSelection();
updateToolbar();
});
$(window).bind('touchend', function (e) {
var isInside = (editor.is(e.target) || editor.has(e.target).length > 0),
currentRange = getCurrentRange(),
clear = currentRange && (currentRange.startContainer === currentRange.endContainer && currentRange.startOffset === currentRange.endOffset);
if (!clear || isInside) {
saveSelection();
updateToolbar();
}
});
return this;
};
$.fn.wysiwyg.defaults = {
hotKeys: {
'ctrl+b meta+b': 'bold',
'ctrl+i meta+i': 'italic',
'ctrl+u meta+u': 'underline',
'ctrl+z meta+z': 'undo',
'ctrl+y meta+y meta+shift+z': 'redo',
'ctrl+l meta+l': 'justifyleft',
'ctrl+r meta+r': 'justifyright',
'ctrl+e meta+e': 'justifycenter',
'ctrl+j meta+j': 'justifyfull',
'shift+tab': 'outdent',
'tab': 'indent'
},
toolbarSelector: '[data-role=editor-toolbar]',
commandRole: 'edit',
activeToolbarClass: 'btn-info',
selectionMarker: 'edit-focus-marker',
selectionColor: 'darkgrey',
dragAndDropImages: true,
fileUploadError: function (reason, detail) { console.log("File upload error", reason, detail); },
readFileIntoUrl: readFileIntoDataUrl
};
}(window.jQuery));

+ 271
- 0
Sevomin.News/scripts/comments.js View File

@ -0,0 +1,271 @@
/* globals NodeList, HTMLCollection */
(function () {
var postId = null;
//#region Helpers
function objectToUrl(obj) {
var string = '';
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
string += prop + '=' + obj[prop].replace(/ /g, '+') + '&';
}
}
return string.substring(0, string.length - 1);
}
var AsynObject = AsynObject ? AsynObject : {};
AsynObject.ajax = function (url, callback) {
var ajaxRequest = AsynObject.getAjaxRequest(callback);
ajaxRequest.open("GET", url, true);
ajaxRequest.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
ajaxRequest.send(null);
};
AsynObject.postAjax = function (url, callback, data) {
var ajaxRequest = AsynObject.getAjaxRequest(callback);
ajaxRequest.open("POST", url, true);
ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajaxRequest.send(objectToUrl(data));
};
AsynObject.getAjaxRequest = function (callback) {
var ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange = function () {
if (ajaxRequest.readyState > 1 && ajaxRequest.status > 0) {
callback(ajaxRequest.readyState, ajaxRequest.status, ajaxRequest.responseText);
}
};
return ajaxRequest;
};
function hasClass(elem, className) {
return new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');
}
function addClass(elem, className) {
if (!hasClass(elem, className)) {
elem.className += ' ' + className;
}
}
function removeClass(elem, className) {
var newClass = ' ' + elem.className.replace(/[\t\r\n]/g, ' ') + ' ';
if (hasClass(elem, className)) {
while (newClass.indexOf(' ' + className + ' ') >= 0) {
newClass = newClass.replace(' ' + className + ' ', ' ');
}
elem.className = newClass.replace(/^\s+|\s+$/g, '');
}
}
function toDOM(htmlString) {
var wrapper = document.createElement('div');
wrapper.innerHTML = htmlString;
return wrapper.children;
}
function getParentsByAttribute(element, attr, value) {
var arr = [];
while (element) {
element = element.parentNode;
if (element.hasAttribute(attr) && element.getAttribute(attr) === value) {
arr.push(element);
}
if (!element.parentNode.parentNode) {
break;
}
}
return arr;
}
Element.prototype.remove = function () {
this.parentElement.removeChild(this);
};
NodeList.prototype.remove = HTMLCollection.prototype.remove = function () {
for (var i = 0, len = this.length; i < len; i++) {
if (this[i] && this[i].parentElement) {
this[i].parentElement.removeChild(this[i]);
}
}
};
function slide(thisObj, direction, callback) {
if (direction === "Up") {
thisObj.style.height = '0px';
} else {
var clone = thisObj.cloneNode(true);
clone.style.position = 'absolute';
clone.style.visibility = 'hidden';
clone.style.height = 'auto';
addClass(clone, 'slideClone col-md-6 col-md-offset-3');
document.body.appendChild(clone);
var slideClone = document.getElementsByClassName("slideClone")[0];
var newHeight = slideClone.clientHeight;
slideClone.remove();
thisObj.style.height = newHeight + 'px';
if (callback) {
setTimeout(function () {
callback();
}, 500);
}
}
}
//#endregion
var endpoint = "/comment.ashx";
function deleteComment(commentId, element) {
if (confirm("Do you want to delete this comment?")) {
AsynObject.postAjax(endpoint, function (state, status) {
if (state === 4 && status === 200) {
slide(element, "Up", function () {
element.remove();
});
return;
} else if (status !== 200) {
alert("Something went wrong. Please try again");
}
}, {
mode: "delete",
postId: postId,
commentId: commentId,
token: document.querySelector("[data-token]").getAttribute("data-token")
});
}
}
function approveComment(commentId, element) {
AsynObject.postAjax(endpoint, function (state, status) {
if (state === 4 && status === 200) {
element.remove();
return;
} else if (status !== 200) {
alert("Something went wrong. Please try again");
}
}, {
mode: "approve",
postId: postId,
commentId: commentId,
token: document.querySelector("[data-token]").getAttribute("data-token")
});
}
function saveComment(name, email, website, content, callback) {
if (localStorage) {
localStorage.setItem("name", name);
localStorage.setItem("email", email);
localStorage.setItem("website", website);
}
AsynObject.postAjax(endpoint, function (state, status, data) {
var elemStatus = document.getElementById("status");
if (state === 4 && status === 200) {
elemStatus.innerHTML = "Your comment has been added";
removeClass(elemStatus, "alert-danger");
addClass(elemStatus, "alert-success");
document.getElementById("commentcontent").value = "";
var comment = toDOM(data)[0];
comment.style.height = "0px";
var elemComments = document.getElementById("comments");
elemComments.appendChild(comment);
slide(comment, "Down");
callback(true);
return;
} else if (status !== 200) {
addClass(elemStatus, "alert-danger");
elemStatus.innerText = "Unable to add comment";
callback(false);
}
}, {
mode: "save",
postId: postId,
name: name,
email: email,
website: website,
content: content,
token: document.querySelector("[data-token]").getAttribute("data-token"),
});
}
function initialize() {
postId = document.querySelector("[itemprop=blogPost]").getAttribute("data-id");
var email = document.getElementById("commentemail");
var name = document.getElementById("commentname");
var website = document.getElementById("commenturl");
var content = document.getElementById("commentcontent");
var commentForm = document.getElementById("commentform");
var allComments = document.querySelectorAll("[itemprop=comment]");
for (var i = 0; i < allComments.length; ++i) {
allComments[i].style.height = allComments[i].clientHeight + 'px';
}
commentForm.onsubmit = function (e) {
e.preventDefault();
var button = e.target;
button.setAttribute("disabled", true);
saveComment(name.value, email.value, website.value, content.value, function () {
button.removeAttribute("disabled");
});
};
website.addEventListener("keyup", function (e) {
var w = e.target;
if (w.value.trim().length >= 4 && w.value.indexOf("http") === -1) {
w.value = "http://" + w.value;
}
});
window.addEventListener("click", function (e) {
var tag = e.target;
if (hasClass(tag, "deletecomment")) {
var comment = getParentsByAttribute(tag, "itemprop", "comment")[0];
deleteComment(comment.getAttribute("data-id"), comment);
}
if (hasClass(tag, "approvecomment")) {
var comment = getParentsByAttribute(tag, "itemprop", "comment")[0];
approveComment(comment.getAttribute("data-id"), tag);
}
});
if (localStorage) {
email.value = localStorage.getItem("email");
website.value = localStorage.getItem("website");
if (name.value.length === 0) {
name.value = localStorage.getItem("name");
}
}
}
if (document.getElementById("commentform")) {
initialize();
}
})();

+ 2670
- 0
Sevomin.News/scripts/jquery-2.0.2.intellisense.js
File diff suppressed because it is too large
View File


+ 8842
- 0
Sevomin.News/scripts/jquery-2.0.2.js
File diff suppressed because it is too large
View File


+ 46
- 0
Sevomin.News/themes/Sevomin/Comment.cshtml View File

@ -0,0 +1,46 @@
<article data-id="@Model.ID" itemscope itemtype="http://schema.org/UserComments" itemprop="comment" class="@(Model.IsAdmin ? "self" : null)">
<img src="@Model.GravatarUrl(50)" width="50" height="50" alt="Comment by @Model.Author" />
<div>
@Date()
<p itemprop="commentText">@Html.Raw(Model.ContentWithLinks())</p>
@Author()
@DeleteAndApproveButton()
</div>
@ApprovalMessage()
</article>
@helper Date()
{
var title = Model.PubDate.ToString("yyyy-MM-ddTHH:mm");
var display = Model.PubDate.ToString("MMMM d. yyyy HH:mm");
<time datetime="@title" itemprop="commentTime">@display</time>
}
@helper Author()
{
if (string.IsNullOrEmpty(Model.Website))
{
<strong itemprop="creator">@Model.Author</strong>
}
else
{
<strong itemprop="creator"><a href="@Model.Website" itemprop="url" rel="nofollow">@Model.Author</a></strong>
}
}
@helper DeleteAndApproveButton()
{
if (User.Identity.IsAuthenticated)
{
<button class="deletecomment btn btn-link">Delete</button>
if (Blog.ModerateComments && !Model.IsApproved)
{
<button class="approvecomment btn btn-link">Approve</button>
}
}
}
@helper ApprovalMessage()
{
if (Blog.ModerateComments && !Model.IsApproved && !User.Identity.IsAuthenticated)
{
<div itemprop="approvalWarning">! The comment will not be visible until a moderator approves it !</div>
}
}

+ 109
- 0
Sevomin.News/themes/Sevomin/Post.cshtml View File

@ -0,0 +1,109 @@
@if (Page.ShowPaging == true)
{
<div class="col-6 col-sm-6 col-lg-4 rtl pull-right">
<h2>@Model.Title</h2>
<p class="excerpt">@MarkupHelper.GetDescription(Model.Content, 235, "...")</p>
<p><a class="btn btn-primary" href="@Model.Url" role="button">بیشتر بخوانید &raquo;</a></p>
</div>
}
else
{
<article class="post" data-id="@Model.ID" itemscope itemtype="http://schema.org/BlogPosting" itemprop="blogPost">
<header class="jumbotron">
<h1 itemprop="headline name">
<a href="@Model.Url" itemprop="url">@Model.Title</a>
</h1>
<div>
<abbr title="@Model.PubDate.ToLocalTime()" itemprop="datePublished">@Model.PubDate.ToLocalTime().ToString("MMMM d. yyyy")</abbr>
<a href="@Model.Url#comments">
<em class="glyphicon glyphicon-comment"></em>
@Model.CountApprovedComments(Context) Comments
</a>
@Categories()
</div>
</header>
<div itemprop="articleBody">@Html.Raw(Model.Content)</div>
@if (Blog.CurrentPost != null)
{
<section id="comments" aria-label="Comments">
@if (Model.CountApprovedComments(Context) > 0)
{
<h2>Comments</h2>
}
@foreach (Comment comment in Model.Comments)
{
if (comment.IsApproved || !Blog.ModerateComments || Context.User.Identity.IsAuthenticated)
{
@RenderPage("Comment.cshtml", comment)
}
}
</section>
if (Model.AreCommentsOpen(Context))
{
@RenderPage("~/views/CommentForm.cshtml")
}
}
</article>
@helper Categories()
{
if (Model.Categories.Length > 0)
{
<ul class="categories">
<li><em class="glyphicon glyphicon-bookmark"></em> Posted in: </li>
@foreach (string cat in Model.Categories)
{
<li itemprop="articleSection">
<a href="~/category/@HttpUtility.UrlEncode(cat.ToLowerInvariant())">@cat</a>
</li>
}
</ul>
}
}
}
@functions{
public class MarkupHelper
{
#region excerpt generation
public static string GetDescription(string content, int length = 300, string ommission = "...")
{
return TruncateHtml(StripTags(content), 235, ommission);
}
public static string TruncateHtml(string input, int length = 300, string ommission = "...")
{
if (input == null || input.Length < length)
return input;
int nextSpace = input.LastIndexOf(" ", length);
return string.Format("{0}" + ommission,
input.Substring(0, (nextSpace > 0) ? nextSpace : length).Trim());
}
public static string StripTags(string markup)
{
try
{
StringReader stringReader = new StringReader(markup);
System.Xml.XPath.XPathDocument xPathdocument;
using (System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(stringReader,
new System.Xml.XmlReaderSettings() { ConformanceLevel = System.Xml.ConformanceLevel.Fragment }))
{
xPathdocument = new System.Xml.XPath.XPathDocument(xmlReader);
}
return xPathdocument.CreateNavigator().Value;
}
catch
{
return string.Empty;
}
}
#endregion
}
}

+ 119
- 0
Sevomin.News/themes/Sevomin/_Layout.cshtml View File

@ -0,0 +1,119 @@
@{
string next = Blog.GetNextPage();
string prev = Blog.GetPrevPage();
}
<!doctype html>
<html lang="en-us">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8" />
<title>@Page.Title</title>
<meta name="description" content="@Blog.Description" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1" />
<link type="application/rsd+xml" rel="edituri" title="RSD" href="~/views/robots/rsd" />
<link type="application/rss+xml" rel="alternate" title="@Blog.Title" href="~/feed/rss/" />
<link type="application/atom+xml" rel="alternate" title="@Blog.Title" href="~/feed/atom/" />
<link rel="stylesheet" href="@Blog.FingerPrint("/css/bootstrap.min.css")" />
@*<link rel="stylesheet" href="@Blog.FingerPrint("/themes/" + Blog.Theme + "/site.css")" />*@
<link rel="stylesheet" href="@Blog.FingerPrint("/themes/" + Blog.Theme + "/common.css")" />
<link rel="shortcut icon" href="@Blog.FingerPrint("/favicon.ico")" type="image/x-icon" />
<link rel="dns-prefetch" href="http://gravatar.com/" />
@AdminCss()
<meta name="application-name" content="@Blog.Title" />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta property="og:title" content="@Page.Title" />
<meta property="og:type" content="website" />
<meta property="og:image" content="@Blog.Image" />
<meta property="og:url" content="@(Request.Url.Scheme +"://" + Request.Url.Authority + Request.RawUrl)" />
@if (!string.IsNullOrEmpty(prev))
{
<link rel="prev" href="@prev" />
}
@if (!string.IsNullOrEmpty(next))
{
<link rel="next" href="@next" />
}
</head>
<body itemscope itemtype="http://schema.org/Blog" class="@(User.Identity.IsAuthenticated ? "admin" : null)">
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header navbar-right">
@*<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>*@
<a class="navbar-brand" href="#">
<small>اخبار سومین</small>
<img src="@Blog.FingerPrint("/images/revert-logo.png")">
</a>
</div>
@*<div class="collapse navbar-collapse navbar-right" id="collapse">
<ul class="nav navbar-nav navbar-right">
<li class="rtl"><a href="/"><span class="glyphicon glyphicon-home"></span>خانه</a></li>
<li class="rtl"><a href="/jobs">آگهی‌های استخدام</a></li>
<li class="rtl"><a href="/login">ورود به سایت</a></li>
</ul>
</div>*@
</div>
</nav>
<div class="container">
<div class="row row-offcanvas row-offcanvas-right">
@*<header role="banner">
<h1 class="rtl" itemprop="name">@Blog.Title</h1>
</header>*@
<div role="main" class="col-md-12">
@RenderBody()
@if (Page.ShowPaging != null)
{
<ul class="pager">
@if (Blog.GetPosts().Count() > Blog.PostsPerPage * Blog.CurrentPage)
{
<li class="previous"><a href="@Blog.GetPagingUrl(1)" rel="prev">&larr; Older</a></li>
}
@if (Blog.CurrentPage > 1)
{
<li class="next"><a href="@Blog.GetPagingUrl(-1)" rel="next">Newer &rarr;</a></li>
}
</ul>
}
</div>
</div>
</div>
<footer class="text-center" role="contentinfo" itemscope itemtype="http://schema.org/Person" itemprop="author">
<span>
Copyright &copy; @DateTime.Now.Year
<a href="http://www.sevom.in" itemprop="url name">Sevomin</a>
</span>
</footer>
@if ((Blog.CurrentPost != null && Blog.CurrentPost.AreCommentsOpen(Context)) || Blog.IsNewPost)
{
<script src="@Blog.FingerPrint("/scripts/comments.js")" async defer></script>
}
@if (User.Identity.IsAuthenticated)
{
@RenderPage("~/views/AdminMenu.cshtml")
}
</body>
</html>
@helper AdminCss()
{
if (User.Identity.IsAuthenticated)
{
<link href="@Blog.FingerPrint("/css/admin.css")" rel="stylesheet" />
}
}

+ 106
- 0
Sevomin.News/themes/Sevomin/common.css View File

@ -0,0 +1,106 @@
@font-face {
font-family: 'Koodak';
src: url('/fonts/BKoodakBold.eot?#') format('eot'), /* IE6–8 */
url('/fonts/BKoodakBold.woff') format('woff'), /* FF3.6+, IE9, Chrome6+, Saf5.1+*/
url('/fonts/BKoodakBold.ttf') format('truetype'); /* Saf3—5, Chrome4+, FF3.5, Opera 10+ */
}
@font-face {
font-family: 'Yekan';
src: url('/fonts/WebYekan.eot');
src: url('/fonts/WebYekan.eot?#iefix') format('embedded-opentype'),
url('/fonts/WebYekan.woff') format('woff'),
url('/fonts/WebYekan.ttf') format('truetype'),
url('/fonts/WebYekan.svg#WebYekan') format('svg');
font-weight: normal;
font-style: normal;
unicode-range: U+060006FF;
}
body{
font-family: Yekan, "Helvetica Neue",Helvetica,Arial,sans-serif;
padding: 60px;
}
h1, h2, h3, h4, h5, h6{
font-family: Koodak, "Helvetica Neue",Helvetica,Arial,sans-serif;
}
.rtl{
direction: rtl !important;
text-align: right !important;
}
.ltr{
direction: ltr !important;
text-align: left !important;
}
.center-text{
text-align: center !important;
}
th{
text-align: right;
}
/*.navbar{
height: 30px;
background: #5B9BD5;
border-radius: 0px !important;
}
.navbar .navbar-nav>li>a{
color: white;
}
.navbar .navbar-nav>li>a:hover{
color: #E0E0E0;
background: #69B0EA;
}
.navbar-brand{
padding: 10px 15px 0px 15px !important;
}*/
.navbar-brand img{
height: 25px;
}
.job-list-top-toolbar, .job-list-bottom-toolbar{
text-align: left !important;
}
.job-list-top-toolbar{
padding: 0px 10px 10px 0px;
margin-bottom: 5px;
}
.job-list-bottom-toolbar{
padding: 10px 10px 0px 0px;
}
.job-list-bottom-toolbar .date{
float: right;
}
#login-intro-text{
line-height: 1.5em;
font-size: 1.3em;
}
#login-intro-box{
border-radius: 5px;
border: 1px solid #808080;
margin: 10px;
padding: 5px;
background: #dcdcdc;
}
.footer{
padding-top: 40px;
padding-bottom: 40px;
margin-top: 100px;
color: #777;
text-align: center;
border-top: 1px solid #e5e5e5;
}

+ 247
- 0
Sevomin.News/themes/Sevomin/site.css View File

@ -0,0 +1,247 @@
@media only screen and (max-width: 1280px) {
@-ms-viewport {
width: 800px;
}
}
@media only screen and (max-width: 768px) {
@-ms-viewport {
width: 600px;
}
}
html, body {
height: 100%;
}
body {
font: 1.8em/1.5 'Century Gothic', Verdana, Geneva, 'DejaVu Sans', sans-serif;
margin: 0;
}
img, video, iframe {
max-width: 100%;
}
a {
color: #3277b3;
}
.container {
min-height: 100%;
padding-bottom: 35px;
}
.container > div > header {
border: none;
text-align: center;
margin: 0 0 3em 0;
}
.container > div > header a {
font-size: 4em;
color: #000;
}
div[role=main] {
margin-bottom: 2em;
overflow: auto;
}
.pager {
margin-top: 2em;
}
input[type], button, textarea {
font: inherit !important;
}
/*#region Post */
.post header h1 {
margin: 0 0 3px 0;
}
.post header a {
color: #000;
}
.post header div {
font-size: .75em;
opacity: .8;
margin-bottom: 1em;
}
.post header div a {
margin-left: 10px;
}
.post header div .categories {
margin: 0;
padding: 10px;
display: inline;
}
.post header div .categories a {
margin: 0;
}
.post header div .categories li {
display: inline;
}
.post header div .categories li:not(:first-child):not(:last-child):after {
content: ", ";
}
.post abbr {
border: none;
}
.post h2 {
margin-bottom: 0;
font-size: 1.3em;
}
.post h3 {
margin-bottom: 0;
font-size: 1.1em;
}
.post div[itemprop='articleBody'] {
border-bottom: 1px solid #d3d3d3;
padding-bottom: .5em;
margin-bottom: 2em;
-ms-text-size-adjust: 150%;
}
.post p {
padding: .2em 0;
}
/*#endregion */
/*#region Comments */
#comments article {
position: relative;
max-height: 9999px;
overflow: hidden;
-webkit-transition: height .5s ease-in-out;
-moz-transition: height .5s ease-in-out;
-o-transition: height .5s ease-in-out;
transition: height .5s ease-in-out;
}
#comments article div {
padding-left: 70px;
}
#comments article div p {
border: 1px solid #d3d3d3;
border-radius: 5px;
padding: 7px;
position: relative;
}
#comments article div p:before {
content: "";
position: absolute;
top: 10px;
left: -10px;
border-style: solid;
border-width: 9px 9px 9px 0;
border-color: transparent #d3d3d3;
}
#comments article div p:after {
content: "";
position: absolute;
top: 10px;
left: -9px;
border-style: solid;
border-width: 9px 9px 9px 0;
border-color: transparent #ffffff;
}
#comments article.self div p {
background: #f7f7f7;
}
#comments article.self div p:after {
border-color: transparent #f7f7f7;
}
#comments article [itemprop='commentText'] {
margin: 0;
}
#comments article img {
border-radius: 5px;
position: absolute;
top: 19px;
}
#comments article [itemprop='commentTime'] {
display: block;
text-align: right;
font-size: .7em;
}
#comments article [itemprop='creator'] {
font-size: .8em;
margin-left: 7px;
}
#comments article [itemprop='approvalWarning'] {
margin-left: 70px;
font-size: 0.6em;
background-color: rgba(255, 255, 0, 0.50);
padding: 5px;
}
/*#endregion */
/*#region Comment form */
#commentform {
margin-top: 2em;
}
#status {
margin-left: 1em;
}
/*#endregion */
/*#region Footer */
footer {
background-color: #181818;
color: #fff;
font-size: .85em;
padding: 5px;
clear: both;
position: relative;
margin: -35px 0 0 0;
height: 35px;
}
footer p {
padding: 1em 0;
text-align: center;
}
footer a {
color: #a9d2e1;
}
/*#endregion */
.slideClone img {
float: left;
}
.excerpt {
font-size: 14px;
}

+ 78
- 0
Sevomin.News/views/AdminMenu.cshtml View File

@ -0,0 +1,78 @@
@{
var isPublished = Blog.CurrentPost != null && Blog.CurrentPost.IsPublished;
}
<nav id="admin" data-role="editor-toolbar" class="navbar navbar-default navbar-fixed-top" data-ispublished="@isPublished" data-token="@Blog.UniqueId">
<div class="navbar-inner">
<ul class="nav navbar-nav">
<li><button onclick="location.href='/post/new/'" class="btn btn-link" id="btnNew">New post</button></li>
<li><button class="btn btn-link" id="btnEdit" disabled>Edit</button></li>
<li><button class="btn btn-link" id="btnDelete" disabled>Delete</button></li>
<li><button class="btn btn-link" id="btnSave" disabled>Save</button></li>
<li><button class="btn btn-link" id="btnCancel" disabled>Cancel</button></li>
<li id="ispublished">
<input type="checkbox" id="chkispublished" checked="@(isPublished ? "checked" : null)" disabled />
<label for="chkispublished">Publish</label>
</li>
</ul>
<div id="tools">
<div class="btn-group">
<a class="btn btn-mini" data-edit="formatBlock <h1>">H1</a>
<a class="btn btn-mini" data-edit="formatBlock <h2>">H2</a>
<a class="btn btn-mini" data-edit="formatBlock <h3>">H3</a>
</div>
<div class="btn-group">
<a class="btn btn-mini" data-edit="italic"><em>I</em></a>
<a class="btn btn-mini" data-edit="bold"><strong>B</strong></a>
<a class="btn btn-mini" data-edit="underline"><ins>U</ins></a>
<a class="btn btn-mini" data-edit="strikethrough"><s>S</s></a>
</div>
<div class="btn-group">
<a class="btn btn-mini" data-edit="justifyleft" title="Justify left"><i class="glyphicon glyphicon-align-left"></i></a>
<a class="btn btn-mini" data-edit="justifycenter" title="Justify center"><i class="glyphicon glyphicon-align-center"></i></a>
<a class="btn btn-mini" data-edit="justifyright" title="Justify right"><i class="glyphicon glyphicon-align-right"></i></a>
<a class="btn btn-mini" data-edit="justifyfull" title="Justify full"><i class="glyphicon glyphicon-align-justify"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-mini" data-edit="insertunorderedlist" title="Bullet points"><i class="glyphicon glyphicon-list"></i></a>
<a class="btn btn-mini" data-edit="insertorderedlist" title="Numbered bullet points"><i class="glyphicon glyphicon-th-list"></i></a>
<a class="btn btn-mini" data-edit="outdent" title="Indent left"><i class="glyphicon glyphicon-indent-left"></i></a>
<a class="btn btn-mini" data-edit="indent" title="Indent right"><i class="glyphicon glyphicon-indent-right"></i></a>
</div>
<div class="btn-group">
<a class="btn btn-mini" data-edit="createLink" title="Hyperlink"><i class="glyphicon glyphicon-globe"></i></a>
<a class="btn btn-mini" data-edit="unlink" title="Remove hyperlink"><i class="glyphicon glyphicon-remove"></i></a>
<a class="btn btn-mini uploadimage"><i class="glyphicon glyphicon-picture"></i></a>
</div>
<input type="file" id="txtImage" data-edit="insertImage" style="width:0; height: 0;position:absolute" />
<div class="btn-group">
<a class="btn btn-mini source" data-cmd="source" title="Toggle source/design view"><i class="glyphicon glyphicon-eye-open"></i></a>
</div>
</div>
</div>
<form action="@FormsAuthentication.LoginUrl?signout=true&amp;[email protected]" method="post">
<button type="submit" title="Signed in as @User.Identity.Name" class="btn btn-link pull-right">
Sign out &nbsp;<span class="glyphicon glyphicon-lock"></span>
</button>
</form>
<aside>
<p class="alert"></p>
</aside>
</nav>
@if (!string.IsNullOrEmpty(Blog.CurrentSlug))
{
<script src="@Blog.FingerPrint("/scripts/jquery-2.0.2.js", "//ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js")"></script>
<script src="@Blog.FingerPrint("/scripts/bootstrap-wysiwyg.js")" defer></script>
<script src="@Blog.FingerPrint("/scripts/admin.js")" defer></script>
}

+ 38
- 0
Sevomin.News/views/CommentForm.cshtml View File

@ -0,0 +1,38 @@
<form id="commentform" role="form" class="form-horizontal" data-token="@Blog.UniqueId">
<fieldset>
<legend>Post comment</legend>
<div class="form-group">
<label for="commentname" class="control-label col-sm-2">Name</label>
<div class="col-sm-7">
<input id="commentname" class="form-control" type="text" placeholder="Name" required />
</div>
</div>
<div class="form-group">
<label for="commentemail" class="control-label col-sm-2">Email</label>
<div class="col-sm-7">
<input id="commentemail" class="form-control" type="email" placeholder="Email" required />
</div>
</div>
<div class="form-group">
<label for="commenturl" class="control-label col-sm-2">Website</label>
<div class="col-sm-7">
<input id="commenturl" class="form-control" type="url" placeholder="Website URL" />
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<label for="commentcontent" class="control-label">Comment (no HTML allowed)</label>
<textarea id="commentcontent" class="form-control" rows="4" placeholder="Comment" required></textarea>
</div>
</div>
<div class="form-group col-sm-12">
<button class="btn btn-primary">Post comment</button>
<span id="status" class="alert" role="status" aria-live="polite"></span>
</div>
</fieldset>
</form>

+ 59
- 0
Sevomin.News/views/Login.cshtml View File

@ -0,0 +1,59 @@
@{
Page.Title = "Sign in";
Layout = "~/themes/" + Blog.Theme + "/_Layout.cshtml";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
if (Request.HttpMethod == "POST")
{
string username = Request.Form["username"];
string password = Request.Form["password"];
string remember = Request.Form["remember"];
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
if (FormsAuthentication.Authenticate(username, password))
{
FormsAuthentication.RedirectFromLoginPage(username, remember == "on");
}
}
else if (!string.IsNullOrEmpty(Request.QueryString["signout"]))
{
FormsAuthentication.SignOut();
Response.Redirect(Request.QueryString["ReturnUrl"], true);
}
}
}
@if (!User.Identity.IsAuthenticated)
{
<form action="@Request.RawUrl" method="post" role="form" class="col-md-5 col-md-offset-3" id="login">
<fieldset>
<h1 class="text-center">Sign in</h1>
@if (Request.HttpMethod == "POST")
{
<p class="alert-danger">Username or password is incorrect</p>
}
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" placeholder="Username" required autofocus />
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password" placeholder="Password" required />
</div>
<div class="form-group">
<input type="checkbox" id="remember" name="remember" />
<label for="remember">&nbsp;Remember me</label>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</fieldset>
</form>
}
else
{
<h3>You are already signed in</h3>
}

+ 14
- 0
Sevomin.News/views/Robots/RSD.cshtml View File

@ -0,0 +1,14 @@
@{
Response.ContentType = "text/xml";
}
<rsd version="1.0">
<service>
<enginename>MiniBlog</enginename>
<enginelink>http://github.com/madskristensen/miniblog/</enginelink>
<homepagelink>@Request.Url.Scheme://@Request.Url.Authority</homepagelink>
<apis>
<api name="MetaWeblog" preferred="true" apilink="@Request.Url.Scheme://@Request.Url.Authority/metaweblog" blogid="1" />
</apis>
</service>
</rsd>

+ 8
- 0
Sevomin.News/views/Robots/Robots.cshtml View File

@ -0,0 +1,8 @@
User-agent: *
Disallow: /views/
sitemap: @(Request.Url.Scheme + "://" + Request.Url.Authority)/sitemap.xml
@{
Response.ContentType = "text/plain";
}

+ 15
- 0
Sevomin.News/views/Robots/Sitemap.cshtml View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach (Post post in Storage.GetAllPosts())
{
<url>
<loc>@post.AbsoluteUrl</loc>
<lastmod>@post.LastModified.ToString("yyyy-MM-ddThh:mmzzz")</lastmod>
</url>
}
</urlset>
@{
Response.ContentType = "text/xml";
}

+ 28
- 0
Sevomin.News/wlwmanifest.xml View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns="http://schemas.microsoft.com/wlw/manifest/weblog">
<options>
<clientType>Metaweblog</clientType>
<supportsEmbeds>Yes</supportsEmbeds>
<supportsKeywords>No</supportsKeywords>
<supportsNewCategories>Yes</supportsNewCategories>
<supportsNewCategoriesInline>Yes</supportsNewCategoriesInline>
<supportsCommentPolicy>No</supportsCommentPolicy>
<supportsSlug>Yes</supportsSlug>
<supportsExcerpt>No</supportsExcerpt>
<supportsPages>No</supportsPages>
<supportsPageParent>No</supportsPageParent>
<supportsAuthor>No</supportsAuthor>
<supportsGetTags>No</supportsGetTags>
<requiresHtmlTitles>No</requiresHtmlTitles>
<supportsEmptyTitles>No</supportsEmptyTitles>
<fileUploadNameFormat>{FileName}</fileUploadNameFormat>
</options>
<weblog>
<ServiceName>MiniBlog</ServiceName>
<imageUrl>favicon.ico</imageUrl>
<watermarkImageUrl>favicon.ico</watermarkImageUrl>
<homepageLinkText>View your blog</homepageLinkText>
<adminLinkText>Manage your blog</adminLinkText>
<adminUrl><![CDATA[{blog-homepage-url}login/]]></adminUrl>
</weblog>
</manifest>

+ 26
- 0
Sevomin.sln View File

@ -9,6 +9,28 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sevomin.Models", "Sevomin.M
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sevomin.Tests", "Sevomin.Tests\Sevomin.Tests.csproj", "{217A906A-9DE8-403D-8646-7D1131D5F02F}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sevomin.Tests", "Sevomin.Tests\Sevomin.Tests.csproj", "{217A906A-9DE8-403D-8646-7D1131D5F02F}"
EndProject EndProject
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Sevomin.News", "http://localhost:20963", "{C997BE96-E2C6-4A74-A072-6DD003796390}"
ProjectSection(WebsiteProperties) = preProject
UseIISExpress = "true"
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.5.1"
Debug.AspNetCompiler.VirtualPath = "/localhost_20963"
Debug.AspNetCompiler.PhysicalPath = "Sevomin.News\"
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_20963\"
Debug.AspNetCompiler.Updateable = "true"
Debug.AspNetCompiler.ForceOverwrite = "true"
Debug.AspNetCompiler.FixedNames = "false"
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.VirtualPath = "/localhost_20963"
Release.AspNetCompiler.PhysicalPath = "Sevomin.News\"
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_20963\"
Release.AspNetCompiler.Updateable = "true"
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "false"
Release.AspNetCompiler.Debug = "False"
SlnRelativePath = "Sevomin.News\"
DefaultWebSiteLanguage = "Visual C#"
EndProjectSection
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -31,6 +53,10 @@ Global
{217A906A-9DE8-403D-8646-7D1131D5F02F}.Debug|Any CPU.Build.0 = Debug|Any CPU {217A906A-9DE8-403D-8646-7D1131D5F02F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{217A906A-9DE8-403D-8646-7D1131D5F02F}.Release|Any CPU.ActiveCfg = Release|Any CPU {217A906A-9DE8-403D-8646-7D1131D5F02F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{217A906A-9DE8-403D-8646-7D1131D5F02F}.Release|Any CPU.Build.0 = Release|Any CPU {217A906A-9DE8-403D-8646-7D1131D5F02F}.Release|Any CPU.Build.0 = Release|Any CPU
{C997BE96-E2C6-4A74-A072-6DD003796390}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C997BE96-E2C6-4A74-A072-6DD003796390}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C997BE96-E2C6-4A74-A072-6DD003796390}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{C997BE96-E2C6-4A74-A072-6DD003796390}.Release|Any CPU.Build.0 = Debug|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE


BIN
packages/AjaxMin.5.8.5172.27710/AjaxMin.5.8.5172.27710.nupkg View File


BIN
packages/AjaxMin.5.8.5172.27710/lib/net20/AjaxMin.dll View File


BIN
packages/AjaxMin.5.8.5172.27710/lib/net35/AjaxMin.dll View File


BIN
packages/AjaxMin.5.8.5172.27710/lib/net40/AjaxMin.dll View File


BIN
packages/AjaxMin.5.8.5172.27710/tools/net35/AjaxMin.dll View File


+ 38
- 0
packages/AjaxMin.5.8.5172.27710/tools/net35/AjaxMin.targets View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMin" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinBundleTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestCleanTask" />
<PropertyGroup>
<!-- if the project has a Content folder, we want that to be the root output; otherwise just dump everything relative to the project root -->
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)=='' and Exists('$(ProjectDir)Content\')">$(ProjectDir)Content\</AjaxMinOutputFolder>
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)==''">$(ProjectDir)</AjaxMinOutputFolder>
<!-- default is to NOT treat warnings as errors -->
<AjaxMinTreatWarningsAsErrors Condition="$(AjaxMinTreatWarningsAsErrors)==''">false</AjaxMinTreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<AjaxMinManifests Include="**/*.ajaxmin"/>
</ItemGroup>
<!-- target to clean output for all ajaxmin manifest files in the project -->
<Target Name="CleanAjaxMinManifests" AfterTargets="Clean" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).cleantrigger')">
<Message Text="Cleaning AjaxMin Manifests" Importance="high" />
<AjaxMinManifestCleanTask OutputFolder="$(AjaxMinOutputFolder)" Manifests="@(AjaxMinManifests)" />
</Target>
<!-- target to build all ajaxmin manifest files in the project -->
<Target Name="BuildAjaxMinManifests" AfterTargets="Build" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).buildtrigger')">
<Message Text="Processing AjaxMin Manifests" Importance="high" />
<AjaxMinManifestTask ProjectDefaultSwitches="-define:$(DefineConstants) $(AjaxMinProjectDefaultSwitches)"
Configuration="$(Configuration)"
TreatWarningsAsErrors="$(AjaxMinTreatWarningsAsErrors)"
InputFolder="$(ProjectDir)"
OutputFolder="$(AjaxMinOutputFolder)"
Manifests="@(AjaxMinManifests)" />
</Target>
</Project>

BIN
packages/AjaxMin.5.8.5172.27710/tools/net35/AjaxMinTask.dll View File


BIN
packages/AjaxMin.5.8.5172.27710/tools/net40/AjaxMin.dll View File


+ 38
- 0
packages/AjaxMin.5.8.5172.27710/tools/net40/AjaxMin.targets View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMin" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinBundleTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestCleanTask" />
<PropertyGroup>
<!-- if the project has a Content folder, we want that to be the root output; otherwise just dump everything relative to the project root -->
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)=='' and Exists('$(ProjectDir)Content\')">$(ProjectDir)Content\</AjaxMinOutputFolder>
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)==''">$(ProjectDir)</AjaxMinOutputFolder>
<!-- default is to NOT treat warnings as errors -->
<AjaxMinTreatWarningsAsErrors Condition="$(AjaxMinTreatWarningsAsErrors)==''">false</AjaxMinTreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<AjaxMinManifests Include="**/*.ajaxmin"/>
</ItemGroup>
<!-- target to clean output for all ajaxmin manifest files in the project -->
<Target Name="CleanAjaxMinManifests" AfterTargets="Clean" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).cleantrigger')">
<Message Text="Cleaning AjaxMin Manifests" Importance="high" />
<AjaxMinManifestCleanTask OutputFolder="$(AjaxMinOutputFolder)" Manifests="@(AjaxMinManifests)" />
</Target>
<!-- target to build all ajaxmin manifest files in the project -->
<Target Name="BuildAjaxMinManifests" AfterTargets="Build" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).buildtrigger')">
<Message Text="Processing AjaxMin Manifests" Importance="high" />
<AjaxMinManifestTask ProjectDefaultSwitches="-define:$(DefineConstants) $(AjaxMinProjectDefaultSwitches)"
Configuration="$(Configuration)"
TreatWarningsAsErrors="$(AjaxMinTreatWarningsAsErrors)"
InputFolder="$(ProjectDir)"
OutputFolder="$(AjaxMinOutputFolder)"
Manifests="@(AjaxMinManifests)" />
</Target>
</Project>

BIN
packages/AjaxMin.5.8.5172.27710/tools/net40/AjaxMinTask.dll View File


BIN
packages/AjaxMin.5.9.5229.26438/AjaxMin.5.9.5229.26438.nupkg View File


BIN
packages/AjaxMin.5.9.5229.26438/lib/net20/AjaxMin.dll View File


BIN
packages/AjaxMin.5.9.5229.26438/lib/net35/AjaxMin.dll View File


BIN
packages/AjaxMin.5.9.5229.26438/lib/net40/AjaxMin.dll View File


BIN
packages/AjaxMin.5.9.5229.26438/tools/net35/AjaxMin.dll View File


+ 38
- 0
packages/AjaxMin.5.9.5229.26438/tools/net35/AjaxMin.targets View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMin" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinBundleTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestCleanTask" />
<PropertyGroup>
<!-- if the project has a Content folder, we want that to be the root output; otherwise just dump everything relative to the project root -->
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)=='' and Exists('$(ProjectDir)Content\')">$(ProjectDir)Content\</AjaxMinOutputFolder>
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)==''">$(ProjectDir)</AjaxMinOutputFolder>
<!-- default is to NOT treat warnings as errors -->
<AjaxMinTreatWarningsAsErrors Condition="$(AjaxMinTreatWarningsAsErrors)==''">false</AjaxMinTreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<AjaxMinManifests Include="**/*.ajaxmin"/>
</ItemGroup>
<!-- target to clean output for all ajaxmin manifest files in the project -->
<Target Name="CleanAjaxMinManifests" AfterTargets="Clean" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).cleantrigger')">
<Message Text="Cleaning AjaxMin Manifests" Importance="high" />
<AjaxMinManifestCleanTask OutputFolder="$(AjaxMinOutputFolder)" Manifests="@(AjaxMinManifests)" />
</Target>
<!-- target to build all ajaxmin manifest files in the project -->
<Target Name="BuildAjaxMinManifests" AfterTargets="Build" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).buildtrigger')">
<Message Text="Processing AjaxMin Manifests" Importance="high" />
<AjaxMinManifestTask ProjectDefaultSwitches="-define:$(DefineConstants) $(AjaxMinProjectDefaultSwitches)"
Configuration="$(Configuration)"
TreatWarningsAsErrors="$(AjaxMinTreatWarningsAsErrors)"
InputFolder="$(ProjectDir)"
OutputFolder="$(AjaxMinOutputFolder)"
Manifests="@(AjaxMinManifests)" />
</Target>
</Project>

BIN
packages/AjaxMin.5.9.5229.26438/tools/net35/AjaxMinTask.dll View File


BIN
packages/AjaxMin.5.9.5229.26438/tools/net40/AjaxMin.dll View File


+ 38
- 0
packages/AjaxMin.5.9.5229.26438/tools/net40/AjaxMin.targets View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMin" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinBundleTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestCleanTask" />
<PropertyGroup>
<!-- if the project has a Content folder, we want that to be the root output; otherwise just dump everything relative to the project root -->
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)=='' and Exists('$(ProjectDir)Content\')">$(ProjectDir)Content\</AjaxMinOutputFolder>
<AjaxMinOutputFolder Condition="$(AjaxMinOutputFolder)==''">$(ProjectDir)</AjaxMinOutputFolder>
<!-- default is to NOT treat warnings as errors -->
<AjaxMinTreatWarningsAsErrors Condition="$(AjaxMinTreatWarningsAsErrors)==''">false</AjaxMinTreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
<AjaxMinManifests Include="**/*.ajaxmin"/>
</ItemGroup>
<!-- target to clean output for all ajaxmin manifest files in the project -->
<Target Name="CleanAjaxMinManifests" AfterTargets="Clean" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).cleantrigger')">
<Message Text="Cleaning AjaxMin Manifests" Importance="high" />
<AjaxMinManifestCleanTask OutputFolder="$(AjaxMinOutputFolder)" Manifests="@(AjaxMinManifests)" />
</Target>
<!-- target to build all ajaxmin manifest files in the project -->
<Target Name="BuildAjaxMinManifests" AfterTargets="Build" Inputs="@AjaxMinManifests" Outputs="@(AjaxMinManifests->'%(FullPath).buildtrigger')">
<Message Text="Processing AjaxMin Manifests" Importance="high" />
<AjaxMinManifestTask ProjectDefaultSwitches="-define:$(DefineConstants) $(AjaxMinProjectDefaultSwitches)"
Configuration="$(Configuration)"
TreatWarningsAsErrors="$(AjaxMinTreatWarningsAsErrors)"
InputFolder="$(ProjectDir)"
OutputFolder="$(AjaxMinOutputFolder)"
Manifests="@(AjaxMinManifests)" />
</Target>
</Project>

BIN
packages/AjaxMin.5.9.5229.26438/tools/net40/AjaxMinTask.dll View File


BIN
packages/DotNetOpenAuth.AspNet.4.1.4.12333/DotNetOpenAuth.AspNet.4.1.4.12333.nupkg View File


BIN
packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net40-full/DotNetOpenAuth.AspNet.dll View File


+ 1740
- 0
packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net40-full/DotNetOpenAuth.AspNet.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net45-full/DotNetOpenAuth.AspNet.dll View File


+ 1740
- 0
packages/DotNetOpenAuth.AspNet.4.1.4.12333/lib/net45-full/DotNetOpenAuth.AspNet.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.Core.4.1.4.12333/DotNetOpenAuth.Core.4.1.4.12333.nupkg View File


BIN
packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.Core.dll View File


+ 10192
- 0
packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.Core.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.Core.dll View File


+ 10192
- 0
packages/DotNetOpenAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.Core.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333.nupkg View File


BIN
packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.Consumer.dll View File


+ 397
- 0
packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.Consumer.xml View File

@ -0,0 +1,397 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>DotNetOpenAuth.OAuth.Consumer</name>
</assembly>
<members>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager">
<summary>
A token manager for use by a web site in its role as a consumer of
an individual ServiceProvider.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager.ConsumerKey">
<summary>
Gets the consumer key.
</summary>
<value>The consumer key.</value>
</member>
<member name="P:DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager.ConsumerSecret">
<summary>
Gets the consumer secret.
</summary>
<value>The consumer secret.</value>
</member>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel">
<summary>
The messaging channel for OAuth 1.0(a) Consumers.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel.#ctor(DotNetOpenAuth.Messaging.ITamperProtectionChannelBindingElement,DotNetOpenAuth.Messaging.Bindings.INonceStore,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager,DotNetOpenAuth.OAuth.ConsumerSecuritySettings,DotNetOpenAuth.Messaging.IMessageFactory)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel"/> class.
</summary>
<param name="signingBindingElement">The binding element to use for signing.</param>
<param name="store">The web application store to use for nonces.</param>
<param name="tokenManager">The token manager instance to use.</param>
<param name="securitySettings">The security settings.</param>
<param name="messageFactory">The message factory.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel.GetConsumerSecret(System.String)">
<summary>
Gets the consumer secret for a given consumer key.
</summary>
<param name="consumerKey">The consumer key.</param>
<returns>The consumer secret.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel.InitializeBindingElements(DotNetOpenAuth.Messaging.ITamperProtectionChannelBindingElement,DotNetOpenAuth.Messaging.Bindings.INonceStore)">
<summary>
Initializes the binding elements for the OAuth channel.
</summary>
<param name="signingBindingElement">The signing binding element.</param>
<param name="store">The nonce store.</param>
<returns>
An array of binding elements used to initialize the channel.
</returns>
</member>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory">
<summary>
An OAuth-protocol specific implementation of the <see cref="T:DotNetOpenAuth.Messaging.IMessageFactory"/>
interface.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory.#ctor">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory"/> class.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory.GetNewRequestMessage(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Analyzes an incoming request message payload to discover what kind of
message is embedded in it and returns the type, or null if no match is found.
</summary>
<param name="recipient">The intended or actual recipient of the request message.</param>
<param name="fields">The name/value pairs that make up the message payload.</param>
<returns>
A newly instantiated <see cref="T:DotNetOpenAuth.Messaging.IProtocolMessage"/>-derived object that this message can
deserialize to. Null if the request isn't recognized as a valid protocol message.
</returns>
<remarks>
The request messages are:
UserAuthorizationResponse
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory.GetNewResponseMessage(DotNetOpenAuth.Messaging.IDirectedProtocolMessage,System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Analyzes an incoming request message payload to discover what kind of
message is embedded in it and returns the type, or null if no match is found.
</summary>
<param name="request">
The message that was sent as a request that resulted in the response.
Null on a Consumer site that is receiving an indirect message from the Service Provider.
</param>
<param name="fields">The name/value pairs that make up the message payload.</param>
<returns>
A newly instantiated <see cref="T:DotNetOpenAuth.Messaging.IProtocolMessage"/>-derived object that this message can
deserialize to. Null if the request isn't recognized as a valid protocol message.
</returns>
<remarks>
The response messages are:
UnauthorizedTokenResponse
AuthorizedTokenResponse
</remarks>
</member>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement">
<summary>
A binding element that signs outgoing messages and verifies the signature on incoming messages.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.#ctor(System.Security.Cryptography.X509Certificates.X509Certificate2)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement"/> class.
</summary>
<param name="signingCertificate">The certificate used to sign outgoing messages.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.IsSignatureValid(DotNetOpenAuth.OAuth.ChannelElements.ITamperResistantOAuthMessage)">
<summary>
Determines whether the signature on some message is valid.
</summary>
<param name="message">The message to check the signature on.</param>
<returns>
<c>true</c> if the signature on the message is valid; otherwise, <c>false</c>.
</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.GetSignature(DotNetOpenAuth.OAuth.ChannelElements.ITamperResistantOAuthMessage)">
<summary>
Calculates a signature for a given message.
</summary>
<param name="message">The message to sign.</param>
<returns>The signature for the message.</returns>
<remarks>
This method signs the message per OAuth 1.0 section 9.3.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.Clone">
<summary>
Creates a new object that is a copy of the current instance.
</summary>
<returns>
A new object that is a copy of this instance.
</returns>
</member>
<member name="P:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.SigningCertificate">
<summary>
Gets or sets the certificate used to sign outgoing messages. Used only by Consumers.
</summary>
</member>
<member name="T:DotNetOpenAuth.OAuth.ConsumerBase">
<summary>
Base class for <see cref="T:DotNetOpenAuth.OAuth.WebConsumer"/> and <see cref="T:DotNetOpenAuth.OAuth.DesktopConsumer"/> types.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.#ctor(DotNetOpenAuth.OAuth.ServiceProviderDescription,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ConsumerBase"/> class.
</summary>
<param name="serviceDescription">The endpoints and behavior of the Service Provider.</param>
<param name="tokenManager">The host's method of storing and recalling tokens and secrets.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.RequestNewClientAccount(System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Obtains an access token for a new account at the Service Provider via 2-legged OAuth.
</summary>
<param name="requestParameters">Any applicable parameters to include in the query string of the token request.</param>
<returns>The access token.</returns>
<remarks>
The token secret is stored in the <see cref="P:DotNetOpenAuth.OAuth.ConsumerBase.TokenManager"/>.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String)">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String,System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<param name="extraData">Extra parameters to include in the message. Must not be null, but may be empty.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String,System.Collections.Generic.IEnumerable{DotNetOpenAuth.Messaging.MultipartPostPart})">
<summary>
Prepares an authorized request that carries an HTTP multi-part POST, allowing for binary data.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<param name="binaryData">Extra parameters to include in the message. Must not be null, but may be empty.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.OAuth.Messages.AccessProtectedResourceRequest)">
<summary>
Prepares an HTTP request that has OAuth authorization already attached to it.
</summary>
<param name="message">The OAuth authorization message to attach to the HTTP request.</param>
<returns>
The HttpWebRequest that can be used to send the HTTP request to the remote service provider.
</returns>
<remarks>
If <see cref="P:DotNetOpenAuth.Messaging.IDirectedProtocolMessage.HttpMethods"/> property on the
<paramref name="message"/> has the
<see cref="F:DotNetOpenAuth.Messaging.HttpDeliveryMethods.AuthorizationHeaderRequest"/> flag set and
<see cref="P:DotNetOpenAuth.OAuth.ChannelElements.ITamperResistantOAuthMessage.HttpMethod"/> is set to an HTTP method
that includes an entity body, the request stream is automatically sent
if and only if the <see cref="P:DotNetOpenAuth.Messaging.IMessage.ExtraData"/> dictionary is non-empty.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequestAndSend(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String)">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<returns>The initialized WebRequest object.</returns>
<exception cref="T:System.Net.WebException">Thrown if the request fails for any reason after it is sent to the Service Provider.</exception>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.Dispose">
<summary>
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.CreateAuthorizingMessage(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String)">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareRequestUserAuthorization(System.Uri,System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String},System.String@)">
<summary>
Prepares an OAuth message that begins an authorization request that will
redirect the user to the Service Provider to provide that authorization.
</summary>
<param name="callback">
An optional Consumer URL that the Service Provider should redirect the
User Agent to upon successful authorization.
</param>
<param name="requestParameters">Extra parameters to add to the request token message. Optional.</param>
<param name="redirectParameters">Extra parameters to add to the redirect to Service Provider message. Optional.</param>
<param name="requestToken">The request token that must be exchanged for an access token after the user has provided authorization.</param>
<returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.ProcessUserAuthorization(System.String,System.String)">
<summary>
Exchanges a given request token for access token.
</summary>
<param name="requestToken">The request token that the user has authorized.</param>
<param name="verifier">The verifier code.</param>
<returns>
The access token assigned by the Service Provider.
</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.Dispose(System.Boolean)">
<summary>
Releases unmanaged and - optionally - managed resources
</summary>
<param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.ConsumerKey">
<summary>
Gets the Consumer Key used to communicate with the Service Provider.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.ServiceProvider">
<summary>
Gets the Service Provider that will be accessed.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.TokenManager">
<summary>
Gets the persistence store for tokens and secrets.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.Channel">
<summary>
Gets the channel to use for sending/receiving messages.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.SecuritySettings">
<summary>
Gets the security settings for this consumer.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.OAuthChannel">
<summary>
Gets or sets the channel to use for sending/receiving messages.
</summary>
</member>
<member name="T:DotNetOpenAuth.OAuth.DesktopConsumer">
<summary>
Used by a desktop application to use OAuth to access the Service Provider on behalf of the User.
</summary>
<remarks>
The methods on this class are thread-safe. Provided the properties are set and not changed
afterward, a single instance of this class may be used by an entire desktop application safely.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.#ctor(DotNetOpenAuth.OAuth.ServiceProviderDescription,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.DesktopConsumer"/> class.
</summary>
<param name="serviceDescription">The endpoints and behavior of the Service Provider.</param>
<param name="tokenManager">The host's method of storing and recalling tokens and secrets.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.RequestUserAuthorization(System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String},System.String@)">
<summary>
Begins an OAuth authorization request.
</summary>
<param name="requestParameters">Extra parameters to add to the request token message. Optional.</param>
<param name="redirectParameters">Extra parameters to add to the redirect to Service Provider message. Optional.</param>
<param name="requestToken">The request token that must be exchanged for an access token after the user has provided authorization.</param>
<returns>The URL to open a browser window to allow the user to provide authorization.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.ProcessUserAuthorization(System.String)">
<summary>
Exchanges a given request token for access token.
</summary>
<param name="requestToken">The request token that the user has authorized.</param>
<returns>The access token assigned by the Service Provider.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.ProcessUserAuthorization(System.String,System.String)">
<summary>
Exchanges a given request token for access token.
</summary>
<param name="requestToken">The request token that the user has authorized.</param>
<param name="verifier">The verifier code typed in by the user. Must not be <c>Null</c> for OAuth 1.0a service providers and later.</param>
<returns>
The access token assigned by the Service Provider.
</returns>
</member>
<member name="T:DotNetOpenAuth.OAuth.WebConsumer">
<summary>
A website or application that uses OAuth to access the Service Provider on behalf of the User.
</summary>
<remarks>
The methods on this class are thread-safe. Provided the properties are set and not changed
afterward, a single instance of this class may be used by an entire web application safely.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.#ctor(DotNetOpenAuth.OAuth.ServiceProviderDescription,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.WebConsumer"/> class.
</summary>
<param name="serviceDescription">The endpoints and behavior of the Service Provider.</param>
<param name="tokenManager">The host's method of storing and recalling tokens and secrets.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.PrepareRequestUserAuthorization">
<summary>
Begins an OAuth authorization request and redirects the user to the Service Provider
to provide that authorization. Upon successful authorization, the user is redirected
back to the current page.
</summary>
<returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns>
<remarks>
Requires HttpContext.Current.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.PrepareRequestUserAuthorization(System.Uri,System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Prepares an OAuth message that begins an authorization request that will
redirect the user to the Service Provider to provide that authorization.
</summary>
<param name="callback">
An optional Consumer URL that the Service Provider should redirect the
User Agent to upon successful authorization.
</param>
<param name="requestParameters">Extra parameters to add to the request token message. Optional.</param>
<param name="redirectParameters">Extra parameters to add to the redirect to Service Provider message. Optional.</param>
<returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.ProcessUserAuthorization">
<summary>
Processes an incoming authorization-granted message from an SP and obtains an access token.
</summary>
<returns>The access token, or null if no incoming authorization message was recognized.</returns>
<remarks>
Requires HttpContext.Current.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.ProcessUserAuthorization(System.Web.HttpRequestBase)">
<summary>
Processes an incoming authorization-granted message from an SP and obtains an access token.
</summary>
<param name="request">The incoming HTTP request.</param>
<returns>The access token, or null if no incoming authorization message was recognized.</returns>
</member>
</members>
</doc>

BIN
packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.Consumer.dll View File


+ 397
- 0
packages/DotNetOpenAuth.OAuth.Consumer.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.Consumer.xml View File

@ -0,0 +1,397 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>DotNetOpenAuth.OAuth.Consumer</name>
</assembly>
<members>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager">
<summary>
A token manager for use by a web site in its role as a consumer of
an individual ServiceProvider.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager.ConsumerKey">
<summary>
Gets the consumer key.
</summary>
<value>The consumer key.</value>
</member>
<member name="P:DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager.ConsumerSecret">
<summary>
Gets the consumer secret.
</summary>
<value>The consumer secret.</value>
</member>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel">
<summary>
The messaging channel for OAuth 1.0(a) Consumers.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel.#ctor(DotNetOpenAuth.Messaging.ITamperProtectionChannelBindingElement,DotNetOpenAuth.Messaging.Bindings.INonceStore,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager,DotNetOpenAuth.OAuth.ConsumerSecuritySettings,DotNetOpenAuth.Messaging.IMessageFactory)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel"/> class.
</summary>
<param name="signingBindingElement">The binding element to use for signing.</param>
<param name="store">The web application store to use for nonces.</param>
<param name="tokenManager">The token manager instance to use.</param>
<param name="securitySettings">The security settings.</param>
<param name="messageFactory">The message factory.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel.GetConsumerSecret(System.String)">
<summary>
Gets the consumer secret for a given consumer key.
</summary>
<param name="consumerKey">The consumer key.</param>
<returns>The consumer secret.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerChannel.InitializeBindingElements(DotNetOpenAuth.Messaging.ITamperProtectionChannelBindingElement,DotNetOpenAuth.Messaging.Bindings.INonceStore)">
<summary>
Initializes the binding elements for the OAuth channel.
</summary>
<param name="signingBindingElement">The signing binding element.</param>
<param name="store">The nonce store.</param>
<returns>
An array of binding elements used to initialize the channel.
</returns>
</member>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory">
<summary>
An OAuth-protocol specific implementation of the <see cref="T:DotNetOpenAuth.Messaging.IMessageFactory"/>
interface.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory.#ctor">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory"/> class.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory.GetNewRequestMessage(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Analyzes an incoming request message payload to discover what kind of
message is embedded in it and returns the type, or null if no match is found.
</summary>
<param name="recipient">The intended or actual recipient of the request message.</param>
<param name="fields">The name/value pairs that make up the message payload.</param>
<returns>
A newly instantiated <see cref="T:DotNetOpenAuth.Messaging.IProtocolMessage"/>-derived object that this message can
deserialize to. Null if the request isn't recognized as a valid protocol message.
</returns>
<remarks>
The request messages are:
UserAuthorizationResponse
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.OAuthConsumerMessageFactory.GetNewResponseMessage(DotNetOpenAuth.Messaging.IDirectedProtocolMessage,System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Analyzes an incoming request message payload to discover what kind of
message is embedded in it and returns the type, or null if no match is found.
</summary>
<param name="request">
The message that was sent as a request that resulted in the response.
Null on a Consumer site that is receiving an indirect message from the Service Provider.
</param>
<param name="fields">The name/value pairs that make up the message payload.</param>
<returns>
A newly instantiated <see cref="T:DotNetOpenAuth.Messaging.IProtocolMessage"/>-derived object that this message can
deserialize to. Null if the request isn't recognized as a valid protocol message.
</returns>
<remarks>
The response messages are:
UnauthorizedTokenResponse
AuthorizedTokenResponse
</remarks>
</member>
<member name="T:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement">
<summary>
A binding element that signs outgoing messages and verifies the signature on incoming messages.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.#ctor(System.Security.Cryptography.X509Certificates.X509Certificate2)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement"/> class.
</summary>
<param name="signingCertificate">The certificate used to sign outgoing messages.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.IsSignatureValid(DotNetOpenAuth.OAuth.ChannelElements.ITamperResistantOAuthMessage)">
<summary>
Determines whether the signature on some message is valid.
</summary>
<param name="message">The message to check the signature on.</param>
<returns>
<c>true</c> if the signature on the message is valid; otherwise, <c>false</c>.
</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.GetSignature(DotNetOpenAuth.OAuth.ChannelElements.ITamperResistantOAuthMessage)">
<summary>
Calculates a signature for a given message.
</summary>
<param name="message">The message to sign.</param>
<returns>The signature for the message.</returns>
<remarks>
This method signs the message per OAuth 1.0 section 9.3.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.Clone">
<summary>
Creates a new object that is a copy of the current instance.
</summary>
<returns>
A new object that is a copy of this instance.
</returns>
</member>
<member name="P:DotNetOpenAuth.OAuth.ChannelElements.RsaSha1ConsumerSigningBindingElement.SigningCertificate">
<summary>
Gets or sets the certificate used to sign outgoing messages. Used only by Consumers.
</summary>
</member>
<member name="T:DotNetOpenAuth.OAuth.ConsumerBase">
<summary>
Base class for <see cref="T:DotNetOpenAuth.OAuth.WebConsumer"/> and <see cref="T:DotNetOpenAuth.OAuth.DesktopConsumer"/> types.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.#ctor(DotNetOpenAuth.OAuth.ServiceProviderDescription,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.ConsumerBase"/> class.
</summary>
<param name="serviceDescription">The endpoints and behavior of the Service Provider.</param>
<param name="tokenManager">The host's method of storing and recalling tokens and secrets.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.RequestNewClientAccount(System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Obtains an access token for a new account at the Service Provider via 2-legged OAuth.
</summary>
<param name="requestParameters">Any applicable parameters to include in the query string of the token request.</param>
<returns>The access token.</returns>
<remarks>
The token secret is stored in the <see cref="P:DotNetOpenAuth.OAuth.ConsumerBase.TokenManager"/>.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String)">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String,System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<param name="extraData">Extra parameters to include in the message. Must not be null, but may be empty.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String,System.Collections.Generic.IEnumerable{DotNetOpenAuth.Messaging.MultipartPostPart})">
<summary>
Prepares an authorized request that carries an HTTP multi-part POST, allowing for binary data.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<param name="binaryData">Extra parameters to include in the message. Must not be null, but may be empty.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequest(DotNetOpenAuth.OAuth.Messages.AccessProtectedResourceRequest)">
<summary>
Prepares an HTTP request that has OAuth authorization already attached to it.
</summary>
<param name="message">The OAuth authorization message to attach to the HTTP request.</param>
<returns>
The HttpWebRequest that can be used to send the HTTP request to the remote service provider.
</returns>
<remarks>
If <see cref="P:DotNetOpenAuth.Messaging.IDirectedProtocolMessage.HttpMethods"/> property on the
<paramref name="message"/> has the
<see cref="F:DotNetOpenAuth.Messaging.HttpDeliveryMethods.AuthorizationHeaderRequest"/> flag set and
<see cref="P:DotNetOpenAuth.OAuth.ChannelElements.ITamperResistantOAuthMessage.HttpMethod"/> is set to an HTTP method
that includes an entity body, the request stream is automatically sent
if and only if the <see cref="P:DotNetOpenAuth.Messaging.IMessage.ExtraData"/> dictionary is non-empty.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareAuthorizedRequestAndSend(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String)">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<returns>The initialized WebRequest object.</returns>
<exception cref="T:System.Net.WebException">Thrown if the request fails for any reason after it is sent to the Service Provider.</exception>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.Dispose">
<summary>
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
</summary>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.CreateAuthorizingMessage(DotNetOpenAuth.Messaging.MessageReceivingEndpoint,System.String)">
<summary>
Creates a web request prepared with OAuth authorization
that may be further tailored by adding parameters by the caller.
</summary>
<param name="endpoint">The URL and method on the Service Provider to send the request to.</param>
<param name="accessToken">The access token that permits access to the protected resource.</param>
<returns>The initialized WebRequest object.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.PrepareRequestUserAuthorization(System.Uri,System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String},System.String@)">
<summary>
Prepares an OAuth message that begins an authorization request that will
redirect the user to the Service Provider to provide that authorization.
</summary>
<param name="callback">
An optional Consumer URL that the Service Provider should redirect the
User Agent to upon successful authorization.
</param>
<param name="requestParameters">Extra parameters to add to the request token message. Optional.</param>
<param name="redirectParameters">Extra parameters to add to the redirect to Service Provider message. Optional.</param>
<param name="requestToken">The request token that must be exchanged for an access token after the user has provided authorization.</param>
<returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.ProcessUserAuthorization(System.String,System.String)">
<summary>
Exchanges a given request token for access token.
</summary>
<param name="requestToken">The request token that the user has authorized.</param>
<param name="verifier">The verifier code.</param>
<returns>
The access token assigned by the Service Provider.
</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.ConsumerBase.Dispose(System.Boolean)">
<summary>
Releases unmanaged and - optionally - managed resources
</summary>
<param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.ConsumerKey">
<summary>
Gets the Consumer Key used to communicate with the Service Provider.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.ServiceProvider">
<summary>
Gets the Service Provider that will be accessed.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.TokenManager">
<summary>
Gets the persistence store for tokens and secrets.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.Channel">
<summary>
Gets the channel to use for sending/receiving messages.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.SecuritySettings">
<summary>
Gets the security settings for this consumer.
</summary>
</member>
<member name="P:DotNetOpenAuth.OAuth.ConsumerBase.OAuthChannel">
<summary>
Gets or sets the channel to use for sending/receiving messages.
</summary>
</member>
<member name="T:DotNetOpenAuth.OAuth.DesktopConsumer">
<summary>
Used by a desktop application to use OAuth to access the Service Provider on behalf of the User.
</summary>
<remarks>
The methods on this class are thread-safe. Provided the properties are set and not changed
afterward, a single instance of this class may be used by an entire desktop application safely.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.#ctor(DotNetOpenAuth.OAuth.ServiceProviderDescription,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.DesktopConsumer"/> class.
</summary>
<param name="serviceDescription">The endpoints and behavior of the Service Provider.</param>
<param name="tokenManager">The host's method of storing and recalling tokens and secrets.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.RequestUserAuthorization(System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String},System.String@)">
<summary>
Begins an OAuth authorization request.
</summary>
<param name="requestParameters">Extra parameters to add to the request token message. Optional.</param>
<param name="redirectParameters">Extra parameters to add to the redirect to Service Provider message. Optional.</param>
<param name="requestToken">The request token that must be exchanged for an access token after the user has provided authorization.</param>
<returns>The URL to open a browser window to allow the user to provide authorization.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.ProcessUserAuthorization(System.String)">
<summary>
Exchanges a given request token for access token.
</summary>
<param name="requestToken">The request token that the user has authorized.</param>
<returns>The access token assigned by the Service Provider.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.DesktopConsumer.ProcessUserAuthorization(System.String,System.String)">
<summary>
Exchanges a given request token for access token.
</summary>
<param name="requestToken">The request token that the user has authorized.</param>
<param name="verifier">The verifier code typed in by the user. Must not be <c>Null</c> for OAuth 1.0a service providers and later.</param>
<returns>
The access token assigned by the Service Provider.
</returns>
</member>
<member name="T:DotNetOpenAuth.OAuth.WebConsumer">
<summary>
A website or application that uses OAuth to access the Service Provider on behalf of the User.
</summary>
<remarks>
The methods on this class are thread-safe. Provided the properties are set and not changed
afterward, a single instance of this class may be used by an entire web application safely.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.#ctor(DotNetOpenAuth.OAuth.ServiceProviderDescription,DotNetOpenAuth.OAuth.ChannelElements.IConsumerTokenManager)">
<summary>
Initializes a new instance of the <see cref="T:DotNetOpenAuth.OAuth.WebConsumer"/> class.
</summary>
<param name="serviceDescription">The endpoints and behavior of the Service Provider.</param>
<param name="tokenManager">The host's method of storing and recalling tokens and secrets.</param>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.PrepareRequestUserAuthorization">
<summary>
Begins an OAuth authorization request and redirects the user to the Service Provider
to provide that authorization. Upon successful authorization, the user is redirected
back to the current page.
</summary>
<returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns>
<remarks>
Requires HttpContext.Current.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.PrepareRequestUserAuthorization(System.Uri,System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String})">
<summary>
Prepares an OAuth message that begins an authorization request that will
redirect the user to the Service Provider to provide that authorization.
</summary>
<param name="callback">
An optional Consumer URL that the Service Provider should redirect the
User Agent to upon successful authorization.
</param>
<param name="requestParameters">Extra parameters to add to the request token message. Optional.</param>
<param name="redirectParameters">Extra parameters to add to the redirect to Service Provider message. Optional.</param>
<returns>The pending user agent redirect based message to be sent as an HttpResponse.</returns>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.ProcessUserAuthorization">
<summary>
Processes an incoming authorization-granted message from an SP and obtains an access token.
</summary>
<returns>The access token, or null if no incoming authorization message was recognized.</returns>
<remarks>
Requires HttpContext.Current.
</remarks>
</member>
<member name="M:DotNetOpenAuth.OAuth.WebConsumer.ProcessUserAuthorization(System.Web.HttpRequestBase)">
<summary>
Processes an incoming authorization-granted message from an SP and obtains an access token.
</summary>
<param name="request">The incoming HTTP request.</param>
<returns>The access token, or null if no incoming authorization message was recognized.</returns>
</member>
</members>
</doc>

BIN
packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/DotNetOpenAuth.OAuth.Core.4.1.4.12333.nupkg View File


BIN
packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.dll View File


+ 1858
- 0
packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OAuth.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.dll View File


+ 1858
- 0
packages/DotNetOpenAuth.OAuth.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OAuth.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/DotNetOpenAuth.OpenId.Core.4.1.4.12333.nupkg View File


BIN
packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.dll View File


+ 10788
- 0
packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OpenId.dll View File


+ 10788
- 0
packages/DotNetOpenAuth.OpenId.Core.4.1.4.12333/lib/net45-full/DotNetOpenAuth.OpenId.xml
File diff suppressed because it is too large
View File


BIN
packages/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333.nupkg View File


BIN
packages/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.RelyingParty.dll View File


+ 3568
- 0
packages/DotNetOpenAuth.OpenId.RelyingParty.4.1.4.12333/lib/net40-full/DotNetOpenAuth.OpenId.RelyingParty.xml
File diff suppressed because it is too large
View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save