hexo-theme-linen 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/_config.yml +3 -3
  2. package/layout/archive.ejs +3 -3
  3. package/layout/layout.ejs +10 -10
  4. package/layout/partials/post-item.ejs +2 -2
  5. package/layout/partials/share-meta.ejs +1 -1
  6. package/layout/partials/site-info.ejs +4 -4
  7. package/layout/post.ejs +6 -6
  8. package/package.json +8 -4
  9. package/scripts/helpers/tools.js +1 -3
  10. package/scripts/lazyload/inject.js +3 -3
  11. package/scripts/rss.js +2 -1
  12. /package/source/{css → linen-theme/css}/animations.css +0 -0
  13. /package/source/{css → linen-theme/css}/font-version.scss +0 -0
  14. /package/source/{css → linen-theme/css}/highlight-github.scss +0 -0
  15. /package/source/{css → linen-theme/css}/lazyload.css +0 -0
  16. /package/source/{css → linen-theme/css}/linen.scss +0 -0
  17. /package/source/{css → linen-theme/css}/linkcard.scss +0 -0
  18. /package/source/{css → linen-theme/css}/mediaquery.scss +0 -0
  19. /package/source/{css → linen-theme/css}/normalize.css +0 -0
  20. /package/source/{css → linen-theme/css}/noscript.css +0 -0
  21. /package/source/{css → linen-theme/css}/photoswipe-dynamic-caption-plugin.css +0 -0
  22. /package/source/{css → linen-theme/css}/photoswipe.css +0 -0
  23. /package/source/{css → linen-theme/css}/rss-en.xsl +0 -0
  24. /package/source/{css → linen-theme/css}/rss-zh.xsl +0 -0
  25. /package/source/{css → linen-theme/css}/vars.scss +0 -0
  26. /package/source/{favicon.svg → linen-theme/favicon.svg} +0 -0
  27. /package/source/{fonts → linen-theme/fonts}/SourceHanSerifSC-Regular.woff2 +0 -0
  28. /package/source/{fonts → linen-theme/fonts}/SourceSerif4-Regular.ttf.woff2 +0 -0
  29. /package/source/{img → linen-theme/img}/icons/ZIP.svg +0 -0
  30. /package/source/{img → linen-theme/img}/icons/about.svg +0 -0
  31. /package/source/{img → linen-theme/img}/icons/arrow-down.svg +0 -0
  32. /package/source/{img → linen-theme/img}/icons/binary.svg +0 -0
  33. /package/source/{img → linen-theme/img}/icons/checked-checkbox.svg +0 -0
  34. /package/source/{img → linen-theme/img}/icons/chinese.svg +0 -0
  35. /package/source/{img → linen-theme/img}/icons/code.svg +0 -0
  36. /package/source/{img → linen-theme/img}/icons/collapsed.svg +0 -0
  37. /package/source/{img → linen-theme/img}/icons/copied.png +0 -0
  38. /package/source/{img → linen-theme/img}/icons/copy.png +0 -0
  39. /package/source/{img → linen-theme/img}/icons/copyright.svg +0 -0
  40. /package/source/{img → linen-theme/img}/icons/date.svg +0 -0
  41. /package/source/{img → linen-theme/img}/icons/email.svg +0 -0
  42. /package/source/{img → linen-theme/img}/icons/english.svg +0 -0
  43. /package/source/{img → linen-theme/img}/icons/exif/aperture.svg +0 -0
  44. /package/source/{img → linen-theme/img}/icons/exif/camera.svg +0 -0
  45. /package/source/{img → linen-theme/img}/icons/exif/ev.svg +0 -0
  46. /package/source/{img → linen-theme/img}/icons/exif/focusLength.svg +0 -0
  47. /package/source/{img → linen-theme/img}/icons/exif/hdr.svg +0 -0
  48. /package/source/{img → linen-theme/img}/icons/exif/iso.svg +0 -0
  49. /package/source/{img → linen-theme/img}/icons/exif/lens.svg +0 -0
  50. /package/source/{img → linen-theme/img}/icons/exif/location.svg +0 -0
  51. /package/source/{img → linen-theme/img}/icons/exif/shutterSpeed.svg +0 -0
  52. /package/source/{img → linen-theme/img}/icons/github.svg +0 -0
  53. /package/source/{img → linen-theme/img}/icons/hdr.svg +0 -0
  54. /package/source/{img → linen-theme/img}/icons/hdr_off.svg +0 -0
  55. /package/source/{img → linen-theme/img}/icons/link.svg +0 -0
  56. /package/source/{img → linen-theme/img}/icons/location.svg +0 -0
  57. /package/source/{img → linen-theme/img}/icons/more.svg +0 -0
  58. /package/source/{img → linen-theme/img}/icons/new.svg +0 -0
  59. /package/source/{img → linen-theme/img}/icons/new1.svg +0 -0
  60. /package/source/{img → linen-theme/img}/icons/next.svg +0 -0
  61. /package/source/{img → linen-theme/img}/icons/prev.svg +0 -0
  62. /package/source/{img → linen-theme/img}/icons/redirect.svg +0 -0
  63. /package/source/{img → linen-theme/img}/icons/rss.svg +0 -0
  64. /package/source/{img → linen-theme/img}/icons/search.svg +0 -0
  65. /package/source/{img → linen-theme/img}/icons/shelf.svg +0 -0
  66. /package/source/{img → linen-theme/img}/icons/tag.svg +0 -0
  67. /package/source/{img → linen-theme/img}/icons/toc.svg +0 -0
  68. /package/source/{img → linen-theme/img}/icons/toc1.svg +0 -0
  69. /package/source/{img → linen-theme/img}/icons/up-down.svg +0 -0
  70. /package/source/{img → linen-theme/img}/lazyload/error-tip.svg +0 -0
  71. /package/source/{img → linen-theme/img}/lazyload/loading.svg +0 -0
  72. /package/source/{img → linen-theme/img}/logo.svg +0 -0
  73. /package/source/{img → linen-theme/img}/logo_black.svg +0 -0
  74. /package/source/{img → linen-theme/img}/pattern-randomized.jpg +0 -0
  75. /package/source/{img → linen-theme/img}/related-post.jpg +0 -0
  76. /package/source/{img → linen-theme/img}/vue-color-avatar.png +0 -0
  77. /package/source/{js → linen-theme/js}/gitalk/gitalk.css +0 -0
  78. /package/source/{js → linen-theme/js}/gitalk/gitalk.min.js +0 -0
  79. /package/source/{js → linen-theme/js}/hdr.js +0 -0
  80. /package/source/{js → linen-theme/js}/lazyload.js +0 -0
  81. /package/source/{js → linen-theme/js}/linen.js +0 -0
  82. /package/source/{js → linen-theme/js}/photoswipe/photoswipe-dynamic-caption-plugin.esm.js +0 -0
  83. /package/source/{js → linen-theme/js}/photoswipe/photoswipe-lightbox.esm.min.js +0 -0
  84. /package/source/{js → linen-theme/js}/photoswipe/photoswipe.esm.min.js +0 -0
  85. /package/source/{js → linen-theme/js}/replace-emoji.js +0 -0
  86. /package/source/{js → linen-theme/js}/toc.js +0 -0
package/_config.yml CHANGED
@@ -1,9 +1,9 @@
1
1
  stylesheets:
2
- - /css/linen.css
3
- - /css/mediaquery.css
2
+ - /linen-theme/css/linen.css
3
+ - /linen-theme/css/mediaquery.css
4
4
 
5
5
  scripts:
6
- - /js/linen.js
6
+ - /linen-theme/js/linen.js
7
7
 
8
8
  sass:
9
9
  outputStyle: compressed
@@ -24,7 +24,7 @@ const archivesList = Object.entries(site.posts.filter(post=>!post?.hide?.archive
24
24
  <ul class="archive-list">
25
25
  <% categoriesList.forEach(category => { %>
26
26
  <li class="archive-list-item">
27
- <a class="archive-list-link" data-firstletter="<%=category.name.charAt(0)%>" href="<%='/categories/' + category.name + '/'%>">
27
+ <a class="archive-list-link" data-firstletter="<%=category.name.charAt(0)%>" href="<%=url_for(`/categories/${category.name}/`)%>">
28
28
  <%=category.name%>
29
29
  <span class="archive-list-count"><%=category.count%></span>
30
30
  </a>
@@ -38,7 +38,7 @@ const archivesList = Object.entries(site.posts.filter(post=>!post?.hide?.archive
38
38
  <ul class="archive-list">
39
39
  <% archivesList.forEach(archive => { %>
40
40
  <li class="archive-list-item">
41
- <a class="archive-list-link" data-firstletter="<%=archive.name.charAt(archive.name.length-1)%>" href="<%='/archives/' + archive.year + '/'%>">
41
+ <a class="archive-list-link" data-firstletter="<%=archive.name.charAt(archive.name.length-1)%>" href="<%=url_for(`/archives/${archive.year}/`)%>">
42
42
  <%=archive.name%>
43
43
  <span class="archive-list-count"><%=archive.count%></span>
44
44
  </a>
@@ -57,7 +57,7 @@ const archivesList = Object.entries(site.posts.filter(post=>!post?.hide?.archive
57
57
  <ul class="archive-list">
58
58
  <% seriesList.forEach(series => { %>
59
59
  <li class="archive-list-item">
60
- <a class="archive-list-link" data-firstletter="<%=series.name.charAt(0)%>" href="<%='/series/' + series.name + '/'%>">
60
+ <a class="archive-list-link" data-firstletter="<%=series.name.charAt(0)%>" href="<%=url_for(`/series/${series.name}/`)%>">
61
61
  <%=series.name%>
62
62
  <span class="archive-list-count"><%=series.count%></span>
63
63
  </a>
package/layout/layout.ejs CHANGED
@@ -14,7 +14,7 @@ const version = theme.version;
14
14
  <meta charset="UTF-8" />
15
15
  <meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
16
16
  <title><%=getPageTitle()%></title>
17
- <link rel="icon" type="image/x-icon" href="<%=theme?.icon ?? '/favicon.svg'%>" />
17
+ <link rel="icon" type="image/x-icon" href="<%=url_for(theme?.icon ?? '/linen-theme/favicon.svg')%>" />
18
18
  <meta name="referrer" content="no-referrer-when-downgrade" />
19
19
  <% if (page.hide && page.hide.seo) { %>
20
20
  <meta name="robots" content="noindex, nofollow">
@@ -23,14 +23,14 @@ const version = theme.version;
23
23
  <%-partial('partials/share-meta')%> <% if (theme.stylesheets !== undefined
24
24
  && theme.stylesheets.length > 0) { %>
25
25
  <% if (is_post()) { %>
26
- <link rel="stylesheet" href="/css/linkcard.css?v=<%=version%>" />
26
+ <link rel="stylesheet" href="<%=url_for(`/linen-theme/css/linkcard.css?v=${version}`)%>" />
27
27
  <% } %>
28
28
  <!-- stylesheets list from _config.yml -->
29
29
  <% theme.stylesheets.forEach(url => { %>
30
- <link rel="stylesheet" href="<%=url%>?v=<%=version%>" />
30
+ <link rel="stylesheet" href="<%=url_for(`${url}?v=${version}`)%>" />
31
31
  <% }); %> <% } %>
32
32
  <% if (theme?.lazyload?.enable ?? true) { %>
33
- <link rel="stylesheet" href="/css/lazyload.css?v=<%=version%>" />
33
+ <link rel="stylesheet" href="<%=url_for(`/linen-theme/css/lazyload.css?v=${version}`)%>" />
34
34
  <% } %>
35
35
  <% if (theme?.heads) { %>
36
36
  <% theme?.heads.forEach(head => { %>
@@ -77,13 +77,13 @@ const version = theme.version;
77
77
  <div class="side-content">
78
78
  <% if (series.length) { %>
79
79
  <div class="post-series">
80
- <a class="series-title" href="<%='/series/' + page.series + '/'%>"><%=__('common.series')%>-<%=page.series%></a>
80
+ <a class="series-title" href="<%=url_for(`/series/${page.series}/`)%>"><%=__('common.series')%>-<%=page.series%></a>
81
81
  <div class="series-items">
82
82
  <% take(series, 50).forEach((item, index) => { %>
83
83
  <a class="series-item-link<%-item.source === page.source ? ' active': ''%>" href="<%=url_for(item.path)%>"><%-`${item.title}`%><% if (item.subTitle) { %><span class="sub-title"><%=item.subTitle%></span><% } %></a>
84
84
  <% }); %>
85
85
  <% if(series.length > 50) { %>
86
- <a class="series-item-link view-more" href="<%='/series/' + page.series + '/'%>"><%-`${__('common.total')} ${series.length} ${__('common.seriesPostCountShort')}`%></a>
86
+ <a class="series-item-link view-more" href="<%=url_for(`/series/${page.series}/`)%>"><%-`${__('common.total')} ${series.length} ${__('common.seriesPostCountShort')}`%></a>
87
87
  <% } %>
88
88
  </div>
89
89
  </div>
@@ -101,16 +101,16 @@ const version = theme.version;
101
101
  <a id="back-to-top" href="#page-top" title="back to top"></a>
102
102
  <noscript id="noscript-styles"></noscript>
103
103
  <% if(is_post()) { %>
104
- <script src="/js/toc.js?v=<%=version%>" defer></script>
104
+ <script src="<%=url_for(`/linen-theme/js/toc.js?v=${version}`)%>" defer></script>
105
105
  <% } %>
106
106
  <% if (theme.scripts !== undefined && theme.scripts.length > 0) { %>
107
107
  <!-- scripts list from theme config.yml -->
108
108
  <% theme.scripts.forEach(url => { %>
109
- <script src="<%=url%>?v=<%=version%>"></script>
109
+ <script src="<%=url_for(`${url}?v=${version}`)%>"></script>
110
110
  <% }); %>
111
111
  <% } %>
112
112
  <% if (theme?.lazyload?.enable ?? true) { %>
113
- <script src="/js/lazyload.js?v=<%=version%>"></script>
113
+ <script src="<%=url_for(`/linen-theme/js/lazyload.js?v=${version}`)%>"></script>
114
114
  <% } %>
115
115
  <% if (page.hdrAssetsPrefix) { %>
116
116
  <script>
@@ -118,7 +118,7 @@ const version = theme.version;
118
118
  </script>
119
119
  <% } %>
120
120
  <% if (page.hdrSwitch) { %>
121
- <script src="/js/hdr.js?v=<%=version%>"></script>
121
+ <script src="<%url_for(`/linen-theme/js/hdr.js?v=${version}`)%>"></script>
122
122
  <% } %>
123
123
  <% if (theme?.appends?.length > 0) { %>
124
124
  <% theme.appends.forEach(appendItem => { %>
@@ -6,7 +6,7 @@
6
6
  <% if(post?.tags?.length) { %>
7
7
  <div class="tags">
8
8
  <% (post.tags || []).forEach(tag => { %>
9
- <a class="tag-item" href="<%='/'+tag.path%>" onclick="event.stopPropagation()"><%=tag.name%></a>
9
+ <a class="tag-item" href="<%=url_for(`/${tag.path}`)%>" onclick="event.stopPropagation()"><%=tag.name%></a>
10
10
  <% }) %>
11
11
  </div>
12
12
  <% } %>
@@ -20,7 +20,7 @@
20
20
  <% } %>
21
21
  <span class="categories">
22
22
  <% (post?.categories || []).forEach(category => { %>
23
- <a class="category-item" href="<%='/'+category.path%>" onclick="event.stopPropagation()"><%=category.name%></a>
23
+ <a class="category-item" href="<%=url_for(`/${category.path}`)%>" onclick="event.stopPropagation()"><%=category.name%></a>
24
24
  <% }); %>
25
25
  </span>
26
26
  <span class="read-time"><%-partial('partials/words', { post, count: false, readTime: true })%></span>
@@ -3,7 +3,7 @@ var pageTitle = getPageTitle();
3
3
  %>
4
4
  <meta property="og:type" content="blog">
5
5
  <meta property="og:title" content="<%=pageTitle%>">
6
- <meta property="og:url" content="<%=config.url + '/' + page.path%>">
6
+ <meta property="og:url" content="<%=url_for(page.path)%>">
7
7
  <meta property="og:site_name" content="<%=config.title%>">
8
8
  <meta property="og:description" content="<%=page?.seriesInfo?.description||page.excerpt||''%>">
9
9
  <meta property="og:locale" content="<%=page.language||config.language%>">
@@ -12,13 +12,13 @@ const series = Array.from(new Set(site.posts.filter(item=>item.series).sort('dat
12
12
  <div class="info-row description"><%=theme?.info?.site_desc%></div>
13
13
  <% } %>
14
14
  <div class="info-row site-statisc">
15
- <a href="/archives/#posts" target="_self"><%=site.posts?.filter(post=>!post?.hide?.archive).length%> <%=__('common.posts')%></a>
15
+ <a href="<%=url_for('/archives/#posts')%>" target="_self"><%=site.posts?.filter(post=>!post?.hide?.archive).length%> <%=__('common.posts')%></a>
16
16
  <span class="divider">/</span>
17
- <a href="/archives/#categories" target="_self"><%=site.categories.length%> <%=__('common.categories')%></a>
17
+ <a href="<%=url_for('/archives/#categories')%>" target="_self"><%=site.categories.length%> <%=__('common.categories')%></a>
18
18
  <span class="divider">/</span>
19
- <a href="/archives/#tags" target="_self"><%=site.tags.length%> <%=__('common.tags')%></a>
19
+ <a href="<%=url_for('/archives/#tags')%>" target="_self"><%=site.tags.length%> <%=__('common.tags')%></a>
20
20
  <% if (series.length) { %>
21
21
  <span class="divider">/</span>
22
- <a href="/archives/#series" target="_self"><%=series.length%> <%=__('common.series')%></a><% } %>
22
+ <a href="<%url_for('/archives/#series')%>" target="_self"><%=series.length%> <%=__('common.series')%></a><% } %>
23
23
  </div>
24
24
  </div>
package/layout/post.ejs CHANGED
@@ -67,7 +67,7 @@
67
67
  <div id="page-content-end"></div>
68
68
  <div class="tags">
69
69
  <% page.tags.forEach(tag => { %>
70
- <a class="tag-item" href="<%='/'+tag.path%>"><%=tag.name%></a>
70
+ <a class="tag-item" href="<%=url_for(`/${tag.path}`)%>"><%=tag.name%></a>
71
71
  <% }); %>
72
72
  </div>
73
73
  </article>
@@ -236,12 +236,12 @@ const nextPost = series[currentIndex + 1] || null;
236
236
  const version = theme.version;
237
237
  const hdrAssetsPrefix = page?.hdrAssetsPrefix || '';
238
238
  %>
239
- <link rel="stylesheet" href="/css/photoswipe.css?v=<%=version%>" />
240
- <link rel="stylesheet" href="/css/photoswipe-dynamic-caption-plugin.css?v=<%=version%>" />
239
+ <link rel="stylesheet" href="/linen-theme/css/photoswipe.css?v=<%=version%>" />
240
+ <link rel="stylesheet" href="/linen-theme/css/photoswipe-dynamic-caption-plugin.css?v=<%=version%>" />
241
241
  <script type="module" defer>
242
- import PhotoSwipeLightbox from '/js/photoswipe/photoswipe-lightbox.esm.min.js?v=<%=version%>';
243
- import PhotoSwipe from '/js/photoswipe/photoswipe.esm.min.js?v=<%=version%>';
244
- import PhotoSwipeDynamicCaption from '/js/photoswipe/photoswipe-dynamic-caption-plugin.esm.js?v=<%=version%>';
242
+ import PhotoSwipeLightbox from '/linen-theme/js/photoswipe/photoswipe-lightbox.esm.min.js?v=<%=version%>';
243
+ import PhotoSwipe from '/linen-theme/js/photoswipe/photoswipe.esm.min.js?v=<%=version%>';
244
+ import PhotoSwipeDynamicCaption from '/linen-theme/js/photoswipe/photoswipe-dynamic-caption-plugin.esm.js?v=<%=version%>';
245
245
  let isPswpOpening = false;
246
246
  let hdrAssetsPrefix = '<%=hdrAssetsPrefix%>';
247
247
  const getSafeAreaHeight = () => {
package/package.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "name": "hexo-theme-linen",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "A clean Hexo theme",
5
5
  "main": "index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/LynanBreeze/hexo-theme-linen.git"
9
+ },
6
10
  "scripts": {
7
11
  "test": "echo \"Error: no test specified\" && exit 1"
8
12
  },
@@ -16,11 +20,11 @@
16
20
  "license": "MIT",
17
21
  "dependencies": {
18
22
  "hexo": "^8.1.1",
19
- "hexo-util": "^4.0.0",
20
23
  "hexo-pagination": "^4.0.0",
24
+ "hexo-renderer-dartsass": "^1.1.0",
21
25
  "hexo-renderer-ejs": "^2.0.0",
22
- "moment": "^2.30.1",
23
- "hexo-renderer-dartsass": "^1.1.0"
26
+ "hexo-util": "^4.0.0",
27
+ "moment": "^2.30.1"
24
28
  },
25
29
  "engines": {
26
30
  "node": ">=14.0.0"
@@ -10,8 +10,7 @@ function getFile(filePath, defaultValue) {
10
10
  }
11
11
  }
12
12
 
13
- module.exports = (hexo) => {
14
- hexo.extend.helper.register("take", function (arr, n = 1) {
13
+ hexo.extend.helper.register("take", function (arr, n = 1) {
15
14
  return arr.slice(0, Math.max(0, n));
16
15
  });
17
16
 
@@ -215,4 +214,3 @@ module.exports = (hexo) => {
215
214
 
216
215
  return toc;
217
216
  });
218
- };
@@ -142,13 +142,13 @@ module.exports = function (hexo) {
142
142
  if (!fs.exists(filePath)) throw new TypeError(filePath + " not found!");
143
143
  const sourceCode = fs.readFileSync(filePath, { escape: true });
144
144
  fs.writeFileSync(
145
- path.join(hexo.theme_dir, "source/js/lazyload.js"),
145
+ path.join(hexo.theme_dir, "source/linen-theme/js/lazyload.js"),
146
146
  sourceCode,
147
147
  );
148
148
  };
149
149
  const injectExtraStyles = function (sourceCode) {
150
150
  fs.writeFileSync(
151
- path.join(hexo.theme_dir, "source/css/lazyload.css"),
151
+ path.join(hexo.theme_dir, "source/linen-theme/css/lazyload.css"),
152
152
  sourceCode,
153
153
  );
154
154
  };
@@ -175,7 +175,7 @@ module.exports = function (hexo) {
175
175
  htmlContent = htmlContent.replace(
176
176
  '<noscript id="noscript-styles"></noscript>',
177
177
  `<noscript id="noscript-styles"><style>${fs.readFileSync(
178
- path.join(hexo.theme_dir, "source/css/noscript.css"),
178
+ path.join(hexo.theme_dir, "source/linen-theme/css/noscript.css"),
179
179
  )}</style></noscript>`,
180
180
  );
181
181
  }
package/scripts/rss.js CHANGED
@@ -27,6 +27,7 @@ hexo.extend.generator.register("rss", function (locals) {
27
27
  const posts = locals.posts.sort("-date").limit(themeConfig?.feed?.limit ?? 10);
28
28
  const config = hexo.config;
29
29
  const language = config.language || "";
30
+ const getPostDate = hexo.extend.helper.get("getPostDate");
30
31
 
31
32
  const feed = `<?xml version="1.0" encoding="UTF-8" ?>
32
33
  <?xml-stylesheet type="text/xsl" href="/css/rss-${language.startsWith("zh") ? "zh" : "en"}.xsl"?>
@@ -74,7 +75,7 @@ hexo.extend.generator.register("rss", function (locals) {
74
75
  <title>${escape(`${post.title}${post?.subTitle ? `(${post.subTitle})` : ""}`)}</title>
75
76
  <link>${config.url + url_for.bind(hexo)(post.path)}</link>
76
77
  <guid>${config.url + url_for.bind(hexo)(post.path)}</guid>
77
- <pubDate>${hexo.extend.helper.store.getPostDate(post, language)}</pubDate>
78
+ <pubDate>${getPostDate(post, language)}</pubDate>
78
79
  <description><![CDATA[${rawHtml}]]></description>
79
80
  </item>`;
80
81
  })
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes