<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.omniliberal.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TmpXNsDcsQS4</id>
	<title>[STAGING] Destiny Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.omniliberal.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TmpXNsDcsQS4"/>
	<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/view/Special:Contributions/TmpXNsDcsQS4"/>
	<updated>2026-04-04T05:24:08Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=989</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=989"/>
		<updated>2024-12-15T11:58:57Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-|-&lt;br /&gt;
{{#if: {{{dggusername|}}}|&lt;br /&gt;
! DGG Chat Username&lt;br /&gt;
{{!}} [https://rustlesearch.dev/?username={{{dggusername|}}}&amp;amp;channel=Destinygg {{{dggusername|}}}]}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{stock|}}}|&lt;br /&gt;
! Manifold Market&lt;br /&gt;
{{!}} {{{stock|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{destiny_wiki|}}}|&lt;br /&gt;
! Username&lt;br /&gt;
{{!}} {{{destiny_wiki|}}}}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{dggusername|}}}|&lt;br /&gt;
! DGG Chat Username&lt;br /&gt;
{{!}} [https://rustlesearch.dev/?username={{{dggusername|}}}&amp;amp;channel=Destinygg {{{dggusername|}}}]}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{stock|}}}|&lt;br /&gt;
! Manifold Market&lt;br /&gt;
{{!}} {{{stock|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{destiny_wiki|}}}|&lt;br /&gt;
! Username&lt;br /&gt;
{{!}} {{{destiny_wiki|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=988</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=988"/>
		<updated>2024-12-15T11:54:55Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=987</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=987"/>
		<updated>2024-12-15T11:53:34Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
|-&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=986</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=986"/>
		<updated>2024-12-15T11:52:45Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
{{#if: {{{awards|}}}&lt;br /&gt;
|-&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=985</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=985"/>
		<updated>2024-12-15T11:51:41Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=984</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=984"/>
		<updated>2024-12-15T11:46:30Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-{{#if:{{{awards|}}}|{{{! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
|-! Awards&lt;br /&gt;
| {{{awards}}}&lt;br /&gt;
|-}}} }}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=983</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=983"/>
		<updated>2024-12-15T11:43:40Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{awards|}}}|{{{! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
|-! Awards&lt;br /&gt;
| {{{awards}}}&lt;br /&gt;
|-}}} }}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=982</id>
		<title>Template:Infobox Person</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person&amp;diff=982"/>
		<updated>2024-12-15T11:42:49Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{| style=&amp;quot;background: #eee; border: 1px solid #aaa; float: right; margin: 0 0 1em 1em; padding: 1em; width: 300pxl width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; | [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption}}}&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | &#039;&#039;&#039;Person&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
! Political Alignment&lt;br /&gt;
| {{{political_alignment}}}&lt;br /&gt;
|-&lt;br /&gt;
! Qualifications&lt;br /&gt;
|{{{qualifications}}}&lt;br /&gt;
|-&lt;br /&gt;
! Occupation&lt;br /&gt;
| {{{occupation}}}&lt;br /&gt;
|-&lt;br /&gt;
! Age&lt;br /&gt;
| {{{person_age}}}&lt;br /&gt;
|-&lt;br /&gt;
! Country of origin&lt;br /&gt;
| {{{country}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
! Website&lt;br /&gt;
| {{{website}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter&lt;br /&gt;
| [https://twitter.com/{{{twitter}}} {{{twitter}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Instagram&lt;br /&gt;
| [https://instagram.com/{{{instagram}}} {{{instagram}}}]&lt;br /&gt;
|-&lt;br /&gt;
! Youtube&lt;br /&gt;
| {{{youtube_url}}}&lt;br /&gt;
|-&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
| {{{stock}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if:{{{awards|}}}|{{{! Awards&lt;br /&gt;
| {{{awards}}}&lt;br /&gt;
|-}}} }}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:Kizmut/sandbox&amp;diff=981</id>
		<title>User:Kizmut/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:Kizmut/sandbox&amp;diff=981"/>
		<updated>2024-12-15T11:15:05Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;{{Excerpt|Main_Page}}Main_Page&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Excerpt|Main_Page}}Main_Page&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Excerpt/doc&amp;diff=980</id>
		<title>Template:Excerpt/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Excerpt/doc&amp;diff=980"/>
		<updated>2024-12-15T11:13:52Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;Excerpt documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Excerpt documentation&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Excerpt&amp;diff=979</id>
		<title>Template:Excerpt</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Excerpt&amp;diff=979"/>
		<updated>2024-12-15T11:13:21Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:Excerpt|main | 1 = {{{article|{{{page|{{{1}}}}}}}}} | 2 = {{{section|{{{fragment|{{{2|}}}}}}}}} }}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;Main_Page&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Excerpt|main&lt;br /&gt;
| 1 = {{{article|{{{page|{{{1}}}}}}}}}&lt;br /&gt;
| 2 = {{{section|{{{fragment|{{{2|}}}}}}}}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation}}&amp;lt;/noinclude&amp;gt;Main_Page&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=959</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=959"/>
		<updated>2024-02-18T17:57:11Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;padding:5px; background:rgba(84,184,168,15%); border:1px solid #AAA;&amp;quot; class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom:1px solid #AAA; margin-bottom:0.5em;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;editsection&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[{{{1|{{SUBJECTPAGENAME}}/doc}}}|view]]] [[{{fullurl:{{{1|{{SUBJECTPAGENAMEE}}/doc}}}|action=edit}} edit]]&amp;lt;/span&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;{{SUBJECTSPACE}} documentation&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;{{{{SUBJECTPAGENAME}}/doc}}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=958</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=958"/>
		<updated>2024-02-18T17:55:01Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;padding:5px; background:rgba(84,184,168,20%); border:1px solid #AAA;&amp;quot; class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom:1px solid #AAA; margin-bottom:0.5em;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;editsection&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[{{{1|{{SUBJECTPAGENAME}}/doc}}}|view]]] [[{{fullurl:{{{1|{{SUBJECTPAGENAMEE}}/doc}}}|action=edit}} edit]]&amp;lt;/span&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;{{SUBJECTSPACE}} documentation&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;{{{{SUBJECTPAGENAME}}/doc}}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=957</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=957"/>
		<updated>2024-02-18T17:52:52Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;padding:5px; background:rgba(84,224,168,50%); border:1px solid #AAA;&amp;quot; class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom:1px solid #AAA; margin-bottom:0.5em;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;editsection&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[{{{1|{{SUBJECTPAGENAME}}/doc}}}|view]]] [[{{fullurl:{{{1|{{SUBJECTPAGENAMEE}}/doc}}}|action=edit}} edit]]&amp;lt;/span&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;{{SUBJECTSPACE}} documentation&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;{{{{SUBJECTPAGENAME}}/doc}}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=956</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=956"/>
		<updated>2024-02-18T17:52:15Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;padding:5px; background:rgba(84,224,168,20%); border:1px solid #AAA;&amp;quot; class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom:1px solid #AAA; margin-bottom:0.5em;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;editsection&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[{{{1|{{SUBJECTPAGENAME}}/doc}}}|view]]] [[{{fullurl:{{{1|{{SUBJECTPAGENAMEE}}/doc}}}|action=edit}} edit]]&amp;lt;/span&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;{{SUBJECTSPACE}} documentation&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;{{{{SUBJECTPAGENAME}}/doc}}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=955</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=955"/>
		<updated>2024-02-18T17:51:21Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;padding:5px; background:rgba(84,255,224,20%); border:1px solid #AAA;&amp;quot; class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom:1px solid #AAA; margin-bottom:0.5em;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;editsection&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[{{{1|{{SUBJECTPAGENAME}}/doc}}}|view]]] [[{{fullurl:{{{1|{{SUBJECTPAGENAMEE}}/doc}}}|action=edit}} edit]]&amp;lt;/span&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;{{SUBJECTSPACE}} documentation&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;{{{{SUBJECTPAGENAME}}/doc}}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=954</id>
		<title>Template:Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Documentation&amp;diff=954"/>
		<updated>2024-02-18T17:49:39Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;div style=&amp;quot;padding:5px; background:rgba(184,255,224,20%); border:1px solid #AAA;&amp;quot; class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;border-bottom:1px solid #AAA; margin-bottom:0.5em;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;editsection&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[{{{1|{{SUBJECTPAGENAME}}/doc}}}|view]]] [[{{fullurl:{{{1|{{SUBJECTPAGENAMEE}}/doc}}}|action=edit}} edit]]&amp;lt;/span&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;{{SUBJECTSPACE}} documentation&#039;&#039;&#039;&amp;lt;/big&amp;gt;&amp;lt;/div&amp;gt;{{{{SUBJECTPAGENAME}}/doc}}&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=953</id>
		<title>Template:Infobox Person/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=953"/>
		<updated>2024-02-18T17:46:41Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Lowering opacity for balance between dark and light skins&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{image|}}}|&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; {{!}} [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,20%); text-align: center;&amp;quot; | Person&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{political_alignment|}}}|&lt;br /&gt;
! Political Alignment&lt;br /&gt;
{{!}} {{{political_alignment|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{qualifications|}}}|&lt;br /&gt;
! Qualifications&lt;br /&gt;
{{!}} {{{qualifications|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{occupation|}}}|&lt;br /&gt;
! Occupation&lt;br /&gt;
{{!}} {{{occupation|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{person_age|}}}|&lt;br /&gt;
! Age&lt;br /&gt;
{{!}} {{{person_age|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{country|}}}|&lt;br /&gt;
! Country of origin&lt;br /&gt;
{{!}} {{{country|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,20%); text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{website|}}}|&lt;br /&gt;
! Website&lt;br /&gt;
{{!}} {{{website|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{twitter|}}}|&lt;br /&gt;
! Twitter&lt;br /&gt;
{{!}} https://twitter.com/{{{twitter|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{instagram|}}}|&lt;br /&gt;
! Instagram&lt;br /&gt;
{{!}} {{{instagram|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{youtube|}}}|&lt;br /&gt;
! Youtube&lt;br /&gt;
{{!}} {{{youtube|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{stock|}}}|&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
{{!}} {{{stock|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,20%); text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
{{{{FULLPAGENAME}}/doc}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=952</id>
		<title>Template:Infobox Person/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=952"/>
		<updated>2024-02-18T17:44:09Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Lowering opacity for balance between dark and light skins&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{image|}}}|&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; {{!}} [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,15%); text-align: center;&amp;quot; | Person&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{political_alignment|}}}|&lt;br /&gt;
! Political Alignment&lt;br /&gt;
{{!}} {{{political_alignment|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{qualifications|}}}|&lt;br /&gt;
! Qualifications&lt;br /&gt;
{{!}} {{{qualifications|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{occupation|}}}|&lt;br /&gt;
! Occupation&lt;br /&gt;
{{!}} {{{occupation|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{person_age|}}}|&lt;br /&gt;
! Age&lt;br /&gt;
{{!}} {{{person_age|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{country|}}}|&lt;br /&gt;
! Country of origin&lt;br /&gt;
{{!}} {{{country|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,65%); text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{website|}}}|&lt;br /&gt;
! Website&lt;br /&gt;
{{!}} {{{website|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{twitter|}}}|&lt;br /&gt;
! Twitter&lt;br /&gt;
{{!}} https://twitter.com/{{{twitter|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{instagram|}}}|&lt;br /&gt;
! Instagram&lt;br /&gt;
{{!}} {{{instagram|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{youtube|}}}|&lt;br /&gt;
! Youtube&lt;br /&gt;
{{!}} {{{youtube|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{stock|}}}|&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
{{!}} {{{stock|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,65%); text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
{{{{FULLPAGENAME}}/doc}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=951</id>
		<title>Template:Infobox Person/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=951"/>
		<updated>2024-02-18T17:39:04Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{image|}}}|&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; {{!}} [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,50%); text-align: center;&amp;quot; | Person&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{political_alignment|}}}|&lt;br /&gt;
! Political Alignment&lt;br /&gt;
{{!}} {{{political_alignment|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{qualifications|}}}|&lt;br /&gt;
! Qualifications&lt;br /&gt;
{{!}} {{{qualifications|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{occupation|}}}|&lt;br /&gt;
! Occupation&lt;br /&gt;
{{!}} {{{occupation|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{person_age|}}}|&lt;br /&gt;
! Age&lt;br /&gt;
{{!}} {{{person_age|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{country|}}}|&lt;br /&gt;
! Country of origin&lt;br /&gt;
{{!}} {{{country|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,50%); text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{website|}}}|&lt;br /&gt;
! Website&lt;br /&gt;
{{!}} {{{website|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{twitter|}}}|&lt;br /&gt;
! Twitter&lt;br /&gt;
{{!}} https://twitter.com/{{{twitter|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{instagram|}}}|&lt;br /&gt;
! Instagram&lt;br /&gt;
{{!}} {{{instagram|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{youtube|}}}|&lt;br /&gt;
! Youtube&lt;br /&gt;
{{!}} {{{youtube|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{stock|}}}|&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
{{!}} {{{stock|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: rgba(184,168,255,50%); text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
{{{{FULLPAGENAME}}/doc}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=950</id>
		<title>Template:Infobox Person/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=950"/>
		<updated>2024-02-18T01:02:01Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{image|}}}|&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; {{!}} [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: hsla(0, 0%, 50%, 0.1); text-align: center;&amp;quot; | Person&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{political_alignment|}}}|&lt;br /&gt;
! Political Alignment&lt;br /&gt;
{{!}} {{{political_alignment|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{qualifications|}}}|&lt;br /&gt;
! Qualifications&lt;br /&gt;
{{!}} {{{qualifications|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{occupation|}}}|&lt;br /&gt;
! Occupation&lt;br /&gt;
{{!}} {{{occupation|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{person_age|}}}|&lt;br /&gt;
! Age&lt;br /&gt;
{{!}} {{{person_age|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{country|}}}|&lt;br /&gt;
! Country of origin&lt;br /&gt;
{{!}} {{{country|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: hsla(0, 0%, 50%, 0.1); text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{website|}}}|&lt;br /&gt;
! Website&lt;br /&gt;
{{!}} {{{website|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{twitter|}}}|&lt;br /&gt;
! Twitter&lt;br /&gt;
{{!}} https://twitter.com/{{{twitter|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{instagram|}}}|&lt;br /&gt;
! Instagram&lt;br /&gt;
{{!}} {{{instagram|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{youtube|}}}|&lt;br /&gt;
! Youtube&lt;br /&gt;
{{!}} {{{youtube|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{stock|}}}|&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
{{!}} {{{stock|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: hsla(0, 0%, 50%, 0.1); text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
{{{{FULLPAGENAME}}/doc}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=949</id>
		<title>User:Kizmut</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=949"/>
		<updated>2024-02-18T01:00:18Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User:kizmut}}&lt;br /&gt;
&#039;&#039;[[Special:Contributions/TmpXNsDcsQS4 | Contribs]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
Once [[mw:Lua|Lua support]] is added my current age will show here: {{Age|2018}}&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Category Tree==&lt;br /&gt;
&amp;lt;categorytree mode=&amp;quot;pages&amp;quot;&amp;gt;DGG Chat&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Destiny_Wiki:Extension_and_Module_Wishlist&amp;diff=948</id>
		<title>Destiny Wiki:Extension and Module Wishlist</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Destiny_Wiki:Extension_and_Module_Wishlist&amp;diff=948"/>
		<updated>2024-02-18T00:52:34Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot; [6:04 PM] &amp;#039;&amp;#039;&amp;#039;Cake | Spinboy alt:&amp;#039;&amp;#039;&amp;#039; kinda a pain in the ass so give me a few im not doing 1 at a time every few days  == Extensions == {| class=&amp;quot;wikitable sortable&amp;quot; |+ Extensions |- ! Extension Name !! Purpose !! Status |- |  Extension:CategoryTree || Nest sub-categories in expandable branches and to transpose dynamic category lists in articles. || &amp;#039;&amp;#039;Installed &amp;amp; functional&amp;#039;&amp;#039; |- | Extension:ParserFunctions |...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [6:04 PM] &#039;&#039;&#039;Cake | Spinboy alt:&#039;&#039;&#039; kinda a pain in the ass so give me a few im not doing 1 at a time every few days&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Extensions&lt;br /&gt;
|-&lt;br /&gt;
! Extension Name !! Purpose !! Status&lt;br /&gt;
|-&lt;br /&gt;
| [[mw:Extension:CategoryTree | Extension:CategoryTree]] || Nest sub-categories in expandable branches and to transpose dynamic category lists in articles. || &#039;&#039;Installed &amp;amp; functional&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| [[mw:Extension:ParserFunctions|Extension:ParserFunctions]] || Allows templates to return more dynamic and custom content based on the article it is included in. || &#039;&#039;Installed &amp;amp; functional&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Parser==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Binaries&lt;br /&gt;
|-&lt;br /&gt;
! Name !! Purpose !! Status&lt;br /&gt;
|-&lt;br /&gt;
| [[mw:Lua|Lua]] || Improves dynamic content and adds mathematical functions such as calculating the age of a subject. || &#039;&#039;Waiting for approval&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modules==&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=947</id>
		<title>User:Kizmut</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=947"/>
		<updated>2024-02-18T00:43:42Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User:kizmut}}&lt;br /&gt;
&#039;&#039;[[Special:Contributions/TmpXNsDcsQS4 | Contribs]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
Once Lua support is added my current age will show here: {{Age|2018}}&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Category Tree==&lt;br /&gt;
&amp;lt;categorytree mode=&amp;quot;pages&amp;quot;&amp;gt;DGG Chat&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Module:Date&amp;diff=946</id>
		<title>Module:Date</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Module:Date&amp;diff=946"/>
		<updated>2024-02-18T00:19:08Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;-- Date functions for use by other modules. -- I18N and time zones are not supported.  local MINUS = &amp;#039;−&amp;#039;  -- Unicode U+2212 MINUS SIGN local floor = math.floor  local Date, DateDiff, diffmt  -- forward declarations local uniq = { &amp;#039;unique identifier&amp;#039; }  local function is_date(t) 	-- The system used to make a date read-only means there is no unique 	-- metatable that is conveniently accessible to check. 	return type(t) == &amp;#039;table&amp;#039; and t._id == uniq end  local function is_...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Date functions for use by other modules.&lt;br /&gt;
-- I18N and time zones are not supported.&lt;br /&gt;
&lt;br /&gt;
local MINUS = &#039;−&#039;  -- Unicode U+2212 MINUS SIGN&lt;br /&gt;
local floor = math.floor&lt;br /&gt;
&lt;br /&gt;
local Date, DateDiff, diffmt  -- forward declarations&lt;br /&gt;
local uniq = { &#039;unique identifier&#039; }&lt;br /&gt;
&lt;br /&gt;
local function is_date(t)&lt;br /&gt;
	-- The system used to make a date read-only means there is no unique&lt;br /&gt;
	-- metatable that is conveniently accessible to check.&lt;br /&gt;
	return type(t) == &#039;table&#039; and t._id == uniq&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function is_diff(t)&lt;br /&gt;
	return type(t) == &#039;table&#039; and getmetatable(t) == diffmt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _list_join(list, sep)&lt;br /&gt;
	return table.concat(list, sep)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function collection()&lt;br /&gt;
	-- Return a table to hold items.&lt;br /&gt;
	return {&lt;br /&gt;
		n = 0,&lt;br /&gt;
		add = function (self, item)&lt;br /&gt;
			self.n = self.n + 1&lt;br /&gt;
			self[self.n] = item&lt;br /&gt;
		end,&lt;br /&gt;
		join = _list_join,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function strip_to_nil(text)&lt;br /&gt;
	-- If text is a string, return its trimmed content, or nil if empty.&lt;br /&gt;
	-- Otherwise return text (convenient when Date fields are provided from&lt;br /&gt;
	-- another module which may pass a string, a number, or another type).&lt;br /&gt;
	if type(text) == &#039;string&#039; then&lt;br /&gt;
		text = text:match(&#039;(%S.-)%s*$&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function is_leap_year(year, calname)&lt;br /&gt;
	-- Return true if year is a leap year.&lt;br /&gt;
	if calname == &#039;Julian&#039; then&lt;br /&gt;
		return year % 4 == 0&lt;br /&gt;
	end&lt;br /&gt;
	return (year % 4 == 0 and year % 100 ~= 0) or year % 400 == 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function days_in_month(year, month, calname)&lt;br /&gt;
	-- Return number of days (1..31) in given month (1..12).&lt;br /&gt;
	if month == 2 and is_leap_year(year, calname) then&lt;br /&gt;
		return 29&lt;br /&gt;
	end&lt;br /&gt;
	return ({ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 })[month]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function h_m_s(time)&lt;br /&gt;
	-- Return hour, minute, second extracted from fraction of a day.&lt;br /&gt;
	time = floor(time * 24 * 3600 + 0.5)  -- number of seconds&lt;br /&gt;
	local second = time % 60&lt;br /&gt;
	time = floor(time / 60)&lt;br /&gt;
	return floor(time / 60), time % 60, second&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hms(date)&lt;br /&gt;
	-- Return fraction of a day from date&#039;s time, where (0 &amp;lt;= fraction &amp;lt; 1)&lt;br /&gt;
	-- if the values are valid, but could be anything if outside range.&lt;br /&gt;
	return (date.hour + (date.minute + date.second / 60) / 60) / 24&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function julian_date(date)&lt;br /&gt;
	-- Return jd, jdz from a Julian or Gregorian calendar date where&lt;br /&gt;
	--   jd = Julian date and its fractional part is zero at noon&lt;br /&gt;
	--   jdz = same, but assume time is 00:00:00 if no time given&lt;br /&gt;
	-- http://www.tondering.dk/claus/cal/julperiod.php#formula&lt;br /&gt;
	-- Testing shows this works for all dates from year -9999 to 9999!&lt;br /&gt;
	-- JDN 0 is the 24-hour period starting at noon UTC on Monday&lt;br /&gt;
	--    1 January 4713 BC  = (-4712, 1, 1)   Julian calendar&lt;br /&gt;
	--   24 November 4714 BC = (-4713, 11, 24) Gregorian calendar&lt;br /&gt;
	local offset&lt;br /&gt;
	local a = floor((14 - date.month)/12)&lt;br /&gt;
	local y = date.year + 4800 - a&lt;br /&gt;
	if date.calendar == &#039;Julian&#039; then&lt;br /&gt;
		offset = floor(y/4) - 32083&lt;br /&gt;
	else&lt;br /&gt;
		offset = floor(y/4) - floor(y/100) + floor(y/400) - 32045&lt;br /&gt;
	end&lt;br /&gt;
	local m = date.month + 12*a - 3&lt;br /&gt;
	local jd = date.day + floor((153*m + 2)/5) + 365*y + offset&lt;br /&gt;
	if date.hastime then&lt;br /&gt;
		jd = jd + hms(date) - 0.5&lt;br /&gt;
		return jd, jd&lt;br /&gt;
	end&lt;br /&gt;
	return jd, jd - 0.5&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function set_date_from_jd(date)&lt;br /&gt;
	-- Set the fields of table date from its Julian date field.&lt;br /&gt;
	-- Return true if date is valid.&lt;br /&gt;
	-- http://www.tondering.dk/claus/cal/julperiod.php#formula&lt;br /&gt;
	-- This handles the proleptic Julian and Gregorian calendars.&lt;br /&gt;
	-- Negative Julian dates are not defined but they work.&lt;br /&gt;
	local calname = date.calendar&lt;br /&gt;
	local low, high  -- min/max limits for date ranges −9999-01-01 to 9999-12-31&lt;br /&gt;
	if calname == &#039;Gregorian&#039; then&lt;br /&gt;
		low, high = -1930999.5, 5373484.49999&lt;br /&gt;
	elseif calname == &#039;Julian&#039; then&lt;br /&gt;
		low, high = -1931076.5, 5373557.49999&lt;br /&gt;
	else&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local jd = date.jd&lt;br /&gt;
	if not (type(jd) == &#039;number&#039; and low &amp;lt;= jd and jd &amp;lt;= high) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local jdn = floor(jd)&lt;br /&gt;
	if date.hastime then&lt;br /&gt;
		local time = jd - jdn  -- 0 &amp;lt;= time &amp;lt; 1&lt;br /&gt;
		if time &amp;gt;= 0.5 then    -- if at or after midnight of next day&lt;br /&gt;
			jdn = jdn + 1&lt;br /&gt;
			time = time - 0.5&lt;br /&gt;
		else&lt;br /&gt;
			time = time + 0.5&lt;br /&gt;
		end&lt;br /&gt;
		date.hour, date.minute, date.second = h_m_s(time)&lt;br /&gt;
	else&lt;br /&gt;
		date.second = 0&lt;br /&gt;
		date.minute = 0&lt;br /&gt;
		date.hour = 0&lt;br /&gt;
	end&lt;br /&gt;
	local b, c&lt;br /&gt;
	if calname == &#039;Julian&#039; then&lt;br /&gt;
		b = 0&lt;br /&gt;
		c = jdn + 32082&lt;br /&gt;
	else  -- Gregorian&lt;br /&gt;
		local a = jdn + 32044&lt;br /&gt;
		b = floor((4*a + 3)/146097)&lt;br /&gt;
		c = a - floor(146097*b/4)&lt;br /&gt;
	end&lt;br /&gt;
	local d = floor((4*c + 3)/1461)&lt;br /&gt;
	local e = c - floor(1461*d/4)&lt;br /&gt;
	local m = floor((5*e + 2)/153)&lt;br /&gt;
	date.day = e - floor((153*m + 2)/5) + 1&lt;br /&gt;
	date.month = m + 3 - 12*floor(m/10)&lt;br /&gt;
	date.year = 100*b + d - 4800 + floor(m/10)&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fix_numbers(numbers, y, m, d, H, M, S, partial, hastime, calendar)&lt;br /&gt;
	-- Put the result of normalizing the given values in table numbers.&lt;br /&gt;
	-- The result will have valid m, d values if y is valid; caller checks y.&lt;br /&gt;
	-- The logic of PHP mktime is followed where m or d can be zero to mean&lt;br /&gt;
	-- the previous unit, and -1 is the one before that, etc.&lt;br /&gt;
	-- Positive values carry forward.&lt;br /&gt;
	local date&lt;br /&gt;
	if not (1 &amp;lt;= m and m &amp;lt;= 12) then&lt;br /&gt;
		date = Date(y, 1, 1)&lt;br /&gt;
		if not date then return end&lt;br /&gt;
		date = date + ((m - 1) .. &#039;m&#039;)&lt;br /&gt;
		y, m = date.year, date.month&lt;br /&gt;
	end&lt;br /&gt;
	local days_hms&lt;br /&gt;
	if not partial then&lt;br /&gt;
		if hastime and H and M and S then&lt;br /&gt;
			if not (0 &amp;lt;= H and H &amp;lt;= 23 and&lt;br /&gt;
					0 &amp;lt;= M and M &amp;lt;= 59 and&lt;br /&gt;
					0 &amp;lt;= S and S &amp;lt;= 59) then&lt;br /&gt;
				days_hms = hms({ hour = H, minute = M, second = S })&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if days_hms or not (1 &amp;lt;= d and d &amp;lt;= days_in_month(y, m, calendar)) then&lt;br /&gt;
			date = date or Date(y, m, 1)&lt;br /&gt;
			if not date then return end&lt;br /&gt;
			date = date + (d - 1 + (days_hms or 0))&lt;br /&gt;
			y, m, d = date.year, date.month, date.day&lt;br /&gt;
			if days_hms then&lt;br /&gt;
				H, M, S = date.hour, date.minute, date.second&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	numbers.year = y&lt;br /&gt;
	numbers.month = m&lt;br /&gt;
	numbers.day = d&lt;br /&gt;
	if days_hms then&lt;br /&gt;
		-- Don&#039;t set H unless it was valid because a valid H will set hastime.&lt;br /&gt;
		numbers.hour = H&lt;br /&gt;
		numbers.minute = M&lt;br /&gt;
		numbers.second = S&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function set_date_from_numbers(date, numbers, options)&lt;br /&gt;
	-- Set the fields of table date from numeric values.&lt;br /&gt;
	-- Return true if date is valid.&lt;br /&gt;
	if type(numbers) ~= &#039;table&#039; then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local y = numbers.year   or date.year&lt;br /&gt;
	local m = numbers.month  or date.month&lt;br /&gt;
	local d = numbers.day    or date.day&lt;br /&gt;
	local H = numbers.hour&lt;br /&gt;
	local M = numbers.minute or date.minute or 0&lt;br /&gt;
	local S = numbers.second or date.second or 0&lt;br /&gt;
	local need_fix&lt;br /&gt;
	if y and m and d then&lt;br /&gt;
		date.partial = nil&lt;br /&gt;
		if not (-9999 &amp;lt;= y and y &amp;lt;= 9999 and&lt;br /&gt;
			1 &amp;lt;= m and m &amp;lt;= 12 and&lt;br /&gt;
			1 &amp;lt;= d and d &amp;lt;= days_in_month(y, m, date.calendar)) then&lt;br /&gt;
				if not date.want_fix then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				need_fix = true&lt;br /&gt;
		end&lt;br /&gt;
	elseif y and date.partial then&lt;br /&gt;
		if d or not (-9999 &amp;lt;= y and y &amp;lt;= 9999) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		if m and not (1 &amp;lt;= m and m &amp;lt;= 12) then&lt;br /&gt;
			if not date.want_fix then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			need_fix = true&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if date.partial then&lt;br /&gt;
		H = nil  -- ignore any time&lt;br /&gt;
		M = nil&lt;br /&gt;
		S = nil&lt;br /&gt;
	else&lt;br /&gt;
		if H then&lt;br /&gt;
			-- It is not possible to set M or S without also setting H.&lt;br /&gt;
			date.hastime = true&lt;br /&gt;
		else&lt;br /&gt;
			H = 0&lt;br /&gt;
		end&lt;br /&gt;
		if not (0 &amp;lt;= H and H &amp;lt;= 23 and&lt;br /&gt;
				0 &amp;lt;= M and M &amp;lt;= 59 and&lt;br /&gt;
				0 &amp;lt;= S and S &amp;lt;= 59) then&lt;br /&gt;
			if date.want_fix then&lt;br /&gt;
				need_fix = true&lt;br /&gt;
			else&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	date.want_fix = nil&lt;br /&gt;
	if need_fix then&lt;br /&gt;
		fix_numbers(numbers, y, m, d, H, M, S, date.partial, date.hastime, date.calendar)&lt;br /&gt;
		return set_date_from_numbers(date, numbers, options)&lt;br /&gt;
	end&lt;br /&gt;
	date.year = y    -- -9999 to 9999 (&#039;n BC&#039; → year = 1 - n)&lt;br /&gt;
	date.month = m   -- 1 to 12 (may be nil if partial)&lt;br /&gt;
	date.day = d     -- 1 to 31 (* = nil if partial)&lt;br /&gt;
	date.hour = H    -- 0 to 59 (*)&lt;br /&gt;
	date.minute = M  -- 0 to 59 (*)&lt;br /&gt;
	date.second = S  -- 0 to 59 (*)&lt;br /&gt;
	if type(options) == &#039;table&#039; then&lt;br /&gt;
		for _, k in ipairs({ &#039;am&#039;, &#039;era&#039;, &#039;format&#039; }) do&lt;br /&gt;
			if options[k] then&lt;br /&gt;
				date.options[k] = options[k]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_option_table(options1, options2)&lt;br /&gt;
	-- If options1 is a string, return a table with its settings, or&lt;br /&gt;
	-- if it is a table, use its settings.&lt;br /&gt;
	-- Missing options are set from table options2 or defaults.&lt;br /&gt;
	-- If a default is used, a flag is set so caller knows the value was not intentionally set.&lt;br /&gt;
	-- Valid option settings are:&lt;br /&gt;
	-- am: &#039;am&#039;, &#039;a.m.&#039;, &#039;AM&#039;, &#039;A.M.&#039;&lt;br /&gt;
	--     &#039;pm&#039;, &#039;p.m.&#039;, &#039;PM&#039;, &#039;P.M.&#039; (each has same meaning as corresponding item above)&lt;br /&gt;
	-- era: &#039;BCMINUS&#039;, &#039;BCNEGATIVE&#039;, &#039;BC&#039;, &#039;B.C.&#039;, &#039;BCE&#039;, &#039;B.C.E.&#039;, &#039;AD&#039;, &#039;A.D.&#039;, &#039;CE&#039;, &#039;C.E.&#039;&lt;br /&gt;
	-- Option am = &#039;am&#039; does not mean the hour is AM; it means &#039;am&#039; or &#039;pm&#039; is used, depending on the hour,&lt;br /&gt;
	--    and am = &#039;pm&#039; has the same meaning.&lt;br /&gt;
	-- Similarly, era = &#039;BC&#039; means &#039;BC&#039; is used if year &amp;lt;= 0.&lt;br /&gt;
	-- BCMINUS displays a MINUS if year &amp;lt; 0 and the display format does not include %{era}.&lt;br /&gt;
	-- BCNEGATIVE is similar but displays a hyphen.&lt;br /&gt;
	local result = { bydefault = {} }&lt;br /&gt;
	if type(options1) == &#039;table&#039; then&lt;br /&gt;
		result.am = options1.am&lt;br /&gt;
		result.era = options1.era&lt;br /&gt;
	elseif type(options1) == &#039;string&#039; then&lt;br /&gt;
		-- Example: &#039;am:AM era:BC&#039; or &#039;am=AM era=BC&#039;.&lt;br /&gt;
		for item in options1:gmatch(&#039;%S+&#039;) do&lt;br /&gt;
			local lhs, rhs = item:match(&#039;^(%w+)[:=](.+)$&#039;)&lt;br /&gt;
			if lhs then&lt;br /&gt;
				result[lhs] = rhs&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	options2 = type(options2) == &#039;table&#039; and options2 or {}&lt;br /&gt;
	local defaults = { am = &#039;am&#039;, era = &#039;BC&#039; }&lt;br /&gt;
	for k, v in pairs(defaults) do&lt;br /&gt;
		if not result[k] then&lt;br /&gt;
			if options2[k] then&lt;br /&gt;
				result[k] = options2[k]&lt;br /&gt;
			else&lt;br /&gt;
				result[k] = v&lt;br /&gt;
				result.bydefault[k] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local ampm_options = {&lt;br /&gt;
	-- lhs = input text accepted as an am/pm option&lt;br /&gt;
	-- rhs = code used internally&lt;br /&gt;
	[&#039;am&#039;]   = &#039;am&#039;,&lt;br /&gt;
	[&#039;AM&#039;]   = &#039;AM&#039;,&lt;br /&gt;
	[&#039;a.m.&#039;] = &#039;a.m.&#039;,&lt;br /&gt;
	[&#039;A.M.&#039;] = &#039;A.M.&#039;,&lt;br /&gt;
	[&#039;pm&#039;]   = &#039;am&#039;,  -- same as am&lt;br /&gt;
	[&#039;PM&#039;]   = &#039;AM&#039;,&lt;br /&gt;
	[&#039;p.m.&#039;] = &#039;a.m.&#039;,&lt;br /&gt;
	[&#039;P.M.&#039;] = &#039;A.M.&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local era_text = {&lt;br /&gt;
	-- Text for displaying an era with a positive year (after adjusting&lt;br /&gt;
	-- by replacing year with 1 - year if date.year &amp;lt;= 0).&lt;br /&gt;
	-- options.era = { year&amp;lt;=0 , year&amp;gt;0 }&lt;br /&gt;
	[&#039;BCMINUS&#039;]    = { &#039;BC&#039;    , &#039;&#039;    , isbc = true, sign = MINUS },&lt;br /&gt;
	[&#039;BCNEGATIVE&#039;] = { &#039;BC&#039;    , &#039;&#039;    , isbc = true, sign = &#039;-&#039;   },&lt;br /&gt;
	[&#039;BC&#039;]         = { &#039;BC&#039;    , &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;B.C.&#039;]       = { &#039;B.C.&#039;  , &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;BCE&#039;]        = { &#039;BCE&#039;   , &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;B.C.E.&#039;]     = { &#039;B.C.E.&#039;, &#039;&#039;    , isbc = true },&lt;br /&gt;
	[&#039;AD&#039;]         = { &#039;BC&#039;    , &#039;AD&#039;   },&lt;br /&gt;
	[&#039;A.D.&#039;]       = { &#039;B.C.&#039;  , &#039;A.D.&#039; },&lt;br /&gt;
	[&#039;CE&#039;]         = { &#039;BCE&#039;   , &#039;CE&#039;   },&lt;br /&gt;
	[&#039;C.E.&#039;]       = { &#039;B.C.E.&#039;, &#039;C.E.&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function get_era_for_year(era, year)&lt;br /&gt;
	return (era_text[era] or era_text[&#039;BC&#039;])[year &amp;gt; 0 and 2 or 1] or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function strftime(date, format, options)&lt;br /&gt;
	-- Return date formatted as a string using codes similar to those&lt;br /&gt;
	-- in the C strftime library function.&lt;br /&gt;
	local sformat = string.format&lt;br /&gt;
	local shortcuts = {&lt;br /&gt;
		[&#039;%c&#039;] = &#039;%-I:%M %p %-d %B %-Y %{era}&#039;,  -- date and time: 2:30 pm 1 April 2016&lt;br /&gt;
		[&#039;%x&#039;] = &#039;%-d %B %-Y %{era}&#039;,            -- date:          1 April 2016&lt;br /&gt;
		[&#039;%X&#039;] = &#039;%-I:%M %p&#039;,                    -- time:          2:30 pm&lt;br /&gt;
	}&lt;br /&gt;
	if shortcuts[format] then&lt;br /&gt;
		format = shortcuts[format]&lt;br /&gt;
	end&lt;br /&gt;
	local codes = {&lt;br /&gt;
		a = { field = &#039;dayabbr&#039; },&lt;br /&gt;
		A = { field = &#039;dayname&#039; },&lt;br /&gt;
		b = { field = &#039;monthabbr&#039; },&lt;br /&gt;
		B = { field = &#039;monthname&#039; },&lt;br /&gt;
		u = { fmt = &#039;%d&#039;  , field = &#039;dowiso&#039; },&lt;br /&gt;
		w = { fmt = &#039;%d&#039;  , field = &#039;dow&#039; },&lt;br /&gt;
		d = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;day&#039; },&lt;br /&gt;
		m = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;month&#039; },&lt;br /&gt;
		Y = { fmt = &#039;%04d&#039;, fmt2 = &#039;%d&#039;, field = &#039;year&#039; },&lt;br /&gt;
		H = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;hour&#039; },&lt;br /&gt;
		M = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;minute&#039; },&lt;br /&gt;
		S = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;second&#039; },&lt;br /&gt;
		j = { fmt = &#039;%03d&#039;, fmt2 = &#039;%d&#039;, field = &#039;dayofyear&#039; },&lt;br /&gt;
		I = { fmt = &#039;%02d&#039;, fmt2 = &#039;%d&#039;, field = &#039;hour&#039;, special = &#039;hour12&#039; },&lt;br /&gt;
		p = { field = &#039;hour&#039;, special = &#039;am&#039; },&lt;br /&gt;
	}&lt;br /&gt;
	options = make_option_table(options, date.options)&lt;br /&gt;
	local amopt = options.am&lt;br /&gt;
	local eraopt = options.era&lt;br /&gt;
	local function replace_code(spaces, modifier, id)&lt;br /&gt;
		local code = codes[id]&lt;br /&gt;
		if code then&lt;br /&gt;
			local fmt = code.fmt&lt;br /&gt;
			if modifier == &#039;-&#039; and code.fmt2 then&lt;br /&gt;
				fmt = code.fmt2&lt;br /&gt;
			end&lt;br /&gt;
			local value = date[code.field]&lt;br /&gt;
			if not value then&lt;br /&gt;
				return nil  -- an undefined field in a partial date&lt;br /&gt;
			end&lt;br /&gt;
			local special = code.special&lt;br /&gt;
			if special then&lt;br /&gt;
				if special == &#039;hour12&#039; then&lt;br /&gt;
					value = value % 12&lt;br /&gt;
					value = value == 0 and 12 or value&lt;br /&gt;
				elseif special == &#039;am&#039; then&lt;br /&gt;
					local ap = ({&lt;br /&gt;
						[&#039;a.m.&#039;] = { &#039;a.m.&#039;, &#039;p.m.&#039; },&lt;br /&gt;
						[&#039;AM&#039;] = { &#039;AM&#039;, &#039;PM&#039; },&lt;br /&gt;
						[&#039;A.M.&#039;] = { &#039;A.M.&#039;, &#039;P.M.&#039; },&lt;br /&gt;
					})[ampm_options[amopt]] or { &#039;am&#039;, &#039;pm&#039; }&lt;br /&gt;
					return (spaces == &#039;&#039; and &#039;&#039; or &#039;&amp;amp;nbsp;&#039;) .. (value &amp;lt; 12 and ap[1] or ap[2])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if code.field == &#039;year&#039; then&lt;br /&gt;
				local sign = (era_text[eraopt] or {}).sign&lt;br /&gt;
				if not sign or format:find(&#039;%{era}&#039;, 1, true) then&lt;br /&gt;
					sign = &#039;&#039;&lt;br /&gt;
					if value &amp;lt;= 0 then&lt;br /&gt;
						value = 1 - value&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					if value &amp;gt;= 0 then&lt;br /&gt;
						sign = &#039;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						value = -value&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				return spaces .. sign .. sformat(fmt, value)&lt;br /&gt;
			end&lt;br /&gt;
			return spaces .. (fmt and sformat(fmt, value) or value)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function replace_property(spaces, id)&lt;br /&gt;
		if id == &#039;era&#039; then&lt;br /&gt;
			-- Special case so can use local era option.&lt;br /&gt;
			local result = get_era_for_year(eraopt, date.year)&lt;br /&gt;
			if result == &#039;&#039; then&lt;br /&gt;
				return &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			return (spaces == &#039;&#039; and &#039;&#039; or &#039;&amp;amp;nbsp;&#039;) .. result&lt;br /&gt;
		end&lt;br /&gt;
		local result = date[id]&lt;br /&gt;
		if type(result) == &#039;string&#039; then&lt;br /&gt;
			return spaces .. result&lt;br /&gt;
		end&lt;br /&gt;
		if type(result) == &#039;number&#039; then&lt;br /&gt;
			return  spaces .. tostring(result)&lt;br /&gt;
		end&lt;br /&gt;
		if type(result) == &#039;boolean&#039; then&lt;br /&gt;
			return  spaces .. (result and &#039;1&#039; or &#039;0&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		-- This occurs if id is an undefined field in a partial date, or is the name of a function.&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local PERCENT = &#039;\127PERCENT\127&#039;&lt;br /&gt;
	return (format&lt;br /&gt;
		:gsub(&#039;%%%%&#039;, PERCENT)&lt;br /&gt;
		:gsub(&#039;(%s*)%%{(%w+)}&#039;, replace_property)&lt;br /&gt;
		:gsub(&#039;(%s*)%%(%-?)(%a)&#039;, replace_code)&lt;br /&gt;
		:gsub(PERCENT, &#039;%%&#039;)&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _date_text(date, fmt, options)&lt;br /&gt;
	-- Return a formatted string representing the given date.&lt;br /&gt;
	if not is_date(date) then&lt;br /&gt;
		error(&#039;date:text: need a date (use &amp;quot;date:text()&amp;quot; with a colon)&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(fmt) == &#039;string&#039; and fmt:match(&#039;%S&#039;) then&lt;br /&gt;
		if fmt:find(&#039;%&#039;, 1, true) then&lt;br /&gt;
			return strftime(date, fmt, options)&lt;br /&gt;
		end&lt;br /&gt;
	elseif date.partial then&lt;br /&gt;
		fmt = date.month and &#039;my&#039; or &#039;y&#039;&lt;br /&gt;
	else&lt;br /&gt;
		fmt = &#039;dmy&#039;&lt;br /&gt;
		if date.hastime then&lt;br /&gt;
			fmt = (date.second &amp;gt; 0 and &#039;hms &#039; or &#039;hm &#039;) .. fmt&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function bad_format()&lt;br /&gt;
		-- For consistency with other format processing, return given format&lt;br /&gt;
		-- (or cleaned format if original was not a string) if invalid.&lt;br /&gt;
		return mw.text.nowiki(fmt)&lt;br /&gt;
	end&lt;br /&gt;
	if date.partial then&lt;br /&gt;
		-- Ignore days in standard formats like &#039;ymd&#039;.&lt;br /&gt;
		if fmt == &#039;ym&#039; or fmt == &#039;ymd&#039; then&lt;br /&gt;
			fmt = date.month and &#039;%Y-%m %{era}&#039; or &#039;%Y %{era}&#039;&lt;br /&gt;
		elseif fmt == &#039;my&#039; or fmt == &#039;dmy&#039; or fmt == &#039;mdy&#039; then&lt;br /&gt;
			fmt = date.month and &#039;%B %-Y %{era}&#039; or &#039;%-Y %{era}&#039;&lt;br /&gt;
		elseif fmt == &#039;y&#039; then&lt;br /&gt;
			fmt = date.month and &#039;%-Y %{era}&#039; or &#039;%-Y %{era}&#039;&lt;br /&gt;
		else&lt;br /&gt;
			return bad_format()&lt;br /&gt;
		end&lt;br /&gt;
		return strftime(date, fmt, options)&lt;br /&gt;
	end&lt;br /&gt;
	local function hm_fmt()&lt;br /&gt;
		local plain = make_option_table(options, date.options).bydefault.am&lt;br /&gt;
		return plain and &#039;%H:%M&#039; or &#039;%-I:%M %p&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local need_time = date.hastime&lt;br /&gt;
	local t = collection()&lt;br /&gt;
	for item in fmt:gmatch(&#039;%S+&#039;) do&lt;br /&gt;
		local f&lt;br /&gt;
		if item == &#039;hm&#039; then&lt;br /&gt;
			f = hm_fmt()&lt;br /&gt;
			need_time = false&lt;br /&gt;
		elseif item == &#039;hms&#039; then&lt;br /&gt;
			f = &#039;%H:%M:%S&#039;&lt;br /&gt;
			need_time = false&lt;br /&gt;
		elseif item == &#039;ymd&#039; then&lt;br /&gt;
			f = &#039;%Y-%m-%d %{era}&#039;&lt;br /&gt;
		elseif item == &#039;mdy&#039; then&lt;br /&gt;
			f = &#039;%B %-d, %-Y %{era}&#039;&lt;br /&gt;
		elseif item == &#039;dmy&#039; then&lt;br /&gt;
			f = &#039;%-d %B %-Y %{era}&#039;&lt;br /&gt;
		else&lt;br /&gt;
			return bad_format()&lt;br /&gt;
		end&lt;br /&gt;
		t:add(f)&lt;br /&gt;
	end&lt;br /&gt;
	fmt = t:join(&#039; &#039;)&lt;br /&gt;
	if need_time then&lt;br /&gt;
		fmt = hm_fmt() .. &#039; &#039; .. fmt&lt;br /&gt;
	end&lt;br /&gt;
	return strftime(date, fmt, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local day_info = {&lt;br /&gt;
	-- 0=Sun to 6=Sat&lt;br /&gt;
	[0] = { &#039;Sun&#039;, &#039;Sunday&#039; },&lt;br /&gt;
	{ &#039;Mon&#039;, &#039;Monday&#039; },&lt;br /&gt;
	{ &#039;Tue&#039;, &#039;Tuesday&#039; },&lt;br /&gt;
	{ &#039;Wed&#039;, &#039;Wednesday&#039; },&lt;br /&gt;
	{ &#039;Thu&#039;, &#039;Thursday&#039; },&lt;br /&gt;
	{ &#039;Fri&#039;, &#039;Friday&#039; },&lt;br /&gt;
	{ &#039;Sat&#039;, &#039;Saturday&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local month_info = {&lt;br /&gt;
	-- 1=Jan to 12=Dec&lt;br /&gt;
	{ &#039;Jan&#039;, &#039;January&#039; },&lt;br /&gt;
	{ &#039;Feb&#039;, &#039;February&#039; },&lt;br /&gt;
	{ &#039;Mar&#039;, &#039;March&#039; },&lt;br /&gt;
	{ &#039;Apr&#039;, &#039;April&#039; },&lt;br /&gt;
	{ &#039;May&#039;, &#039;May&#039; },&lt;br /&gt;
	{ &#039;Jun&#039;, &#039;June&#039; },&lt;br /&gt;
	{ &#039;Jul&#039;, &#039;July&#039; },&lt;br /&gt;
	{ &#039;Aug&#039;, &#039;August&#039; },&lt;br /&gt;
	{ &#039;Sep&#039;, &#039;September&#039; },&lt;br /&gt;
	{ &#039;Oct&#039;, &#039;October&#039; },&lt;br /&gt;
	{ &#039;Nov&#039;, &#039;November&#039; },&lt;br /&gt;
	{ &#039;Dec&#039;, &#039;December&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function name_to_number(text, translate)&lt;br /&gt;
	if type(text) == &#039;string&#039; then&lt;br /&gt;
		return translate[text:lower()]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function day_number(text)&lt;br /&gt;
	return name_to_number(text, {&lt;br /&gt;
		sun = 0, sunday = 0,&lt;br /&gt;
		mon = 1, monday = 1,&lt;br /&gt;
		tue = 2, tuesday = 2,&lt;br /&gt;
		wed = 3, wednesday = 3,&lt;br /&gt;
		thu = 4, thursday = 4,&lt;br /&gt;
		fri = 5, friday = 5,&lt;br /&gt;
		sat = 6, saturday = 6,&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function month_number(text)&lt;br /&gt;
	return name_to_number(text, {&lt;br /&gt;
		jan = 1, january = 1,&lt;br /&gt;
		feb = 2, february = 2,&lt;br /&gt;
		mar = 3, march = 3,&lt;br /&gt;
		apr = 4, april = 4,&lt;br /&gt;
		may = 5,&lt;br /&gt;
		jun = 6, june = 6,&lt;br /&gt;
		jul = 7, july = 7,&lt;br /&gt;
		aug = 8, august = 8,&lt;br /&gt;
		sep = 9, september = 9, sept = 9,&lt;br /&gt;
		oct = 10, october = 10,&lt;br /&gt;
		nov = 11, november = 11,&lt;br /&gt;
		dec = 12, december = 12,&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _list_text(list, fmt)&lt;br /&gt;
	-- Return a list of formatted strings from a list of dates.&lt;br /&gt;
	if not type(list) == &#039;table&#039; then&lt;br /&gt;
		error(&#039;date:list:text: need &amp;quot;list:text()&amp;quot; with a colon&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	local result = { join = _list_join }&lt;br /&gt;
	for i, date in ipairs(list) do&lt;br /&gt;
		result[i] = date:text(fmt)&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _date_list(date, spec)&lt;br /&gt;
	-- Return a possibly empty numbered table of dates meeting the specification.&lt;br /&gt;
	-- Dates in the list are in ascending order (oldest date first).&lt;br /&gt;
	-- The spec should be a string of form &amp;quot;&amp;lt;count&amp;gt; &amp;lt;day&amp;gt; &amp;lt;op&amp;gt;&amp;quot;&lt;br /&gt;
	-- where each item is optional and&lt;br /&gt;
	--   count = number of items wanted in list&lt;br /&gt;
	--   day = abbreviation or name such as Mon or Monday&lt;br /&gt;
	--   op = &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;= (default is &amp;gt; meaning after date)&lt;br /&gt;
	-- If no count is given, the list is for the specified days in date&#039;s month.&lt;br /&gt;
	-- The default day is date&#039;s day.&lt;br /&gt;
	-- The spec can also be a positive or negative number:&lt;br /&gt;
	--   -5 is equivalent to &#039;5 &amp;lt;&#039;&lt;br /&gt;
	--   5  is equivalent to &#039;5&#039; which is &#039;5 &amp;gt;&#039;&lt;br /&gt;
	if not is_date(date) then&lt;br /&gt;
		error(&#039;date:list: need a date (use &amp;quot;date:list()&amp;quot; with a colon)&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	local list = { text = _list_text }&lt;br /&gt;
	if date.partial then&lt;br /&gt;
		return list&lt;br /&gt;
	end&lt;br /&gt;
	local count, offset, operation&lt;br /&gt;
	local ops = {&lt;br /&gt;
		[&#039;&amp;gt;=&#039;] = { before = false, include = true  },&lt;br /&gt;
		[&#039;&amp;gt;&#039;]  = { before = false, include = false },&lt;br /&gt;
		[&#039;&amp;lt;=&#039;] = { before = true , include = true  },&lt;br /&gt;
		[&#039;&amp;lt;&#039;]  = { before = true , include = false },&lt;br /&gt;
	}&lt;br /&gt;
	if spec then&lt;br /&gt;
		if type(spec) == &#039;number&#039; then&lt;br /&gt;
			count = floor(spec + 0.5)&lt;br /&gt;
			if count &amp;lt; 0 then&lt;br /&gt;
				count = -count&lt;br /&gt;
				operation = ops[&#039;&amp;lt;&#039;]&lt;br /&gt;
			end&lt;br /&gt;
		elseif type(spec) == &#039;string&#039; then&lt;br /&gt;
			local num, day, op = spec:match(&#039;^%s*(%d*)%s*(%a*)%s*([&amp;lt;&amp;gt;=]*)%s*$&#039;)&lt;br /&gt;
			if not num then&lt;br /&gt;
				return list&lt;br /&gt;
			end&lt;br /&gt;
			if num ~= &#039;&#039; then&lt;br /&gt;
				count = tonumber(num)&lt;br /&gt;
			end&lt;br /&gt;
			if day ~= &#039;&#039; then&lt;br /&gt;
				local dow = day_number(day:gsub(&#039;[sS]$&#039;, &#039;&#039;))  -- accept plural days&lt;br /&gt;
				if not dow then&lt;br /&gt;
					return list&lt;br /&gt;
				end&lt;br /&gt;
				offset = dow - date.dow&lt;br /&gt;
			end&lt;br /&gt;
			operation = ops[op]&lt;br /&gt;
		else&lt;br /&gt;
			return list&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	offset = offset or 0&lt;br /&gt;
	operation = operation or ops[&#039;&amp;gt;&#039;]&lt;br /&gt;
	local datefrom, dayfirst, daylast&lt;br /&gt;
	if operation.before then&lt;br /&gt;
		if offset &amp;gt; 0 or (offset == 0 and not operation.include) then&lt;br /&gt;
			offset = offset - 7&lt;br /&gt;
		end&lt;br /&gt;
		if count then&lt;br /&gt;
			if count &amp;gt; 1 then&lt;br /&gt;
				offset = offset - 7*(count - 1)&lt;br /&gt;
			end&lt;br /&gt;
			datefrom = date + offset&lt;br /&gt;
		else&lt;br /&gt;
			daylast = date.day + offset&lt;br /&gt;
			dayfirst = daylast % 7&lt;br /&gt;
			if dayfirst == 0 then&lt;br /&gt;
				dayfirst = 7&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if offset &amp;lt; 0 or (offset == 0 and not operation.include) then&lt;br /&gt;
			offset = offset + 7&lt;br /&gt;
		end&lt;br /&gt;
		if count then&lt;br /&gt;
			datefrom = date + offset&lt;br /&gt;
		else&lt;br /&gt;
			dayfirst = date.day + offset&lt;br /&gt;
			daylast = date.monthdays&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not count then&lt;br /&gt;
		if daylast &amp;lt; dayfirst then&lt;br /&gt;
			return list&lt;br /&gt;
		end&lt;br /&gt;
		count = floor((daylast - dayfirst)/7) + 1&lt;br /&gt;
		datefrom = Date(date, {day = dayfirst})&lt;br /&gt;
	end&lt;br /&gt;
	for i = 1, count do&lt;br /&gt;
		if not datefrom then break end  -- exceeds date limits&lt;br /&gt;
		list[i] = datefrom&lt;br /&gt;
		datefrom = datefrom + 7&lt;br /&gt;
	end&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- A table to get the current date/time (UTC), but only if needed.&lt;br /&gt;
local current = setmetatable({}, {&lt;br /&gt;
	__index = function (self, key)&lt;br /&gt;
		local d = os.date(&#039;!*t&#039;)&lt;br /&gt;
		self.year = d.year&lt;br /&gt;
		self.month = d.month&lt;br /&gt;
		self.day = d.day&lt;br /&gt;
		self.hour = d.hour&lt;br /&gt;
		self.minute = d.min&lt;br /&gt;
		self.second = d.sec&lt;br /&gt;
		return rawget(self, key)&lt;br /&gt;
	end })&lt;br /&gt;
&lt;br /&gt;
local function extract_date(newdate, text)&lt;br /&gt;
	-- Parse the date/time in text and return n, o where&lt;br /&gt;
	--   n = table of numbers with date/time fields&lt;br /&gt;
	--   o = table of options for AM/PM or AD/BC or format, if any&lt;br /&gt;
	-- or return nothing if date is known to be invalid.&lt;br /&gt;
	-- Caller determines if the values in n are valid.&lt;br /&gt;
	-- A year must be positive (&#039;1&#039; to &#039;9999&#039;); use &#039;BC&#039; for BC.&lt;br /&gt;
	-- In a y-m-d string, the year must be four digits to avoid ambiguity&lt;br /&gt;
	-- (&#039;0001&#039; to &#039;9999&#039;). The only way to enter year &amp;lt;= 0 is by specifying&lt;br /&gt;
	-- the date as three numeric parameters like ymd Date(-1, 1, 1).&lt;br /&gt;
	-- Dates of form d/m/y, m/d/y, y/m/d are rejected as potentially ambiguous.&lt;br /&gt;
	local date, options = {}, {}&lt;br /&gt;
	if text:sub(-1) == &#039;Z&#039; then&lt;br /&gt;
		-- Extract date/time from a Wikidata timestamp.&lt;br /&gt;
		-- The year can be 1 to 16 digits but this module handles 1 to 4 digits only.&lt;br /&gt;
		-- Examples: &#039;+2016-06-21T14:30:00Z&#039;, &#039;-0000000180-00-00T00:00:00Z&#039;.&lt;br /&gt;
		local sign, y, m, d, H, M, S = text:match(&#039;^([+%-])(%d+)%-(%d%d)%-(%d%d)T(%d%d):(%d%d):(%d%d)Z$&#039;)&lt;br /&gt;
		if sign then&lt;br /&gt;
			y = tonumber(y)&lt;br /&gt;
			if sign == &#039;-&#039; and y &amp;gt; 0 then&lt;br /&gt;
				y = -y&lt;br /&gt;
			end&lt;br /&gt;
			if y &amp;lt;= 0 then&lt;br /&gt;
				options.era = &#039;BCE&#039;&lt;br /&gt;
			end&lt;br /&gt;
			date.year = y&lt;br /&gt;
			m = tonumber(m)&lt;br /&gt;
			d = tonumber(d)&lt;br /&gt;
			H = tonumber(H)&lt;br /&gt;
			M = tonumber(M)&lt;br /&gt;
			S = tonumber(S)&lt;br /&gt;
			if m == 0 then&lt;br /&gt;
				newdate.partial = true&lt;br /&gt;
				return date, options&lt;br /&gt;
			end&lt;br /&gt;
			date.month = m&lt;br /&gt;
			if d == 0 then&lt;br /&gt;
				newdate.partial = true&lt;br /&gt;
				return date, options&lt;br /&gt;
			end&lt;br /&gt;
			date.day = d&lt;br /&gt;
			if H &amp;gt; 0 or M &amp;gt; 0 or S &amp;gt; 0 then&lt;br /&gt;
				date.hour = H&lt;br /&gt;
				date.minute = M&lt;br /&gt;
				date.second = S&lt;br /&gt;
			end&lt;br /&gt;
			return date, options&lt;br /&gt;
		end&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local function extract_ymd(item)&lt;br /&gt;
		-- Called when no day or month has been set.&lt;br /&gt;
		local y, m, d = item:match(&#039;^(%d%d%d%d)%-(%w+)%-(%d%d?)$&#039;)&lt;br /&gt;
		if y then&lt;br /&gt;
			if date.year then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			if m:match(&#039;^%d%d?$&#039;) then&lt;br /&gt;
				m = tonumber(m)&lt;br /&gt;
			else&lt;br /&gt;
				m = month_number(m)&lt;br /&gt;
			end&lt;br /&gt;
			if m then&lt;br /&gt;
				date.year = tonumber(y)&lt;br /&gt;
				date.month = m&lt;br /&gt;
				date.day = tonumber(d)&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function extract_day_or_year(item)&lt;br /&gt;
		-- Called when a day would be valid, or&lt;br /&gt;
		-- when a year would be valid if no year has been set and partial is set.&lt;br /&gt;
		local number, suffix = item:match(&#039;^(%d%d?%d?%d?)(.*)$&#039;)&lt;br /&gt;
		if number then&lt;br /&gt;
			local n = tonumber(number)&lt;br /&gt;
			if #number &amp;lt;= 2 and n &amp;lt;= 31 then&lt;br /&gt;
				suffix = suffix:lower()&lt;br /&gt;
				if suffix == &#039;&#039; or suffix == &#039;st&#039; or suffix == &#039;nd&#039; or suffix == &#039;rd&#039; or suffix == &#039;th&#039; then&lt;br /&gt;
					date.day = n&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			elseif suffix == &#039;&#039; and newdate.partial and not date.year then&lt;br /&gt;
				date.year = n&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function extract_month(item)&lt;br /&gt;
		-- A month must be given as a name or abbreviation; a number could be ambiguous.&lt;br /&gt;
		local m = month_number(item)&lt;br /&gt;
		if m then&lt;br /&gt;
			date.month = m&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local function extract_time(item)&lt;br /&gt;
		local h, m, s = item:match(&#039;^(%d%d?):(%d%d)(:?%d*)$&#039;)&lt;br /&gt;
		if date.hour or not h then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		if s ~= &#039;&#039; then&lt;br /&gt;
			s = s:match(&#039;^:(%d%d)$&#039;)&lt;br /&gt;
			if not s then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		date.hour = tonumber(h)&lt;br /&gt;
		date.minute = tonumber(m)&lt;br /&gt;
		date.second = tonumber(s)  -- nil if empty string&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	local item_count = 0&lt;br /&gt;
	local index_time&lt;br /&gt;
	local function set_ampm(item)&lt;br /&gt;
		local H = date.hour&lt;br /&gt;
		if H and not options.am and index_time + 1 == item_count then&lt;br /&gt;
			options.am = ampm_options[item]  -- caller checked this is not nil&lt;br /&gt;
			if item:match(&#039;^[Aa]&#039;) then&lt;br /&gt;
				if not (1 &amp;lt;= H and H &amp;lt;= 12) then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				if H == 12 then&lt;br /&gt;
					date.hour = 0&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if not (1 &amp;lt;= H and H &amp;lt;= 23) then&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
				if H &amp;lt;= 11 then&lt;br /&gt;
					date.hour = H + 12&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for item in text:gsub(&#039;,&#039;, &#039; &#039;):gsub(&#039;&amp;amp;nbsp;&#039;, &#039; &#039;):gmatch(&#039;%S+&#039;) do&lt;br /&gt;
		item_count = item_count + 1&lt;br /&gt;
		if era_text[item] then&lt;br /&gt;
			-- Era is accepted in peculiar places.&lt;br /&gt;
			if options.era then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			options.era = item&lt;br /&gt;
		elseif ampm_options[item] then&lt;br /&gt;
			if not set_ampm(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		elseif item:find(&#039;:&#039;, 1, true) then&lt;br /&gt;
			if not extract_time(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			index_time = item_count&lt;br /&gt;
		elseif date.day and date.month then&lt;br /&gt;
			if date.year then&lt;br /&gt;
				return  -- should be nothing more so item is invalid&lt;br /&gt;
			end&lt;br /&gt;
			if not item:match(&#039;^(%d%d?%d?%d?)$&#039;) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			date.year = tonumber(item)&lt;br /&gt;
		elseif date.day then&lt;br /&gt;
			if not extract_month(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		elseif date.month then&lt;br /&gt;
			if not extract_day_or_year(item) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		elseif extract_month(item) then&lt;br /&gt;
			options.format = &#039;mdy&#039;&lt;br /&gt;
		elseif extract_ymd(item) then&lt;br /&gt;
			options.format = &#039;ymd&#039;&lt;br /&gt;
		elseif extract_day_or_year(item) then&lt;br /&gt;
			if date.day then&lt;br /&gt;
				options.format = &#039;dmy&#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not date.year or date.year == 0 then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local era = era_text[options.era]&lt;br /&gt;
	if era and era.isbc then&lt;br /&gt;
		date.year = 1 - date.year&lt;br /&gt;
	end&lt;br /&gt;
	return date, options&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function autofill(date1, date2)&lt;br /&gt;
	-- Fill any missing month or day in each date using the&lt;br /&gt;
	-- corresponding component from the other date, if present,&lt;br /&gt;
	-- or with 1 if both dates are missing the month or day.&lt;br /&gt;
	-- This gives a good result for calculating the difference&lt;br /&gt;
	-- between two partial dates when no range is wanted.&lt;br /&gt;
	-- Return filled date1, date2 (two full dates).&lt;br /&gt;
	local function filled(a, b)&lt;br /&gt;
		-- Return date a filled, if necessary, with month and/or day from date b.&lt;br /&gt;
		-- The filled day is truncated to fit the number of days in the month.&lt;br /&gt;
		local fillmonth, fillday&lt;br /&gt;
		if not a.month then&lt;br /&gt;
			fillmonth = b.month or 1&lt;br /&gt;
		end&lt;br /&gt;
		if not a.day then&lt;br /&gt;
			fillday = b.day or 1&lt;br /&gt;
		end&lt;br /&gt;
		if fillmonth or fillday then  -- need to create a new date&lt;br /&gt;
			a = Date(a, {&lt;br /&gt;
				month = fillmonth,&lt;br /&gt;
				day = math.min(fillday or a.day, days_in_month(a.year, fillmonth or a.month, a.calendar))&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
		return a&lt;br /&gt;
	end&lt;br /&gt;
	return filled(date1, date2), filled(date2, date1)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function date_add_sub(lhs, rhs, is_sub)&lt;br /&gt;
	-- Return a new date from calculating (lhs + rhs) or (lhs - rhs),&lt;br /&gt;
	-- or return nothing if invalid.&lt;br /&gt;
	-- The result is nil if the calculated date exceeds allowable limits.&lt;br /&gt;
	-- Caller ensures that lhs is a date; its properties are copied for the new date.&lt;br /&gt;
	if lhs.partial then&lt;br /&gt;
		-- Adding to a partial is not supported.&lt;br /&gt;
		-- Can subtract a date or partial from a partial, but this is not called for that.&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local function is_prefix(text, word, minlen)&lt;br /&gt;
		local n = #text&lt;br /&gt;
		return (minlen or 1) &amp;lt;= n and n &amp;lt;= #word and text == word:sub(1, n)&lt;br /&gt;
	end&lt;br /&gt;
	local function do_days(n)&lt;br /&gt;
		local forcetime, jd&lt;br /&gt;
		if floor(n) == n then&lt;br /&gt;
			jd = lhs.jd&lt;br /&gt;
		else&lt;br /&gt;
			forcetime = not lhs.hastime&lt;br /&gt;
			jd = lhs.jdz&lt;br /&gt;
		end&lt;br /&gt;
		jd = jd + (is_sub and -n or n)&lt;br /&gt;
		if forcetime then&lt;br /&gt;
			jd = tostring(jd)&lt;br /&gt;
			if not jd:find(&#039;.&#039;, 1, true) then&lt;br /&gt;
				jd = jd .. &#039;.0&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return Date(lhs, &#039;juliandate&#039;, jd)&lt;br /&gt;
	end&lt;br /&gt;
	if type(rhs) == &#039;number&#039; then&lt;br /&gt;
		-- Add/subtract days, including fractional days.&lt;br /&gt;
		return do_days(rhs)&lt;br /&gt;
	end&lt;br /&gt;
	if type(rhs) == &#039;string&#039; then&lt;br /&gt;
		-- rhs is a single component like &#039;26m&#039; or &#039;26 months&#039; (with optional sign).&lt;br /&gt;
		-- Fractions like &#039;3.25d&#039; are accepted for the units which are handled as days.&lt;br /&gt;
		local sign, numstr, id = rhs:match(&#039;^%s*([+-]?)([%d%.]+)%s*(%a+)$&#039;)&lt;br /&gt;
		if sign then&lt;br /&gt;
			if sign == &#039;-&#039; then&lt;br /&gt;
				is_sub = not (is_sub and true or false)&lt;br /&gt;
			end&lt;br /&gt;
			local y, m, days&lt;br /&gt;
			local num = tonumber(numstr)&lt;br /&gt;
			if not num then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			id = id:lower()&lt;br /&gt;
			if is_prefix(id, &#039;years&#039;) then&lt;br /&gt;
				y = num&lt;br /&gt;
				m = 0&lt;br /&gt;
			elseif is_prefix(id, &#039;months&#039;) then&lt;br /&gt;
				y = floor(num / 12)&lt;br /&gt;
				m = num % 12&lt;br /&gt;
			elseif is_prefix(id, &#039;weeks&#039;) then&lt;br /&gt;
				days = num * 7&lt;br /&gt;
			elseif is_prefix(id, &#039;days&#039;) then&lt;br /&gt;
				days = num&lt;br /&gt;
			elseif is_prefix(id, &#039;hours&#039;) then&lt;br /&gt;
				days = num / 24&lt;br /&gt;
			elseif is_prefix(id, &#039;minutes&#039;, 3) then&lt;br /&gt;
				days = num / (24 * 60)&lt;br /&gt;
			elseif is_prefix(id, &#039;seconds&#039;) then&lt;br /&gt;
				days = num / (24 * 3600)&lt;br /&gt;
			else&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			if days then&lt;br /&gt;
				return do_days(days)&lt;br /&gt;
			end&lt;br /&gt;
			if numstr:find(&#039;.&#039;, 1, true) then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			if is_sub then&lt;br /&gt;
				y = -y&lt;br /&gt;
				m = -m&lt;br /&gt;
			end&lt;br /&gt;
			assert(-11 &amp;lt;= m and m &amp;lt;= 11)&lt;br /&gt;
			y = lhs.year + y&lt;br /&gt;
			m = lhs.month + m&lt;br /&gt;
			if m &amp;gt; 12 then&lt;br /&gt;
				y = y + 1&lt;br /&gt;
				m = m - 12&lt;br /&gt;
			elseif m &amp;lt; 1 then&lt;br /&gt;
				y = y - 1&lt;br /&gt;
				m = m + 12&lt;br /&gt;
			end&lt;br /&gt;
			local d = math.min(lhs.day, days_in_month(y, m, lhs.calendar))&lt;br /&gt;
			return Date(lhs, y, m, d)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if is_diff(rhs) then&lt;br /&gt;
		local days = rhs.age_days&lt;br /&gt;
		if (is_sub or false) ~= (rhs.isnegative or false) then&lt;br /&gt;
			days = -days&lt;br /&gt;
		end&lt;br /&gt;
		return lhs + days&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local full_date_only = {&lt;br /&gt;
	dayabbr = true,&lt;br /&gt;
	dayname = true,&lt;br /&gt;
	dow = true,&lt;br /&gt;
	dayofweek = true,&lt;br /&gt;
	dowiso = true,&lt;br /&gt;
	dayofweekiso = true,&lt;br /&gt;
	dayofyear = true,&lt;br /&gt;
	gsd = true,&lt;br /&gt;
	juliandate = true,&lt;br /&gt;
	jd = true,&lt;br /&gt;
	jdz = true,&lt;br /&gt;
	jdnoon = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Metatable for a date&#039;s calculated fields.&lt;br /&gt;
local datemt = {&lt;br /&gt;
	__index = function (self, key)&lt;br /&gt;
		if rawget(self, &#039;partial&#039;) then&lt;br /&gt;
			if full_date_only[key] then return end&lt;br /&gt;
			if key == &#039;monthabbr&#039; or key == &#039;monthdays&#039; or key == &#039;monthname&#039; then&lt;br /&gt;
				if not self.month then return end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local value&lt;br /&gt;
		if key == &#039;dayabbr&#039; then&lt;br /&gt;
			value = day_info[self.dow][1]&lt;br /&gt;
		elseif key == &#039;dayname&#039; then&lt;br /&gt;
			value = day_info[self.dow][2]&lt;br /&gt;
		elseif key == &#039;dow&#039; then&lt;br /&gt;
			value = (self.jdnoon + 1) % 7  -- day-of-week 0=Sun to 6=Sat&lt;br /&gt;
		elseif key == &#039;dayofweek&#039; then&lt;br /&gt;
			value = self.dow&lt;br /&gt;
		elseif key == &#039;dowiso&#039; then&lt;br /&gt;
			value = (self.jdnoon % 7) + 1  -- ISO day-of-week 1=Mon to 7=Sun&lt;br /&gt;
		elseif key == &#039;dayofweekiso&#039; then&lt;br /&gt;
			value = self.dowiso&lt;br /&gt;
		elseif key == &#039;dayofyear&#039; then&lt;br /&gt;
			local first = Date(self.year, 1, 1, self.calendar).jdnoon&lt;br /&gt;
			value = self.jdnoon - first + 1  -- day-of-year 1 to 366&lt;br /&gt;
		elseif key == &#039;era&#039; then&lt;br /&gt;
			-- Era text (never a negative sign) from year and options.&lt;br /&gt;
			value = get_era_for_year(self.options.era, self.year)&lt;br /&gt;
		elseif key == &#039;format&#039; then&lt;br /&gt;
			value = self.options.format or &#039;dmy&#039;&lt;br /&gt;
		elseif key == &#039;gsd&#039; then&lt;br /&gt;
			-- GSD = 1 from 00:00:00 to 23:59:59 on 1 January 1 AD Gregorian calendar,&lt;br /&gt;
			-- which is from jd 1721425.5 to 1721426.49999.&lt;br /&gt;
			value = floor(self.jd - 1721424.5)&lt;br /&gt;
		elseif key == &#039;juliandate&#039; or key == &#039;jd&#039; or key == &#039;jdz&#039; then&lt;br /&gt;
			local jd, jdz = julian_date(self)&lt;br /&gt;
			rawset(self, &#039;juliandate&#039;, jd)&lt;br /&gt;
			rawset(self, &#039;jd&#039;, jd)&lt;br /&gt;
			rawset(self, &#039;jdz&#039;, jdz)&lt;br /&gt;
			return key == &#039;jdz&#039; and jdz or jd&lt;br /&gt;
		elseif key == &#039;jdnoon&#039; then&lt;br /&gt;
			-- Julian date at noon (an integer) on the calendar day when jd occurs.&lt;br /&gt;
			value = floor(self.jd + 0.5)&lt;br /&gt;
		elseif key == &#039;isleapyear&#039; then&lt;br /&gt;
			value = is_leap_year(self.year, self.calendar)&lt;br /&gt;
		elseif key == &#039;monthabbr&#039; then&lt;br /&gt;
			value = month_info[self.month][1]&lt;br /&gt;
		elseif key == &#039;monthdays&#039; then&lt;br /&gt;
			value = days_in_month(self.year, self.month, self.calendar)&lt;br /&gt;
		elseif key == &#039;monthname&#039; then&lt;br /&gt;
			value = month_info[self.month][2]&lt;br /&gt;
		end&lt;br /&gt;
		if value ~= nil then&lt;br /&gt;
			rawset(self, key, value)&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Date operators.&lt;br /&gt;
local function mt_date_add(lhs, rhs)&lt;br /&gt;
	if not is_date(lhs) then&lt;br /&gt;
		lhs, rhs = rhs, lhs  -- put date on left (it must be a date for this to have been called)&lt;br /&gt;
	end&lt;br /&gt;
	return date_add_sub(lhs, rhs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_sub(lhs, rhs)&lt;br /&gt;
	if is_date(lhs) then&lt;br /&gt;
		if is_date(rhs) then&lt;br /&gt;
			return DateDiff(lhs, rhs)&lt;br /&gt;
		end&lt;br /&gt;
		return date_add_sub(lhs, rhs, true)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_concat(lhs, rhs)&lt;br /&gt;
	return tostring(lhs) .. tostring(rhs)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_tostring(self)&lt;br /&gt;
	return self:text()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_eq(lhs, rhs)&lt;br /&gt;
	-- Return true if dates identify same date/time where, for example,&lt;br /&gt;
	-- Date(-4712, 1, 1, &#039;Julian&#039;) == Date(-4713, 11, 24, &#039;Gregorian&#039;) is true.&lt;br /&gt;
	-- This is called only if lhs and rhs have the same type and the same metamethod.&lt;br /&gt;
	if lhs.partial or rhs.partial then&lt;br /&gt;
		-- One date is partial; the other is a partial or a full date.&lt;br /&gt;
		-- The months may both be nil, but must be the same.&lt;br /&gt;
		return lhs.year == rhs.year and lhs.month == rhs.month and lhs.calendar == rhs.calendar&lt;br /&gt;
	end&lt;br /&gt;
	return lhs.jdz == rhs.jdz&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mt_date_lt(lhs, rhs)&lt;br /&gt;
	-- Return true if lhs &amp;lt; rhs, for example,&lt;br /&gt;
	-- Date(&#039;1 Jan 2016&#039;) &amp;lt; Date(&#039;06:00 1 Jan 2016&#039;) is true.&lt;br /&gt;
	-- This is called only if lhs and rhs have the same type and the same metamethod.&lt;br /&gt;
	if lhs.partial or rhs.partial then&lt;br /&gt;
		-- One date is partial; the other is a partial or a full date.&lt;br /&gt;
		if lhs.calendar ~= rhs.calendar then&lt;br /&gt;
			return lhs.calendar == &#039;Julian&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if lhs.partial then&lt;br /&gt;
			lhs = lhs.partial.first&lt;br /&gt;
		end&lt;br /&gt;
		if rhs.partial then&lt;br /&gt;
			rhs = rhs.partial.first&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return lhs.jdz &amp;lt; rhs.jdz&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[ Examples of syntax to construct a date:&lt;br /&gt;
Date(y, m, d, &#039;julian&#039;)             default calendar is &#039;gregorian&#039;&lt;br /&gt;
Date(y, m, d, H, M, S, &#039;julian&#039;)&lt;br /&gt;
Date(&#039;juliandate&#039;, jd, &#039;julian&#039;)    if jd contains &amp;quot;.&amp;quot; text output includes H:M:S&lt;br /&gt;
Date(&#039;currentdate&#039;)&lt;br /&gt;
Date(&#039;currentdatetime&#039;)&lt;br /&gt;
Date(&#039;1 April 1995&#039;, &#039;julian&#039;)      parse date from text&lt;br /&gt;
Date(&#039;1 April 1995 AD&#039;, &#039;julian&#039;)   using an era sets a flag to do the same for output&lt;br /&gt;
Date(&#039;04:30:59 1 April 1995&#039;, &#039;julian&#039;)&lt;br /&gt;
Date(date)                          copy of an existing date&lt;br /&gt;
Date(date, t)                       same, updated with y,m,d,H,M,S fields from table t&lt;br /&gt;
Date(t)                       		date with y,m,d,H,M,S fields from table t&lt;br /&gt;
]]&lt;br /&gt;
function Date(...)  -- for forward declaration above&lt;br /&gt;
	-- Return a table holding a date assuming a uniform calendar always applies&lt;br /&gt;
	-- (proleptic Gregorian calendar or proleptic Julian calendar), or&lt;br /&gt;
	-- return nothing if date is invalid.&lt;br /&gt;
	-- A partial date has a valid year, however its month may be nil, and&lt;br /&gt;
	-- its day and time fields are nil.&lt;br /&gt;
	-- Field partial is set to false (if a full date) or a table (if a partial date).&lt;br /&gt;
	local calendars = { julian = &#039;Julian&#039;, gregorian = &#039;Gregorian&#039; }&lt;br /&gt;
	local newdate = {&lt;br /&gt;
		_id = uniq,&lt;br /&gt;
		calendar = &#039;Gregorian&#039;,  -- default is Gregorian calendar&lt;br /&gt;
		hastime = false,  -- true if input sets a time&lt;br /&gt;
		hour = 0,  -- always set hour/minute/second so don&#039;t have to handle nil&lt;br /&gt;
		minute = 0,&lt;br /&gt;
		second = 0,&lt;br /&gt;
		options = {},&lt;br /&gt;
		list = _date_list,&lt;br /&gt;
		subtract = function (self, rhs, options)&lt;br /&gt;
			return DateDiff(self, rhs, options)&lt;br /&gt;
		end,&lt;br /&gt;
		text = _date_text,&lt;br /&gt;
	}&lt;br /&gt;
	local argtype, datetext, is_copy, jd_number, tnums&lt;br /&gt;
	local numindex = 0&lt;br /&gt;
	local numfields = { &#039;year&#039;, &#039;month&#039;, &#039;day&#039;, &#039;hour&#039;, &#039;minute&#039;, &#039;second&#039; }&lt;br /&gt;
	local numbers = {}&lt;br /&gt;
	for _, v in ipairs({...}) do&lt;br /&gt;
		v = strip_to_nil(v)&lt;br /&gt;
		local vlower = type(v) == &#039;string&#039; and v:lower() or nil&lt;br /&gt;
		if v == nil then&lt;br /&gt;
			-- Ignore empty arguments after stripping so modules can directly pass template parameters.&lt;br /&gt;
		elseif calendars[vlower] then&lt;br /&gt;
			newdate.calendar = calendars[vlower]&lt;br /&gt;
		elseif vlower == &#039;partial&#039; then&lt;br /&gt;
			newdate.partial = true&lt;br /&gt;
		elseif vlower == &#039;fix&#039; then&lt;br /&gt;
			newdate.want_fix = true&lt;br /&gt;
		elseif is_date(v) then&lt;br /&gt;
			-- Copy existing date (items can be overridden by other arguments).&lt;br /&gt;
			if is_copy or tnums then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			is_copy = true&lt;br /&gt;
			newdate.calendar = v.calendar&lt;br /&gt;
			newdate.partial = v.partial&lt;br /&gt;
			newdate.hastime = v.hastime&lt;br /&gt;
			newdate.options = v.options&lt;br /&gt;
			newdate.year = v.year&lt;br /&gt;
			newdate.month = v.month&lt;br /&gt;
			newdate.day = v.day&lt;br /&gt;
			newdate.hour = v.hour&lt;br /&gt;
			newdate.minute = v.minute&lt;br /&gt;
			newdate.second = v.second&lt;br /&gt;
		elseif type(v) == &#039;table&#039; then&lt;br /&gt;
			if tnums then&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
			tnums = {}&lt;br /&gt;
			local tfields = { year=1, month=1, day=1, hour=2, minute=2, second=2 }&lt;br /&gt;
			for tk, tv in pairs(v) do&lt;br /&gt;
				if tfields[tk] then&lt;br /&gt;
					tnums[tk] = tonumber(tv)&lt;br /&gt;
				end&lt;br /&gt;
				if tfields[tk] == 2 then&lt;br /&gt;
					newdate.hastime = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			local num = tonumber(v)&lt;br /&gt;
			if not num and argtype == &#039;setdate&#039; and numindex == 1 then&lt;br /&gt;
				num = month_number(v)&lt;br /&gt;
			end&lt;br /&gt;
			if num then&lt;br /&gt;
				if not argtype then&lt;br /&gt;
					argtype = &#039;setdate&#039;&lt;br /&gt;
				end&lt;br /&gt;
				if argtype == &#039;setdate&#039; and numindex &amp;lt; 6 then&lt;br /&gt;
					numindex = numindex + 1&lt;br /&gt;
					numbers[numfields[numindex]] = num&lt;br /&gt;
				elseif argtype == &#039;juliandate&#039; and not jd_number then&lt;br /&gt;
					jd_number = num&lt;br /&gt;
					if type(v) == &#039;string&#039; then&lt;br /&gt;
						if v:find(&#039;.&#039;, 1, true) then&lt;br /&gt;
							newdate.hastime = true&lt;br /&gt;
						end&lt;br /&gt;
					elseif num ~= floor(num) then&lt;br /&gt;
						-- The given value was a number. The time will be used&lt;br /&gt;
						-- if the fractional part is nonzero.&lt;br /&gt;
						newdate.hastime = true&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					return&lt;br /&gt;
				end&lt;br /&gt;
			elseif argtype then&lt;br /&gt;
				return&lt;br /&gt;
			elseif type(v) == &#039;string&#039; then&lt;br /&gt;
				if v == &#039;currentdate&#039; or v == &#039;currentdatetime&#039; or v == &#039;juliandate&#039; then&lt;br /&gt;
					argtype = v&lt;br /&gt;
				else&lt;br /&gt;
					argtype = &#039;datetext&#039;&lt;br /&gt;
					datetext = v&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				return&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if argtype == &#039;datetext&#039; then&lt;br /&gt;
		if tnums or not set_date_from_numbers(newdate, extract_date(newdate, datetext)) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	elseif argtype == &#039;juliandate&#039; then&lt;br /&gt;
		newdate.partial = nil&lt;br /&gt;
		newdate.jd = jd_number&lt;br /&gt;
		if not set_date_from_jd(newdate) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	elseif argtype == &#039;currentdate&#039; or argtype == &#039;currentdatetime&#039; then&lt;br /&gt;
		newdate.partial = nil&lt;br /&gt;
		newdate.year = current.year&lt;br /&gt;
		newdate.month = current.month&lt;br /&gt;
		newdate.day = current.day&lt;br /&gt;
		if argtype == &#039;currentdatetime&#039; then&lt;br /&gt;
			newdate.hour = current.hour&lt;br /&gt;
			newdate.minute = current.minute&lt;br /&gt;
			newdate.second = current.second&lt;br /&gt;
			newdate.hastime = true&lt;br /&gt;
		end&lt;br /&gt;
		newdate.calendar = &#039;Gregorian&#039;  -- ignore any given calendar name&lt;br /&gt;
	elseif argtype == &#039;setdate&#039; then&lt;br /&gt;
		if tnums or not set_date_from_numbers(newdate, numbers) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	elseif not (is_copy or tnums) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	if tnums then&lt;br /&gt;
		newdate.jd = nil  -- force recalculation in case jd was set before changes from tnums&lt;br /&gt;
		if not set_date_from_numbers(newdate, tnums) then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if newdate.partial then&lt;br /&gt;
		local year = newdate.year&lt;br /&gt;
		local month = newdate.month&lt;br /&gt;
		local first = Date(year, month or 1, 1, newdate.calendar)&lt;br /&gt;
		month = month or 12&lt;br /&gt;
		local last = Date(year, month, days_in_month(year, month), newdate.calendar)&lt;br /&gt;
		newdate.partial = { first = first, last = last }&lt;br /&gt;
	else&lt;br /&gt;
		newdate.partial = false  -- avoid index lookup&lt;br /&gt;
	end&lt;br /&gt;
	setmetatable(newdate, datemt)&lt;br /&gt;
	local readonly = {}&lt;br /&gt;
	local mt = {&lt;br /&gt;
		__index = newdate,&lt;br /&gt;
		__newindex = function(t, k, v) error(&#039;date.&#039; .. tostring(k) .. &#039; is read-only&#039;, 2) end,&lt;br /&gt;
		__add = mt_date_add,&lt;br /&gt;
		__sub = mt_date_sub,&lt;br /&gt;
		__concat = mt_date_concat,&lt;br /&gt;
		__tostring = mt_date_tostring,&lt;br /&gt;
		__eq = mt_date_eq,&lt;br /&gt;
		__lt = mt_date_lt,&lt;br /&gt;
	}&lt;br /&gt;
	return setmetatable(readonly, mt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _diff_age(diff, code, options)&lt;br /&gt;
	-- Return a tuple of integer values from diff as specified by code, except that&lt;br /&gt;
	-- each integer may be a list of two integers for a diff with a partial date, or&lt;br /&gt;
	-- return nil if the code is not supported.&lt;br /&gt;
	-- If want round, the least significant unit is rounded to nearest whole unit.&lt;br /&gt;
	-- For a duration, an extra day is added.&lt;br /&gt;
	local wantround, wantduration, wantrange&lt;br /&gt;
	if type(options) == &#039;table&#039; then&lt;br /&gt;
		wantround = options.round&lt;br /&gt;
		wantduration = options.duration&lt;br /&gt;
		wantrange = options.range&lt;br /&gt;
	else&lt;br /&gt;
		wantround = options&lt;br /&gt;
	end&lt;br /&gt;
	if not is_diff(diff) then&lt;br /&gt;
		local f = wantduration and &#039;duration&#039; or &#039;age&#039;&lt;br /&gt;
		error(f .. &#039;: need a date difference (use &amp;quot;diff:&#039; .. f .. &#039;()&amp;quot; with a colon)&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if diff.partial then&lt;br /&gt;
		-- Ignore wantround, wantduration.&lt;br /&gt;
		local function choose(v)&lt;br /&gt;
			if type(v) == &#039;table&#039; then&lt;br /&gt;
				if not wantrange or v[1] == v[2] then&lt;br /&gt;
					-- Example: Date(&#039;partial&#039;, 2005) - Date(&#039;partial&#039;, 2001) gives&lt;br /&gt;
					-- diff.years = { 3, 4 } to show the range of possible results.&lt;br /&gt;
					-- If do not want a range, choose the second value as more expected.&lt;br /&gt;
					return v[2]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return v&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;ym&#039; or code == &#039;ymd&#039; then&lt;br /&gt;
			if not wantrange and diff.iszero then&lt;br /&gt;
				-- This avoids an unexpected result such as&lt;br /&gt;
				-- Date(&#039;partial&#039;, 2001) - Date(&#039;partial&#039;, 2001)&lt;br /&gt;
				-- giving diff = { years = 0, months = { 0, 11 } }&lt;br /&gt;
				-- which would be reported as 0 years and 11 months.&lt;br /&gt;
				return 0, 0&lt;br /&gt;
			end&lt;br /&gt;
			return choose(diff.partial.years), choose(diff.partial.months)&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;y&#039; then&lt;br /&gt;
			return choose(diff.partial.years)&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;m&#039; or code == &#039;w&#039; or code == &#039;d&#039; then&lt;br /&gt;
			return choose({ diff.partial.mindiff:age(code), diff.partial.maxdiff:age(code) })&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local extra_days = wantduration and 1 or 0&lt;br /&gt;
	if code == &#039;wd&#039; or code == &#039;w&#039; or code == &#039;d&#039; then&lt;br /&gt;
		local offset = wantround and 0.5 or 0&lt;br /&gt;
		local days = diff.age_days + extra_days&lt;br /&gt;
		if code == &#039;wd&#039; or code == &#039;d&#039; then&lt;br /&gt;
			days = floor(days + offset)&lt;br /&gt;
			if code == &#039;d&#039; then&lt;br /&gt;
				return days&lt;br /&gt;
			end&lt;br /&gt;
			return floor(days/7), days % 7&lt;br /&gt;
		end&lt;br /&gt;
		return floor(days/7 + offset)&lt;br /&gt;
	end&lt;br /&gt;
	local H, M, S = diff.hours, diff.minutes, diff.seconds&lt;br /&gt;
	if code == &#039;dh&#039; or code == &#039;dhm&#039; or code == &#039;dhms&#039; or code == &#039;h&#039; or code == &#039;hm&#039; or code == &#039;hms&#039; or code == &#039;M&#039; or code == &#039;s&#039; then&lt;br /&gt;
		local days = floor(diff.age_days + extra_days)&lt;br /&gt;
		local inc_hour&lt;br /&gt;
		if wantround then&lt;br /&gt;
			if code == &#039;dh&#039; or code == &#039;h&#039; then&lt;br /&gt;
				if M &amp;gt;= 30 then&lt;br /&gt;
					inc_hour = true&lt;br /&gt;
				end&lt;br /&gt;
			elseif code == &#039;dhm&#039; or code == &#039;hm&#039; then&lt;br /&gt;
				if S &amp;gt;= 30 then&lt;br /&gt;
					M = M + 1&lt;br /&gt;
					if M &amp;gt;= 60 then&lt;br /&gt;
						M = 0&lt;br /&gt;
						inc_hour = true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			elseif code == &#039;M&#039; then&lt;br /&gt;
				if S &amp;gt;= 30 then&lt;br /&gt;
					M = M + 1&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				-- Nothing needed because S is an integer.&lt;br /&gt;
			end&lt;br /&gt;
			if inc_hour then&lt;br /&gt;
				H = H + 1&lt;br /&gt;
				if H &amp;gt;= 24 then&lt;br /&gt;
					H = 0&lt;br /&gt;
					days = days + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;dh&#039; or code == &#039;dhm&#039; or code == &#039;dhms&#039; then&lt;br /&gt;
			if code == &#039;dh&#039; then&lt;br /&gt;
				return days, H&lt;br /&gt;
			elseif code == &#039;dhm&#039; then&lt;br /&gt;
				return days, H, M&lt;br /&gt;
			else&lt;br /&gt;
				return days, H, M, S&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local hours = days * 24 + H&lt;br /&gt;
		if code == &#039;h&#039; then&lt;br /&gt;
			return hours&lt;br /&gt;
		elseif code == &#039;hm&#039; then&lt;br /&gt;
			return hours, M&lt;br /&gt;
		elseif code == &#039;M&#039; or code == &#039;s&#039; then&lt;br /&gt;
			M = hours * 60 + M&lt;br /&gt;
			if code == &#039;M&#039; then&lt;br /&gt;
				return M&lt;br /&gt;
			end&lt;br /&gt;
			return M * 60 + S&lt;br /&gt;
		end&lt;br /&gt;
		return hours, M, S&lt;br /&gt;
	end&lt;br /&gt;
	if wantround then&lt;br /&gt;
		local inc_hour&lt;br /&gt;
		if code == &#039;ymdh&#039; or code == &#039;ymwdh&#039; then&lt;br /&gt;
			if M &amp;gt;= 30 then&lt;br /&gt;
				inc_hour = true&lt;br /&gt;
			end&lt;br /&gt;
		elseif code == &#039;ymdhm&#039; or code == &#039;ymwdhm&#039; then&lt;br /&gt;
			if S &amp;gt;= 30 then&lt;br /&gt;
				M = M + 1&lt;br /&gt;
				if M &amp;gt;= 60 then&lt;br /&gt;
					M = 0&lt;br /&gt;
					inc_hour = true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		elseif code == &#039;ymd&#039; or code == &#039;ymwd&#039; or code == &#039;yd&#039; or code == &#039;md&#039; then&lt;br /&gt;
			if H &amp;gt;= 12 then&lt;br /&gt;
				extra_days = extra_days + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if inc_hour then&lt;br /&gt;
			H = H + 1&lt;br /&gt;
			if H &amp;gt;= 24 then&lt;br /&gt;
				H = 0&lt;br /&gt;
				extra_days = extra_days + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local y, m, d = diff.years, diff.months, diff.days&lt;br /&gt;
	if extra_days &amp;gt; 0 then&lt;br /&gt;
		d = d + extra_days&lt;br /&gt;
		if d &amp;gt; 28 or code == &#039;yd&#039; then&lt;br /&gt;
			-- Recalculate in case have passed a month.&lt;br /&gt;
			diff = diff.date1 + extra_days - diff.date2&lt;br /&gt;
			y, m, d = diff.years, diff.months, diff.days&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if code == &#039;ymd&#039; then&lt;br /&gt;
		return y, m, d&lt;br /&gt;
	elseif code == &#039;yd&#039; then&lt;br /&gt;
		if y &amp;gt; 0 then&lt;br /&gt;
			-- It is known that diff.date1 &amp;gt; diff.date2.&lt;br /&gt;
			diff = diff.date1 - (diff.date2 + (y .. &#039;y&#039;))&lt;br /&gt;
		end&lt;br /&gt;
		return y, floor(diff.age_days)&lt;br /&gt;
	elseif code == &#039;md&#039; then&lt;br /&gt;
		return y * 12 + m, d&lt;br /&gt;
	elseif code == &#039;ym&#039; or code == &#039;m&#039; then&lt;br /&gt;
		if wantround then&lt;br /&gt;
			if d &amp;gt;= 16 then&lt;br /&gt;
				m = m + 1&lt;br /&gt;
				if m &amp;gt;= 12 then&lt;br /&gt;
					m = 0&lt;br /&gt;
					y = y + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if code == &#039;ym&#039; then&lt;br /&gt;
			return y, m&lt;br /&gt;
		end&lt;br /&gt;
		return y * 12 + m&lt;br /&gt;
	elseif code == &#039;ymw&#039; then&lt;br /&gt;
		local weeks = floor(d/7)&lt;br /&gt;
		if wantround then&lt;br /&gt;
			local days = d % 7&lt;br /&gt;
			if days &amp;gt; 3 or (days == 3 and H &amp;gt;= 12) then&lt;br /&gt;
				weeks = weeks + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return y, m, weeks&lt;br /&gt;
	elseif code == &#039;ymwd&#039; then&lt;br /&gt;
		return y, m, floor(d/7), d % 7&lt;br /&gt;
	elseif code == &#039;ymdh&#039; then&lt;br /&gt;
		return y, m, d, H&lt;br /&gt;
	elseif code == &#039;ymwdh&#039; then&lt;br /&gt;
		return y, m, floor(d/7), d % 7, H&lt;br /&gt;
	elseif code == &#039;ymdhm&#039; then&lt;br /&gt;
		return y, m, d, H, M&lt;br /&gt;
	elseif code == &#039;ymwdhm&#039; then&lt;br /&gt;
		return y, m, floor(d/7), d % 7, H, M&lt;br /&gt;
	end&lt;br /&gt;
	if code == &#039;y&#039; then&lt;br /&gt;
		if wantround and m &amp;gt;= 6 then&lt;br /&gt;
			y = y + 1&lt;br /&gt;
		end&lt;br /&gt;
		return y&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _diff_duration(diff, code, options)&lt;br /&gt;
	if type(options) ~= &#039;table&#039; then&lt;br /&gt;
		options = { round = options }&lt;br /&gt;
	end&lt;br /&gt;
	options.duration = true&lt;br /&gt;
	return _diff_age(diff, code, options)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Metatable for some operations on date differences.&lt;br /&gt;
diffmt = {  -- for forward declaration above&lt;br /&gt;
	__concat = function (lhs, rhs)&lt;br /&gt;
		return tostring(lhs) .. tostring(rhs)&lt;br /&gt;
	end,&lt;br /&gt;
	__tostring = function (self)&lt;br /&gt;
		return tostring(self.age_days)&lt;br /&gt;
	end,&lt;br /&gt;
	__index = function (self, key)&lt;br /&gt;
		local value&lt;br /&gt;
		if key == &#039;age_days&#039; then&lt;br /&gt;
			if rawget(self, &#039;partial&#039;) then&lt;br /&gt;
				local function jdz(date)&lt;br /&gt;
					return (date.partial and date.partial.first or date).jdz&lt;br /&gt;
				end&lt;br /&gt;
				value = jdz(self.date1) - jdz(self.date2)&lt;br /&gt;
			else&lt;br /&gt;
				value = self.date1.jdz - self.date2.jdz&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if value ~= nil then&lt;br /&gt;
			rawset(self, key, value)&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function DateDiff(date1, date2, options)  -- for forward declaration above&lt;br /&gt;
	-- Return a table with the difference between two dates (date1 - date2).&lt;br /&gt;
	-- The difference is negative if date1 is older than date2.&lt;br /&gt;
	-- Return nothing if invalid.&lt;br /&gt;
	-- If d = date1 - date2 then&lt;br /&gt;
	--     date1 = date2 + d&lt;br /&gt;
	-- If date1 &amp;gt;= date2 and the dates have no H:M:S time specified then&lt;br /&gt;
	--     date1 = date2 + (d.years..&#039;y&#039;) + (d.months..&#039;m&#039;) + d.days&lt;br /&gt;
	-- where the larger time units are added first.&lt;br /&gt;
	-- The result of Date(2015,1,x) + &#039;1m&#039; is Date(2015,2,28) for&lt;br /&gt;
	-- x = 28, 29, 30, 31. That means, for example,&lt;br /&gt;
	--     d = Date(2015,3,3) - Date(2015,1,31)&lt;br /&gt;
	-- gives d.years, d.months, d.days = 0, 1, 3 (excluding date1).&lt;br /&gt;
	if not (is_date(date1) and is_date(date2) and date1.calendar == date2.calendar) then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local wantfill&lt;br /&gt;
	if type(options) == &#039;table&#039; then&lt;br /&gt;
		wantfill = options.fill&lt;br /&gt;
	end&lt;br /&gt;
	local isnegative = false&lt;br /&gt;
	local iszero = false&lt;br /&gt;
	if date1 &amp;lt; date2 then&lt;br /&gt;
		isnegative = true&lt;br /&gt;
		date1, date2 = date2, date1&lt;br /&gt;
	elseif date1 == date2 then&lt;br /&gt;
		iszero = true&lt;br /&gt;
	end&lt;br /&gt;
	-- It is known that date1 &amp;gt;= date2 (period is from date2 to date1).&lt;br /&gt;
	if date1.partial or date2.partial then&lt;br /&gt;
		-- Two partial dates might have timelines:&lt;br /&gt;
		---------------------A=================B--- date1 is from A to B inclusive&lt;br /&gt;
		--------C=======D-------------------------- date2 is from C to D inclusive&lt;br /&gt;
		-- date1 &amp;gt; date2 iff A &amp;gt; C (date1.partial.first &amp;gt; date2.partial.first)&lt;br /&gt;
		-- The periods can overlap (&#039;April 2001&#039; - &#039;2001&#039;):&lt;br /&gt;
		-------------A===B------------------------- A=2001-04-01  B=2001-04-30&lt;br /&gt;
		--------C=====================D------------ C=2001-01-01  D=2001-12-31&lt;br /&gt;
		if wantfill then&lt;br /&gt;
			date1, date2 = autofill(date1, date2)&lt;br /&gt;
		else&lt;br /&gt;
			local function zdiff(date1, date2)&lt;br /&gt;
				local diff = date1 - date2&lt;br /&gt;
				if diff.isnegative then&lt;br /&gt;
					return date1 - date1  -- a valid diff in case we call its methods&lt;br /&gt;
				end&lt;br /&gt;
				return diff&lt;br /&gt;
			end&lt;br /&gt;
			local function getdate(date, which)&lt;br /&gt;
				return date.partial and date.partial[which] or date&lt;br /&gt;
			end&lt;br /&gt;
			local maxdiff = zdiff(getdate(date1, &#039;last&#039;), getdate(date2, &#039;first&#039;))&lt;br /&gt;
			local mindiff = zdiff(getdate(date1, &#039;first&#039;), getdate(date2, &#039;last&#039;))&lt;br /&gt;
			local years, months&lt;br /&gt;
			if maxdiff.years == mindiff.years then&lt;br /&gt;
				years = maxdiff.years&lt;br /&gt;
				if maxdiff.months == mindiff.months then&lt;br /&gt;
					months = maxdiff.months&lt;br /&gt;
				else&lt;br /&gt;
					months = { mindiff.months, maxdiff.months }&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				years = { mindiff.years, maxdiff.years }&lt;br /&gt;
			end&lt;br /&gt;
			return setmetatable({&lt;br /&gt;
				date1 = date1,&lt;br /&gt;
				date2 = date2,&lt;br /&gt;
				partial = {&lt;br /&gt;
					years = years,&lt;br /&gt;
					months = months,&lt;br /&gt;
					maxdiff = maxdiff,&lt;br /&gt;
					mindiff = mindiff,&lt;br /&gt;
				},&lt;br /&gt;
				isnegative = isnegative,&lt;br /&gt;
				iszero = iszero,&lt;br /&gt;
				age = _diff_age,&lt;br /&gt;
				duration = _diff_duration,&lt;br /&gt;
			}, diffmt)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local y1, m1 = date1.year, date1.month&lt;br /&gt;
	local y2, m2 = date2.year, date2.month&lt;br /&gt;
	local years = y1 - y2&lt;br /&gt;
	local months = m1 - m2&lt;br /&gt;
	local d1 = date1.day + hms(date1)&lt;br /&gt;
	local d2 = date2.day + hms(date2)&lt;br /&gt;
	local days, time&lt;br /&gt;
	if d1 &amp;gt;= d2 then&lt;br /&gt;
		days = d1 - d2&lt;br /&gt;
	else&lt;br /&gt;
		months = months - 1&lt;br /&gt;
		-- Get days in previous month (before the &amp;quot;to&amp;quot; date) given December has 31 days.&lt;br /&gt;
		local dpm = m1 &amp;gt; 1 and days_in_month(y1, m1 - 1, date1.calendar) or 31&lt;br /&gt;
		if d2 &amp;gt;= dpm then&lt;br /&gt;
			days = d1 - hms(date2)&lt;br /&gt;
		else&lt;br /&gt;
			days = dpm - d2 + d1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if months &amp;lt; 0 then&lt;br /&gt;
		years = years - 1&lt;br /&gt;
		months = months + 12&lt;br /&gt;
	end&lt;br /&gt;
	days, time = math.modf(days)&lt;br /&gt;
	local H, M, S = h_m_s(time)&lt;br /&gt;
	return setmetatable({&lt;br /&gt;
		date1 = date1,&lt;br /&gt;
		date2 = date2,&lt;br /&gt;
		partial = false,  -- avoid index lookup&lt;br /&gt;
		years = years,&lt;br /&gt;
		months = months,&lt;br /&gt;
		days = days,&lt;br /&gt;
		hours = H,&lt;br /&gt;
		minutes = M,&lt;br /&gt;
		seconds = S,&lt;br /&gt;
		isnegative = isnegative,&lt;br /&gt;
		iszero = iszero,&lt;br /&gt;
		age = _diff_age,&lt;br /&gt;
		duration = _diff_duration,&lt;br /&gt;
	}, diffmt)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	_current = current,&lt;br /&gt;
	_Date = Date,&lt;br /&gt;
	_days_in_month = days_in_month,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Birth_date_and_age&amp;diff=945</id>
		<title>Template:Birth date and age</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Birth_date_and_age&amp;diff=945"/>
		<updated>2024-02-18T00:16:26Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{{{{♥|safesubst:}}}#invoke:age|birth_date_and_age}}{{#invoke:Check for unknown parameters|check|ignoreblank=y|preview=Page using Template:Birth date and age with unknown parameter &amp;quot;_VALUE_&amp;quot;|unknown={{main other|_VALUE_{{PAGENAME}}}}|1|2|3|day|month|year|df|mf}}{{#ifeq: {{NAMESPACENUMBER}} | 0 | {{#if: {{#invoke:wd|label|raw}}   | {{#if: {{#invoke:String|match|{{#invoke:wd|pro...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{{{{♥|safesubst:}}}#invoke:age|birth_date_and_age}}{{#invoke:Check for unknown parameters|check|ignoreblank=y|preview=Page using [[Template:Birth date and age]] with unknown parameter &amp;quot;_VALUE_&amp;quot;|unknown={{main other|[[Category:Pages using birth date and age template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|1|2|3|day|month|year|df|mf}}{{#ifeq: {{NAMESPACENUMBER}} | 0&lt;br /&gt;
| {{#if: {{#invoke:wd|label|raw}}&lt;br /&gt;
  | {{#if: {{#invoke:String|match|{{#invoke:wd|properties|raw|P31}},|Q5,|1|1|true|}}&lt;br /&gt;
    | {{#if: {{#invoke:wd|properties|raw|P569}}&lt;br /&gt;
      |&lt;br /&gt;
      | [[Category:Date of birth not in Wikidata]]&lt;br /&gt;
      }}&lt;br /&gt;
    }}&lt;br /&gt;
  | &lt;br /&gt;
  }}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Time_interval&amp;diff=944</id>
		<title>Template:Time interval</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Time_interval&amp;diff=944"/>
		<updated>2024-02-18T00:14:49Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{{{{|safesubst:}}}#invoke:age|time_interval}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{{{{|safesubst:}}}#invoke:age|time_interval}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Extract&amp;diff=943</id>
		<title>Template:Extract</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Extract&amp;diff=943"/>
		<updated>2024-02-18T00:13:54Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{{{{♥|safesubst:}}}#invoke:age|extract}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{{{{♥|safesubst:}}}#invoke:age|extract}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=942</id>
		<title>User:Kizmut</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=942"/>
		<updated>2024-02-18T00:08:47Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User:kizmut}}&lt;br /&gt;
&#039;&#039;[[Special:Contributions/TmpXNsDcsQS4 | Contribs]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
Current Age: {{Age|2018}}&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Category Tree==&lt;br /&gt;
&amp;lt;categorytree mode=&amp;quot;pages&amp;quot;&amp;gt;DGG Chat&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Age&amp;diff=941</id>
		<title>Template:Age</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Age&amp;diff=941"/>
		<updated>2024-02-18T00:07:40Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:age|age_generic|template=age_full_years}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:age|age_generic|template=age_full_years}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Module:Age&amp;diff=940</id>
		<title>Module:Age</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Module:Age&amp;diff=940"/>
		<updated>2024-02-17T23:58:55Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;-- Implement various &amp;quot;age of&amp;quot; and other date-related templates.  local mtext = { 	-- Message and other text that should be localized. 	-- Also need to localize text in table names in function dateDifference. 	[&amp;#039;mt-bad-param1&amp;#039;] =             &amp;#039;Invalid parameter $1&amp;#039;, 	[&amp;#039;mt-bad-param2&amp;#039;] =             &amp;#039;Parameter $1=$2 is invalid&amp;#039;, 	[&amp;#039;mt-bad-show&amp;#039;] =               &amp;#039;Parameter show=$1 is not supported here&amp;#039;, 	[&amp;#039;mt-cannot-add&amp;#039;] =             &amp;#039;Cannot add &amp;quot;$1&amp;quot;&amp;#039;, 	[&amp;#039;mt-conflicting-s...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Implement various &amp;quot;age of&amp;quot; and other date-related templates.&lt;br /&gt;
&lt;br /&gt;
local mtext = {&lt;br /&gt;
	-- Message and other text that should be localized.&lt;br /&gt;
	-- Also need to localize text in table names in function dateDifference.&lt;br /&gt;
	[&#039;mt-bad-param1&#039;] =             &#039;Invalid parameter $1&#039;,&lt;br /&gt;
	[&#039;mt-bad-param2&#039;] =             &#039;Parameter $1=$2 is invalid&#039;,&lt;br /&gt;
	[&#039;mt-bad-show&#039;] =               &#039;Parameter show=$1 is not supported here&#039;,&lt;br /&gt;
	[&#039;mt-cannot-add&#039;] =             &#039;Cannot add &amp;quot;$1&amp;quot;&#039;,&lt;br /&gt;
	[&#039;mt-conflicting-show&#039;] =       &#039;Parameter show=$1 conflicts with round=$2&#039;,&lt;br /&gt;
	[&#039;mt-date-wrong-order&#039;] =       &#039;The second date must be later in time than the first date&#039;,&lt;br /&gt;
	[&#039;mt-dd-future&#039;] =              &#039;Death date (first date) must not be in the future&#039;,&lt;br /&gt;
	[&#039;mt-dd-wrong-order&#039;] =         &#039;Death date (first date) must be later in time than the birth date (second date)&#039;,&lt;br /&gt;
	[&#039;mt-invalid-bd-age&#039;] =         &#039;Invalid birth date for calculating age&#039;,&lt;br /&gt;
	[&#039;mt-invalid-dates-age&#039;] =      &#039;Invalid dates for calculating age&#039;,&lt;br /&gt;
	[&#039;mt-invalid-end&#039;] =            &#039;Invalid end date in second parameter&#039;,&lt;br /&gt;
	[&#039;mt-invalid-start&#039;] =          &#039;Invalid start date in first parameter&#039;,&lt;br /&gt;
	[&#039;mt-need-jdn&#039;] =               &#039;Need valid Julian date number&#039;,&lt;br /&gt;
	[&#039;mt-need-valid-bd&#039;] =          &#039;Need valid birth date: year, month, day&#039;,&lt;br /&gt;
	[&#039;mt-need-valid-bd2&#039;] =         &#039;Need valid birth date (second date): year, month, day&#039;,&lt;br /&gt;
	[&#039;mt-need-valid-date&#039;] =        &#039;Need valid date&#039;,&lt;br /&gt;
	[&#039;mt-need-valid-dd&#039;] =          &#039;Need valid death date (first date): year, month, day&#039;,&lt;br /&gt;
	[&#039;mt-need-valid-ymd&#039;] =         &#039;Need valid year, month, day&#039;,&lt;br /&gt;
	[&#039;mt-need-valid-ymd-current&#039;] = &#039;Need valid year|month|day or &amp;quot;currentdate&amp;quot;&#039;,&lt;br /&gt;
	[&#039;mt-need-valid-ymd2&#039;] =        &#039;Second date should be year, month, day&#039;,&lt;br /&gt;
	[&#039;mt-template-bad-name&#039;] =      &#039;The specified template name is not valid&#039;,&lt;br /&gt;
	[&#039;mt-template-x&#039;] =             &#039;The template invoking this must have &amp;quot;|template=x&amp;quot; where x is the wanted operation&#039;,&lt;br /&gt;
	[&#039;txt-and&#039;] =                   &#039; and &#039;,&lt;br /&gt;
	[&#039;txt-or&#039;] =                    &#039;&amp;amp;nbsp;or &#039;,&lt;br /&gt;
	[&#039;txt-category&#039;] =              &#039;Category:Age error&#039;,&lt;br /&gt;
	[&#039;txt-comma-and&#039;] =             &#039;, and &#039;,&lt;br /&gt;
	[&#039;txt-error&#039;] =                 &#039;Error: &#039;,&lt;br /&gt;
	[&#039;txt-format-default&#039;] =        &#039;mf&#039;,  -- &#039;df&#039; (day first = dmy) or &#039;mf&#039; (month first = mdy)&lt;br /&gt;
	[&#039;txt-module-convertnumeric&#039;] = &#039;Module:ConvertNumeric&#039;,&lt;br /&gt;
	[&#039;txt-module-date&#039;] =           &#039;Module:Date&#039;,&lt;br /&gt;
	[&#039;txt-sandbox&#039;] =               &#039;sandbox&#039;,&lt;br /&gt;
	[&#039;txt-bda&#039;] = &#039;&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt; (&amp;lt;span class=&amp;quot;bday&amp;quot;&amp;gt;$1&amp;lt;/span&amp;gt;) &amp;lt;/span&amp;gt;$2&amp;lt;span class=&amp;quot;noprint ForceAgeToShow&amp;quot;&amp;gt; (age&amp;amp;nbsp;$3)&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
	[&#039;txt-dda&#039;] = &#039;$2&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;($1)&amp;lt;/span&amp;gt; (aged&amp;amp;nbsp;$3)&#039;,&lt;br /&gt;
	[&#039;txt-bda-disp&#039;] = &#039;disp_raw&#039;,  -- disp_raw → age is a number only; disp_age → age is a number and unit (normally years but months or days if very young)&lt;br /&gt;
	[&#039;txt-dda-disp&#039;] = &#039;disp_raw&#039;,&lt;br /&gt;
	[&#039;txt-dmy&#039;] = &#039;%-d %B %-Y&#039;,&lt;br /&gt;
	[&#039;txt-mdy&#039;] = &#039;%B %-d, %-Y&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local isWarning = {&lt;br /&gt;
	[&#039;mt-bad-param1&#039;] = true,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local translate, from_en, to_en, isZero&lt;br /&gt;
if translate then&lt;br /&gt;
	-- Functions to translate from en to local language and reverse go here.&lt;br /&gt;
	-- See example at [[:bn:Module:বয়স]].&lt;br /&gt;
else&lt;br /&gt;
	from_en = function (text)&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
	isZero = function (text)&lt;br /&gt;
		return tonumber(text) == 0&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local _Date, _currentDate&lt;br /&gt;
local function getExports(frame)&lt;br /&gt;
	-- Return objects exported from the date module or its sandbox.&lt;br /&gt;
	if not _Date then&lt;br /&gt;
		local sandbox = frame:getTitle():find(mtext[&#039;txt-sandbox&#039;], 1, true) and (&#039;/&#039; .. mtext[&#039;txt-sandbox&#039;]) or &#039;&#039;&lt;br /&gt;
		local datemod = require(mtext[&#039;txt-module-date&#039;] .. sandbox)&lt;br /&gt;
		local realDate = datemod._Date&lt;br /&gt;
		_currentDate = datemod._current&lt;br /&gt;
		if to_en then&lt;br /&gt;
			_Date = function (...)&lt;br /&gt;
				local args = {}&lt;br /&gt;
				for i, v in ipairs({...}) do&lt;br /&gt;
					args[i] = to_en(v)&lt;br /&gt;
				end&lt;br /&gt;
				return realDate(unpack(args))&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			_Date = realDate&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return _Date, _currentDate&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local Collection  -- a table to hold items&lt;br /&gt;
Collection = {&lt;br /&gt;
	add = function (self, item)&lt;br /&gt;
		if item ~= nil then&lt;br /&gt;
			self.n = self.n + 1&lt;br /&gt;
			self[self.n] = item&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	join = function (self, sep)&lt;br /&gt;
		return table.concat(self, sep)&lt;br /&gt;
	end,&lt;br /&gt;
	remove = function (self, pos)&lt;br /&gt;
		if self.n &amp;gt; 0 and (pos == nil or (0 &amp;lt; pos and pos &amp;lt;= self.n)) then&lt;br /&gt;
			self.n = self.n - 1&lt;br /&gt;
			return table.remove(self, pos)&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	sort = function (self, comp)&lt;br /&gt;
		table.sort(self, comp)&lt;br /&gt;
	end,&lt;br /&gt;
	new = function ()&lt;br /&gt;
		return setmetatable({n = 0}, Collection)&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
Collection.__index = Collection&lt;br /&gt;
&lt;br /&gt;
local function stripToNil(text)&lt;br /&gt;
	-- If text is a string, return its trimmed content, or nil if empty.&lt;br /&gt;
	-- Otherwise return text (which may, for example, be nil).&lt;br /&gt;
	if type(text) == &#039;string&#039; then&lt;br /&gt;
		text = text:match(&#039;(%S.-)%s*$&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dateFormat(args)&lt;br /&gt;
	-- Return string for wanted date format.&lt;br /&gt;
	local default = mtext[&#039;txt-format-default&#039;]&lt;br /&gt;
	local other = default == &#039;df&#039; and &#039;mf&#039; or &#039;df&#039;&lt;br /&gt;
	local wanted = stripToNil(args[other]) and other or default&lt;br /&gt;
	return wanted == &#039;df&#039; and mtext[&#039;txt-dmy&#039;] or mtext[&#039;txt-mdy&#039;]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function substituteParameters(text, ...)&lt;br /&gt;
	-- Return text after substituting any given parameters for $1, $2, etc.&lt;br /&gt;
	return mw.message.newRawMessage(text, ...):plain()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function yes(parameter)&lt;br /&gt;
	-- Return true if parameter should be interpreted as &amp;quot;yes&amp;quot;.&lt;br /&gt;
	-- Do not want to accept mixed upper/lowercase unless done by current templates.&lt;br /&gt;
	-- Need to accept &amp;quot;on&amp;quot; because &amp;quot;round=on&amp;quot; is wanted.&lt;br /&gt;
	return ({ y = true, yes = true, on = true })[parameter]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function message(msg, ...)&lt;br /&gt;
	-- Return formatted message text for an error or warning.&lt;br /&gt;
	local function getText(msg)&lt;br /&gt;
		return mtext[msg] or error(&#039;Bug: message &amp;quot;&#039; .. tostring(msg) .. &#039;&amp;quot; not defined&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local categories = {&lt;br /&gt;
		error = mtext[&#039;txt-category&#039;],&lt;br /&gt;
		warning = mtext[&#039;txt-category&#039;],&lt;br /&gt;
	}&lt;br /&gt;
	local a, b, k, category&lt;br /&gt;
	local text = substituteParameters(getText(msg), ...)&lt;br /&gt;
	if isWarning[msg] then&lt;br /&gt;
		a = &#039;&amp;lt;sup&amp;gt;[&amp;lt;i&amp;gt;&#039;&lt;br /&gt;
		b = &#039;&amp;lt;/i&amp;gt;]&amp;lt;/sup&amp;gt;&#039;&lt;br /&gt;
		k = &#039;warning&#039;&lt;br /&gt;
	else&lt;br /&gt;
		a = &#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&#039; .. getText(&#039;txt-error&#039;)&lt;br /&gt;
		b = &#039;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
		k = &#039;error&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if mw.title.getCurrentTitle():inNamespaces(0) then&lt;br /&gt;
		-- Category only in namespaces: 0=article.&lt;br /&gt;
		category = &#039;[[&#039; .. categories[k] .. &#039;]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return&lt;br /&gt;
		a ..&lt;br /&gt;
		mw.text.nowiki(text) ..&lt;br /&gt;
		b ..&lt;br /&gt;
		(category or &#039;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatNumber(number)&lt;br /&gt;
	-- Return the given number formatted with commas as group separators,&lt;br /&gt;
	-- given that the number is an integer.&lt;br /&gt;
	local numstr = tostring(number)&lt;br /&gt;
	local length = #numstr&lt;br /&gt;
	local places = Collection.new()&lt;br /&gt;
	local pos = 0&lt;br /&gt;
	repeat&lt;br /&gt;
		places:add(pos)&lt;br /&gt;
		pos = pos + 3&lt;br /&gt;
	until pos &amp;gt;= length&lt;br /&gt;
	places:add(length)&lt;br /&gt;
	local groups = Collection.new()&lt;br /&gt;
	for i = places.n, 2, -1 do&lt;br /&gt;
		local p1 = length - places[i] + 1&lt;br /&gt;
		local p2 = length - places[i - 1]&lt;br /&gt;
		groups:add(numstr:sub(p1, p2))&lt;br /&gt;
	end&lt;br /&gt;
	return groups:join(&#039;,&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function spellNumber(number, options, i)&lt;br /&gt;
	-- Return result of spelling number, or&lt;br /&gt;
	-- return number (as a string) if cannot spell it.&lt;br /&gt;
	-- i == 1 for the first number which can optionally start with an uppercase letter.&lt;br /&gt;
	number = tostring(number)&lt;br /&gt;
	return require(mtext[&#039;txt-module-convertnumeric&#039;]).spell_number(&lt;br /&gt;
		number,&lt;br /&gt;
		nil,                       -- fraction numerator&lt;br /&gt;
		nil,                       -- fraction denominator&lt;br /&gt;
		i == 1 and options.upper,  -- true: &#039;One&#039; instead of &#039;one&#039;&lt;br /&gt;
		not options.us,            -- true: use &#039;and&#039; between tens/ones etc&lt;br /&gt;
		options.adj,               -- true: hyphenated&lt;br /&gt;
		options.ordinal            -- true: &#039;first&#039; instead of &#039;one&#039;&lt;br /&gt;
	) or number&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeExtra(args, flagCurrent)&lt;br /&gt;
	-- Return extra text that will be inserted before the visible result&lt;br /&gt;
	-- but after any sort key.&lt;br /&gt;
	local extra = args.prefix or &#039;&#039;&lt;br /&gt;
	if mw.ustring.len(extra) &amp;gt; 1 then&lt;br /&gt;
		-- Parameter &amp;quot;~&amp;quot; gives &amp;quot;~3&amp;quot; whereas &amp;quot;over&amp;quot; gives &amp;quot;over 3&amp;quot;.&lt;br /&gt;
		if extra:sub(-6, -1) ~= &#039;&amp;amp;nbsp;&#039; then&lt;br /&gt;
			extra = extra .. &#039; &#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if flagCurrent then&lt;br /&gt;
		extra = &#039;&amp;lt;span class=&amp;quot;currentage&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039; .. extra&lt;br /&gt;
	end&lt;br /&gt;
	return extra&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSort(value, sortable)&lt;br /&gt;
	-- Return a sort key if requested.&lt;br /&gt;
	-- Assume value is a valid number which has not overflowed.&lt;br /&gt;
	if sortable == &#039;sortable_table&#039; or sortable == &#039;sortable_on&#039; or sortable == &#039;sortable_debug&#039; then&lt;br /&gt;
		local sortKey&lt;br /&gt;
		if value == 0 then&lt;br /&gt;
			sortKey = &#039;5000000000000000000&#039;&lt;br /&gt;
		else&lt;br /&gt;
			local mag = math.floor(math.log10(math.abs(value)) + 1e-14)&lt;br /&gt;
			if value &amp;gt; 0 then&lt;br /&gt;
				sortKey = 7000 + mag&lt;br /&gt;
			else&lt;br /&gt;
				sortKey = 2999 - mag&lt;br /&gt;
				value = value + 10^(mag+1)&lt;br /&gt;
			end&lt;br /&gt;
			sortKey = string.format(&#039;%d&#039;, sortKey) .. string.format(&#039;%015.0f&#039;, math.floor(value * 10^(14-mag)))&lt;br /&gt;
		end&lt;br /&gt;
		local result&lt;br /&gt;
		if sortable == &#039;sortable_table&#039; then&lt;br /&gt;
			result = &#039;data-sort-value=&amp;quot;_SORTKEY_&amp;quot;|&#039;&lt;br /&gt;
		elseif sortable == &#039;sortable_debug&#039; then&lt;br /&gt;
			result = &#039;&amp;lt;span data-sort-value=&amp;quot;_SORTKEY_♠&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;border:1px solid&amp;quot;&amp;gt;_SORTKEY_♠&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
		else&lt;br /&gt;
			result = &#039;&amp;lt;span data-sort-value=&amp;quot;_SORTKEY_♠&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return (result:gsub(&#039;_SORTKEY_&#039;, sortKey))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translateParameters = {&lt;br /&gt;
	abbr = {&lt;br /&gt;
		off = &#039;abbr_off&#039;,&lt;br /&gt;
		on = &#039;abbr_on&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	disp = {&lt;br /&gt;
		age = &#039;disp_age&#039;,&lt;br /&gt;
		raw = &#039;disp_raw&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	format = {&lt;br /&gt;
		raw = &#039;format_raw&#039;,&lt;br /&gt;
		commas = &#039;format_commas&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	round = {&lt;br /&gt;
		on = &#039;on&#039;,&lt;br /&gt;
		yes = &#039;on&#039;,&lt;br /&gt;
		months = &#039;ym&#039;,&lt;br /&gt;
		weeks = &#039;ymw&#039;,&lt;br /&gt;
		days = &#039;ymd&#039;,&lt;br /&gt;
		hours = &#039;ymdh&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	sep = {&lt;br /&gt;
		comma = &#039;sep_comma&#039;,&lt;br /&gt;
		[&#039;,&#039;] = &#039;sep_comma&#039;,&lt;br /&gt;
		serialcomma = &#039;sep_serialcomma&#039;,&lt;br /&gt;
		space = &#039;sep_space&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	show = {&lt;br /&gt;
		hide = { id = &#039;hide&#039; },&lt;br /&gt;
		y = { &#039;y&#039;, id = &#039;y&#039; },&lt;br /&gt;
		ym = { &#039;y&#039;, &#039;m&#039;, id = &#039;ym&#039; },&lt;br /&gt;
		ymd = { &#039;y&#039;, &#039;m&#039;, &#039;d&#039;, id = &#039;ymd&#039; },&lt;br /&gt;
		ymw = { &#039;y&#039;, &#039;m&#039;, &#039;w&#039;, id = &#039;ymw&#039; },&lt;br /&gt;
		ymwd = { &#039;y&#039;, &#039;m&#039;, &#039;w&#039;, &#039;d&#039;, id = &#039;ymwd&#039; },&lt;br /&gt;
		yd = { &#039;y&#039;, &#039;d&#039;, id = &#039;yd&#039;, keepZero = true },&lt;br /&gt;
		m = { &#039;m&#039;, id = &#039;m&#039; },&lt;br /&gt;
		md = { &#039;m&#039;, &#039;d&#039;, id = &#039;md&#039; },&lt;br /&gt;
		w = { &#039;w&#039;, id = &#039;w&#039; },&lt;br /&gt;
		wd = { &#039;w&#039;, &#039;d&#039;, id = &#039;wd&#039; },&lt;br /&gt;
		h = { &#039;H&#039;, id = &#039;h&#039; },&lt;br /&gt;
		hm = { &#039;H&#039;, &#039;M&#039;, id = &#039;hm&#039; },&lt;br /&gt;
		hms = { &#039;H&#039;, &#039;M&#039;, &#039;S&#039;, id = &#039;hms&#039; },&lt;br /&gt;
		M = { &#039;M&#039;, id = &#039;M&#039; },&lt;br /&gt;
		s = { &#039;S&#039;, id = &#039;s&#039; },&lt;br /&gt;
		d = { &#039;d&#039;, id = &#039;d&#039; },&lt;br /&gt;
		dh = { &#039;d&#039;, &#039;H&#039;, id = &#039;dh&#039; },&lt;br /&gt;
		dhm = { &#039;d&#039;, &#039;H&#039;, &#039;M&#039;, id = &#039;dhm&#039; },&lt;br /&gt;
		dhms = { &#039;d&#039;, &#039;H&#039;, &#039;M&#039;, &#039;S&#039;, id = &#039;dhms&#039; },&lt;br /&gt;
		ymdh = { &#039;y&#039;, &#039;m&#039;, &#039;d&#039;, &#039;H&#039;, id = &#039;ymdh&#039; },&lt;br /&gt;
		ymdhm = { &#039;y&#039;, &#039;m&#039;, &#039;d&#039;, &#039;H&#039;, &#039;M&#039;, id = &#039;ymdhm&#039; },&lt;br /&gt;
		ymwdh = { &#039;y&#039;, &#039;m&#039;, &#039;w&#039;, &#039;d&#039;, &#039;H&#039;, id = &#039;ymwdh&#039; },&lt;br /&gt;
		ymwdhm = { &#039;y&#039;, &#039;m&#039;, &#039;w&#039;, &#039;d&#039;, &#039;H&#039;, &#039;M&#039;, id = &#039;ymwdhm&#039; },&lt;br /&gt;
	},&lt;br /&gt;
	sortable = {&lt;br /&gt;
		off = false,&lt;br /&gt;
		on = &#039;sortable_on&#039;,&lt;br /&gt;
		table = &#039;sortable_table&#039;,&lt;br /&gt;
		debug = &#039;sortable_debug&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local spellOptions = {&lt;br /&gt;
	cardinal = {},&lt;br /&gt;
	Cardinal = { upper = true },&lt;br /&gt;
	cardinal_us = { us = true },&lt;br /&gt;
	Cardinal_us = { us = true, upper = true },&lt;br /&gt;
	ordinal = { ordinal = true },&lt;br /&gt;
	Ordinal = { ordinal = true, upper = true },&lt;br /&gt;
	ordinal_us = { ordinal = true, us = true },&lt;br /&gt;
	Ordinal_us = { ordinal = true, us = true, upper = true },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function dateExtract(frame)&lt;br /&gt;
	-- Return part of a date after performing an optional operation.&lt;br /&gt;
	local Date = getExports(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local parms = {}&lt;br /&gt;
	for i, v in ipairs(args) do&lt;br /&gt;
		parms[i] = v&lt;br /&gt;
	end&lt;br /&gt;
	if yes(args.fix) then&lt;br /&gt;
		table.insert(parms, &#039;fix&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if yes(args.partial) then&lt;br /&gt;
		table.insert(parms, &#039;partial&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local show = stripToNil(args.show) or &#039;dmy&#039;&lt;br /&gt;
	local date = Date(unpack(parms))&lt;br /&gt;
	if not date then&lt;br /&gt;
		if show == &#039;format&#039; then&lt;br /&gt;
			return &#039;error&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return message(&#039;mt-need-valid-date&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local add = stripToNil(args.add)&lt;br /&gt;
	if add then&lt;br /&gt;
		for item in add:gmatch(&#039;%S+&#039;) do&lt;br /&gt;
			date = date + item&lt;br /&gt;
			if not date then&lt;br /&gt;
				return message(&#039;mt-cannot-add&#039;, item)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local sortKey, result&lt;br /&gt;
	local sortable = translateParameters.sortable[args.sortable]&lt;br /&gt;
	if sortable then&lt;br /&gt;
		local value = (date.partial and date.partial.first or date).jdz&lt;br /&gt;
		sortKey = makeSort(value, sortable)&lt;br /&gt;
	end&lt;br /&gt;
	if show ~= &#039;hide&#039; then&lt;br /&gt;
		result = date[show]&lt;br /&gt;
		if result == nil then&lt;br /&gt;
			result = from_en(date:text(show))&lt;br /&gt;
		elseif type(result) == &#039;boolean&#039; then&lt;br /&gt;
			result = result and &#039;1&#039; or &#039;0&#039;&lt;br /&gt;
		else&lt;br /&gt;
			result = from_en(tostring(result))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return (sortKey or &#039;&#039;) .. makeExtra(args) .. (result or &#039;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rangeJoin(range)&lt;br /&gt;
	-- Return text to be used between a range of ages.&lt;br /&gt;
	return range == &#039;dash&#039; and &#039;–&#039; or mtext[&#039;txt-or&#039;]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeText(values, components, names, options, noUpper)&lt;br /&gt;
	-- Return wikitext representing an age or duration.&lt;br /&gt;
	local text = Collection.new()&lt;br /&gt;
	local count = #values&lt;br /&gt;
	local sep = names.sep or &#039;&#039;&lt;br /&gt;
	for i, v in ipairs(values) do&lt;br /&gt;
		-- v is a number (say 4 for 4 years), or a table ({4,5} for 4 or 5 years).&lt;br /&gt;
		local islist = type(v) == &#039;table&#039;&lt;br /&gt;
		if (islist or v &amp;gt; 0) or (text.n == 0 and i == count) or (text.n &amp;gt; 0 and components.keepZero) then&lt;br /&gt;
			local fmt, vstr&lt;br /&gt;
			if options.spell then&lt;br /&gt;
				fmt = function(number)&lt;br /&gt;
					return spellNumber(number, options.spell, noUpper or i)&lt;br /&gt;
				end&lt;br /&gt;
			elseif i == 1 and options.format == &#039;format_commas&#039; then&lt;br /&gt;
				-- Numbers after the first should be small and not need formatting.&lt;br /&gt;
				fmt = formatNumber&lt;br /&gt;
			else&lt;br /&gt;
				fmt = tostring&lt;br /&gt;
			end&lt;br /&gt;
			if islist then&lt;br /&gt;
				vstr = fmt(v[1]) .. rangeJoin(options.range)&lt;br /&gt;
				noUpper = true&lt;br /&gt;
				vstr = vstr .. fmt(v[2])&lt;br /&gt;
			else&lt;br /&gt;
				vstr = fmt(v)&lt;br /&gt;
			end&lt;br /&gt;
			local name = names[components[i]]&lt;br /&gt;
			if name then&lt;br /&gt;
				if type(name) == &#039;table&#039; then&lt;br /&gt;
					name = mw.getContentLanguage():plural(islist and v[2] or v, name)&lt;br /&gt;
				end&lt;br /&gt;
				text:add(vstr .. sep .. name)&lt;br /&gt;
			else&lt;br /&gt;
				text:add(vstr)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local first, last&lt;br /&gt;
	if options.join == &#039;sep_space&#039; then&lt;br /&gt;
		first = &#039; &#039;&lt;br /&gt;
		last = &#039; &#039;&lt;br /&gt;
	elseif options.join == &#039;sep_comma&#039; then&lt;br /&gt;
		first = &#039;, &#039;&lt;br /&gt;
		last = &#039;, &#039;&lt;br /&gt;
	elseif options.join == &#039;sep_serialcomma&#039; and text.n &amp;gt; 2 then&lt;br /&gt;
		first = &#039;, &#039;&lt;br /&gt;
		last = mtext[&#039;txt-comma-and&#039;]&lt;br /&gt;
	else&lt;br /&gt;
		first = &#039;, &#039;&lt;br /&gt;
		last = mtext[&#039;txt-and&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(text) do&lt;br /&gt;
		if i &amp;lt; text.n then&lt;br /&gt;
			text[i] = v .. (i + 1 &amp;lt; text.n and first or last)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local sign = &#039;&#039;&lt;br /&gt;
	if options.isnegative then&lt;br /&gt;
		-- Do not display negative zero.&lt;br /&gt;
		if text.n &amp;gt; 1 or (text.n == 1 and text[1]:sub(1, 1) ~= &#039;0&#039; ) then&lt;br /&gt;
			if options.format == &#039;format_raw&#039; then&lt;br /&gt;
				sign = &#039;-&#039;  -- plain hyphen so result can be used in a calculation&lt;br /&gt;
			else&lt;br /&gt;
				sign = &#039;−&#039;  -- Unicode U+2212 MINUS SIGN&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return&lt;br /&gt;
		(options.sortKey or &#039;&#039;) ..&lt;br /&gt;
		(options.extra or &#039;&#039;) ..&lt;br /&gt;
		sign ..&lt;br /&gt;
		text:join() ..&lt;br /&gt;
		(options.suffix or &#039;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dateDifference(parms)&lt;br /&gt;
	-- Return a formatted date difference using the given parameters&lt;br /&gt;
	-- which have been validated.&lt;br /&gt;
	local names = {&lt;br /&gt;
		-- Each name is:&lt;br /&gt;
		-- * a string if no plural form of the name is used; or&lt;br /&gt;
		-- * a table of strings, one of which is selected using the rules at&lt;br /&gt;
		--   https://translatewiki.net/wiki/Plural/Mediawiki_plural_rules&lt;br /&gt;
		abbr_off = {&lt;br /&gt;
			sep = &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
			y = {&#039;year&#039;, &#039;years&#039;},&lt;br /&gt;
			m = {&#039;month&#039;, &#039;months&#039;},&lt;br /&gt;
			w = {&#039;week&#039;, &#039;weeks&#039;},&lt;br /&gt;
			d = {&#039;day&#039;, &#039;days&#039;},&lt;br /&gt;
			H = {&#039;hour&#039;, &#039;hours&#039;},&lt;br /&gt;
			M = {&#039;minute&#039;, &#039;minutes&#039;},&lt;br /&gt;
			S = {&#039;second&#039;, &#039;seconds&#039;},&lt;br /&gt;
		},&lt;br /&gt;
		abbr_on = {&lt;br /&gt;
			y = &#039;y&#039;,&lt;br /&gt;
			m = &#039;m&#039;,&lt;br /&gt;
			w = &#039;w&#039;,&lt;br /&gt;
			d = &#039;d&#039;,&lt;br /&gt;
			H = &#039;h&#039;,&lt;br /&gt;
			M = &#039;m&#039;,&lt;br /&gt;
			S = &#039;s&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		abbr_infant = {      -- for {{age for infant}}&lt;br /&gt;
			sep = &#039;&amp;amp;nbsp;&#039;,&lt;br /&gt;
			y = {&#039;yr&#039;, &#039;yrs&#039;},&lt;br /&gt;
			m = {&#039;mo&#039;, &#039;mos&#039;},&lt;br /&gt;
			w = {&#039;wk&#039;, &#039;wks&#039;},&lt;br /&gt;
			d = {&#039;day&#039;, &#039;days&#039;},&lt;br /&gt;
			H = {&#039;hr&#039;, &#039;hrs&#039;},&lt;br /&gt;
			M = {&#039;min&#039;, &#039;mins&#039;},&lt;br /&gt;
			S = {&#039;sec&#039;, &#039;secs&#039;},&lt;br /&gt;
		},&lt;br /&gt;
		abbr_raw = {},&lt;br /&gt;
	}&lt;br /&gt;
	local diff = parms.diff  -- must be a valid date difference&lt;br /&gt;
	local show = parms.show  -- may be nil; default is set below&lt;br /&gt;
	local abbr = parms.abbr or &#039;abbr_off&#039;&lt;br /&gt;
	local defaultJoin&lt;br /&gt;
	if abbr ~= &#039;abbr_off&#039; then&lt;br /&gt;
		defaultJoin = &#039;sep_space&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if not show then&lt;br /&gt;
		show = &#039;ymd&#039;&lt;br /&gt;
		if parms.disp == &#039;disp_age&#039; then&lt;br /&gt;
			if diff.years &amp;lt; 3 then&lt;br /&gt;
				defaultJoin = &#039;sep_space&#039;&lt;br /&gt;
				if diff.years &amp;gt;= 1 then&lt;br /&gt;
					show = &#039;ym&#039;&lt;br /&gt;
				else&lt;br /&gt;
					show = &#039;md&#039;&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				show = &#039;y&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if type(show) ~= &#039;table&#039; then&lt;br /&gt;
		show = translateParameters.show[show]&lt;br /&gt;
	end&lt;br /&gt;
	if parms.disp == &#039;disp_raw&#039; then&lt;br /&gt;
		defaultJoin = &#039;sep_space&#039;&lt;br /&gt;
		abbr = &#039;abbr_raw&#039;&lt;br /&gt;
	elseif parms.wantSc then&lt;br /&gt;
		defaultJoin = &#039;sep_serialcomma&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local diffOptions = {&lt;br /&gt;
		round = parms.round,&lt;br /&gt;
		duration = parms.wantDuration,&lt;br /&gt;
		range = parms.range and true or nil,&lt;br /&gt;
	}&lt;br /&gt;
	local sortKey&lt;br /&gt;
	if parms.sortable then&lt;br /&gt;
		local value = diff.age_days + (parms.wantDuration and 1 or 0)  -- days and fraction of a day&lt;br /&gt;
		if diff.isnegative then&lt;br /&gt;
			value = -value&lt;br /&gt;
		end&lt;br /&gt;
		sortKey = makeSort(value, parms.sortable)&lt;br /&gt;
	end&lt;br /&gt;
	local textOptions = {&lt;br /&gt;
		extra = parms.extra,&lt;br /&gt;
		format = parms.format,&lt;br /&gt;
		join = parms.sep or defaultJoin,&lt;br /&gt;
		isnegative = diff.isnegative,&lt;br /&gt;
		range = parms.range,&lt;br /&gt;
		sortKey = sortKey,&lt;br /&gt;
		spell = parms.spell,&lt;br /&gt;
		suffix = parms.suffix,  -- not currently used&lt;br /&gt;
	}&lt;br /&gt;
	if show.id == &#039;hide&#039; then&lt;br /&gt;
		return sortKey or &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local values = { diff:age(show.id, diffOptions) }&lt;br /&gt;
	if values[1] then&lt;br /&gt;
		return makeText(values, show, names[abbr], textOptions)&lt;br /&gt;
	end&lt;br /&gt;
	if diff.partial then&lt;br /&gt;
		-- Handle a more complex range such as&lt;br /&gt;
		-- {{age_yd|20 Dec 2001|2003|range=yes}} → 1 year, 12 days or 2 years, 11 days&lt;br /&gt;
		local opt = {&lt;br /&gt;
			format = textOptions.format,&lt;br /&gt;
			join = textOptions.join,&lt;br /&gt;
			isnegative = textOptions.isnegative,&lt;br /&gt;
			spell = textOptions.spell,&lt;br /&gt;
		}&lt;br /&gt;
		return&lt;br /&gt;
			(textOptions.sortKey or &#039;&#039;) ..&lt;br /&gt;
			makeText({ diff.partial.mindiff:age(show.id, diffOptions) }, show, names[abbr], opt) ..&lt;br /&gt;
			rangeJoin(textOptions.range) ..&lt;br /&gt;
			makeText({ diff.partial.maxdiff:age(show.id, diffOptions) }, show, names[abbr], opt, true) ..&lt;br /&gt;
			(textOptions.suffix or &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return message(&#039;mt-bad-show&#039;, show.id)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getDates(frame, getopt)&lt;br /&gt;
	-- Parse template parameters and return one of:&lt;br /&gt;
	-- * date         (a date table, if single)&lt;br /&gt;
	-- * date1, date2 (two date tables, if not single)&lt;br /&gt;
	-- * text         (a string error message)&lt;br /&gt;
	-- A missing date is optionally replaced with the current date.&lt;br /&gt;
	-- If wantMixture is true, a missing date component is replaced&lt;br /&gt;
	-- from the current date, so can get a bizarre mixture of&lt;br /&gt;
	-- specified/current y/m/d as has been done by some &amp;quot;age&amp;quot; templates.&lt;br /&gt;
	-- Some results may be placed in table getopt.&lt;br /&gt;
	local Date, currentDate = getExports(frame)&lt;br /&gt;
	getopt = getopt or {}&lt;br /&gt;
	local function flagCurrent(text)&lt;br /&gt;
		-- This allows the calling template to detect if the current date has been used,&lt;br /&gt;
		-- that is, whether both dates have been entered in a template expecting two.&lt;br /&gt;
		-- For example, an infobox may want the age when an event occurred, not the current age.&lt;br /&gt;
		-- Don&#039;t bother detecting if wantMixture is used because not needed and it is a poor option.&lt;br /&gt;
		if not text then&lt;br /&gt;
			if getopt.noMissing then&lt;br /&gt;
				return nil  -- this gives a nil date which gives an error&lt;br /&gt;
			end&lt;br /&gt;
			text = &#039;currentdate&#039;&lt;br /&gt;
			if getopt.flag == &#039;usesCurrent&#039; then&lt;br /&gt;
				getopt.usesCurrent = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local fields = {}&lt;br /&gt;
	local isNamed = args.year or args.year1 or args.year2 or&lt;br /&gt;
		args.month or args.month1 or args.month2 or&lt;br /&gt;
		args.day or args.day1 or args.day2&lt;br /&gt;
	if isNamed then&lt;br /&gt;
		fields[1] = args.year1 or args.year&lt;br /&gt;
		fields[2] = args.month1 or args.month&lt;br /&gt;
		fields[3] = args.day1 or args.day&lt;br /&gt;
		fields[4] = args.year2&lt;br /&gt;
		fields[5] = args.month2&lt;br /&gt;
		fields[6] = args.day2&lt;br /&gt;
	else&lt;br /&gt;
		for i = 1, 6 do&lt;br /&gt;
			fields[i] = args[i]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local imax = 0&lt;br /&gt;
	for i = 1, 6 do&lt;br /&gt;
		fields[i] = stripToNil(fields[i])&lt;br /&gt;
		if fields[i] then&lt;br /&gt;
			imax = i&lt;br /&gt;
		end&lt;br /&gt;
		if getopt.omitZero and i % 3 ~= 1 then  -- omit zero months and days as unknown values but keep year 0 which is 1 BCE&lt;br /&gt;
			if isZero(fields[i]) then&lt;br /&gt;
				fields[i] = nil&lt;br /&gt;
				getopt.partial = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local fix = getopt.fix and &#039;fix&#039; or &#039;&#039;&lt;br /&gt;
	local partialText = getopt.partial and &#039;partial&#039; or &#039;&#039;&lt;br /&gt;
	local dates = {}&lt;br /&gt;
	if isNamed or imax &amp;gt;= 3 then&lt;br /&gt;
		local nrDates = getopt.single and 1 or 2&lt;br /&gt;
		if getopt.wantMixture then&lt;br /&gt;
			-- Cannot be partial since empty fields are set from current.&lt;br /&gt;
			local components = { &#039;year&#039;, &#039;month&#039;, &#039;day&#039; }&lt;br /&gt;
			for i = 1, nrDates * 3 do&lt;br /&gt;
				fields[i] = fields[i] or currentDate[components[i &amp;gt; 3 and i - 3 or i]]&lt;br /&gt;
			end&lt;br /&gt;
			for i = 1, nrDates do&lt;br /&gt;
				local index = i == 1 and 1 or 4&lt;br /&gt;
				local y, m, d = fields[index], fields[index+1], fields[index+2]&lt;br /&gt;
				if (m == 2 or m == &#039;2&#039;) and (d == 29 or d == &#039;29&#039;) then&lt;br /&gt;
					-- Workaround error with following which attempt to use invalid date 2001-02-29.&lt;br /&gt;
					-- {{age_ymwd|year1=2001|year2=2004|month2=2|day2=29}}&lt;br /&gt;
					-- {{age_ymwd|year1=2001|month1=2|year2=2004|month2=1|day2=29}}&lt;br /&gt;
					-- TODO Get rid of wantMixture because even this ugly code does not handle&lt;br /&gt;
					-- &#039;Feb&#039; or &#039;February&#039; or &#039;feb&#039; or &#039;february&#039;.&lt;br /&gt;
					if not ((y % 4 == 0 and y % 100 ~= 0) or y % 400 == 0) then&lt;br /&gt;
						d = 28&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				dates[i] = Date(y, m, d)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- If partial dates are allowed, accept&lt;br /&gt;
			--     year only, or&lt;br /&gt;
			--     year and month only&lt;br /&gt;
			-- Do not accept year and day without a month because that makes no sense&lt;br /&gt;
			-- (and because, for example, Date(&#039;partial&#039;, 2001, nil, 12) sets day = nil, not 12).&lt;br /&gt;
			for i = 1, nrDates do&lt;br /&gt;
				local index = i == 1 and 1 or 4&lt;br /&gt;
				local y, m, d = fields[index], fields[index+1], fields[index+2]&lt;br /&gt;
				if (getopt.partial and y and (m or not d)) or (y and m and d) then&lt;br /&gt;
					dates[i] = Date(fix, partialText, y, m, d)&lt;br /&gt;
				elseif not y and not m and not d then&lt;br /&gt;
					dates[i] = Date(flagCurrent())&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		getopt.textdates = true  -- have parsed each date from a single text field&lt;br /&gt;
		dates[1] = Date(fix, partialText, flagCurrent(fields[1]))&lt;br /&gt;
		if not getopt.single then&lt;br /&gt;
			dates[2] = Date(fix, partialText, flagCurrent(fields[2]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not dates[1] then&lt;br /&gt;
		return message(getopt.missing1 or &#039;mt-need-valid-ymd&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if getopt.single then&lt;br /&gt;
		return dates[1]&lt;br /&gt;
	end&lt;br /&gt;
	if not dates[2] then&lt;br /&gt;
		return message(getopt.missing2 or &#039;mt-need-valid-ymd2&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return dates[1], dates[2]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ageGeneric(frame)&lt;br /&gt;
	-- Return the result required by the specified template.&lt;br /&gt;
	-- Can use sortable=x where x = on/table/off/debug in any supported template.&lt;br /&gt;
	-- Some templates default to sortable=on but can be overridden.&lt;br /&gt;
	local name = frame.args.template&lt;br /&gt;
	if not name then&lt;br /&gt;
		return message(&#039;mt-template-x&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local specs = {&lt;br /&gt;
		age_days = {                -- {{age in days}}&lt;br /&gt;
			show = &#039;d&#039;,&lt;br /&gt;
			disp = &#039;disp_raw&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_days_nts = {            -- {{age in days nts}}&lt;br /&gt;
			show = &#039;d&#039;,&lt;br /&gt;
			disp = &#039;disp_raw&#039;,&lt;br /&gt;
			format = &#039;format_commas&#039;,&lt;br /&gt;
			sortable = &#039;on&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		duration_days = {           -- {{duration in days}}&lt;br /&gt;
			show = &#039;d&#039;,&lt;br /&gt;
			disp = &#039;disp_raw&#039;,&lt;br /&gt;
			duration = true,&lt;br /&gt;
		},&lt;br /&gt;
		duration_days_nts = {       -- {{duration in days nts}}&lt;br /&gt;
			show = &#039;d&#039;,&lt;br /&gt;
			disp = &#039;disp_raw&#039;,&lt;br /&gt;
			format = &#039;format_commas&#039;,&lt;br /&gt;
			sortable = &#039;on&#039;,&lt;br /&gt;
			duration = true,&lt;br /&gt;
		},&lt;br /&gt;
		age_full_years = {          -- {{age}}&lt;br /&gt;
			show = &#039;y&#039;,&lt;br /&gt;
			abbr = &#039;abbr_raw&#039;,&lt;br /&gt;
			flag = &#039;usesCurrent&#039;,&lt;br /&gt;
			omitZero = true,&lt;br /&gt;
			range = &#039;dash&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_full_years_nts = {      -- {{age nts}}&lt;br /&gt;
			show = &#039;y&#039;,&lt;br /&gt;
			abbr = &#039;abbr_raw&#039;,&lt;br /&gt;
			format = &#039;format_commas&#039;,&lt;br /&gt;
			sortable = &#039;on&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_in_years = {            -- {{age in years}}&lt;br /&gt;
			show = &#039;y&#039;,&lt;br /&gt;
			abbr = &#039;abbr_raw&#039;,&lt;br /&gt;
			negative = &#039;error&#039;,&lt;br /&gt;
			range = &#039;dash&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_in_years_nts = {        -- {{age in years nts}}&lt;br /&gt;
			show = &#039;y&#039;,&lt;br /&gt;
			abbr = &#039;abbr_raw&#039;,&lt;br /&gt;
			negative = &#039;error&#039;,&lt;br /&gt;
			range = &#039;dash&#039;,&lt;br /&gt;
			format = &#039;format_commas&#039;,&lt;br /&gt;
			sortable = &#039;on&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_infant = {              -- {{age for infant}}&lt;br /&gt;
			-- Do not set show because special processing is done later.&lt;br /&gt;
			abbr = yes(args.abbr) and &#039;abbr_infant&#039; or &#039;abbr_off&#039;,&lt;br /&gt;
			disp = &#039;disp_age&#039;,&lt;br /&gt;
			sep = &#039;sep_space&#039;,&lt;br /&gt;
			sortable = &#039;on&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_m = {                   -- {{age in months}}&lt;br /&gt;
			show = &#039;m&#039;,&lt;br /&gt;
			disp = &#039;disp_raw&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_w = {                   -- {{age in weeks}}&lt;br /&gt;
			show = &#039;w&#039;,&lt;br /&gt;
			disp = &#039;disp_raw&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_wd = {                  -- {{age in weeks and days}}&lt;br /&gt;
			show = &#039;wd&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_yd = {                  -- {{age in years and days}}&lt;br /&gt;
			show = &#039;yd&#039;,&lt;br /&gt;
			format = &#039;format_commas&#039;,&lt;br /&gt;
			sep = args.sep ~= &#039;and&#039; and &#039;sep_comma&#039; or nil,&lt;br /&gt;
		},&lt;br /&gt;
		age_yd_nts = {              -- {{age in years and days nts}}&lt;br /&gt;
			show = &#039;yd&#039;,&lt;br /&gt;
			format = &#039;format_commas&#039;,&lt;br /&gt;
			sep = args.sep ~= &#039;and&#039; and &#039;sep_comma&#039; or nil,&lt;br /&gt;
			sortable = &#039;on&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_ym = {                  -- {{age in years and months}}&lt;br /&gt;
			show = &#039;ym&#039;,&lt;br /&gt;
			sep = &#039;sep_comma&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		age_ymd = {                 -- {{age in years, months and days}}&lt;br /&gt;
			show = &#039;ymd&#039;,&lt;br /&gt;
			range = true,&lt;br /&gt;
		},&lt;br /&gt;
		age_ymwd = {                -- {{age in years, months, weeks and days}}&lt;br /&gt;
			show = &#039;ymwd&#039;,&lt;br /&gt;
			wantMixture = true,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	local spec = specs[name]&lt;br /&gt;
	if not spec then&lt;br /&gt;
		return message(&#039;mt-template-bad-name&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if name == &#039;age_days&#039; then&lt;br /&gt;
		local su = stripToNil(args[&#039;show unit&#039;])&lt;br /&gt;
		if su then&lt;br /&gt;
			if su == &#039;abbr&#039; or su == &#039;full&#039; then&lt;br /&gt;
				spec.disp = nil&lt;br /&gt;
				spec.abbr = su == &#039;abbr&#039; and &#039;abbr_on&#039; or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local partial, autofill&lt;br /&gt;
	local range = stripToNil(args.range) or spec.range&lt;br /&gt;
	if range then&lt;br /&gt;
		-- Suppose partial dates are used and age could be 11 or 12 years.&lt;br /&gt;
		-- &amp;quot;|range=&amp;quot; (empty value) has no effect (spec is used).&lt;br /&gt;
		-- &amp;quot;|range=yes&amp;quot; or spec.range == true sets range = true (gives &amp;quot;11 or 12&amp;quot;)&lt;br /&gt;
		-- &amp;quot;|range=dash&amp;quot; or spec.range == &#039;dash&#039; sets range = &#039;dash&#039; (gives &amp;quot;11–12&amp;quot;).&lt;br /&gt;
		-- &amp;quot;|range=no&amp;quot; or spec.range == &#039;no&#039; sets range = nil and fills each date in the diff (gives &amp;quot;12&amp;quot;).&lt;br /&gt;
		--     (&amp;quot;on&amp;quot; is equivalent to &amp;quot;yes&amp;quot;, and &amp;quot;off&amp;quot; is equivalent to &amp;quot;no&amp;quot;).&lt;br /&gt;
		-- &amp;quot;|range=OTHER&amp;quot; sets range = nil and rejects partial dates.&lt;br /&gt;
		range = ({ dash = &#039;dash&#039;, off = &#039;no&#039;, no = &#039;no&#039;, [true] = true })[range] or yes(range)&lt;br /&gt;
		if range then&lt;br /&gt;
			partial = true  -- accept partial dates with a possible age range for the result&lt;br /&gt;
			if range == &#039;no&#039; then&lt;br /&gt;
				autofill = true  -- missing month/day in first or second date are filled from other date or 1&lt;br /&gt;
				range = nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local getopt = {&lt;br /&gt;
		fix = yes(args.fix),&lt;br /&gt;
		flag = stripToNil(args.flag) or spec.flag,&lt;br /&gt;
		omitZero = spec.omitZero,&lt;br /&gt;
		partial = partial,&lt;br /&gt;
		wantMixture = spec.wantMixture,&lt;br /&gt;
	}&lt;br /&gt;
	local date1, date2 = getDates(frame, getopt)&lt;br /&gt;
	if type(date1) == &#039;string&#039; then&lt;br /&gt;
		return date1&lt;br /&gt;
	end&lt;br /&gt;
	local format = stripToNil(args.format)&lt;br /&gt;
	local spell = spellOptions[format]&lt;br /&gt;
	if format then&lt;br /&gt;
		format = &#039;format_&#039; .. format&lt;br /&gt;
	elseif name == &#039;age_days&#039; and getopt.textdates then&lt;br /&gt;
		format = &#039;format_commas&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local parms = {&lt;br /&gt;
		diff = date2:subtract(date1, { fill = autofill }),&lt;br /&gt;
		wantDuration = spec.duration or yes(args.duration),&lt;br /&gt;
		range = range,&lt;br /&gt;
		wantSc = yes(args.sc),&lt;br /&gt;
		show = args.show == &#039;hide&#039; and &#039;hide&#039; or spec.show,&lt;br /&gt;
		abbr = spec.abbr,&lt;br /&gt;
		disp = spec.disp,&lt;br /&gt;
		extra = makeExtra(args, getopt.usesCurrent and format ~= &#039;format_raw&#039;),&lt;br /&gt;
		format = format or spec.format,&lt;br /&gt;
		round = yes(args.round),&lt;br /&gt;
		sep = spec.sep,&lt;br /&gt;
		sortable = translateParameters.sortable[args.sortable or spec.sortable],&lt;br /&gt;
		spell = spell,&lt;br /&gt;
	}&lt;br /&gt;
	if (spec.negative or frame.args.negative) == &#039;error&#039; and parms.diff.isnegative then&lt;br /&gt;
		return message(&#039;mt-date-wrong-order&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return from_en(dateDifference(parms))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isFake(args)&lt;br /&gt;
	-- Some templates have TemplateData with an auto value like &amp;quot;{{Birth date and age|YYYY|MM|DD}}&amp;quot;.&lt;br /&gt;
	-- Return true if that appears to be the case so the caller can output nothing rather than an error.&lt;br /&gt;
	return args[1] == &#039;YYYY&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function bda(frame)&lt;br /&gt;
	-- Implement [[Template:Birth date and age]].&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	if isFake(args) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local options = {&lt;br /&gt;
		missing1 = &#039;mt-need-valid-bd&#039;,&lt;br /&gt;
		noMissing = true,&lt;br /&gt;
		single = true,&lt;br /&gt;
	}&lt;br /&gt;
	local date = getDates(frame, options)&lt;br /&gt;
	if type(date) == &#039;string&#039; then&lt;br /&gt;
		return date  -- error text&lt;br /&gt;
	end&lt;br /&gt;
	local Date = getExports(frame)&lt;br /&gt;
	local diff = Date(&#039;currentdate&#039;) - date&lt;br /&gt;
	if diff.isnegative or diff.years &amp;gt; 150 then&lt;br /&gt;
		return message(&#039;mt-invalid-bd-age&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local disp = mtext[&#039;txt-bda-disp&#039;]&lt;br /&gt;
	local show = &#039;y&#039;&lt;br /&gt;
	if diff.years &amp;lt; 2 then&lt;br /&gt;
		disp = &#039;disp_age&#039;&lt;br /&gt;
		if diff.years == 0 and diff.months == 0 then&lt;br /&gt;
			show = &#039;d&#039;&lt;br /&gt;
		else&lt;br /&gt;
			show = &#039;m&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local result = substituteParameters(&lt;br /&gt;
		mtext[&#039;txt-bda&#039;],&lt;br /&gt;
		date:text(&#039;%-Y-%m-%d&#039;),&lt;br /&gt;
		from_en(date:text(dateFormat(args))),&lt;br /&gt;
		from_en(dateDifference({&lt;br /&gt;
			diff = diff,&lt;br /&gt;
			show = show,&lt;br /&gt;
			abbr = &#039;abbr_off&#039;,&lt;br /&gt;
			disp = disp,&lt;br /&gt;
			sep = &#039;sep_space&#039;,&lt;br /&gt;
		}))&lt;br /&gt;
	)&lt;br /&gt;
	local warnings = tonumber(frame.args.warnings)&lt;br /&gt;
	if warnings and warnings &amp;gt; 0 then&lt;br /&gt;
		local good = {&lt;br /&gt;
			df = true,&lt;br /&gt;
			mf = true,&lt;br /&gt;
			day = true,&lt;br /&gt;
			day1 = true,&lt;br /&gt;
			month = true,&lt;br /&gt;
			month1 = true,&lt;br /&gt;
			year = true,&lt;br /&gt;
			year1 = true,&lt;br /&gt;
		}&lt;br /&gt;
		local invalid&lt;br /&gt;
		local imax = options.textdates and 1 or 3&lt;br /&gt;
		for k, _ in pairs(args) do&lt;br /&gt;
			if type(k) == &#039;number&#039; then&lt;br /&gt;
				if k &amp;gt; imax then&lt;br /&gt;
					invalid = tostring(k)&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if not good[k] then&lt;br /&gt;
					invalid = k&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if invalid then&lt;br /&gt;
			result = result .. message(&#039;mt-bad-param1&#039;, invalid)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dda(frame)&lt;br /&gt;
	-- Implement [[Template:Death date and age]].&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	if isFake(args) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local options = {&lt;br /&gt;
		missing1 = &#039;mt-need-valid-dd&#039;,&lt;br /&gt;
		missing2 = &#039;mt-need-valid-bd2&#039;,&lt;br /&gt;
		noMissing = true,&lt;br /&gt;
		partial = true,&lt;br /&gt;
	}&lt;br /&gt;
	local date1, date2 = getDates(frame, options)&lt;br /&gt;
	if type(date1) == &#039;string&#039; then&lt;br /&gt;
		return date1&lt;br /&gt;
	end&lt;br /&gt;
	local diff = date1 - date2&lt;br /&gt;
	if diff.isnegative then&lt;br /&gt;
		return message(&#039;mt-dd-wrong-order&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local Date = getExports(frame)&lt;br /&gt;
	local today = Date(&#039;currentdate&#039;) + 1  -- one day in future allows for timezones&lt;br /&gt;
	if date1 &amp;gt; today then&lt;br /&gt;
		return message(&#039;mt-dd-future&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local years&lt;br /&gt;
	if diff.partial then&lt;br /&gt;
		years = diff.partial.years&lt;br /&gt;
		years = type(years) == &#039;table&#039; and years[2] or years&lt;br /&gt;
	else&lt;br /&gt;
		years = diff.years&lt;br /&gt;
	end&lt;br /&gt;
	if years &amp;gt; 150 then&lt;br /&gt;
		return message(&#039;mt-invalid-dates-age&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local fmt_date, fmt_ymd&lt;br /&gt;
	if date1.day then  -- y, m, d known&lt;br /&gt;
		fmt_date = dateFormat(args)&lt;br /&gt;
		fmt_ymd = &#039;%-Y-%m-%d&#039;&lt;br /&gt;
	elseif date1.month then  -- y, m known; d unknown&lt;br /&gt;
		fmt_date = &#039;%B %-Y&#039;&lt;br /&gt;
		fmt_ymd = &#039;%-Y-%m-00&#039;&lt;br /&gt;
	else  -- y known; m, d unknown&lt;br /&gt;
		fmt_date = &#039;%-Y&#039;&lt;br /&gt;
		fmt_ymd = &#039;%-Y-00-00&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local sortKey&lt;br /&gt;
	local sortable = translateParameters.sortable[args.sortable]&lt;br /&gt;
	if sortable then&lt;br /&gt;
		local value = (date1.partial and date1.partial.first or date1).jdz&lt;br /&gt;
		sortKey = makeSort(value, sortable)&lt;br /&gt;
	end&lt;br /&gt;
	local result = (sortKey or &#039;&#039;) .. substituteParameters(&lt;br /&gt;
		mtext[&#039;txt-dda&#039;],&lt;br /&gt;
		date1:text(fmt_ymd),&lt;br /&gt;
		from_en(date1:text(fmt_date)),&lt;br /&gt;
		from_en(dateDifference({&lt;br /&gt;
			diff = diff,&lt;br /&gt;
			show = &#039;y&#039;,&lt;br /&gt;
			abbr = &#039;abbr_off&#039;,&lt;br /&gt;
			disp = mtext[&#039;txt-dda-disp&#039;],&lt;br /&gt;
			range = &#039;dash&#039;,&lt;br /&gt;
			sep = &#039;sep_space&#039;,&lt;br /&gt;
		}))&lt;br /&gt;
	)&lt;br /&gt;
	local warnings = tonumber(frame.args.warnings)&lt;br /&gt;
	if warnings and warnings &amp;gt; 0 then&lt;br /&gt;
		local good = {&lt;br /&gt;
			df = true,&lt;br /&gt;
			mf = true,&lt;br /&gt;
		}&lt;br /&gt;
		local invalid&lt;br /&gt;
		local imax = options.textdates and 2 or 6&lt;br /&gt;
		for k, _ in pairs(args) do&lt;br /&gt;
			if type(k) == &#039;number&#039; then&lt;br /&gt;
				if k &amp;gt; imax then&lt;br /&gt;
					invalid = tostring(k)&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if not good[k] then&lt;br /&gt;
					invalid = k&lt;br /&gt;
					break&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if invalid then&lt;br /&gt;
			result = result .. message(&#039;mt-bad-param1&#039;, invalid)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dateToGsd(frame)&lt;br /&gt;
	-- Implement [[Template:Gregorian serial date]].&lt;br /&gt;
	-- Return Gregorian serial date of the given date, or the current date.&lt;br /&gt;
	-- The returned value is negative for dates before 1 January 1 AD&lt;br /&gt;
	-- despite the fact that GSD is not defined for such dates.&lt;br /&gt;
	local date = getDates(frame, { wantMixture=true, single=true })&lt;br /&gt;
	if type(date) == &#039;string&#039; then&lt;br /&gt;
		return date&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(date.gsd)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function jdToDate(frame)&lt;br /&gt;
	-- Return formatted date from a Julian date.&lt;br /&gt;
	-- The result includes a time if the input includes a fraction.&lt;br /&gt;
	-- The word &#039;Julian&#039; is accepted for the Julian calendar.&lt;br /&gt;
	local Date = getExports(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local date = Date(&#039;juliandate&#039;, args[1], args[2])&lt;br /&gt;
	if date then&lt;br /&gt;
		return from_en(date:text())&lt;br /&gt;
	end&lt;br /&gt;
	return message(&#039;mt-need-jdn&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dateToJd(frame)&lt;br /&gt;
	-- Return Julian date (a number) from a date which may include a time,&lt;br /&gt;
	-- or the current date (&#039;currentdate&#039;) or current date and time (&#039;currentdatetime&#039;).&lt;br /&gt;
	-- The word &#039;Julian&#039; is accepted for the Julian calendar.&lt;br /&gt;
	local Date = getExports(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local date = Date(args[1], args[2], args[3], args[4], args[5], args[6], args[7])&lt;br /&gt;
	if date then&lt;br /&gt;
		return tostring(date.jd)&lt;br /&gt;
	end&lt;br /&gt;
	return message(&#039;mt-need-valid-ymd-current&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function timeInterval(frame)&lt;br /&gt;
	-- Implement [[Template:Time interval]].&lt;br /&gt;
	-- There are two positional arguments: date1, date2.&lt;br /&gt;
	-- The default for each is the current date and time.&lt;br /&gt;
	-- Result is date2 - date1 formatted.&lt;br /&gt;
	local Date = getExports(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local parms = {&lt;br /&gt;
		extra = makeExtra(args),&lt;br /&gt;
		wantDuration = yes(args.duration),&lt;br /&gt;
		range = yes(args.range) or (args.range == &#039;dash&#039; and &#039;dash&#039; or nil),&lt;br /&gt;
		wantSc = yes(args.sc),&lt;br /&gt;
	}&lt;br /&gt;
	local fix = yes(args.fix) and &#039;fix&#039; or &#039;&#039;&lt;br /&gt;
	local date1 = Date(fix, &#039;partial&#039;, stripToNil(args[1]) or &#039;currentdatetime&#039;)&lt;br /&gt;
	if not date1 then&lt;br /&gt;
		return message(&#039;mt-invalid-start&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	local date2 = Date(fix, &#039;partial&#039;, stripToNil(args[2]) or &#039;currentdatetime&#039;)&lt;br /&gt;
	if not date2 then&lt;br /&gt;
		return message(&#039;mt-invalid-end&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	parms.diff = date2 - date1&lt;br /&gt;
	for argname, translate in pairs(translateParameters) do&lt;br /&gt;
		local parm = stripToNil(args[argname])&lt;br /&gt;
		if parm then&lt;br /&gt;
			parm = translate[parm]&lt;br /&gt;
			if parm == nil then  -- test for nil because false is a valid setting&lt;br /&gt;
				return message(&#039;mt-bad-param2&#039;, argname, args[argname])&lt;br /&gt;
			end&lt;br /&gt;
			parms[argname] = parm&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if parms.round then&lt;br /&gt;
		local round = parms.round&lt;br /&gt;
		local show = parms.show&lt;br /&gt;
		if round ~= &#039;on&#039; then&lt;br /&gt;
			if show then&lt;br /&gt;
				if show.id ~= round then&lt;br /&gt;
					return message(&#039;mt-conflicting-show&#039;, args.show, args.round)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				parms.show = translateParameters.show[round]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		parms.round = true&lt;br /&gt;
	end&lt;br /&gt;
	return from_en(dateDifference(parms))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	age_generic = ageGeneric,           -- can emulate several age templates&lt;br /&gt;
	birth_date_and_age = bda,           -- Template:Birth_date_and_age&lt;br /&gt;
	death_date_and_age = dda,           -- Template:Death_date_and_age&lt;br /&gt;
	gsd = dateToGsd,                    -- Template:Gregorian_serial_date&lt;br /&gt;
	extract = dateExtract,              -- Template:Extract&lt;br /&gt;
	jd_to_date = jdToDate,              -- Template:?&lt;br /&gt;
	JULIANDAY = dateToJd,               -- Template:JULIANDAY&lt;br /&gt;
	time_interval = timeInterval,       -- Template:Time_interval&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Hasan_Piker&amp;diff=939</id>
		<title>Hasan Piker</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Hasan_Piker&amp;diff=939"/>
		<updated>2024-02-17T23:47:36Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Hasan Doğan Piker&#039;&#039;&#039; (born July 25, 1991) is an American political commentator, streamer, and YouTuber. He is best known for his political commentary on the progressive news network [[The Young Turks]] and for his [[Twitch (service)|Twitch]] streaming channel, where he discusses pop politics, news headlines, and popular culture. Piker has gained a large following for his outspoken views on progressive politics and social issues.&lt;br /&gt;
{{Infobox Person&lt;br /&gt;
| person_name         = Hasan Piker&lt;br /&gt;
| image               = Hasan_Piker_2018_(cropped).jpg&lt;br /&gt;
| caption             = Make the rich pay.&lt;br /&gt;
| person_status       = HasanAbi&lt;br /&gt;
| political_alignment = Progressive Left/Socialist &lt;br /&gt;
| person_age          = 32&lt;br /&gt;
| qualifications      = Political Science/Communications Degree &lt;br /&gt;
| occupation          = Twitch Streamer/Political Commentator &lt;br /&gt;
| country             = USA&lt;br /&gt;
| website             = https://ideologie.shop/&lt;br /&gt;
| twitter             = Hasanthehun&lt;br /&gt;
| instagram           = Hasandpiker&lt;br /&gt;
| youtube_url         = https://www.youtube.com/@hasanabi&lt;br /&gt;
| stock               =  [https://manifold.markets/destiny/hasan-stock-permanent Hasan Stock]&lt;br /&gt;
| awards              =  [[File:DestinyAwards.png|35px]] [[Destiny Awards|Antagonist of the Year]] &lt;br /&gt;
}} &lt;br /&gt;
== Early life and education ==&lt;br /&gt;
Hasan Piker was born on July 25, 1991, in [[New Brunswick, New Jersey]]. He spent his early years in Turkey before moving back to the United States for college. Piker attended [[Rutgers University]], where he earned a [[Bachelor of Arts]] degree in political science and communication.&lt;br /&gt;
&lt;br /&gt;
== Career ==&lt;br /&gt;
=== The Young Turks ===&lt;br /&gt;
Piker began his career as an intern at [[The Young Turks]] in 2014. He quickly rose through the ranks, becoming a producer and on-air contributor. Piker gained prominence for his &amp;quot;Bro Tips&amp;quot; show, a dating advice show.&lt;br /&gt;
&lt;br /&gt;
=== Twitch streaming ===&lt;br /&gt;
In 2018, Piker started streaming on [[Twitch (service)|Twitch]], where he discusses pop politics, news headlines, and popular culture. His Twitch channel, &amp;quot;hasanabi,&amp;quot; has amassed a large following, making him one of the most popular political streamers on the platform. Piker&#039;s streams often feature discussions with journalists and content creators.&lt;br /&gt;
&lt;br /&gt;
== On stream appearances with Destiny WIP ==&lt;br /&gt;
&lt;br /&gt;
=== Destiny has a pre-debate discussion with Hasan ===&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=r9iPLU3fAFA|300px|right| &#039;&#039;&#039;The Most Oppressed Group - Pre-debate Debate with Hasan Piker&#039;&#039;&#039;}}&lt;br /&gt;
On October 9th, 2018 Destiny engaged in a &amp;quot;pre-debate debate&amp;quot; with Hasan. This discussion was held in preparation for a future politicon appearance Hasan would have with Charlie Kirk. &amp;lt;ref&amp;gt; The Most Oppressed Group - Pre-debate Debate with Hasan Piker. (October 9, 2018). www.youtube.com. Retrieved January 29, 2024, from https://www.youtube.com/watch?v=r9iPLU3fAFA &amp;lt;/ref&amp;gt; Hasan begins the conversation cordially, praising Destiny for being &amp;quot;awesome,&amp;quot; citing his &amp;quot;excellent&amp;quot; content, and expressing that he &amp;quot;really likes what he&#039;s about.&amp;quot;From  there, the two engage in a lighthearted conversation discussing topics such as Neoliberalism, Destiny&#039;s political background,the current political climate, and Hasan&#039;s upcoming debate with Charlie Kirk.  Topics discussed include, Destiny and Hasan&#039;s political perspectives, prior debate experiences with conservatives, and a disagreement Hasan had with Destiny regarding the succesfullness of Donald Trump as a president. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion Highlights&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;Destiny&#039;s Political Perspective&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=303 5:03] Hasan inquires about what Destiny&#039;s political perspective is, Destiny responds that he aligns pretty closely with anyone on the left with regards to social issues. However with regards to economic policy, Destiny states he&#039;s a big fan of market forces and capitalism, and likely more closely aligns with conservatives. He tempers this by saying he&#039;s okay with a healthy amount of government intervention, to which he proclaims himself a social-democrat/neoliberal. Hasan takes issue with this, and warns Destiny against calling himself a neoliberal, citing the ideology as being a &amp;quot;full subscription to deny that capitalism has like any sort of faults.&amp;quot; Destiny disagrees with this framing, and the two discuss what the true definition of Neoliberalism is. Eventually Hasan concludes that Neoliberalism is simply &amp;quot;anybody who looks at socialism with disdain&amp;quot;, or wants to create hurdles for issues such as medicare for all. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hasan&#039;s Political Perspective&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=835 13:55] Hasan asserts that he is &amp;quot;more to the left than the majority of TYT&amp;quot;, and that the organization is a good &amp;quot;gateway&amp;quot; to leftist politics. Hasan recommends Destiny&#039;s audience check out [https://en.wikipedia.org/wiki/Chapo_Trap_House Chapo Trap House] to look for an adequate critique of Neoliberalism. Destiny admits he is hesitant to recommend the podcast, due to their tendency to &amp;quot;relentlessly shit on liberals&amp;quot;.  Hasan then explains that the criticism these liberals receive is due in part to their tendency to &amp;quot;hold up oligarchs&amp;quot; and create a false narrative that &amp;quot;everything is fine&amp;quot;, and that comprise can be reached with Republicans. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hasan&#039;s Facebook group&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=1226 20:26] Hasan discusses a Facebook group he runs, wherein several people of varying political beliefs are members and are unified by their shared enjoyment of his streams. He goes on to discuss how the Stalinists and Neoliberals of the group tend to fight with one another, and confesses how he more closely aligns with the Stalinists who claim that &amp;quot;everything the United States does is bad&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Prior debate experiences with conservatives&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=2893 48:13] Destiny and Hasan discuss their prior debates/experiences with conservatives. The two mention how the perceived victim complex many modern day conservatives maintain, makes them very frustrating interlocutors. At one point during this discussion, Hasan briefly mentions that he&#039;s &amp;quot;not on board&amp;quot; with an authoritarian state assertion of power despite the fact that he calls himself a socialist. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Destiny and Hasan discuss Sam Harris, Hasan shares his appreciation for Destiny&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=4297 1:11:37] Destiny and Hasan discuss [https://en.wikipedia.org/wiki/Sam_Harris Sam Harris], and American imperialism. Destiny expresses his uncomfortability with some of Sam&#039;s views, as he tends to &amp;quot;come out swinging very hard for Judeo-Christian values&amp;quot;. Hasan echoes this sentiment, and adds that Sam tends to &amp;quot;otherize&amp;quot; Islam as being an inherently violent religion but never acknowledges the consequences of American Imperialism. Destiny agrees, and pokes fun at the double-standards which seem to be prevalent in America society, comparing the reaction to an Islamic nation going to war for Allah with the response if someone like [https://en.wikipedia.org/wiki/Donald_Trump Donald Trump] declared the Bible as the most important book ever written, or [https://en.wikipedia.org/wiki/George_W._Bush Bush] saying he &amp;quot;prays before making any decision&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=5032 1:23:52] Hasan remarks that Destiny is &amp;quot;doing a really important job&amp;quot; by debating people on the right. &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&#039;&#039;&#039;Was Trump a successful president?&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=5271 1:27:51] Hasan discusses a debate Destiny had, in which he doesn&#039;t fully agree with a position Destiny posited regarding the success of Donald Trump as a president. Hasan claims Trump has been incredibly successful as a Republican president because his underlying positions are just &amp;quot;regular fucking conservative principles&amp;quot;. Hasan elaborates that his positions are all the &amp;quot;modern GOP positions&amp;quot; but his rhetoric is just different, and is just more appealing to his base voters. He goes on to point to things such as the Republican Tax plan, the &amp;quot;destruction&amp;quot; of the EPA&amp;quot;, and the &amp;quot;destruction&amp;quot; of the financial protection bureau. He concludes that this is all &amp;quot;regular republican shit&amp;quot; that Trump was able to accomplish in an authoritarian fashion. Destiny responds that Trump has caused a very deep division within the Republican party, citing instances such as Trumples mocking [https://en.wikipedia.org/wiki/John_McCain Mccain] for being a war hero making it very difficult for them to see eye-to-eye with other Republicans. Destiny then discuss how Trump fans and supporters &amp;quot;fucking hate&amp;quot; establishment Republicans, citing the tendency of these groups to trash moderate Republicans just as hard as certain left leaning groups(i.e. calling them Rhinos). Destiny concludes that he&#039;s unsure what kind of damage will happen to the party once Trump is gone, pointing to how a candidate like [https://en.wikipedia.org/wiki/Marco_Rubio Rubio] could have difficulty pandering to this new-extreme base.  &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&#039;&#039;&#039;Hasan&#039;s critique of Charlie Kirk&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=r9iPLU3fAFA?t=8260 2:17:40] At one point while the pair are watching a [https://en.wikipedia.org/wiki/PragerU PragerU] video together,  Charlie Kirk asserts &amp;quot;capitalism has lifted more people out of poverty than any other system, and that  socialism always leads to poverty.&amp;quot; Hasan pauses the video and exclaims &amp;quot;why would anyone make that argument, that argument is bananas.&amp;quot;  He then expresses confusion as to how Kirk can label these colleges as liberal. Hasan concludes that Kirk just wants college campuses to be more racist. &lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion timestamps&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=56 0:56] Hasan and Destiny greet each other. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=303 5:03] The two have a discussion on Neoliberalism.&lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=668 11:08] Destiny provides some nuance on his perspective with regards to the ACA failing, in that the US did not get a significant reduction in the cost of healthcare. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=811 13:31] Destiny states he&#039;s a consequentialist, looking to increase the standards of living for most people through policy. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=948 15:48] Hasan recommends Destiny&#039;s audience check out Chapo Trap House to look for an adequate critique of Neoliberalism. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=1324 22:04] Hasan asserts that America&#039;s existence has been devastating for the world in very meaningful ways. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=1529 25:29] Destiny and Hasan discuss their experiences with highschool and college math.  The two then discuss masculinity in US media, and metal gear solid. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=1828 30:28] Destiny laments the tendency of conservatives to not engage with issues such as Education and Healthcare in the United States. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=1999 33:19] A chatter rickrolls Hasan. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=2031 33:51] Hasan asks Destiny what the best way to have a productive conversation is. Destiny confesses very few of the conversations on his channel are productive. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=2147 35:47] Destiny discusses an edgy position he holds: &amp;quot;You should be able to say whatever word you want, at any point in time, and it shouldn&#039;t have to have racist or derogatory connotations to it. But if I use certain words there&#039;s going to be some people that watch me, who will feel like i&#039;m reinforcing some negative/racist belief they have... All satire has been totally fucking destroyed&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=2288 38:03] Destiny remarks how he&#039;d always speak out in solidarity for content creators(even those he disagrees with) that were banned off certain platforms, and how some of these same content creators celebrated his own ban off certain platforms. The two then discuss their grievances with &amp;quot;classical liberals&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=2703 45:03] Destiny discusses how if conservatives weren&#039;t racist, they&#039;d be able to lock in much more voters due to the regressive  values many traditional immigrants hold. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=2893 48:13] Destiny and Hasan discuss [https://youtube.fandom.com/wiki/Anthony_Brian_Logan Anthony Brian Logan], and other debates with conservatives Destiny has had.&lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=3206 53:26] Hasan calls himself a socialist. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=3276 54:36] Hasan derides the &amp;quot;capitalist vultures over at ABC&amp;quot; for firing [https://en.wikipedia.org/wiki/Roseanne_Barr Roseanne Barr]. Hasan goes on to discuss how she toted the line between acceptable and unacceptable racism. The two then discuss the perceived &amp;quot;oppression&amp;quot; of conservatives. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=4012 1:06:52] Hasan and Destiny discuss the racism of certain immigrant demographics. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=4297 1:11:37] Hasan and Destiny discuss [https://en.wikipedia.org/wiki/Sam_Harris Sam Harris]. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=4590 1:16:30] Hasan and Destiny discuss [https://en.wikipedia.org/wiki/Jordan_Peterson Jordan Peterson]. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=4907 1:21:47] Hasan asks Destiny: &amp;quot;What is something that has changed in your political perspective throughout time&amp;quot;. Destiny responds that his goal has always been to find the &amp;quot;most correct position&amp;quot; which contorts with his base values as much as possible. Destiny explains that as a result of this, he tends to lean more left. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=5032 1:23:52] Hasan remarks that Destiny is &amp;quot;doing a really important job&amp;quot; by debating people on the right. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=5158 1:25:58] Destiny discusses how he plans to vote and engage in more electoral politics, despite having voter apathy and &amp;quot;hating democracy&amp;quot;. Hasan applauds Destiny for this. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=5303 1:28:23] Hasan discusses a disagreement he has with Destiny regarding the successfulness of Donald Trump as a president. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=5815 1:36:55] Destiny discusses his frustrations with debating centrists. Hasan then questions why Destiny is so hesitant to name himself as &amp;quot;someone on the left&amp;quot;, to which Destiny responds he&#039;s not &amp;quot;a leftie, communist, tankie, or socialist... I just feel most of my positions are incredibly reasonable, and I could bring most people without much effort... I just have these positions that make me look like i&#039;m so extremely on the left... when debating these people&amp;quot;&lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=6102 1:41:42] Hasan questions Destiny about his libertarian past. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=6292 1:44:52] Destiny and Hasan discuss a Prager video. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=6576 1:49:36] Hasan struggles to find a Dave Rubin quote to share with Destiny. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=6949 1:55:49] Hasan and Destiny take a pee break, then discuss Hasan&#039;s upcoming politicon debate. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=7394 2:03:14] Hasan discusses Charlie Kirk&#039;s professor watch list, then begin watching a PragerU video. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=8260 2:17:40] In the video, Charlie Kirk asserts &amp;quot;capitalism has lifted more people out of poverty than any other system, and that socialism always leads to poverty.&amp;quot;Hasan exclaims &amp;quot;why would anyone make that argument, that argument is bananas.&amp;quot;  He then expresses confusion as to how Kirk can label these colleges as liberal. &lt;br /&gt;
* [https://www.youtube.com/watch?v=r9iPLU3fAFA?t=8962 2:29:22] Hasan and Destiny say their goodbyes. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Destiny reacts to a Politicon panel featuring Hasan and Charlie Kirk. Hasan and Destiny discuss the following day  ===&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=uenf3uYDKBE|300px|right| &#039;&#039;&#039;POLITICON - DESTINY REACTS.&#039;&#039;&#039;}}&lt;br /&gt;
==== Destiny&#039;s reaction to the Politicon Panel ====&lt;br /&gt;
On October 20, 2018 Destiny reacted to a Politicon panel featuring featuring Hasan and Charlie Kirk.&amp;lt;ref&amp;gt; POLITICON - DESTINY REACTS. (October 22, 2018). www.youtube.com. Retrieved January 19, 2024, from https://www.youtube.com/watch?v=uenf3uYDKBE &amp;lt;/ref&amp;gt; The primary focus of the panel was: &amp;quot;Whether young people should be progressives, conservatives, or perhaps something else&amp;quot;.  Destiny was mildly impressed by certain aspects of Hasan&#039;s debate performance. He appreciated Hasan&#039;s ability to challenge and critique various points, particularly in the context of discussing systemic issues and the limitations of free-market solutions. He also recognized the difficulty Hasan faced in addressing complex topics such as healthcare, education, and wealth distribution, in the face of a practiced &amp;quot;Gish-Galloper&amp;quot; such as Charlie Kirk. He did however offer a few critiques: &lt;br /&gt;
 &lt;br /&gt;
* Destiny suggested that Hasan could benefit from incorporating more &#039;scummy tactics&#039; used in live debates, implying a need for more strategic interjections and rebuttals tailored to the format, especially facing an individual such as Charlie Kirk.&lt;br /&gt;
* Destiny indicated that Hasan could improve in how he handles the framing set by his opponents, particularly in redirecting or countering their narratives more effectively.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion Highlights&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
Highlights from Destiny&#039;s reaction include:&lt;br /&gt;
* [https://www.youtube.com/watch?v=uenf3uYDKBE?t=378 6:18] Highlighting a critical talking point missed by Hasan, Destiny counters an argument put forth by Charlie Kirk that &amp;quot;it&#039;s a good thing more individuals are off food-stamps&amp;quot;. Destiny maintains that such an indicator is a poor barometer for the success of a nation, and that other indicators such as level of education, access to food stamps, access to healthcare, housing, and luxury goods are far better indicators of success. &lt;br /&gt;
* [https://www.youtube.com/watch?v=uenf3uYDKBE?t=463 7:43] Hasan agrees with Charlie Kirk that &amp;quot;we should reject socialism&amp;quot;. Destiny pauses the video, and argues that Hasan agreeing with Kirk in this instance makes him look very weak. &lt;br /&gt;
* [https://www.youtube.com/watch?v=uenf3uYDKBE?t=1657 27:37] When discussing the socialization of medical systems, Kirk mentions Lasik eye surgery and argues that the existence of insurance makes healthcare far more expensive. Realizing Kirk is regurgitating talking points from a video Destiny himself had once fallen victim to during his more right-leaning years, Destiny pulls up the video and proceeds to mock Kirk for not understanding the &amp;quot;elasticity&amp;quot; of certain services. &lt;br /&gt;
* [https://www.youtube.com/watch?v=uenf3uYDKBE?t=2738 45:38] Charlie Kirk remarks that the most poor and destitute cities are owned by Democrats. Destiny pauses the video, laughs mockingly, and states that Kirk has every &amp;quot;fucking meme talking point&amp;quot;. Shortly after resuming the video, Destiny pauses it once more to point out that the gish-gallop is destroying Hasan, and he cannot allow Kirk to ramble on.&lt;br /&gt;
* [https://www.youtube.com/watch?v=uenf3uYDKBE?t=3901 1:05:01] After Kirk interrupts Hasan and asks for a moment to speak, Destiny remarks that he feels like Kirk has spoken quite a bit more than Hasan during this panel.&lt;br /&gt;
* [https://www.youtube.com/watch?v=uenf3uYDKBE?t=4448 1:14:08] After being pushed by Kirk, Hasan shares that he only makes $60,000 a year. Hasan&#039;s uncle, [https://en.wikipedia.org/wiki/Cenk_Uygur Cenk Uygur], proceeds to shout at Kirk from the crowd.&lt;br /&gt;
|}&lt;br /&gt;
==== Discussion with Hasan ====&lt;br /&gt;
{{#ev:youtube|https://https://www.youtube.com/watch?v=9jRhGapcaK4|300px|right| &#039;&#039;&#039; Politicon 2018 - Post-debate Debate with Hasan Piker.&#039;&#039;&#039;}}&lt;br /&gt;
On October 21, 2018 Destiny and Hasan had a three and a half hour long discussion regarding Hasan&#039;s recent debate experience at Politicon. &amp;lt;ref&amp;gt; Politicon 2018 - Post-debate Debate with Hasan Piker. (October 24, 2018). www.youtube.com. Retrieved January 19, 2024, from https://www.youtube.com/watch?v=9jRhGapcaK4 &amp;lt;/ref&amp;gt; The conversation begins with Destiny explaining to Hasan that he did not necessarily dislike the points he attempted to convey to Kirk, but was critical of his attempts to get those points across. Hasan agreed with this sentiment, and pointed to Kirk&#039;s tactics of outright lying, Gish Galloping, moving the goalposts, and crafting messages for &amp;quot;applause breaks&amp;quot; as being very frustrating to deal with. Destiny sympathised with this, agreeing that the debate tactics employed by Kirk are very hard to deal with in real time, particularly in a live format. From there, the two discussed tactics Hasan could have employed better in the debate, their grievances with modern day conservatives, and the best methods in reaching out to a &amp;quot;broader&amp;quot; audience. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |Destiny&#039;s Advice&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;Dealing with Gish Galloping&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=619 10:19] : Destiny tells Hasan the best way to counter a debate opponent Gish Galloping, particularly in a live format,  is to pose them questions at the end which every member of the audience would be able to identify with. Destiny goes on to provide the example of [https://en.wikipedia.org/wiki/Bernie_Sanders Bernie Sanders] hammering home the same three talking points (1% getting richer, jobs suck, lack of affordability of healthcare). Destiny then pointedly suggests that Hasan could have posed questions like this on the back end of every one of Kirk&#039;s monologues, and that Kirk would come out looking worse for it.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Holding Opponents Accountable&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=1016 16:56]: Destiny encourages Hasan to firmly challenge Kirk&#039;s controversial statements, like those suggesting Democratic policies lead to violence in Chicago.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Refraining from Communist-like rhetoric&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=2869 47:44]: Hasan references a communist individual in his community, who advised him to point his arguments more towards a criticism of capitalism. Destiny tells Hasan to never listen to individuals like this. Destiny goes on to advise Hasan to take on more &amp;quot;nazi-rhetoric&amp;quot; in that he should present his ideas as &amp;quot;positive-things&amp;quot; for the benefit of the country. He compares this against communist rhetoric that tends to include phrases such as &amp;quot;eat the rich&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Handling leading questions in a debate&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=6131 1:42:1]: Destiny informs Hasan that &amp;quot;whenever someone asks you a question, the reason why they&#039;re doing that is because they know what answer you&#039;re going to give, so they&#039;ve already got the response prepared. Anytime you&#039;re in a debate with somebody, if they ask you a question that seems very obvious...you have to know that if you answer... they&#039;re ready to go into it.&amp;quot; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Neoliberalism&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=8367 2:19:27]:  Hasan and Destiny discuss Neoliberalism. Hasan states Neoliberalism has a more &amp;quot;hawkish&amp;quot; perspective, and fails to acknowledge the failures of free market. Destiny cautions Hasan against this perspective, and jokingly suggests he already has seven Neoliberals already typing him up emails suggesting the contrary. Destiny states he has no strong stance one way or the other, but points out there are Neoliberals that seem okay and some that seem quite extreme. Hasan then jokingly suggests that &amp;quot;Neoliberals love getting owned&amp;quot;, and cautions Destiny against calling himself one. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Using Free-Market arguments against Conservatives&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=10027 2:47:07]: Destiny provides Hasan a &amp;quot;silver-fucking-bullet&amp;quot; to conservative hypocrisy. He points to how Conservatives tend to state the free-market will solve everything, then how these same individuals will complain when they&#039;re banned from social media platforms. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;The stock market as an indicator for prosperity&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=7573 2:06:13]: At one point, Hasan attempts to provide Destiny with a talking point regarding the stock market being a poor indicator for prosperity. Destiny, acknowledges this, and finishes Hasan&#039;s point stating: &amp;quot;oh yeah, because the average American doesn&#039;t hold a lot of securities.&amp;quot; Destiny goes on to point to a [https://www.youtube.com/watch?v=n3gsp3J3HKc debate] with [https://en.wikipedia.org/wiki/Jacob_Wohl Jacob Wohl], where he made this exact argument.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Having counterexamples on hand&#039;&#039;&#039; &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=9jRhGapcaK4?t=11273 3:07:53]: Destiny recommends Hasan have a list of &amp;quot;capitalist countries that are fucking up&amp;quot; to counter Kirk&#039;s examples of socialist countries performing poorly. Hasan then expresses his disdain for this type of strategy citing it as being intellectually dishonest. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
As the conversation concludes, Hasan thanks Destiny and admits that although his audience initially viewed Destiny with skepticism, believing him to be a social democrat, they have now fallen in love with him. Hasan then raids Destiny&#039;s channel, and offers to help &amp;quot;tag-team&amp;quot; someone in a debate should Destiny ever wish. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion Timestamps&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=178 2:58] Hasan informs Destiny that he watches his debates all the time and welcomes any criticism from him , regardless how harsh it may be.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=619 10:19] Destiny advises Hasan on how to counter a Gish Gallop. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=1016 16:56] Destiny suggests to Hasan that he should have held Kirk&#039;s &amp;quot;feet to the fire&amp;quot; in certain instances where he said some &amp;quot;real dumb shit&amp;quot;. Destiny cited instances such as Kirk suggesting Democrat policies were causing black people to be killed in Chicago. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=1214 20:14] Lamenting how Conservatives mock Socialists for suggesting true socialism has never existed, Hasan suggests that these individuals do the same with regards to capitalism. Destiny takes issue with this, and suggests that he would actually &amp;quot;push back here really hard, because I am a liberal&amp;quot;. Destiny goes on to argue that when he has to argue in favor of liberalism/capitalism, it&#039;s very hard to argue as he must defend his very real/flaw system against an ideal. Destiny then provides Hasan various strategies he could utilize to better advocate his proposed socialist system. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=1911 31:51] In response to an argument from Kirk that Hasan should give up 95% of his salary if he&#039;s a socialist, Hasan admits he has no clue how to respond. Destiny provides Hasan some argumentative suggestions, one of which highlights the great personal harm one would incur should they give up the majority of their income to the IRS, with little benefit to society.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=2228 37:08] Hasan criticizes the tendency of the left to be quick to label individuals as Nazis. The conversation continues and Destiny later remarks that Hasan is &amp;quot;an intelligent guy&amp;quot; and suggests that he should engage in more debates with individuals he encounters online to sharpen his debate skills.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=2581 43:01] Hasan asks Destiny what specific points he should be working on in order to improve his debate skills. Destiny advises Hasan that the issue was not so much his points, but his rhetoric.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=2869 47:44] Hasan references a communist individual in his community, who advised him to point his arguments more towards a criticism of capitalism. Destiny tells Hasan to never listen to individuals like this, and Hasan jokingly agrees. Destiny goes on to advise Hasan to take on more &amp;quot;nazi-rhetoric&amp;quot; in that he should present his ideas as &amp;quot;positive-things&amp;quot; for the benefit of the country. He compares this against communist rhetoric that tends to include phrases such as &amp;quot;eat the rich&amp;quot;.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=3799 1:03:19] Hasan claims: &amp;quot;in the 66 minute debate, Charlie interrupted me 76 times&amp;quot;.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=4492 1:14:52] Destiny suggests Hasan counters Kirk&#039;s comparisons of the United States to Cuba with &amp;quot;why are we comparing ourselves to nations like Cuba&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=5982 1:39:42] Destiny warns Hasan about arguing against [https://en.wikipedia.org/wiki/Citizens_United_v._FEC Citizens United]&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=6131 1:42:1] Destiny informs Hasan that &amp;quot;whenever someone asks you a question, the reason why they&#039;re doing that is because they know what answer you&#039;re going to give, so they&#039;ve already got the response prepared. Anytime you&#039;re in a debate with somebody, if they ask you a question that seems very obvious...you have to know that if you answer... they&#039;re ready to go into it.&amp;quot; &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=6985 1:56:25] Destiny points to Hasan how Kirk tends to end his points on very strong statements.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=7040 1:57:20] Hasan claims socialism is not his position, and that his counters to Kirk&#039;s points are rooted in Social Democracy. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=7894 2:11:34] Hasan exclaims that he&#039;d like to kill Charlie Kirk.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=8304 2:18:24] Destiny informs Hasan how schools receive funding. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=8367 2:19:27] Hasan and Destiny discuss Neoliberalism. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=8493 2:21:33] Hasan and Destiny mock the conservative argument of &amp;quot;just move&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=9678 2:41:18] Destiny advises Hasan how to best approach arguments against lobbying.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=9864 2:44:24] Destiny restates an argument regarding federal non-discretionary funding Hasan attempted to make to Kirk. Hasan acknowledges that he made the same point but Destiny stated it more eloquently. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=10027 2:47:07] Destiny provides Hasan a free-market argument to use against conservatives. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=10168 2:49:28] Hasan informs Destiny &amp;quot;this argument is also for you... I never hear you mention this&amp;quot; with regards to the stock market not being a good indicator for success. Destiny, does in fact acknowledge this, and once again succinctly finishes Hasan&#039;s point by stating &amp;quot;oh yeah, because the average American doesn&#039;t hold a lot of securities.&amp;quot;&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=10650 2:57:30] Hasan admits he&#039;s not  the best debater.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=10894 3:01:34] Hasan claims capitalism does not have an answer to artificial intelligence and automation. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=11273 3:07:53] Destiny provides a recommendation to Hasan relating to counterexamples.&lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=11511 3:11:51] After exclaiming that Kirk is a &amp;quot;fucking pussy&#039;, Hasan apologizes to any female viewers and makes a note on his stream of &amp;quot;no ableism in chat&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=11919 3:18:39] Destiny provides Hasan the talking point &amp;quot;freedom means nothing without access&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=9jRhGapcaK4?t=12400 3:26:40] Hasan and Destiny discuss Kirk&#039;s company. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hasan&#039;s Richard Lewis Debate - Post-debate discussion with Hasan ===&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=I7wtmabgQU8|300px|right| &#039;&#039;&#039; Hasan’s Richard Lewis Debate - Post-debate Debate with Hasan Piker.&#039;&#039;&#039;}}&lt;br /&gt;
On November 2, 2018 Hasan engaged in a debate with esports journalist [https://en.wikipedia.org/wiki/Richard_Lewis_(journalist) Richard Lewis] regarding hot-button topics at the time. Topics included the Mainstream Media, Donald Trump, Shifting Demographics, and Obama Era Deportations.  &amp;lt;ref&amp;gt;Richard Lewis Semantics Expert. (November 2, 2018). www.youtube.com. Retrieved February 2, 2024, from https://www.youtube.com/watch?v=f1OXF6IEBFc &amp;lt;/ref&amp;gt; The call concluded with Lewis describing Hasan as a &amp;quot;diet Destiny&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
On November 6, 2018 Hasan and Destiny reacted to a vod of the debate together. &amp;lt;ref&amp;gt; Hasan’s Richard Lewis Debate - Post-debate Debate with Hasan Piker. (November 9, 2018). www.youtube.com. Retrieved February 2, 2024, from https://www.youtube.com/watch?v=I7wtmabgQU8 &amp;lt;/ref&amp;gt;  At the onset of the stream, the two experience several delays due to technical difficulties primarily attributed to synchronizing the audio of both the vods they are watching, low-volume, and Destiny hearing an echo from Hasan&#039;s stream(Hasan did not have headphones at the time). Destiny eventually decides that Hasan should simply watch his stream while he reacts to the vod, Hasan points out that Destiny&#039;s stream has a five-second delay, to which Destiny responds Hasan can just &amp;quot;scream&amp;quot; if he wants the video paused. Destiny immediately retracts this idea, and settles on just screensharing the video through discord(only after Destiny berates the chatter who suggested this alternative). From this point, Destiny&#039;s stream is left with the muffled audio of Hasan&#039;s debate with Richard Lewis, which the two react to for the remainder of the call.  &lt;br /&gt;
 &lt;br /&gt;
Throughout the video, Destiny levies several critiques of Lewis at both a personal and argumentative level. Destiny calls &amp;quot;spineless&amp;quot; for his behavior following the [https://wiki.destiny.gg/view/JonTron#Destiny_debates_JonTron_on_immigration_and_assimilation JonTron Debate], citing Lewis&#039; claim that he had made Jontron appear racist through debate-tactics. Destiny also ridicules Lewis for being under the control of esports broadcaster, [https://lol.fandom.com/wiki/Thorin Thorin], describing him as being on a “little leash” held by the broadcaster whenever he forms an opinion. On an argumentative level, Destiny critiques Lewis&#039;s tendency to gish gallop Hasan at several points during the debate, disputes Lewis&#039;s views on American Exceptionalism in journalism,  and criticizes the way figures like Lewis struggle when faced with facts which stand in direct opposition to their claims. While watching the video, Hasan observes that Lewis often claims their conversation is &amp;quot;not a debate&amp;quot; and uses this assertion to dodge pressure or clarification on issues. Hasan suggests that Lewis&#039;s likely only joined his stream for the sake of gaining clout from his stream, a point with which Destiny agrees. Destiny and Hasan went on to critique many of Lewis&#039; defenses for Donald Trump, primarily relating to the hypocrisy of Conservatives when defending Republican figures and attacking Democratic ones, and the tendency of centrists like Lewis to use liberalism as a &amp;quot;convenient suit&amp;quot; to push any argument they may be in favor of.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion Highlights&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039;Technical Delays&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=00 0:00]: Destiny and Hasan try to synchronize the vod on their streams, leading to several minutes of technical delays. Eventually, Destiny&#039;s stream captures only a faint recording of Hasan&#039;s debate with Richard Lewis, to which they react for the remainder of the call. &lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=990 16:30]: As the audio was being played through Hasan&#039;s speakers, whenever Hasan speaks, the audio from the video is muted. A frustrated Destiny decides to pause the video and fruitlessly work on a solution with Hasan to settle this issue. No solution is found, and the two continue with the video. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Destiny&#039;s personal grievances with Richard Lewis&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=382 6:22]: Destiny pauses the video and derides Lewis&#039; tendency to justify some positions with the claim that he has &amp;quot;a lot of multicultural friends&amp;quot;. Hasan then questions Destiny&#039;s past relationship with Lewis, stating he thought they were &amp;quot;best-friends&amp;quot; at one point. Destiny informs Hasan that they were friends, but not particularly close. He then discusses Lewis&#039; perceived &amp;quot;spinelessness&amp;quot;, and points to his silence during the JonTron Debate and accusation that Destiny was making Jontron appear racist through debate tactics. Destiny concludes that Lewis is on a &amp;quot;little-leash&amp;quot; held by an esports broadcaster named [https://lol.fandom.com/wiki/Thorin Thorin]. &lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=4119 1:08:39]: Destiny discusses how Lewis&#039; feud with the r/Leagueoflegends mods after a subreddit ban, and his threats of doxing the team, resulted in a reddit-wide ban on his account. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hasan describes the events leading up to his debate with Richard Lewis&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=895 14:55]: Hasan claims that Lewis only came onto his stream because he saw an attractive guy on the main page of twitch &amp;quot;shitting on his video&amp;quot;. Hasan goes on to accuse Lewis of thinking he could score an easy dunk on an &amp;quot;attractive looking dumb-guy&amp;quot;. Hasan then points out that Lewis referred to him as &amp;quot;diet Destiny&amp;quot;, to which Hasan responded &amp;quot;bitch I debated [https://en.wikipedia.org/wiki/Ann_Coulter Ann Coulter] on television last week.&amp;quot;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Richard Lewis handwaves Donald Trump&#039;s attack on the free press &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=1737 28:57]: Lewis states &amp;quot;Trump makes journalists rhetoric a little bit laughable, there are definitely... governments that do have journalists killed... like Saudi Arabia... being an American journalist is a very privileged position.&amp;quot; Destiny pauses the video at this point, remarks that Lewis is &amp;quot;handwaving&amp;quot; the president attacking the free press, and notes that the world press freedom index ranks the United States at 45. Destiny then notes that he is unsure where Lewis is getting the idea that the United States has the &amp;quot;freest fucking press&amp;quot;, and is surprised to hear such American exceptionalism ideas coming from a &amp;quot;britbonger&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; The inability of conservatives to contend with facts &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=2383 39:43]: Destiny claims conservatives aren&#039;t interested in the fact of a matter and more interested in telling a story. He goes on to assert once a conservative is held to task on a particular issue(i.e. through the presentation of relevant facts), they get &amp;quot;insanely ass pained&amp;quot;. Destiny then points to Lewis&#039; behavior throughout the debate as evidence of this, citing his evident cognitive dissonance when presented with facts, and resorting to accusations of &amp;quot;debate-tactics&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&#039;&#039;&#039; Richard Lewis debates the power of President Trump&#039;s rhetoric. &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=2930 48:50]: Destiny pauses the video after Lewis contends that the individual making a particular statement has no bearing on the authority it holds(with regards to a statement made by President Trump). Destiny pauses the video and exclaims that Lewis is &amp;quot;so fucking stupid&amp;quot;, and that there&#039;s a difference between the &amp;quot;president of the United States saying something, versus some fucking random dipshit on Twitter&amp;quot;. Destiny then concludes that these statements should be par for the course for someone that used to write for  [https://en.wikipedia.org/wiki/Breitbart_News Breitbart].&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&#039;&#039;&#039; Hasan&#039;s critiques of the British &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3133 52:13]: Hasan claims he was trying to be as nice as possible to Lewis because he&#039;s British, and British people have a way of dismantling arguments. &lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3271 54:31]: After mockingly presenting an argument presented by Lewis while mimicking his accent, Hasan proclaims &amp;quot;that&#039;s literally every fucking British dipshit, every British central dipshit&amp;quot;, to which Destiny warns Hasan against disparaging all British people, and to focus on this particular commentator. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Lewis&#039; framing of the debate &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3505 58:25]: Hasan expresses frustration with Lewis&#039; tendency throughout the call to  claim their conversation is &amp;quot;not a debate&amp;quot; and claims that Lewis utilized this assertion to dodge pressure or clarification on issues. He later asks Destiny what he should do in a scenario like this, questioning whether he should kick Lewis out of the call at this point. Destiny responds that Hasan could &amp;quot;bat him around&amp;quot; a couple more topics, but empathises with Hasan&#039;s frustrations citing the many similar conversations he has had with right leaning pundits. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Lewis&#039; claims that certain attacks on the president did not receive appropriate media attention  &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3959 1:05:56]: After fact checking a claim presented by Lewis that Donald Trump Jr received [https://en.wikipedia.org/wiki/Ricin Ricin] in the mail, Destiny eventually concludes that the package was in fact sent to the Pentagon and never reached the White House. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=4274 1:11:14]: Lewis claims Bush received more media attention for receiving Ricin in the mail than Donald Trump. Destiny and Hasan contend that Bush actually received [https://en.wikipedia.org/wiki/Anthrax Anthrax], and that this occurred after 9/11 when a large Anthrax scare was occuring. The two proceed to laugh at Lewis for attempting to compare this incident to two Pentagon officials receiving Ricin. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=4394 1:13:14]  Destiny and Hasan deliberate about the president&#039;s son receiving cornstarch after a claim presented by Lewis(which he appeared to be conflating with a separate event). &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; The hypocrisy of Conservatives, Lewis defends Trump&#039;s attacks on Judge Curiel&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=5511 1:31:51]:  Destiny compares the hypocrisy of conservatives who criticize Democratic political figures like [https://en.wikipedia.org/wiki/Barack_Obama Obama], but defend Donald Trump. Hasan echoes this sentiment and describes the level of apologia by conservatives for Donald Trump as &amp;quot;mind-boggling&amp;quot;. He goes on to say that centrists tend to play a &amp;quot;fuckload of mental gymnastics&amp;quot; to justify actions taken by Donald Trump, and then as soon as somebody on the &amp;quot;liberal&amp;quot; side &amp;quot;sneezes wrong&amp;quot; they are quick to point out their actions.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8?t=5624 1:33:4] Destiny is incredulous after Lewis defends Trump attacks on a judge due to his Mexican heritage, lewis stating &amp;quot;he didn&#039;t do it because he was Mexican, he did it because he was from a Mexican immigrant family&amp;quot;.&amp;lt;ref&amp;gt;CNN, A. by Z. B. W. (February 27, 2018). Trump’s attacks on Judge Curiel are still jarring to read. CNN. https://www.cnn.com/2018/02/27/politics/judge-curiel-trump-border-wall/index.html &amp;lt;/ref&amp;gt;  Destiny then exclaims &amp;quot;What the fuck is the difference between these two fucking statements? He didn&#039;t do it because he was black he did it because his mom and dad were black, what the fuck kind of dumb fucking statement is this? That&#039;s so fucking stupid. Oh my god.&amp;quot;  Destiny later points out that the case Judge Curiel was sitting on had nothing to do with the [https://en.wikipedia.org/wiki/Trump_wall wall] and was related to an issue regarding [https://en.wikipedia.org/wiki/Trump_University Trump University].  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Richard Lewis and liberalism &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=I7wtmabgQU8?t=7213 2:00:15] Destiny states many individuals who are centrist and claim to be liberals, are in fact lying. He goes on to point out that these individuals use liberalism as a &amp;quot;tool for an end, and don&#039;t actually give a fuck about liberal values&amp;quot;. He concludes that Lewis does not &amp;quot;give a fuck&amp;quot; about any of the values he presents, and just wears them as &amp;quot;convenient suits&amp;quot; to win an argument he&#039;s in favor of.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion timestamps&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=172 2:52]: After some technical issues Destiny decides that Hasan should just react to the debate-vod through his stream, despite the five-second delay. This idea is eventually thrown out, and the two settle on watching the debate-vod through discord screen share. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=343 5:38]: Destiny and Hasan discuss the &amp;quot;broadening&amp;quot; of hate speech laws in Scotland.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=382 6:22]: Destiny mocks Lewis&#039; argumentative approach and character. The two then discuss Destiny&#039;s prior relationship with Lewis, and the fallout of a debate Destiny had with Jontron. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=621 10:21]: Destiny fact checks a claim from Lewis regarding the nazi uniforms in [https://en.wikipedia.org/wiki/Inglourious_Basterds Inglourious Basterds]. He then informs Hasan that he was gish galloped by Lewis at this point in the debate.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=826 13:46]: Destiny discusses what a free-speech absolutists&#039; perspective on fascist/nazi-iconography being banned is. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=895 14:55]: Hasan discusses the events leading up to his debate with Lewis. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=990 16:30]: Several more minutes of technical delays. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=1399 23:19]: Destiny pauses the video and provides Hasan some advice: &amp;quot;A lot of times people complaints will be evidence of the positions they have in life, or the privileges that they have in life.&amp;quot; Destiny then provides the example of someone only caring for freedom of speech because they were banned from twitter. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=1737 28:17]: Destiny mocks Lewis for defending Donald Trump&#039;s attack on the press. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=1997 33:17]: Destiny points to another instance of Lewis handwaving Trump&#039;s faults and subsequently placing blame on Democrats. Lewis later discusses an alleged package of  [https://en.wikipedia.org/wiki/Ricin Ricin] sent to one of Donald Trump&#039;s children. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=2383 39:43]: Destiny discusses the inability of conservatives to debate when presented with facts.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=2578 42:58]: Destiny and Hasan discuss [https://en.wikipedia.org/wiki/Blaire_White Blair White].&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=2930 48:50]: Destiny and Hasan contend with Lewis&#039; characterization of Donald Trump&#039;s tweets. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3133 52:13]: Hasan discusses Lewis&#039; British origin.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3404 56:44]: Hasan takes issue with chatters claiming he talked over Lewis throughout the conversation. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3505 58:25]: Hasan criticises Lewis&#039; framing of the conversation as not being a debate. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=3883 1:04:43]: Hasan and Destiny discuss the claim that Donald Trump was sent Ricin. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=4119 1:08:39]: Destiny discusses Lewis&#039; reddit ban. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=4274 1:11:14]: Destiny and Hasan contend with Lewis&#039; claim that Bush received Ricin in the mail. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=4506 1:15:06]: After Lewis cites an incident involving [https://en.wikipedia.org/wiki/Maxine_Waters Maxine Waters] wherein he suggests Waters incited violence. Destiny fact checks the quote presented and finds that Waters did not in fact do so. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=4872 1:21:12]: Destiny and Hasan debate [https://en.wikipedia.org/wiki/Gerrymandering Gerrymandering]. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=5034 1:23:54]: Hasan explains the [https://en.wikipedia.org/wiki/Alt-lite Alt-light] to Destiny.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8&amp;amp;t=5511 1:31:51]:  Destiny compares the hypocrisy of conservatives who criticize Democratic political figures like [https://en.wikipedia.org/wiki/Barack_Obama Obama], but defend Donald Trump. Hasan echoes this sentiment. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=5668 1:34:28] Destiny is incredulous after Lewis defends Trump attacks on a judge due to his Mexican heritage.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=6198 1:43:18] Hasan claims Donald Trump&#039;s orders to shoot anyone throwing a rock at border patrol guardsmen or placing barbed wire on the fence could be considered war crimes. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=6247 1:44:07] Destiny pauses the video and derides Lewis after after he warns Hasan about the dangers of &amp;quot;overly-liberal/politically correct&amp;quot; individuals taking over college campuses. Destiny remarks that this is an unlikely possibility, and Hasan agrees.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=6458 1:47:38] Hasan introduces Izzie, a trans military veteran who joined the call with Lewis.  &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=6735 1:52:15] Destiny remarks that [https://en.wikipedia.org/wiki/Sean_Hannity Sean Hannity] is an extremist, Hasan agrees.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=6972 1:56:12] Lewis remarks &amp;quot;if diversity is our strength why do we surrender our freedom of speech to tech monopolies.&amp;quot; Destiny and Hasan are unsure what to make of that. &lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=7213 2:00:15] Destiny discusses liberalism and Richard Lewis.&lt;br /&gt;
* [https://www.youtube.com/watch?v=I7wtmabgQU8?t=7761 2:09:21] Destiny and Hasan fast forward to the part of the video where Lewis claims Hasan is a &amp;quot;diet Destiny.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hasan and Destiny meet in-person ===&lt;br /&gt;
On November 1, 2018 Destiny and Hasan spent an evening together and had dinner in-person. &amp;lt;ref&amp;gt; Meeting with Hasanabi. (Nov 1, 2018). www.youtube.com. Retrieved February 12, 2024, from https://www.youtube.com/watch?v=NVf1hMt-XbI &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hasan discusses PewDiePie and E;R with Destiny ===&lt;br /&gt;
{{#ev:youtube|https://www.youtube.com/watch?v=8ENmudByKig|300px|right| &#039;&#039;&#039;PewDiePie and E;R ft. Hasanabi &#039;&#039;&#039;}}&lt;br /&gt;
On December 17, 2018, Destiny and Hasan discuss [https://en.wikipedia.org/wiki/PewDiePie PewDiePie&#039;s] political ignorance, and how the same ignorance prevalent throughout much of online discourse. &amp;lt;ref&amp;gt; Destiny.  (December 7, 2018). PewDiePie and E;R ft. Hasanabi. In YouTube. https://www.youtube.com/watch?v=8ENmudByKig &amp;lt;/ref&amp;gt; The video begins with Hasan discussing how PewDiePie, near the end of a recent video, had inadvertently promoted a &amp;quot;Nazi youtube channel&amp;quot; by the name of [https://www.youtube.com/@esemicolonr E;R]. Despite PewDiePie editing out the promotion of E;R from the prior video and issuing an apology, Hasan goes on to claim that PewDiePie&#039;s apology was &amp;quot;fake&amp;quot; as he included the same promotion twice in the apology video coupled with promoting pieces of E;R&#039;s content in earlier videos. Hasan would go on to state that these actions make it seem like PewDiePie may be a crypto-fascist. Destiny responds that he is hesitant to label PewDiePie as such, given that he may truly just be ignorant when it comes to interpreting harmful political messaging, claiming the same ignorance is rife throughout &amp;quot;gamer-bro&amp;quot; communities . &lt;br /&gt;
&lt;br /&gt;
Eventually, the conversation veers off into a discussion on Venezuela and Socialism, and Hasan exits the call after discussing the issue for an hour. At this point, Destiny is alone and decides to watch [https://www.youtube.com/watch?v=4g6c8L83Pzs PewDiePie&#039;s biggest OOPSIE], a video wherein PewDiePie recounts the promotion of E;R. During the video, PewDiePie plays a sound-bite from a prior video wherein he promotes E;R&#039;s death note review, and mocks anyone for suggesting this is nazi propaganda. Destiny watches thirty minutes of the review, questions how E;R manages to do such poor critiques of media for a living, and refuses to watch any more of &amp;quot;this low-iq shit&amp;quot;.  Destiny then requests that his chat direct him to some of E;R&#039;s &amp;quot;nazi shit&amp;quot;, and is eventually told to skip to the 37-minute mark of the video wherein a [https://simple.wikipedia.org/wiki/Heather_Heyer Heather Heyer] reference is made. From this point Destiny reacts to several nazi references made in E;R&#039;s videos including a [https://www.youtube.com/watch?v=8ENmudByKig?t=922 Hitler speech played over dramatic music], and [https://www.youtube.com/watch?v=jmzNbhNAJRM?t=91 a montage of wealthy/influential Jewish individuals] played over [https://www.youtube.com/watch?v=vEnW5_GTooI Orpheus in the Underworld] concluding with a message of &amp;quot;securing an existence and future for human children&amp;quot;. From these videos, Destiny eventually concludes that E;R is &amp;quot;maybe a little bit of a Nazi&amp;quot;.  Destiny eventually resumes PewDiePie&#039;s video and Hasan joins the call to get Destiny&#039;s position on the situation. Destiny informs Hasan that E;R is almost certainly attempting to red pill viewers on Nazi propaganda, and that he still has to finish PewDiePie&#039;s response video to draw a conclusion on him.  After finishing PewDiePie&#039;s response video, Destiny concludes that PewDiePie is not a nazi but is likely just dumb politically. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion Highlights&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&#039;&#039;&#039; Hasan summarizes the PewDiePie debacle &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=8ENmudByKig?t=10 0:10] Hasan discusses how PewDiePie, near the end of a recent video, had inadvertently promoted a &amp;quot;Nazi youtube channel&amp;quot; by the name of [https://www.youtube.com/@esemicolonr E;R]. Hasan goes on to inform Destiny that he stumbled upon this finding, after one of E;R&#039;s &amp;quot;fashy fans&amp;quot; had tried to [https://en.wikipedia.org/wiki/Red_pill_and_blue_pill red pill] Hasan&#039;s audience with the [https://en.wikipedia.org/wiki/Jewish_question JQ]. Hasan reports that after combing through some of E;R&#039;s videos, he found many racist/antisemitic jokes sprinkled throughout seemingly innocuous media reviews(i.e. full Hitler speeches and images of Obama with the Star of David).  Hasan elaborates that the most damning piece of information is a [https://en.wikipedia.org/wiki/Gab_(social_network) Gab] account run by E;R, wherein he brags about Red Pilling people on alt-right ideology and [https://en.wikipedia.org/wiki/Crypto-fascism crypto-fascism].  Despite PewDiePie editing out the promotion of E;R from the prior video and issuing an apology, Hasan goes on to claim that PewDiePie&#039;s apology was &amp;quot;fake&amp;quot; as he included the same promotion twice in the apology video.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Destiny&#039;s perspective &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=8ENmudByKig?t=579 9:39] When questioned by Hasan what his perspective is, Destiny informs him that he is unsure what to make of the situation. Destiny goes on to elaborate that he would like to have a stronger opinion, however the ignorance of &amp;quot;gamer-bro people&amp;quot; makes it plausible that they may truly be &amp;quot;just that dumb&amp;quot; when it comes to interpreting harmful political messaging. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; Destiny reacts to &amp;quot;PewDiePie&#039;s biggest OOPSIE&amp;quot;, concludes E;R is likely a Nazi &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.youtube.com/watch?v=8ENmudByKig 11:40] Destiny begins reacting to &amp;quot;PewDiePie&#039;s biggest OOPSIE&amp;quot;, a video wherein PewDiePie lays out a defense for himself against the accusation that he shepherded an audience of fourteen year olds to Nazi propaganda.  PewDiePie plays a soundbite from a prior video wherein he promotes E;R&#039;s death note review, and mocks anyone for suggesting this is nazi propaganda. Destiny watches thirty minutes of the review, and heavily critiques it. Destiny then asks his chat for the &amp;quot;nazi-shit&amp;quot;, to which a chatter directs Destiny to the 37 minute mark of the video wherein a Heather Heyer reference is made. From this point Destiny reacts to several nazi references made in E;R&#039;s videos. Destiny eventually finishes PewDiePie&#039;s response video, and concludes that PewDiePie is not a nazi but is likely just dumb politically. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Discussion timestamps&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=10 0:10] Hasan enters the call, greets Destiny, and gives a summary of drama revolving around PewDiePie&#039;s promotion of an alleged Nazi youtuber. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=200 3:20] Hasan discusses the discovery of E;R&#039;s [https://en.wikipedia.org/wiki/Gab_(social_network) Gab] account. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=277 4:36] Hasan speaks with Destiny regarding PewDiePie&#039;s retraction of the E;R promotion, and his &amp;quot;fake apology&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=524 8:44] Destiny informs Hasan that he&#039;s unsure if PewDiePie should be labled as a Nazi or not, and he may just be genuinely ignorant when it comes to &amp;quot;this stuff&amp;quot;. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=565 9:32] Hasan claims that PewDiePie has been aware of E;R for several months. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=579 9:39] Destiny provides his perspective. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=659 10:59] Hasan claims there are many PewDiePie supports in Destiny&#039;s subreddit.&lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig 11:40] The conversation gets sidetracked on venezuela. Destiny is alone at this point in the video and watches [https://www.youtube.com/watch?v=4g6c8L83Pzs PewDiePie&#039;s biggest OOPSIE], a video wherein PewDiePie recounts the the promotion of E;R. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=834 13:54] Destiny asks his chat for E;R&#039;S &amp;quot;nazi shit&amp;quot;. A chatter then directs Destiny to skip to 37 minutes in E;R&#039;S death note review.&lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=898 14:58]  [https://wiki.destiny.gg/view/Trainwreckstv Trainwrecks] asks Destiny if they can play a game together.  &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=922 15:22] Destiny reacts to a hitler speech played during one of E;R&#039;s videos. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=1115 18:35] Destiny concludes that E;R is likely a Nazi.&lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=1149 19:09] Destiny resumes PewDiePie&#039;s Biggest OOPSIE. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=1214 20:14] Hasan rejoins the call after Destiny finishes the video.  &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=1335 22:06] Destiny discusses why he prefers to look at E;R&#039;s content rather than logs from his Gab account as evidence of his ideals.&lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=1509 25:09] Hasan asks to play a game with Destiny. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=1653 27:33] Destiny states that if PewDiePie were to shout-out a channel, he should probably be aware of it&#039;s content. &lt;br /&gt;
* [https://www.youtube.com/watch?v=8ENmudByKig?t=1706 28:31] After finishing PewDiePie&#039;s response video, Destiny concludes that PewDiePie is not likely a nazi.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Destiny at Hasan&#039;s place ===&lt;br /&gt;
====  At Hasan&#039;s place ft. Felklmao WIP ====&lt;br /&gt;
https://www.youtube.com/watch?v=OwiRb8RveDQ&lt;br /&gt;
 &lt;br /&gt;
==== Talk with Hasan - McDonnald&#039;s employee kicking teenagers out WIP ====&lt;br /&gt;
https://www.youtube.com/watch?v=vTpTLj4Lg9A &lt;br /&gt;
&lt;br /&gt;
==== Talk with Hasan - Doctor kicked out of airplane WIP====&lt;br /&gt;
https://www.youtube.com/watch?v=6eBl1Ntx45A&lt;br /&gt;
&lt;br /&gt;
==== Talk with Hasan - Disciplining employee - School janitor case WIP====&lt;br /&gt;
https://www.youtube.com/watch?v=8RYq-F6AUcU&lt;br /&gt;
&lt;br /&gt;
=== Talking with a venezuelan about Venezuela ft. Hasanabi WIP===&lt;br /&gt;
[[File:HasanVenezuelaCrying.png|400px|thumb|Right|The top comment from a video wherein Hasan debates a Venezuelan ]]&lt;br /&gt;
https://www.youtube.com/watch?v=NDiS7WdrzQg&lt;br /&gt;
&lt;br /&gt;
=== Domestic abuse - MrDeadMoth hits wife ft. MrMouton, Hasan, WhiteNervosa WIP===&lt;br /&gt;
https://www.youtube.com/watch?v=9RAZHElDZL8&lt;br /&gt;
&lt;br /&gt;
=== Hasan joins DGG chat ===&lt;br /&gt;
[[File:HasanFirstDGGChatLogs.png|200px|thumb|Right|Hasan&#039;s first DGG chat logs.]]&lt;br /&gt;
On December 24th, 2018 Hasan Joined DGG chat under the username &amp;quot;HasanAbi&amp;quot;.&amp;lt;ref&amp;gt;https://rustlesearch.dev/surrounds?channel=Destinygg&amp;amp;date=2018-12-24T06%3A45%3A50.000Z&amp;amp;username=hasanabi &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== There&#039;s something you value more than democracy... ft. Hasan Piker &amp;amp; H.Bomberguy WIP ===&lt;br /&gt;
https://www.youtube.com/watch?v=YyOnBYaLFwY&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I F#%*ING HATE BREAKING NEWS FT. HASAN PIKER WIP ===&lt;br /&gt;
https://www.youtube.com/watch?v=0FcDO7jYQQ8&lt;br /&gt;
&lt;br /&gt;
=== I DIDN&#039;T KNOW I GRABBED THE MAGNUM XXXL&#039;S Destiny and Hasan IRL WIP ===&lt;br /&gt;
https://www.youtube.com/watch?v=Q4V1zrh0W4A&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== Streamer Drama ft. Hasanabi, Vaush, Marty &amp;amp; RemTheBathBoi WIP ===&lt;br /&gt;
https://www.youtube.com/watch?v=AjszEJBKWRs&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
=== How will Article 13 change YouTube and Twitch? ft. Hasanabi WIP===&lt;br /&gt;
https://www.youtube.com/watch?v=dPtdhXmRgCo&lt;br /&gt;
&lt;br /&gt;
=== Hasan and Destiny debate abortion WIP===&lt;br /&gt;
https://www.youtube.com/watch?v=LZOr-ruA_XM&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I don&#039;t really know if you&#039;re pretending or not... ft. HasanAbi &amp;amp; Emmia WIP===&lt;br /&gt;
https://www.youtube.com/watch?v=stdrVr9BHkE&lt;br /&gt;
&lt;br /&gt;
=== Hasanabi And Destiny BREAK UP Over Kamala Misinformation WIP===&lt;br /&gt;
https://www.youtube.com/watch?v=hLfAuWe3xho &lt;br /&gt;
&lt;br /&gt;
==== Hasanabi And Destiny BREAK UP Aftermath WIP====&lt;br /&gt;
https://www.youtube.com/watch?v=oCsvkP_sVQw&lt;br /&gt;
&lt;br /&gt;
== Notable Clips, Videos, and Tweets and Controversies  ==&lt;br /&gt;
=== Controversies ===&lt;br /&gt;
Throughout his career, Piker has been involved in several controversies, often stemming from his outspoken political views. In 2019, he faced backlash for comments made during a Twitch stream about the September 11 attacks and brave Mujahideen fighters fucking the eye hole of U.S. Representative [[Dan Crenshaw]]. Piker later apologized for the remarks, stating that they were &amp;quot;inappropriate and offensive.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
During the run of Hasan&#039;s show &amp;quot;Bro Tips&amp;quot;, hosted on The Young Turks, he made a number of controversial comments in which he accused Lady Gaga of having a penis, and gave viewers instructions on how to isolate women from their friends, then coerce them into sexual intercourse. {{citation needed}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Remember, old enough to count, old enough to mount.&amp;quot; - Hasan &#039;The Brofessor&#039; Piker {{citation needed}}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;It&#039;s time to get out of here and it&#039;s time to separate her from her herd, meaning her crowd of girlfriends who are going to do their best to cockblock you because they&#039;re fat and ulgy.&amp;quot; - Hasan &#039;The Brofessor&#039; Piker {{citation needed}}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Brotip: If you stand in front of the door, she can&#039;t leave.&amp;quot; - Hasan &#039;The Brofessor&#039; Piker {{citation needed}}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Controversial quotes ====&lt;br /&gt;
* [https://www.youtube.com/shorts/-puwvE_gNjE Is a man not entitled to the sweat of his brow?]&lt;br /&gt;
* [https://www.youtube.com/watch?v=RPOHFBVAzrk?si=SGPZdb6ceFzqoLQh “I paved it on my own” ]&lt;br /&gt;
* [https://www.youtube.com/watch?v=4OPql8KduEA &amp;quot;I live on a basic necessity budget&amp;quot; ]&lt;br /&gt;
* [https://www.videogameschronicle.com/news/twitch-leak-reveals-the-sites-highest-paid-streamers/ &amp;quot;Twitch leak&amp;quot; ]&lt;br /&gt;
* [https://arazu.io/t3_1ahnlin/?timeframe=all&amp;amp;category=hot &amp;quot;I make the same amount of money as a doctor&amp;quot;] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bible Passages ==&lt;br /&gt;
&lt;br /&gt;
=== Genesis 1:1-5 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
In the beginning when Hasan Piker created the internet politics scene, Twitch.tv was a formless void and gaming content covered the face of the deep, while a wind from Hasan Piker swept over the face of the waters.&lt;br /&gt;
&lt;br /&gt;
Then Hasan Piker said, &amp;lt;q&amp;gt;WHAT A FUCKING LIAR DUDE&amp;lt;/q&amp;gt;; and there was light.&lt;br /&gt;
&lt;br /&gt;
And Hasan Piker saw that weaseling was good; and Hasan Piker separated the libs from the real leftists.&lt;br /&gt;
&lt;br /&gt;
Hasan Piker called the leftists Based, and the libs he called Fascists. And there were tankies and there were neolibs, the first day.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mark 10:23-25 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Hasan looked around and said to his disciples, &amp;lt;q&amp;gt;How hard it is for the rich to enter the kingdom of God!&amp;lt;/q&amp;gt; The disciples were amazed at his words. But Hasan said again, &amp;lt;q&amp;gt;Children, how hard it is to enter the kingdom of God! It is easier for a camel to go through the eye of a needle than for someone who is rich to enter the kingdom of God. &#039;&#039;&#039;That being said, its time for the top of the hour adbreak. Is a man not entitled to the sweat of his own brow?&#039;&#039;&#039;&amp;lt;/q&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
*[https://twitch.tv/hasanabi Twitch]&lt;br /&gt;
*[https://www.youtube.com/@hasanabi YouTube]&lt;br /&gt;
*[https://twitter.com/hasanthehun Twitter]&lt;br /&gt;
*[https://www.instagram.com/hasandpiker Instagram]&lt;br /&gt;
*[https://www.tiktok.com/@hasandpiker TikTok]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[[Category:Streamers]]&lt;br /&gt;
&lt;br /&gt;
[[File:Goomba.png|thumb|400px|Hasan Piker]]&lt;br /&gt;
&lt;br /&gt;
Hasan Piker is commonly attributed as the creator of Twitch Politics&lt;br /&gt;
&lt;br /&gt;
he made destiny&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User_talk:TmpXNsDcsQS4&amp;diff=938</id>
		<title>User talk:TmpXNsDcsQS4</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User_talk:TmpXNsDcsQS4&amp;diff=938"/>
		<updated>2024-02-17T23:41:52Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User talk:kizmut}}&lt;br /&gt;
&lt;br /&gt;
Manual signed —[[User:Kizmut | kizmut]] ([[User talk:TmpXNsDcsQS4 |t]]/[[Special:Contributions/TmpXNsDcsQS4 |c]]) 23:41, 17 February 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
Unsigned comment (should me autosigned now)&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User_talk:TmpXNsDcsQS4&amp;diff=937</id>
		<title>User talk:TmpXNsDcsQS4</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User_talk:TmpXNsDcsQS4&amp;diff=937"/>
		<updated>2024-02-17T23:38:32Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User talk:kizmut}}&lt;br /&gt;
&lt;br /&gt;
Manual signed [[User:Kizmut | kizmut]] ([[User talk:TmpXNsDcsQS4 | t]]/[[Special:Contributions/TmpXNsDcsQS4 | c]]) 23:38, 17 February 2024 (UTC)&lt;br /&gt;
&lt;br /&gt;
Unsigned comment (should me autosigned now)&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User_talk:Kizmut&amp;diff=936</id>
		<title>User talk:Kizmut</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User_talk:Kizmut&amp;diff=936"/>
		<updated>2024-02-17T23:36:32Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Redirected page to User talk:TmpXNsDcsQS4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User talk:TmpXNsDcsQS4]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=935</id>
		<title>User:Kizmut</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=935"/>
		<updated>2024-02-17T23:33:50Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User:kizmut}}&lt;br /&gt;
&#039;&#039;[[Special:Contributions/TmpXNsDcsQS4 | Contribs]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Category Tree==&lt;br /&gt;
&amp;lt;categorytree mode=&amp;quot;pages&amp;quot;&amp;gt;DGG Chat&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=934</id>
		<title>User:Kizmut</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=934"/>
		<updated>2024-02-17T23:32:16Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:User:kizmut}}&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Category Tree==&lt;br /&gt;
&amp;lt;categorytree mode=&amp;quot;pages&amp;quot;&amp;gt;DGG Chat&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:TmpXNsDcsQS4&amp;diff=933</id>
		<title>User:TmpXNsDcsQS4</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:TmpXNsDcsQS4&amp;diff=933"/>
		<updated>2024-02-17T23:30:30Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: kizmut&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[User:Kizmut]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=932</id>
		<title>User:Kizmut</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:Kizmut&amp;diff=932"/>
		<updated>2024-02-17T23:29:40Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: kizmut&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Category Tree==&lt;br /&gt;
&amp;lt;categorytree mode=&amp;quot;pages&amp;quot;&amp;gt;DGG Chat&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User_talk:TmpXNsDcsQS4&amp;diff=931</id>
		<title>User talk:TmpXNsDcsQS4</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User_talk:TmpXNsDcsQS4&amp;diff=931"/>
		<updated>2024-02-03T13:04:32Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;Unsigned comment (should me autosigned now)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Unsigned comment (should me autosigned now)&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:TmpXNsDcsQS4&amp;diff=930</id>
		<title>User:TmpXNsDcsQS4</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:TmpXNsDcsQS4&amp;diff=930"/>
		<updated>2024-02-03T13:00:35Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: category tree&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Category Tree==&lt;br /&gt;
&amp;lt;categorytree mode=&amp;quot;pages&amp;quot;&amp;gt;DGG Chat&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Category:American_bisexual_people&amp;diff=929</id>
		<title>Category:American bisexual people</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Category:American_bisexual_people&amp;diff=929"/>
		<updated>2024-02-03T12:58:19Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Person]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Category:American_bisexual_people&amp;diff=928</id>
		<title>Category:American bisexual people</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Category:American_bisexual_people&amp;diff=928"/>
		<updated>2024-02-03T12:57:05Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;Category:People&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:People]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=User:TmpXNsDcsQS4&amp;diff=927</id>
		<title>User:TmpXNsDcsQS4</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=User:TmpXNsDcsQS4&amp;diff=927"/>
		<updated>2024-02-03T12:46:27Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot; Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on Talk Page  ==Lua Version of Infobox== Still testing Lua support for infobox templates so that not all parameters need to be included.   {{Template:Infobox Person/sandbox |person_name = kizmut |image = QJhzIpU.png |policital_alignment = Omni Liberal |person_age = 5 |twitter = kizmut }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Notice: Testing being done on this page. If template tweaks interfere with your edits please submit comment on [[User talk:Kizmut |Talk Page]]&lt;br /&gt;
&lt;br /&gt;
==Lua Version of Infobox==&lt;br /&gt;
Still testing Lua support for infobox templates so that not all parameters need to be included.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Template:Infobox Person/sandbox&lt;br /&gt;
|person_name = kizmut&lt;br /&gt;
|image = QJhzIpU.png&lt;br /&gt;
|policital_alignment = Omni Liberal&lt;br /&gt;
|person_age = 5&lt;br /&gt;
|twitter = kizmut&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=926</id>
		<title>Template:Infobox Person/sandbox</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=Template:Infobox_Person/sandbox&amp;diff=926"/>
		<updated>2024-02-03T12:45:16Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: Created page with &amp;quot;{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 20em; font-size: 90%; text-align: left;&amp;quot; |- | colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &amp;#039;&amp;#039;&amp;#039;{{{person_name}}}&amp;#039;&amp;#039;&amp;#039; |- {{#if: {{{image|}}}| {{!}} colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; {{!}} 250px&amp;lt;br&amp;gt;{{{caption|}}}}} |- ! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Person |- ! Status | {{{person_status}}} |- {{#if: {{{political_alignment|}}}| ! Political Al...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;width: 20em; font-size: 90%; text-align: left;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: larger; text-align: center;&amp;quot; | &#039;&#039;&#039;{{{person_name}}}&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{image|}}}|&lt;br /&gt;
{{!}} colspan=&amp;quot;2&amp;quot; style=&amp;quot;font-size: smaller; text-align: center;&amp;quot; {{!}} [[image:{{{image}}}|250px]]&amp;lt;br&amp;gt;{{{caption|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Person&lt;br /&gt;
|-&lt;br /&gt;
! Status&lt;br /&gt;
| {{{person_status}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{political_alignment|}}}|&lt;br /&gt;
! Political Alignment&lt;br /&gt;
{{!}} {{{political_alignment|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{qualifications|}}}|&lt;br /&gt;
! Qualifications&lt;br /&gt;
{{!}} {{{qualifications|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{occupation|}}}|&lt;br /&gt;
! Occupation&lt;br /&gt;
{{!}} {{{occupation|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{person_age|}}}|&lt;br /&gt;
! Age&lt;br /&gt;
{{!}} {{{person_age|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{country|}}}|&lt;br /&gt;
! Country of origin&lt;br /&gt;
{{!}} {{{country|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Media&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{website|}}}|&lt;br /&gt;
! Website&lt;br /&gt;
{{!}} {{{website|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{twitter|}}}|&lt;br /&gt;
! Twitter&lt;br /&gt;
{{!}} https://twitter.com/{{{twitter|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{instagram|}}}|&lt;br /&gt;
! Instagram&lt;br /&gt;
{{!}} {{{instagram|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{youtube|}}}|&lt;br /&gt;
! Youtube&lt;br /&gt;
{{!}} {{{youtube|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{stock|}}}|&lt;br /&gt;
! Manifolds Market&lt;br /&gt;
{{!}} {{{stock|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background-color: #ccccff; text-align: center;&amp;quot; | Other&lt;br /&gt;
|-&lt;br /&gt;
{{#if: {{{awards|}}}|&lt;br /&gt;
! Awards&lt;br /&gt;
{{!}} {{{awards|}}}}}&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
{{{{FULLPAGENAME}}/doc}}&lt;br /&gt;
[[Category:Template Infobox]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=DGG_Chat&amp;diff=793</id>
		<title>DGG Chat</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=DGG_Chat&amp;diff=793"/>
		<updated>2023-07-30T15:41:48Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: /* Emotes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DGG Chat can be found here accompanied with &amp;quot;Bigscreen&amp;quot;&lt;br /&gt;
https://www.destiny.gg/bigscreen&lt;br /&gt;
&lt;br /&gt;
Direct link to chat only:&lt;br /&gt;
https://www.destiny.gg/embed/chat?follow=%2Fbigscreen&lt;br /&gt;
&lt;br /&gt;
===Emotes===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin:auto&amp;quot;&lt;br /&gt;
! Emote Name || Emote || Description || Hazard Level&lt;br /&gt;
|-&lt;br /&gt;
| [[Abathur]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/5c2bbb92c428e.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[AbaW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[AMAZIN]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[AngelThump]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ApeHands]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Askers]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ASLAN]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ATAB]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Aware]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[AYAYA]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[AYYYLMAO]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BasedGod]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BASEDWATM8]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BERN]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BibleThump]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BINGQILIN]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BLADE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Blesstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Blubstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BOGGED]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BOOMER]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[BoomerSippy]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[catJAM]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Chatting]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[CheekerZ]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ChibiDesti]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Clap]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Clueless]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[COGGERS]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ComfyAYA]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ComfyCat]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ComfyDan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ComfyDog]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[comfYEE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ComfyFerret]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ComfyMel]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[coMMMMfy]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[COOMER]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[COOMfy]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Copium]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || || HIGH  &lt;br /&gt;
|- &lt;br /&gt;
|  [[CROPSTINY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[CuckCrab]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Cutestiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[CUX]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DaFeels]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DAFUK]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DANKMEMES]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DappaKappa]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DatGeoff]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DCOLON]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DEATH]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Depresstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Derpstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DestiSenpaii]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[dggL]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Disgustiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Dravewin]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DuckerZ]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[DURRSTINY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ECH]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeedNathan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsAmazingMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsBadMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsBirthdayMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsDankMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsGimiMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsGoodMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsOkayMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsPeekMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsStrongMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FeelsWeirdMan]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FerretLOL]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FiveHead]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ForYou]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FourHead]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[FrankerZ]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[gachiGASM]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[GameOfThrows]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[GIGACHAD]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[GODSTINY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[GRUG]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[GRUGingOverIt]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[HACKERMAN]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[haHAA]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/5c64578911392.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Heimerdonger]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Hhhehhehe]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[HmmStiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[HUH]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[INFESTINY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ITSRAWWW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[JAMSTINY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Kappa]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[KappaRoss]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[KING]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Klappa]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[LeRuse]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[LIES]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[LOVE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[LUL]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[LULW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[MALARKEY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[MASTERB8]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[melW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Memegasm]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Milkerino]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[miyanobird]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[MiyanoHype]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[MLADY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[MMMM]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[monkaS]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[monkaSMEGA]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[monkaVirus]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[MotherFuckinGame]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NAHH]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NAILS]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Nappa]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanAYAYA]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanBlub]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanBogged]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanBoomer]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanD]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanDank]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanDerp]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanEZ]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanF]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanFeels]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanGG]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanGod1]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanGod2]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanGod3]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanGod4]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanGodstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanNotears]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanObject]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanOOO]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanPepe]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanPrime]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanRuse]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanRustle]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanSenpai]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanShroom]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanThinking]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanTiny1]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanTiny2]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanTiny2_OG]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanTowel]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanWat]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanWeeb]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanYee]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanYikes]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[nathanZoomer]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NiceMeMe]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NOBULLY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NODDERS]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NOOOO]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NOPERS]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NoTears]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[NOTMYTEMPO]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[OBJECTION]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[OhKrappa]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[OhMyDog]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[OMEGALUL]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[OneGuy]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[OOOO]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[OverRustle]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Painstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PARDNER]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[peepoRiot]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PEPE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepeHands]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[pepeJAM]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepeLaugh]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepeMods]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[pepeSteer]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[pepeW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepoComfy]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepoG]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepOk]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepoThink]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepoTurkey]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PepoWant]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[PICNIC]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Pog]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[POGGERS]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[POOTUBE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[POTATO]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[RapThis]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[RaveDoge]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[REE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Shroomstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Shrugstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SICKO]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Sippy]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SLEEPSTINY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Slugstiny]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Slumlord]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SMASHit]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SNAP]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SoDoge]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SOTRIGGERED]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SOY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SpookerZ]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SURPRISE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[SWEATSTINY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[TeddYEE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[TeddyPepe]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[TF]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[tonyW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[triHarder]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[TRUMPED]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[UNLUCKY]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[UWOTM8]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[WhoahDude]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[WICKED]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[widepeepoHappy]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[WOOF]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[WooYeah]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[WORTH]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Wowee]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[YAM]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[YEE]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[YEEHAW]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[YeeLaugh]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[YeeMods]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[Yoda1]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || ||  &lt;br /&gt;
|- &lt;br /&gt;
|  [[ZOOMER]] || [[File:https://cdn.destiny.gg/2.79.0/emotes/.png| ]] || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:DGG]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=DatGeoff&amp;diff=792</id>
		<title>DatGeoff</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=DatGeoff&amp;diff=792"/>
		<updated>2023-07-30T15:40:45Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
DatGeoff is an emote of Geoffrey John Vincent Robinson aka InControl, a streamer, Starcraft 2 commentator/player, and friend of Destiny. Died in 2019. Started a D&amp;amp;D campaign with Destiny, that was well received. The emote itself is a picture of InControl that signifies a lustful reaction.&lt;br /&gt;
&lt;br /&gt;
[[Category:DGG Chat]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=FerretLOL&amp;diff=791</id>
		<title>FerretLOL</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=FerretLOL&amp;diff=791"/>
		<updated>2023-07-30T15:40:05Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FerretLOL is a popular emote within the DGG community. It features an adorable picture of a ferret in a state of laughter, often used to express amusement or joy. The emote is widely recognized and appreciated for its cute and lighthearted nature.&lt;br /&gt;
&lt;br /&gt;
[[File:Ferrets.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DGG Chat]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=GIGACHAD&amp;diff=790</id>
		<title>GIGACHAD</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=GIGACHAD&amp;diff=790"/>
		<updated>2023-07-30T15:39:38Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GIGACHAD IS A MIGHTY ENTITY, THE BEACON OF ABSURDITY, SUPREME OVERLORD OF TROLLING, PROCLAIMING OUTRAGEOUS BELIEFS AND JOKING ABOUT UNBELIEVABLE SCENARIOS. GIGACHAD STOMPS ON THE SOY -INDUCED CRIES OF HIS NAÏVE CRITICS, WHILE LAUGHING IN GIGACHADIAN GLORY. GIGACHAD SHALL FOREVER LIVE ON, FIRMLY EMBEDDED IN THE CHAOTIC MEMESCAPE OF OUR COLLECTIVE CONSCIOUS&lt;br /&gt;
&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L&lt;br /&gt;
.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L&lt;br /&gt;
.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.&lt;br /&gt;
L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.vv&lt;br /&gt;
&lt;br /&gt;
[[Category:DGG Chat]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
	<entry>
		<id>https://wiki.omniliberal.dev/index.php?title=HUH&amp;diff=789</id>
		<title>HUH</title>
		<link rel="alternate" type="text/html" href="https://wiki.omniliberal.dev/index.php?title=HUH&amp;diff=789"/>
		<updated>2023-07-30T15:39:05Z</updated>

		<summary type="html">&lt;p&gt;TmpXNsDcsQS4: +cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This emote has been annoying me ever since it was introduced. Retards in chat keep highlighting me because they use tab completion and tag me several times every day now. &lt;br /&gt;
&lt;br /&gt;
[[File:HUH.png|200px|thumb|left|HUH]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sincerely, huhu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you think this is bad, imagine being tagged every time Gnomey gives a retarded food take&lt;br /&gt;
&lt;br /&gt;
Sincerely, Palette (taste buds = palate)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DGG Chat]]&lt;/div&gt;</summary>
		<author><name>TmpXNsDcsQS4</name></author>
	</entry>
</feed>