<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://massarn.com/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AAutosorting</id>
	<title>Модуль:Autosorting - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://massarn.com/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%3AAutosorting"/>
	<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;action=history"/>
	<updated>2026-10-24T07:45:32Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;diff=1945&amp;oldid=prev</id>
		<title>Buto в 17:13, 11 октября 2026</title>
		<link rel="alternate" type="text/html" href="https://massarn.com/w/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Autosorting&amp;diff=1945&amp;oldid=prev"/>
		<updated>2026-10-11T17:13:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require( &amp;#039;strict&amp;#039; )&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local mwLang = mw.getContentLanguage()&lt;br /&gt;
local getArgs = require( &amp;#039;Module:Arguments&amp;#039; ).getArgs&lt;br /&gt;
&lt;br /&gt;
-- Безопасная загрузка конфига (чтобы не было ошибки, если файла конфига нет на сервере)&lt;br /&gt;
local hasConfig, config = pcall(mw.loadData, &amp;#039;Module:Autosorting/config&amp;#039;)&lt;br /&gt;
if not hasConfig then&lt;br /&gt;
    config = { limits = {} }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local currentTitle = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
local function isEmpty( val )&lt;br /&gt;
	return val == nil or val == &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить название категории&lt;br /&gt;
local function getCategoryName( str, name, ... )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return error( &amp;#039;Autosorting: getCategoryName без name&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	return string.format( str, mwLang:ucfirst( name ), unpack( arg ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить категорию&lt;br /&gt;
local function getCategory( name, key, ... )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return error( &amp;#039;Autosorting: getCategory без name&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local catKey = &amp;#039;&amp;#039;&lt;br /&gt;
	if not isEmpty( key ) then&lt;br /&gt;
		catKey = string.format( &amp;#039;|%s %s&amp;#039;, key, currentTitle.text )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if #arg &amp;gt; 0 then&lt;br /&gt;
		local title = mwLang:ucfirst( arg[ 1 ] )&lt;br /&gt;
		arg[ 1 ] = nil&lt;br /&gt;
		name = string.format( name, title, unpack( arg ) )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return string.format( &amp;#039;[[Category:%s%s]]&amp;#039;, name, catKey )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить стандартный лимит&lt;br /&gt;
local function getPageLimit( name, property )&lt;br /&gt;
	name = mwLang:lcfirst( name )&lt;br /&gt;
	property = mwLang:uc( property )&lt;br /&gt;
	&lt;br /&gt;
	local propertyLimits = config.limits[ property ]&lt;br /&gt;
	if isEmpty( propertyLimits ) then&lt;br /&gt;
		return -1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return propertyLimits[ name ] or propertyLimits.default or -1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить соответствие категории критериям&lt;br /&gt;
local function isValidCategory( name, catName, property, doNotCheck )&lt;br /&gt;
	if not doNotCheck then&lt;br /&gt;
		local success, title = pcall( mw.title.new, &amp;#039;Category:&amp;#039; .. catName )&lt;br /&gt;
		if success and not isEmpty( title ) and title.exists then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local success, catCount = pcall( mw.site.stats.pagesInCategory, catName, &amp;#039;pages&amp;#039; )&lt;br /&gt;
	if success then&lt;br /&gt;
		local pageLimit = getPageLimit( name, property )&lt;br /&gt;
	&lt;br /&gt;
		return catCount &amp;gt; pageLimit&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- БЕЗОПАСНАЯ ФУНКЦИЯ-ЗАГЛУШКА&lt;br /&gt;
-- Так как базы Викиданных на локальном сервере нет, мы всегда возвращаем пустой массив.&lt;br /&gt;
-- Это заставит модуль использовать только локальные дефолтные параметры (например, default-type) без выдачи ошибок.&lt;br /&gt;
local function getWikidataProperty( frame, property, entityId, num )&lt;br /&gt;
	return {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Получить категорию для отсутствия изображений&lt;br /&gt;
local function getFileCategory( frame, name, property, entityId )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local instanceOf = getWikidataProperty( frame, &amp;#039;p31&amp;#039;, entityId, 3 )&lt;br /&gt;
	instanceOf = #instanceOf &amp;gt; 0 and instanceOf[ 1 ] or &amp;#039;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	local result = getCategory( name, instanceOf, property )&lt;br /&gt;
	return #propValues, result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по профессиям&lt;br /&gt;
function p._byOccupation( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p106&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId )&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	local catName = &amp;#039;&amp;#039;&lt;br /&gt;
	local occupationExists = false&lt;br /&gt;
	local validCatsCounter = 0&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		local value = mwLang:lcfirst( val )&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Тептар:%s (тип: человек; род занятий: %s)&amp;#039;, name, value )&lt;br /&gt;
		occupationExists = true&lt;br /&gt;
		&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
			validCatsCounter = validCatsCounter + 1&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if validCatsCounter &amp;gt;= 3 then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local defaultOccupation = args[ &amp;#039;default-occupation&amp;#039; ]&lt;br /&gt;
	&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and not isEmpty( defaultOccupation ) then&lt;br /&gt;
		occupationExists = true&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Тептар:%s (тип: человек; род занятий: %s)&amp;#039;, name, defaultOccupation )&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and occupationExists then&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Тептар:%s (тип: человек; род занятий: не распределён)&amp;#039;, name )&lt;br /&gt;
		if isValidCategory( name, catName, property ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по типам&lt;br /&gt;
function p._byType( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p31&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId )&lt;br /&gt;
&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local defaultType = args[ &amp;#039;default-type&amp;#039; ]&lt;br /&gt;
	local defaultOccupation = args[ &amp;#039;default-occupation&amp;#039; ]&lt;br /&gt;
	&lt;br /&gt;
	local defaultCatKey&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	local catName = &amp;#039;&amp;#039;&lt;br /&gt;
	local validCatsCounter = 0&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		catName = getCategoryName( &amp;#039;Тептар:%s (тип: %s)&amp;#039;, name, mwLang:lcfirst( val ) )&lt;br /&gt;
		if val == &amp;#039;человек&amp;#039; or val == &amp;#039;human&amp;#039; then&lt;br /&gt;
			local occupations = p._byOccupation( frame, name, entityId )&lt;br /&gt;
			if isEmpty( occupations ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
			else&lt;br /&gt;
				result = result .. occupations&lt;br /&gt;
			end&lt;br /&gt;
			validCatsCounter = validCatsCounter + 1&lt;br /&gt;
		else&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
				validCatsCounter = validCatsCounter + 1&lt;br /&gt;
			else&lt;br /&gt;
				if isEmpty( defaultCatKey ) then&lt;br /&gt;
					defaultCatKey = val&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if validCatsCounter &amp;gt;= 3 then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and not isEmpty( defaultType ) then&lt;br /&gt;
		if defaultType == &amp;#039;человек&amp;#039; and not isEmpty( defaultOccupation ) then&lt;br /&gt;
			catName = getCategoryName( &amp;#039;Тептар:%s (тип: человек; род занятий: %s)&amp;#039;, name, defaultOccupation )&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
			else&lt;br /&gt;
				result = result .. getCategory( &amp;#039;Тептар:%s (тип: человек)&amp;#039;, key, name )&lt;br /&gt;
			end&lt;br /&gt;
		elseif defaultType == &amp;#039;человек&amp;#039; then&lt;br /&gt;
			result = result .. getCategory( &amp;#039;Тептар:%s (тип: человек)&amp;#039;, key, name )&lt;br /&gt;
		else&lt;br /&gt;
			catName = getCategoryName( &amp;#039;Тептар:%s (тип: %s)&amp;#039;, name, defaultType )&lt;br /&gt;
			if isValidCategory( name, catName, property ) then&lt;br /&gt;
				result = result .. getCategory( catName, key )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local defaultCatName = getCategoryName( &amp;#039;Тептар:%s (не распределённые по типам)&amp;#039;, name )&lt;br /&gt;
	if result == &amp;#039;&amp;#039; and not isEmpty( defaultCatKey ) then&lt;br /&gt;
		if not isEmpty( key ) then&lt;br /&gt;
			defaultCatKey = key .. defaultCatKey&lt;br /&gt;
		end&lt;br /&gt;
		result = result .. getCategory( defaultCatName, defaultCatKey )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if result == &amp;#039;&amp;#039; then&lt;br /&gt;
		return getCategory( &amp;#039;Тептар:%s (тип: не указан)&amp;#039;, key, name )&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Шаблон сортировки по типам&lt;br /&gt;
function p.byType( frame )&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local name = args[ 1 ]&lt;br /&gt;
	local key = args[ &amp;#039;key&amp;#039; ]&lt;br /&gt;
	local entityId = args[ &amp;#039;from&amp;#039; ]&lt;br /&gt;
	if isEmpty( name ) or not isEmpty( args.nocat ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if mw.ustring.find( name, &amp;#039;статьи&amp;#039; ) and currentTitle.namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._byType( frame, name, entityId, key )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по АТЕ&lt;br /&gt;
function p._bySubdivision( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p131&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		local catName = getCategoryName( &amp;#039;Тептар:%s (АТЕ: %s)&amp;#039;, name, val )&lt;br /&gt;
		&lt;br /&gt;
		if isValidCategory( name, catName, property, false ) then&lt;br /&gt;
			result = result .. getCategory( catName, key )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по странам&lt;br /&gt;
function p._byCountry( frame, name, entityId, key )&lt;br /&gt;
	if isEmpty( name ) then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	local property = &amp;#039;p17&amp;#039;&lt;br /&gt;
	local propValues = getWikidataProperty( frame, property, entityId, 3 )&lt;br /&gt;
	&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	for k, val in pairs( propValues ) do&lt;br /&gt;
		if isEmpty( val ) then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
		local catName = getCategoryName( &amp;#039;Тептар:%s (страна: %s)&amp;#039;, name, val )&lt;br /&gt;
		&lt;br /&gt;
		result = result .. getCategory( catName, key )&lt;br /&gt;
		if isValidCategory( name, catName, property, false ) then&lt;br /&gt;
			result = result .. p._bySubdivision( frame, name, entityId, key )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Шаблон сортировки по странам&lt;br /&gt;
function p.byCountry( frame )&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local name = args[ 1 ]&lt;br /&gt;
	local key = args[ &amp;#039;key&amp;#039; ]&lt;br /&gt;
	local entityId = args[ &amp;#039;from&amp;#039; ]&lt;br /&gt;
	if isEmpty( name ) or not isEmpty( args.nocat ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if mw.ustring.find( name, &amp;#039;статьи&amp;#039; ) and mw.title.getCurrentTitle().namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._byCountry( frame, name, entityId, key )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Сортировка по наличию/отсутствию изображений&lt;br /&gt;
function p._byImage( frame, file, localFileProps, entityId )&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	&lt;br /&gt;
	if file ~= nil and mw.text.trim( file ) == &amp;#039;-&amp;#039; then&lt;br /&gt;
		file = nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not isEmpty( file ) then&lt;br /&gt;
		local success, title = pcall( mw.title.new, &amp;#039;File:&amp;#039; .. file )&lt;br /&gt;
		&lt;br /&gt;
		if success and not isEmpty( title ) and title.exists then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local catName = &amp;#039;Тептар:Статьи с изображениями: добавить локально&amp;#039;&lt;br /&gt;
		local result = &amp;#039;&amp;#039;&lt;br /&gt;
		local p18, p18Category = getFileCategory( frame, catName, &amp;#039;p18&amp;#039;, entityId )&lt;br /&gt;
		local p373, p373Category = getFileCategory( frame, catName, &amp;#039;p373&amp;#039;, entityId )&lt;br /&gt;
		if p18 == 0 then&lt;br /&gt;
			result = result .. p18Category&lt;br /&gt;
		end&lt;br /&gt;
		if p373 == 0 then&lt;br /&gt;
			result = result .. p373Category&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for _, val in pairs( localFileProps ) do&lt;br /&gt;
		local propValue = getWikidataProperty( frame, val, entityId, 3 )&lt;br /&gt;
		if #propValue &amp;gt; 0 then&lt;br /&gt;
			return &amp;#039;&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local catName = &amp;#039;Тептар:Статьи без изображений&amp;#039;&lt;br /&gt;
	local result = p._byCountry( frame, &amp;#039;статьи без изображений&amp;#039;, entityId )&lt;br /&gt;
	&lt;br /&gt;
	local p18, p18Category = getFileCategory( frame, catName, &amp;#039;p18&amp;#039;, entityId )&lt;br /&gt;
	local p242, p242Category = getFileCategory( frame, catName, &amp;#039;p242&amp;#039;, entityId )&lt;br /&gt;
	local p373, p373Category = getFileCategory( frame, catName, &amp;#039;p373&amp;#039;, entityId )&lt;br /&gt;
	if p18 &amp;gt; 0 then&lt;br /&gt;
		result = result .. p18Category&lt;br /&gt;
	end&lt;br /&gt;
	if p242 &amp;gt; 0 then&lt;br /&gt;
		result = result .. p242Category&lt;br /&gt;
	end&lt;br /&gt;
	if p373 &amp;gt; 0 then&lt;br /&gt;
		result = result .. p373Category&lt;br /&gt;
	end&lt;br /&gt;
	result = result .. p._byType( frame, &amp;#039;статьи без изображений&amp;#039;, entityId )&lt;br /&gt;
	&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Шаблон сортировки по изображениям&lt;br /&gt;
function p.byImage( frame )&lt;br /&gt;
	if mw.title.getCurrentTitle().namespace ~= 0 then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs( frame )&lt;br /&gt;
	local file = args[ 1 ]&lt;br /&gt;
	local entityId = args[ &amp;#039;from&amp;#039; ]&lt;br /&gt;
	if not isEmpty( args.nocat ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local uses = args[ &amp;#039;uses&amp;#039; ]&lt;br /&gt;
	if isEmpty( uses ) then&lt;br /&gt;
		uses = &amp;#039;p18&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local localFileProps = mw.text.split( uses, &amp;#039;, &amp;#039; )&lt;br /&gt;
	if uses == &amp;#039;-&amp;#039; then&lt;br /&gt;
		localFileProps = {}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return p._byImage( frame, file, localFileProps, entityId )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Buto</name></author>
	</entry>
</feed>