Wikipidiya
bolwiki
https://bol.wikipedia.org/wiki/Peji_In_Siri
MediaWiki 1.47.0-wmf.16
first-letter
Media
Inmusamman
Mossa
Ruta
Rutta mossa
Wikipidiya
Wikipidiya mossa
Fayil
Fayil mossa
MediaWiki
MediaWiki mossa
Tempilet
Tempilet mossa
Taimako
Taimako mossa
Panni
Panni mossa
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Peji In Siri
0
1
10513
10512
2026-08-25T13:35:29Z
RAPTOR7762
18
10513
wikitext
text/x-wiki
__NOTOC__ __NOEDITSECTION__
<!--{{Protection padlock|small=yes}}-->
{{Top icon|image=Wikimedia Community Logo.svg|link=m:Bole Wikimedians User Group}}
{{Top icon|image=2023 Facebook icon.svg|link=https://www.facebook.com/61590521903033/}}
<div style="text-align:center;">
{{Clickable button|Special:Purge/Peji In Siri|Purge this page|class=mw-ui-progressive}}
</div>
<templatestyles src="Main page/Styles.css" />
<div style="position:relative; text-align:center; padding:3em 1em; background:#fff; overflow:hidden;">
<div style="position:absolute; top:-50px; left:0; right:0; text-align:center; opacity:0.1; z-index:0;">
[[File:Wikipedia-logo-v2.svg|650px|center|class=notpageimage|link=]]
</div>
<div style="position:relative; z-index:1;">
<div style="font-variant:small-caps; font-family:'Linux Libertine','Georgia',serif;"><div style="font-size:180%;">U'se ga nako</div>
<div style="font-size:270%; line-height:1;">[[Wikipidiya|<span style="display: inline-block; letter-spacing: -0.35em; margin-right: 0.2em; font-family: serif;">V<span style="margin-left: -0.1em;">V</span></span>ikipidiya]] in bòo pìkkà</div>
</div>
<div style="font-size:120%; line-height:1.2;"> Wikipidiya ensakulopidiya in lelo in [[Harshe Bole]] la lemalo agita ina ramayi.</div>
<div style="font-size:120%; line-height:1.2;"> Honsene Andi makaloli '''[[Special:AllPages|{{NUMBEROFARTICLES}}]]''' ga harshe Bole</div>
</div>
<div style="text-align:center;">
[[File:Wikimedia Community Logo.svg|30px|link=m:Bole Wikimedians User Group]] [[File:2023 Facebook icon.svg|30px|link=https://www.facebook.com/61590521903033/]]
</div>
</div>
<div style="margin:10px 0px 10px 0px; -moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); -webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); background-color:#FFFFFF;">
{| style="border-spacing: 1px; border-collapse: separate; width:100%; text-align:center; font-size:0.85em; padding:2px 3px 2px 3px;" class="hp-portalen"
| style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Atiimala|<span style="color:#000000;">Atiimala</span>]]
| style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Annoba|<span style="color:#000000;">Annoba</span>]]
| style="background-color:#F0F4F9; border-top:5px solid; border-color:#336699; padding:3px 0.15em; width:6.6%;" | [[:Category:Fasaha|<span style="color:#000000;">Fasaha</span>]]
| style="background-color:#F9F0F0; border-top:5px solid; border-color:#993333; padding:3px 0.15em; width:6.6%;" | [[:Category:Ilimi|<span style="color:#000000;">Ilimi</span>]]
| style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Lamba|<span style="color:#000000;">Lamba</span>]]
| style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Miyya|<span style="color:#000000;">Miyya</span>]]
| style="background-color:#F9F9F0; border-top:5px solid; border-color:#999933; padding:3px 0.15em; width:6.6%;" | [[:Category:Makami|<span style="color:#000000;">Makami</span>]]
| style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Malunwa|<span style="color:#000000;">Malunwa</span>]]
| style="background-color:#F0F9F0; border-top:5px solid; border-color:#339933; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii|<span style="color:#000000;">Olii</span>]]
| style="background-color:#F9F0F4; border-top:5px solid; border-color:#993366; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii pewe|<span style="color:#000000;">Olii pewe</span>]]
| style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Tarihi|<span style="color:#000000;">Tarihi</span>]]
| style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Goma|<span style="color:#000000;">Goma</span>]]
| style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Kimiyya|<span style="color:#000000;">Kimiyya</span>]]
| style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Zane|<span style="color:#000000;">Zane</span>]]
|}
</div>
<templatestyles src="Main page/Styles.css" />
<div style="flex:1; min-width:300px; overflow:hidden; border-radius:4px; margin:8px 4px 4px 4px; box-shadow:0 0 8px rgba(0,0,0,0.15);">
<div class="image-carousel">
<ul>
<li>
<div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;">
<div style="padding:5px 10px; color:#333333;">[[File:Star-alt-icon.png|20px|link=]] Featured Article</div>
</div>
<div class="carousel-image">
[[File:The City Gate of Abuja.jpg|center|class=carousel-image-wrapper|link=Nijeriya|Nijeriya]]
</div>
<div class="carousel-slide-content-wrapper">
<div class="carousel-slide-content">
<div class="carousel-slide-description">Nijeriya ko Nijeriya da (turanci: Nigeria): A Gwamanatance Tarayyar Najeriya, woli la ga take ga Africa ko zoni ita ji tetteke woli niger koga Arewa. Ga Chadi koga zoni koga aushi jam aji dar ga teku Atlantika.</div>
<div class="carousel-slide-title">[[Nijeriya]]</div>
</div>
</div>
</li>
<li>
<div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;">
<div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat sign-question.svg|20px|link=]] Kamontuwo?</div>
</div>
<div class="carousel-image">
[[File:Gooya mountain.jpg|center|class=carousel-image-wrapper|link=Gooya mountain]]
</div>
<div class="carousel-slide-content-wrapper">
<div class="carousel-slide-content">
<div class="carousel-slide-description">Gooya kam zoi wuro la tudu ga arewa [[Nijeriya]], inda Bòo pikka ye kam la yare miyya aji magana da yawa ga yankin da ke kewaye.
</div>
<div class="carousel-slide-title">[[Potiskum]]</div>
</div>
</div>
</li>
<li>
<div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;">
<div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat file-picture.svg|20px|link=]] Featured Picture</div>
</div>
<div class="carousel-image">
[[File:Daniski Festival 04.jpg|center|class=carousel-image-wrapper|link=File:Daniski Festival 04.jpg]]
</div>
<div class="carousel-slide-content-wrapper">
<div class="carousel-slide-content">
<div class="carousel-slide-description">Daniski Hills Annual Festival kam zoi tarayya la al’ada, ba Bòo pikka ga Fika Emirate ga Yobe State, [[Nijeriya]].
</div>
<div class="carousel-slide-title">[[:File:Daniski Festival 04.jpg|Daniski Festival Picture]]</div>
</div>
</div>
</li>
</ul>
</div>
</div>
<div style="display:flex; flex-wrap:wrap;">
{{Box
|header=[[File:Paomedia small-n-flat sign-info.svg|20px|link=]] Elle Wikipidiya?
|content=<span style="float: left; margin: 6px 12px 6px 0px; display: inline-block;">[[File:Wikipedia-logo-v2-bol.svg|100px]]</span>Wikipidiya shafi ji in Yana gizonla ona gudumawa inko rubutu mukalai kala aji gidan ga goggo gozi ilmi do ramu-ramu ga messesu. Gabo turanci ga unda shap Maddi la ramu ramu do gede ga ilmi ga shafuka Wikipedia ga sun Wikipedia, wikipidiya aji tattira ga harsuna GA duniya ga godon shafuka lemalo aji kirkira do ramu mukalai gabo kyauta inko taimako beyi wena ilmi bo kyauta, emeyye aji Wikipedia ga zarrar a shap ga duniya beyi wena ilmi koga asali beyi ilmi fetengo.
}}
{{Box
|header=[[File:Paomedia small-n-flat pencil.svg|20px|link=]] Kirkiru Foyo Article
|content=Kaji kume Harshe Bole? Kagita ina taimako beyi Bunƙasa kunsu eme Mona (ensakulopidiya) ko goggo kirkire foyo makaloli do fadada la aji Andi ga fatan aji doffa ka'idoji Al'umma lokaci ona ga gundumawa.<br><small><i></i></small>
<div style="margin-top:1em;">
<inputbox>
type=create
width=30
default=
buttonlabel=Kirkiru Foyo Makala
</inputbox>
</div>
}}
</div>
{{Box
|header=English speakers
|content=If you speak English, but you don't know anything about the Bole Language, you are also welcome to edit and assist in technical support, such as maintaining Templates or Modules. Your role is vital to the smooth running of the Bole Wikipedia!
}}
{{Box
|header=[[File:Wikimedia-logo.svg|20px|link=]] Project Modi
|content={{SisterProjects}}
}}
{{Bole Wikimedians User Group}}
<div class="mobile-only">
{{Bole Wikimedians User Group/mobile}}
</div>
sit1oslhsfj0xgvac7ehggrhyxlo6ki
10572
10513
2026-08-25T23:31:54Z
RAPTOR7762
18
10572
wikitext
text/x-wiki
__NOTOC__ __NOEDITSECTION__
<!--{{Protection padlock|small=yes}}-->
{{Top icon|image=Wikimedia Community Logo.svg|link=m:Bole Wikimedians User Group}}
{{Top icon|image=2023 Facebook icon.svg|link=https://www.facebook.com/61590521903033/}}
<div style="text-align:center;">
{{Clickable button|Special:Purge/Peji In Siri|Purge this page|class=mw-ui-progressive}}
</div>
<templatestyles src="Main page/Styles.css" />
<div style="position:relative; text-align:center; padding:3em 1em; background:#fff; overflow:hidden;">
<div style="position:absolute; top:-50px; left:0; right:0; text-align:center; opacity:0.1; z-index:0;">
[[File:Wikipedia-logo-v2.svg|650px|center|class=notpageimage|link=]]
</div>
<div style="position:relative; z-index:1;">
<div style="font-variant:small-caps; font-family:'Linux Libertine','Georgia',serif;"><div style="font-size:180%;">U'se ga nako</div>
<div style="font-size:270%; line-height:1;">[[Wikipidiya|<span style="display: inline-block; letter-spacing: -0.35em; margin-right: 0.2em; font-family: serif;">V<span style="margin-left: -0.1em;">V</span></span>ikipidiya]] in bòo pìkkà</div>
</div>
<div style="font-size:120%; line-height:1.2;"> Wikipidiya ensakulopidiya in lelo in [[Harshe Bole]] la lemalo agita ina ramayi.</div>
<div style="font-size:120%; line-height:1.2;"> Honsene Andi makaloli '''[[Special:AllPages|{{NUMBEROFARTICLES}}]]''' ga harshe Bole</div>
</div>
</div>
<div style="text-align:center;">
[[File:Wikimedia Community Logo.svg|30px|link=m:Bole Wikimedians User Group]] [[File:2023 Facebook icon.svg|30px|link=https://www.facebook.com/61590521903033/]]
</div>
<div style="margin:10px 0px 10px 0px; -moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); -webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); box-shadow:0 1px 1px rgba(0, 0, 0, 0.1); background-color:#FFFFFF;">
{| style="border-spacing: 1px; border-collapse: separate; width:100%; text-align:center; font-size:0.85em; padding:2px 3px 2px 3px;" class="hp-portalen"
| style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Atiimala|<span style="color:#000000;">Atiimala</span>]]
| style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Annoba|<span style="color:#000000;">Annoba</span>]]
| style="background-color:#F0F4F9; border-top:5px solid; border-color:#336699; padding:3px 0.15em; width:6.6%;" | [[:Category:Fasaha|<span style="color:#000000;">Fasaha</span>]]
| style="background-color:#F9F0F0; border-top:5px solid; border-color:#993333; padding:3px 0.15em; width:6.6%;" | [[:Category:Ilimi|<span style="color:#000000;">Ilimi</span>]]
| style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Lamba|<span style="color:#000000;">Lamba</span>]]
| style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Miyya|<span style="color:#000000;">Miyya</span>]]
| style="background-color:#F9F9F0; border-top:5px solid; border-color:#999933; padding:3px 0.15em; width:6.6%;" | [[:Category:Makami|<span style="color:#000000;">Makami</span>]]
| style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Malunwa|<span style="color:#000000;">Malunwa</span>]]
| style="background-color:#F0F9F0; border-top:5px solid; border-color:#339933; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii|<span style="color:#000000;">Olii</span>]]
| style="background-color:#F9F0F4; border-top:5px solid; border-color:#993366; padding:3px 0.15em; width:6.6%;" | [[:Category:Olii pewe|<span style="color:#000000;">Olii pewe</span>]]
| style="background-color:#F0F0F9; border-top:5px solid; border-color:#333399; padding:3px 0.15em; width:6.6%;" | [[:Category:Tarihi|<span style="color:#000000;">Tarihi</span>]]
| style="background-color:#F0F9F9; border-top:5px solid; border-color:#339999; padding:3px 0.15em; width:6.6%;" | [[:Category:Goma|<span style="color:#000000;">Goma</span>]]
| style="background-color:#F9F0F9; border-top:5px solid; border-color:#993399; padding:3px 0.15em; width:6.6%;" | [[:Category:Kimiyya|<span style="color:#000000;">Kimiyya</span>]]
| style="background-color:#F4F9F0; border-top:5px solid; border-color:#669933; padding:3px 0.15em; width:6.6%;" | [[:Category:Zane|<span style="color:#000000;">Zane</span>]]
|}
</div>
<templatestyles src="Main page/Styles.css" />
<div style="flex:1; min-width:300px; overflow:hidden; border-radius:4px; margin:8px 4px 4px 4px; box-shadow:0 0 8px rgba(0,0,0,0.15);">
<div class="image-carousel">
<ul>
<li>
<div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;">
<div style="padding:5px 10px; color:#333333;">[[File:Star-alt-icon.png|20px|link=]] Featured Article</div>
</div>
<div class="carousel-image">
[[File:The City Gate of Abuja.jpg|center|class=carousel-image-wrapper|link=Nijeriya|Nijeriya]]
</div>
<div class="carousel-slide-content-wrapper">
<div class="carousel-slide-content">
<div class="carousel-slide-description">Nijeriya ko Nijeriya da (turanci: Nigeria): A Gwamanatance Tarayyar Najeriya, woli la ga take ga Africa ko zoni ita ji tetteke woli niger koga Arewa. Ga Chadi koga zoni koga aushi jam aji dar ga teku Atlantika.</div>
<div class="carousel-slide-title">[[Nijeriya]]</div>
</div>
</div>
</li>
<li>
<div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;">
<div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat sign-question.svg|20px|link=]] Kamontuwo?</div>
</div>
<div class="carousel-image">
[[File:Gooya mountain.jpg|center|class=carousel-image-wrapper|link=Gooya mountain]]
</div>
<div class="carousel-slide-content-wrapper">
<div class="carousel-slide-content">
<div class="carousel-slide-description">Gooya kam zoi wuro la tudu ga arewa [[Nijeriya]], inda Bòo pikka ye kam la yare miyya aji magana da yawa ga yankin da ke kewaye.
</div>
<div class="carousel-slide-title">[[Potiskum]]</div>
</div>
</div>
</li>
<li>
<div style="background:#FFF; padding:5px; font-size:150%; font-family:'Arial',sans-serif; position: relative; z-index: 2;">
<div style="padding:5px 10px; color:#333333;">[[File:Paomedia small-n-flat file-picture.svg|20px|link=]] Featured Picture</div>
</div>
<div class="carousel-image">
[[File:Daniski Festival 04.jpg|center|class=carousel-image-wrapper|link=File:Daniski Festival 04.jpg]]
</div>
<div class="carousel-slide-content-wrapper">
<div class="carousel-slide-content">
<div class="carousel-slide-description">Daniski Hills Annual Festival kam zoi tarayya la al’ada, ba Bòo pikka ga Fika Emirate ga Yobe State, [[Nijeriya]].
</div>
<div class="carousel-slide-title">[[:File:Daniski Festival 04.jpg|Daniski Festival Picture]]</div>
</div>
</div>
</li>
</ul>
</div>
</div>
<div style="display:flex; flex-wrap:wrap;">
{{Box
|header=[[File:Paomedia small-n-flat sign-info.svg|20px|link=]] Elle Wikipidiya?
|content=<span style="float: left; margin: 6px 12px 6px 0px; display: inline-block;">[[File:Wikipedia-logo-v2-bol.svg|100px]]</span>Wikipidiya shafi ji in Yana gizonla ona gudumawa inko rubutu mukalai kala aji gidan ga goggo gozi ilmi do ramu-ramu ga messesu. Gabo turanci ga unda shap Maddi la ramu ramu do gede ga ilmi ga shafuka Wikipedia ga sun Wikipedia, wikipidiya aji tattira ga harsuna GA duniya ga godon shafuka lemalo aji kirkira do ramu mukalai gabo kyauta inko taimako beyi wena ilmi bo kyauta, emeyye aji Wikipedia ga zarrar a shap ga duniya beyi wena ilmi koga asali beyi ilmi fetengo.
}}
{{Box
|header=[[File:Paomedia small-n-flat pencil.svg|20px|link=]] Kirkiru Foyo Article
|content=Kaji kume Harshe Bole? Kagita ina taimako beyi Bunƙasa kunsu eme Mona (ensakulopidiya) ko goggo kirkire foyo makaloli do fadada la aji Andi ga fatan aji doffa ka'idoji Al'umma lokaci ona ga gundumawa.<br><small><i></i></small>
<div style="margin-top:1em;">
<inputbox>
type=create
width=30
default=
buttonlabel=Kirkiru Foyo Makala
</inputbox>
</div>
}}
</div>
{{Box
|header=English speakers
|content=If you speak English, but you don't know anything about the Bole Language, you are also welcome to edit and assist in technical support, such as maintaining Templates or Modules. Your role is vital to the smooth running of the Bole Wikipedia!
}}
{{Box
|header=[[File:Wikimedia-logo.svg|20px|link=]] Project Modi
|content={{SisterProjects}}
}}
{{Bole Wikimedians User Group}}
<div class="mobile-only">
{{Bole Wikimedians User Group/mobile}}
</div>
odpk0d3tnas1jlgglk2fy3juvazfrq0
Tempilet:Clear
10
49
10689
2020-01-20T16:01:00Z
commons>Tulsi
0
Reverted: per talk page
10689
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};"></div><noinclude>
{{documentation}}
</noinclude>
6mk3e4afot6hzu6tzbljxxk83e14xv6
10690
9234
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Clear]]
8288
wikitext
text/x-wiki
<div style="clear:{{{1|both}}};" class={{{class|}}}></div><noinclude>
{{Documentation}}
</noinclude>
17aszado3hry2vhcvwg5rsftmytfm6b
Tempilet:Clickable button
10
51
10749
2017-12-25T12:09:09Z
commons>Zhuyifei1999
0
- extra linebreak
10749
wikitext
text/x-wiki
<onlyinclude>{{#if:{{{3|{{{external|}}}}}}
| <span class="plainlinks" {{#if:{{{id|}}}|id="{{{id}}}"}}>[{{{1|{{{target|//parameter_target_is_empty.de}}}}}} <span class="submit ui-button ui-widget ui-state-default ui-corner-all {{Clickable button/iconclass
|{{{4|{{{iconPrimary|}}}}}}
|{{{5|{{{iconSecondary|}}}}}}
|{{{2|{{{text|<noinclude>x</noinclude>}}}}}}
}} {{{class|}}}" role="button" aria-disabled="false"><!-- // -->{{#if:{{{4|{{{iconPrimary|}}}}}}
|<span class="ui-button-icon-primary ui-icon {{{4|{{{iconPrimary}}}}}}"> </span>
}}<span class="ui-button-text">{{{2|{{{text|Parameter '''text''' is empty}}}}}}</span>{{#if:{{{5|{{{iconSecondary|}}}}}}
|<span class="ui-button-icon-secondary ui-icon {{{5|{{{iconSecondary|}}}}}}"> </span>
}}</span>]</span><!--
-->
| [[{{{1|{{{target|Parameter target is empty!}}}}}}|<span class="submit ui-button ui-widget ui-state-default ui-corner-all {{Clickable button/iconclass
|{{{4|{{{iconPrimary|}}}}}}
|{{{5|{{{iconSecondary|}}}}}}
|{{{2|{{{text|<noinclude>x</noinclude>}}}}}}
}} {{{class|}}}" role="button" aria-disabled="false" {{#if:{{{id|}}}|id="{{{id}}}"}}><!-- // -->{{#if:{{{4|{{{iconPrimary|}}}}}}
|<span class="ui-button-icon-primary ui-icon {{{4|{{{iconPrimary}}}}}}"> </span>
}}<span class="ui-button-text">{{{2|{{{text|Parameter '''text''' is empty}}}}}}</span>{{#if:{{{5|{{{iconSecondary|}}}}}}
|<span class="ui-button-icon-secondary ui-icon {{{5|{{{iconSecondary|}}}}}}"> </span>
}}</span>]]
}}<!--
--></onlyinclude>
{{documentation}}
<!-- Add categories and interwikis to Template:Clickable button/doc subpage, not here! -->
3ivm5ze15yjn0qltf3rr8x93yd042c0
10750
8290
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Clickable_button]]
8290
wikitext
text/x-wiki
<includeonly><span class="plainlinks">[{{#if:{{{url|}}}
|{{{url}}}
|[{{{1|}}}{{!}}
}}<span class="mw-ui-button {{{class|}}}" role="button" aria-disabled="false" style="{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME}}|cursor: default;
{{#switch:{{{class|}}}
| mw-ui-progressive = background-color: #2962CB;
| mw-ui-constructive = background-color: #008B6D;
| mw-ui-destructive = background-color: #A6170F;
| #default = background-color: #CCC; color:#666;
}}}} {{{style|}}}">{{#if:{{{url|}}}
| {{{label|{{{1|{{{url}}}}}}}}}</span>
| {{{label|{{{2|{{{1}}}}}}}}}</span>]
}}]</span></includeonly><noinclude>
{{Documentation}}
<templatedata>
{
"params": {
"1": {
"label": "target",
"description": "Link target page. Becomes the title when used with url",
"type": "wiki-page-name",
"required": true
},
"2": {
"aliases": [
"label"
],
"label": "label",
"description": "Button label",
"default": "Target page"
},
"url": {
"type": "url"
},
"class": {},
"style": {}
},
"description": "This template generates a clickable button that is styled using the mediawiki.ui.button module.\n",
"format": "inline"
}
</templatedata>
</noinclude>
sepjmodion0iklzfaaa2i4pyl7h7rgs
Tempilet:Documentation
10
81
10819
8878
2022-11-27T20:49:57Z
commons>Tacsipacsi
0
Undo revision 710061475 by [[Special:Contributions/Sarang|Sarang]] ([[User talk:Sarang|talk]]): undocumented, unused parameter. This is not a sandbox, this is the LIVE template.
10819
wikitext
text/x-wiki
<!-- {{#invoke:Autotranslate|autotranslate}} is used to avoid "Warning: This page calls Template:Autotranslate which causes a template loop (an infinite recursive call). "-->
<onlyinclude>{{#invoke:Autotranslate|autotranslate
| base = Template:Documentation/i18n
|lang = {{{lang|{{int:Lang}} }}}
|1 = {{#if:{{{1|}}}
|{{{1}}}
|{{#ifexist:{{SUBJECTPAGENAME}}/doc
|{{SUBJECTPAGENAME}}/doc
|{{#ifexist:{{#titleparts:{{SUBJECTPAGENAME}}|-1}}/doc
|{{#titleparts:{{SUBJECTPAGENAME}}|-1}}/doc
|{{SUBJECTPAGENAME}}/doc
}}
}}
}}
|2 = {{{heading|{{{2|}}} }}}
|content = {{{content|}}}
}}</onlyinclude>
eci5tevagu64g1pdamaseb2nj1i28lz
10820
9141
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Documentation]]
295
wikitext
text/x-wiki
{{#invoke:Documentation|main|_content={{ {{#invoke:Documentation|contentTitle}}}}}}<noinclude>
<!-- Add categories to the /doc subpage -->
</noinclude>
0ewc0zrrhhwemyqxzzlg1kd31r4j5zn
Tempilet:Fmbox
10
93
11009
2025-01-09T04:15:30Z
en>Alison
0
Undid revision [[Special:Diff/1268309819|1268309819]] by [[Special:Contributions/Alison|Alison]] ([[User talk:Alison|talk]]) - oops! Wrong wiki :o
11009
wikitext
text/x-wiki
{{#invoke:Message box|fmbox|plainlinks={{{plainlinks|yes}}}}}<noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
oieddw57hf0pjq1rxypu544i15g9gwn
11010
9138
2026-08-26T11:32:48Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Fmbox]]
343
wikitext
text/x-wiki
{{#invoke:Message box|fmbox}}<noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
</noinclude>
qndjs6isv01yuo18vex1kjat7p94i9s
Tempilet:Lua
10
127
10909
2024-09-04T11:53:50Z
commons>Matrix
0
templatestyles no longer necessary
10909
wikitext
text/x-wiki
<includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude>
{{Lua|Module:Lua banner}}
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
pnmjp3f3fl321yf2jpg5syebi412n7b
10910
8961
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Lua]]
8298
wikitext
text/x-wiki
{{Ombox
|image=[[Fayil:Lua-Logo.svg|30px|alt=|link=]]
|text=<small>This {{#switch:{{NAMESPACE}}|Template = template|Module = module}} uses [[Wikipidiya:Lua|Lua]]:<br>
<ul>
{{#if:{{{1|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{1}}}]]{{#ifexist:{{{1}}}/sandbox| ([[{{{1}}}/sandbox|sandbox]])}}</li>|<span style="color:#BF3C2C"><big><b>Error: No module specified</b></big></span>}}
{{#if:{{{2|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{2}}}]]{{#ifexist:{{{2}}}/sandbox| ([[{{{2}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{3|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{3}}}]]{{#ifexist:{{{3}}}/sandbox| ([[{{{3}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{4|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{4}}}]]{{#ifexist:{{{4}}}/sandbox| ([[{{{4}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{5|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{5}}}]]{{#ifexist:{{{5}}}/sandbox| ([[{{{5}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{6|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{6}}}]]{{#ifexist:{{{7}}}/sandbox| ([[{{{7}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{7|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{7}}}]]{{#ifexist:{{{7}}}/sandbox| ([[{{{7}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{8|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{8}}}]]</li>|}}
{{#if:{{{9|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{9}}}]]{{#ifexist:{{{9}}}/sandbox| ([[{{{9}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{10|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{10}}}]]{{#ifexist:{{{10}}}/sandbox| ([[{{{10}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{11|}}}|<li styles="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{11}}}]]{{#ifexist:{{{11}}}/sandbox| ([[{{{11}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{12|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{12}}}]]{{#ifexist:{{{12}}}/sandbox| ([[{{{12}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{13|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{13}}}]]{{#ifexist:{{{13}}}/sandbox| ([[{{{13}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{14|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{14}}}]]{{#ifexist:{{{14}}}/sandbox| ([[{{{14}}}/sandbox|sandbox]])}}</li>|}}
{{#if:{{{15|}}}|<li style="padding:0px; margin-top:2px; margin-bottom:2px; margin-left:0px;">[[{{{15}}}]]{{#ifexist:{{{15}}}/sandbox| ([[{{{15}}}/sandbox|sandbox]])}}</li>|}}
</ul></small>}}<noinclude>
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
kbqxkv5f73ptk3chydzadu53r4vy1vr
Tempilet:Main page/Styles.css
10
130
11025
10501
2026-08-26T11:49:32Z
RAPTOR7762
18
RAPTOR7762 changed the content model of the page [[Tempilet:Main page/Styles.css]] from "Sanitized CSS" to "CSS"
11025
css
text/css
/* {{pp-protected|small=yes}}
Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */
.image-carousel {
overflow: hidden;
width: 100%;
height: 210px;
min-width: 280px;
}
.image-carousel ul {
width: 100%;
margin: 0;
padding: 0;
display: table;
table-layout: fixed;
height: 100%;
}
.image-carousel ul li {
display: table-cell;
vertical-align: top;
position: relative;
height: 100%;
min-height: 210px;
width: 33.33333%;
transition: all 1000ms ease;
}
.carousel-image {
width: 100%;
height: 100%;
display: block;
position: relative;
overflow: hidden;
}
.carousel-image-wrapper {
position: absolute;
display: block;
width: 100%;
height: 100%;
z-index: 1;
}
.carousel-image-wrapper img {
width: 100%;
height: 100%;
min-height: 170px;
object-fit: cover;
position: absolute;
top: 0;
left: 0;
}
.carousel-slide-content-wrapper {
overflow: hidden;
width: 100%;
height: calc(100% - 40px);
position: absolute;
top: 40px;
}
.carousel-slide-content {
display: flex;
flex-direction: column;
justify-content: flex-end;
height: 100%;
width: 100%;
position: relative;
padding: 15px 20px;
box-sizing: border-box;
color: #fff;
z-index: 3;
}
.carousel-slide-content .carousel-slide-title,
.carousel-slide-content .carousel-slide-description {
opacity: 0;
width: 100%;
position: relative;
}
.carousel-slide-title {
font-size: 135%;
font-weight: bold;
text-align: right;
}
.carousel-slide-description {
text-align: left;
}
@media (min-width: 800px) {
.image-carousel ul:hover li {
width: 10%;
}
.image-carousel ul:hover li:hover {
width: 60%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.7);
}
.image-carousel ul:hover li:hover .carousel-slide-title,
.image-carousel ul:hover li:hover .carousel-slide-description {
opacity: 1;
}
}
.carousel-slide-title a {
font-weight: bold;
}
.carousel-slide-title a,
.carousel-slide-description a {
color: white;
}
.carousel-slide-title a:link,
.carousel-slide-title a:visited,
.carousel-slide-title a:hover,
.carousel-slide-title a:active,
.carousel-slide-description a:link,
.carousel-slide-description a:visited,
.carousel-slide-description a:hover,
.carousel-slide-description a:active {
color: white;
}
@media (max-width: 800px) {
.image-carousel {
height: auto;
min-height: unset;
}
.image-carousel ul {
display: block;
height: auto;
}
.image-carousel ul li {
display: block;
width: 100%;
height: auto;
min-height: unset;
transition: none;
}
.carousel-image {
height: auto;
}
.carousel-image-wrapper {
position: relative;
height: auto;
}
.carousel-image-wrapper img {
position: relative;
width: 100%;
height: auto;
min-height: unset;
object-fit: cover;
}
.carousel-slide-content-wrapper {
position: relative;
height: auto;
top: auto;
}
.carousel-slide-content {
position: relative;
background: rgba(0, 0, 0, 0.6);
padding: 10px;
color: white;
}
/* Override opacity on mobile */
.carousel-slide-content-wrapper .carousel-slide-title,
.carousel-slide-content-wrapper .carousel-slide-description {
opacity: 1;
}
/* Disable hover effect for mobile */
.image-carousel ul:hover li {
width: 100%;
}
.image-carousel ul:hover li:hover {
width: 100%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.6);
}
}
.mobile-only {
display: none;
}
/* Display on mobile views (Minerva Neue skin / MobileFrontend) */
@media screen and (max-width: 640px) {
.mobile-only {
display: block;
}
}
j2tnulyblaxgv6ppx19dne9p96kzcy7
11026
11025
2026-08-26T11:53:31Z
RAPTOR7762
18
11026
css
text/css
/* {{pp-protected|small=yes}} */
@font-face {
font-family: 'Linux Libertine';
/* Use font/otf and completely omit any charset declarations */
src: url('data:font/otf;base64,T1RUTwANAIAAAwBQQ0ZGIMF0eRoAABHYAAYeEkZGVE1P74ToAAaMjAAAABxHREVGDor58gAGL+wAAAQeR1BPUyWCAZ0ABkwYAABAdEdTVUKfFKCRAAY0DAAAGApPUy8yS/zyhwAAAUAAAABgY21hcCdEZ/kAAAmYAAAIHmhlYWQFEQbcAAAA3AAAADZoaGVhF2IdvwAAARQAAAAkaG10eJQXbbMABoyoAAAntG1heHAJ7VAAAAABOAAAAAZuYW1lhXkwkAAAAaAAAAf1cG9zdP+NACgAABG4AAAAIAABAAAABLMzm/jx9l8PPPUCCwPoAAAAAMgHiB4AAAAAyAeIHvvG/woYGwN+AAAACAAAAAAAAAAAAAEAAAN+/woAABiA+8b8RxgbAAEAAAAAAAAAAAAAAAAAAAntAABQAAntAAAAAwIxAZAABQAAAooCuwAAAIwCigK7AAAB3wAxAQIBBQIABQMAAAAAAADgAAr/UADl+wAAACAAAAAAUGZFZABAACD//QN+/woAAAN+APZgAAG/AAAAAAGtApIAIAAgAAwAAAAaAT4AAQAAAAAAAADyAeYAAQAAAAAAAQARAv0AAQAAAAAAAgAHAx8AAQAAAAAAAwAsA4EAAQAAAAAABAARA9IAAQAAAAAABQAOBAIAAQAAAAAABgANBC0AAQAAAAAACAAPBFsAAQAAAAAACQAPBIsAAQAAAAAACwAcBNUAAQAAAAAADAAcBSwAAQAAAAAADQA1BbUAAQAAAAAADgBDBnMAAwABBAkAAAHkAAAAAwABBAkAAQAiAtkAAwABBAkAAgAOAw8AAwABBAkAAwBYAycAAwABBAkABAAiA64AAwABBAkABQAcA+QAAwABBAkABgAaBBEAAwABBAkACAAeBDsAAwABBAkACQAeBGsAAwABBAkACwA4BJsAAwABBAkADAA4BPIAAwABBAkADQBqBUkAAwABBAkADgCGBesATABpAG4AdQB4ACAATABpAGIAZQByAHQAaQBuAGUAIABiAHkAIABQAGgAaQBsAGkAcABwACAASAAuACAAUABvAGwAbAAsACAATwBwAGUAbgAgAEYAbwBuAHQAIAB1AG4AZABlAHIAIABUAGUAcgBtAHMAIABvAGYAIABmAG8AbABsAG8AdwBpAG4AZwAgAEYAcgBlAGUAIABTAG8AZgB0AHcAYQByAGUAIABMAGkAYwBlAG4AcwBlAHMAOgAKAEcAUABMACAAKABHAGUAbgBlAHIAYQBsACAAUAB1AGIAbABpAGMAIABMAGkAYwBlAG4AcwBlACkAIAB3AGkAdABoACAAZgBvAG4AdAAtAGUAeABjAGUAcAB0AGkAbwBuACAAYQBuAGQAIABPAEYATAAgACgATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlACkALgAKAEMAcgBlAGEAdABlAGQAIAB3AGkAdABoACAARgBvAG4AdABGAG8AcgBnAGUAIAAoAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABmAG8AcgBnAGUALgBzAGYALgBuAGUAdAApACAAUwBlAHAAdAAgADIAMAAwADMALAAgAC4ALgAuACwAIAAyADAAMAA5AABMaW51eCBMaWJlcnRpbmUgYnkgUGhpbGlwcCBILiBQb2xsLCBPcGVuIEZvbnQgdW5kZXIgVGVybXMgb2YgZm9sbG93aW5nIEZyZWUgU29mdHdhcmUgTGljZW5zZXM6CkdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgd2l0aCBmb250LWV4Y2VwdGlvbiBhbmQgT0ZMIChPcGVuIEZvbnQgTGljZW5zZSkuCkNyZWF0ZWQgd2l0aCBGb250Rm9yZ2UgKGh0dHA6Ly9mb250Zm9yZ2Uuc2YubmV0KSBTZXB0IDIwMDMsIC4uLiwgMjAwOQAATABpAG4AdQB4ACAATABpAGIAZQByAHQAaQBuAGUAIABPAABMaW51eCBMaWJlcnRpbmUgTwAAUgBlAGcAdQBsAGEAcgAAUmVndWxhcgAARgBvAG4AdABGAG8AcgBnAGUAIAAyAC4AMAAgADoAIABMAGkAbgB1AHgAIABMAGkAYgBlAHIAdABpAG4AZQAgAE8AIAA6ACAANQAtADUALQAyADAAMQAwAABGb250Rm9yZ2UgMi4wIDogTGludXggTGliZXJ0aW5lIE8gOiA1LTUtMjAxMAAATABpAG4AdQB4ACAATABpAGIAZQByAHQAaQBuAGUAIABPAABMaW51eCBMaWJlcnRpbmUgTwAAVgBlAHIAcwBpAG8AbgAgADQALgA3AC4AMwAgAABWZXJzaW9uIDQuNy4zIAAATABpAG4ATABpAGIAZQByAHQAaQBuAGUATwAATGluTGliZXJ0aW5lTwAAUABoAGkAbABpAHAAcAAgAEgALgAgAFAAbwBsAGwAAFBoaWxpcHAgSC4gUG9sbAAAUABoAGkAbABpAHAAcAAgAEgALgAgAFAAbwBsAGwAAFBoaWxpcHAgSC4gUG9sbAAAaAB0AHQAcAA6AC8ALwBsAGkAbgB1AHgAbABpAGIAZQByAHQAaQBuAGUALgBzAGYALgBuAGUAdAAAaHR0cDovL2xpbnV4bGliZXJ0aW5lLnNmLm5ldAAAaAB0AHQAcAA6AC8ALwBsAGkAbgB1AHgAbABpAGIAZQByAHQAaQBuAGUALgBzAGYALgBuAGUAdAAAaHR0cDovL2xpbnV4bGliZXJ0aW5lLnNmLm5ldAAARwBQAEwALQAgAEcAZQBuAGUAcgBhAGwAIABQAHUAYgBsAGkAYwAgAEwAaQBjAGUAbgBzAGUAIABBAE4ARAAgAE8ARgBMAC0ATwBwAGUAbgAgAEYAbwBuAHQAIABMAGkAYwBlAG4AcwBlAABHUEwtIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgQU5EIE9GTC1PcGVuIEZvbnQgTGljZW5zZQAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGYAcwBmAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBnAHAAbAAuAGgAdABtAGwAIABBAE4ARAAgAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATAAAaHR0cDovL3d3dy5mc2Yub3JnL2xpY2Vuc2VzL2dwbC5odG1sIEFORCBodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTAAAAAAAAAADAAAAAwAAABwAAQAAAAAGFAADAAEAAAAcAAQF+AAAAXoBAAAHAHoAfgI/AkECQwNOA28DdQN+A4oDjAOhA84D4QP2A/kD+wR3BH8EgwTEBMwE+QXDBcYF6gX0HRUfFR8dH0UfTR9XH1kfWx9dH30ftB/EH9Mf2x/vH/Qf/iALICcgNyA+IEIgRCBLIE8gcSCOIJQgmSCkIKggrCCvILEhAyEGIQkhDyERIRMhFiEaIR0hICEiISQhJyEuITkhTyGEIZshpiGoIa4hvSHBIdkiDSIuIjYiPCJBIkUiSSJZImIiZSJrInEihSKYIqYityLFIu8jACMDIxAjISMnIysjfSOAI9MkIySHJP8loSWzJbclvSXBJcclyyXXJeYmBSYJJhkmGyYeJicmLyZTJmAmYyZmJm8mlSaYJqUmrycUJxgnHSdnJ38nwifnLGwsdy4FLgouGKcdpyGnZeAN4CngMOBr4G3gk+C24L7gxuDK4Mzg0ODV4Nng4eD24Png++EB4RHhIeEq4TDhS+FV4V7hYeNk5CD2OPa69r77Bv/9//8AAAAgAKACQQJDAlADUAN0A3oDhAOMA44DowPQA/AD+AP7A/0EfASDBIwExwTQBbAFxgXQBfAdFR4AHxgfIB9IH1AfWR9bH10fXx+AH7Yfxh/WH90f8h/2IAAgECAvIDkgQiBEIEcgTyBwIHQgkCCYIKIgpyCrIK8gsSEAIQUhCSEMIREhEyEVIRkhHCEgISIhJCEmIS4hNSFPIVMhkCGmIaghriG8IcAhyyIAIg8iNiI8IkEiRSJIIlkiYCJkImoibiKCIpUioiK2IsUi7iMAIwIjECMgIyYjKSN9I4Aj0yQjJGAktiWgJbIltiW8JcAlxiXJJc4l5iYFJgkmGSYbJh4mJyYvJjkmYCZjJmUmaSaVJpgmoiasJxQnGCcdJ2cndifCJ+YsYCx0LgIuCC4Xpx2nIKdl4ADgD+As4DLgbeBw4JfgveDA4MrgzODO4NPg2eDg4Ojg+eD74QDhBOEY4SjhMOFJ4U3hV+Fg41jkIPY49q72vvsA//3////h/8D/v/++/7L/sf+t/6n/pP+j/6L/of+g/5L/kf+Q/4//i/+I/4D/fv97/sX+w/66/rXnlear5qnmp+al5qPmouah5qDmn+ad5pzmm+aZ5pjmluaV5pTmkOaJ5ojmheaE5oLmf+Zf5l3mXOZZ5lHmT+ZN5kvmSuX85fvl+eX35fbl9eX05fLl8eXv5e7l7eXs5ebl4OXL5cjlveWz5bLlreWg5Z7lleVv5W7lZ+Vi5V7lW+VZ5UrlROVD5T/lPeUt5R7lFeUG5Pnk0eTB5MDktOSl5KHkoORP5E3j++Os43DjQuKi4pLikOKM4orihuKF4oPideJX4lTiReJE4kLiOuIz4iriHuIc4hviGeH04fLh6eHj4X/hfOF44S/hIeDf4LzcRNw92rPasdqlYaFhn2FcKMIowSi/KL4ovSi7KLgosiixKK4orSisKKoopyihKJsomSiYKJQokiiMKIYogShpKGgoZyhmJnAltROeEykTJg7lCe8AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAgoAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwAAAIQAhQCHAIkAkQCWAJwAoQCgAKIApACjAKUApwCpAKgAqgCrAK0ArACuAK8AsQCzALIAtAC2ALUAugC5ALsAvAawAHAAYgBjAGcGsgB2AJ8AbgBpBxAAdABoB6QAhgCYB4wAcQenB6gAZQB1B3EHfwd9A2EHmQBqAHoDSgCmALgAfwBhAGwHiAFSB6EHdQBrAHsGtgBgAIAAgwCVARIBEwajBqQGrAatBqgGqQC3CE8AvwE4BsgG+QbBBsIJ5gnnBrEAdwaqBq4GuQCCAIoAgQCLAIgAjQCOAI8AjACTAJQAAACSAJoAmwCZAPECeAKOAG8CigKLAowAeAKPAo0CeQAAAAMAAAAAAAD/igAoAAAAAAAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQ5MaW5MaWJlcnRpbmVPAAECAAEAQRwKjAAcCo0BHAqOAhwKjwP4FQQpDAOzDAT+zvuKHBgb+hMFHQAAWU4PHQAAAAAQHQAAbScRHQAAAEgdAAVdgBIJCQIAAQAIAA8AGwApADAANwBDAEoAUQBXAF0AZABrAHEAdwCCAI0AlwChAKcArQCzALkAvwDFAMwA0wDZAN8A6QDzAPoBAQEHAQ0BGAEjASkBLwE5AUMBTwFbAWYBcQF1AXkBfwGFAYwBkwGZAZ8BpgGtAbcBuQG7AcYB0QHdAekB9QH7AgECDQIZAh8CJQIpAi0CMwI5AkUCUQJXAl0CaAJrAm4CdQJ8AoICiAKVAqICqAKuAroCxgLMAtIC2ALeAukC9AL8AwQDDAMUAxoDIAMkAygDLgM0AzsDQgNIA04DUwNYA2UDcgN5A4ADiwOWA6EDrAOyA7gDwgPMA9ED2APfA+YD7QP0A/sEAgQJBBAEFwQeBCUELAQzBDoEQQRIBE8EVgRdBGQEawRyBHkEgASHBI4ElQScBKMEqgSvBLQEuwTCBMkE0ATXBN4E5QTsBPME+gUBBQgFDwUUBRkFIAUnBS4FNQU8BUMFSgVRBVgFXwVmBW0FdAV7BYIFiQWQBZcFngWlBawFswW6BcEFyAXPBdYF3QXkBesF8gX5BgAGBwYOBhUGHAYjBioGMQY4Bj8GRgZNBlQGWwZiBmkGcAZ3Bn4GhQaMBpIGmAafBqYGrQa0BrsGwgbJBtAG1wbeBuUG7AbzBvoHAQcIBw8HFgcgByoHMQc4B0MHTgdVB1wHYwdqB3EHeAd/B4YHjQeUB5sHogepB7AHtwe+B8UHzAfTB9oH4QfoB+8H9ggCCA4IGggmCC0INAg7CEIISQhQCFcIXghlCGwIcwh6CIEIiAiPCJYInQikCKsIsgi5CMAIxwjOCNUI3AjjCOsI8gj5CQAJBwkOCRUJHAkjCSoJMQk4CT8JRglNCVQJWwliCWkJcAl3CX4JhQmMCZMJmgmhCagJrwm2CcAJxwnOCdMJ2gnhCegJ7wn2Cf0KBAoLChIKGQogCicKLgo1CjwKQwpKClEKWApfCmoKcQp4Cn8KhgqPCp0KpAqrCrIKuQrACscKzgrVCtwK4wrqCvEK+Ar/CwYLDQsUCxsLIgs1CzwLQwtKC1ELWAtfC2YLbQt0C3sLgguJC5ALlwueC6ULrAuzC7oLwQvIC88L1gvdC+QL6wv1DAMMDQwXDCcMOwxSDFwMZgxtDHQMewyEDI0MlAybDKIMqQywDLcMvgzFDMwM0wzaDOEM6AzvDPYM/Q0EDQsNEg0ZDSANJw0uDTUNPA1DDVYNYA1qDXQNkA2XDZ4NpQ2sDbMNug3BDcgNzw3WDd0N5A3rDfIN+Q4ADgcODg4VDhwOIw4qDjEOOA4/DkYOTQ5WDl8ObQ52DoAOhw6QDpcOng6rDrIOuQ7ADscOzg7VDtwO4w7qDvEO+A7/DwYPDQ8UDxsPIg8pDzAPNw8+D0UPTA9TD1oPZg9tD3QPew+CD4kPkA+XD54PpQ+sD7MPug/BD8gPzw/WD90P5A/rD/IP+RAAEAcQDhAVEBwQIxAqEDEQOBA/EEYQTRBUEFsQYhBpEHAQdxB+EIUQjBCTEJoQoRCoEK8QthC9EMQQyxDSENkQ4BDnEO4Q9RD8EQMRChERERgRHxEmES0RNBE7EUIRSRFQEVcRXhFlEWwRcxF6EYERiBGPEZYRnRGkEakRthHAEckR1RHdEeYR8hH+EggSGRIeEiISJxIsEjMSNxI6Ej8SQxJIEk4SUBJSElQSWxJdEmASZRJoEm8SchJ1EngSfRKJEpgSohKuErYSvxLTEtgS3BLhEuYS7RLxEvQS+RL9EwITCBMKEwwTExMVExgTHhMjEyYTLRMwEzMTNhM7E0cTVhNiE24TeBN/E4UTjROUE5sTnxOlE6wTsxO6E8ETyBPPE9YT3RPkE+sT8hP5FAAUBxQOFBUUHBQjFCoUMRQ4FD8URhRNFFQUXRRmFG8UeBSBFIoUkxScFKUUrhS3FMAUxxTQFNkU4hTrFPQU/RUGFQ8VGBUhFSoVMxU8FUUVThVXFWAVaRVyFXsVhBWNFZYVnxWoFbEVuhXDFcwV1RXeFecV8BX5FgIWCxYUFh0WJhYvFjgWQRZKFlMWXBZlFm4WdxaAFokWkhabFqQWrRa2Fr8WyBbRFtoW4xbsFvUW/hcHFxAXGRcgFykXMhc7F0QXTRdWF18XaBdxF3oXgxeMF5MXnBelF6wXsxe8F8UXzBfTF9oX4RfoF+8X9hf9GAQYCxgSGBkYIBgnGDAYORhCGEsYUhhZGGAYZxhuGHUYfBiDGIoYkRiYGKEYqhixGLgYvxjGGM0Y1BjbGOIY6RjwGPcY/hkFGQwZExkaGSEZKBkvGTYZPRlEGUsZUhlZGWAZZxluGXUZfBmDGYoZkRmYGZ8ZphmtGbQZuxnCGckZ0BnXGd4Z5RnsGfMZ+hoBGggaDxoWGh0aJBorGjIaORpAGkcaThpVGlwaYxpqGnEaeBqBGogajxqWGp0apBqrGrIauRrAGscazhrVGtwa4xrqGvEa+Br/GwYbDRsUGxsbIhspGzAbNxs+G0UbTBtTG1obYRtqG3MbfBuFG44blxugG6kbshu7G8IbyxvUG90b5hvvG/gcARwKHBMcGhwjHCwcNRw+HEccUBxZHGIcaxx0HH0chhyPHJgcoRyqHLMcvBzFHM4c1xzgHOkc8hz7HQQdDR0WHR8dKB0vHTYdPR1EHUsdUh1ZHWAdZx1uHXUdfB2DHYodkR2YHZ8dph2tHbQdux3CHckd0B3XHd4d5R3sHfMd+h4BHggeDx4WHh0eJB4rHjIeOR5AHkceTh5VHlweYx5qHnEeeB5/HoYejR6UHpseoh6pHrAetx6+HsUezB7THtoe4R7oHu8e9h79HwQfCx8SHxkfIB8nHy4fNR88H0MfSh9RH1gfXx9mH20fdB97H4IfiR+QH5cfnh+lH6wfsx+6H8EfyB/PH9Yf3R/kH+sf8h/5IAAgByAOIBUgHCAjICogMSA4ID8gRiBNIFQgWyBiIGkgcCB3IH4ghSCMIJMgmiChIKggryC2IL0gwyDJIM8g1SDeIOcg7iD1IPwhAyEKIREhGCEfISYhLSE0ITshQiFJIVAhVyFeIWUhbCFzIXohgSGIIY8hmSGgIachriG1IbwhwyHKIdEh2CHfIeYh7SH0IfsiAiIJIhAiFyIeIiUiLCIzIjoiQSJIIk8iViJdImQiayJyInkigCKHIo4ilSKcIqMiqiKxIrgivyLGIs0i1CLbIuIi6SLwIvci/iMFIwwjEyMaIyEjKCMvIzYjPSNEI0sjUiNZI2AjZyNuI3UjfCODI4ojkSOYI58jpiOtI7QjuyPCI8kj0CPXI94j5CPqI/Ej+CP/JAYkDSQUJBskIiQpJDAkNyQ+JEUkTCRTJFokYSRoJG8kdiR9JIQkiySSJJkkoCSnJK4ktSS8JMMkyiTR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QEdAUEBbQGRAb0B2QH5AjkCXQKRArUC2QL9AzkDdQOpA9kD9QQdBEUEbQSVBL0E5QUNBTUFXQWFBa0F1QX9BiUGTQZ1BpEGtQbRBu0HAQcVBykHPQdZB3UHkQelB8EH3Qf5CBUIKQhFCGEIdQiRCK0IyQjlCQEJIQk9CVkJfQmdCb0J2Qn9CiEKQQqBCr0K+Qs9C30LvQv5DD0MgQzBDN0M+Q0VDTENWQ2BDakN0Q35DiEOSQ5xDpkOwQ7pDxEPOQ9hD4kPsQ/ZEAEQKRBREHkQoRDFEOkRIRFFEWkRqRHtEj0SbRKREsETBRM5E1ETeROpE90UFRRRFIEUtRTpFSUVZRWpFekWLRZVFnEWfRaJFpUWqRa9FtkW5RcBFxUa3RshG2XVuaTAwQTB1bmkwMEFEdHdvLnN1cGVyaW9ydGhyZWUuc3VwZXJpb3J1bmkwMEI1cGlsY3Jvd29uZS5zdXBlcmlvckFtYWNyb25hbWFjcm9uQWJyZXZlYWJyZXZlQW9nb25la2FvZ29uZWtDYWN1dGVjYWN1dGVDY2lyY3VtZmxleGNjaXJjdW1mbGV4Q2RvdGFjY2VudGNkb3RhY2NlbnRDY2Fyb25jY2Fyb25EY2Fyb25kY2Fyb25EY3JvYXRkY3JvYXRFbWFjcm9uZW1hY3JvbkVicmV2ZWVicmV2ZUVkb3RhY2NlbnRlZG90YWNjZW50RW9nb25la2VvZ29uZWtFY2Fyb25lY2Fyb25HY2lyY3VtZmxleGdjaXJjdW1mbGV4R2JyZXZlZ2JyZXZlR2RvdGFjY2VudGdkb3RhY2NlbnRHY29tbWFhY2NlbnRnY29tbWFhY2NlbnRIY2lyY3VtZmxleGhjaXJjdW1mbGV4SGJhcmhiYXJJdGlsZGVpdGlsZGVJbWFjcm9uaW1hY3JvbklicmV2ZWlicmV2ZUlvZ29uZWtpb2dvbmVrSWRvdGFjY2VudElKaWpKY2lyY3VtZmxleGpjaXJjdW1mbGV4S2NvbW1hYWNjZW50a2NvbW1hYWNjZW50a2dyZWVubGFuZGljTGFjdXRlbGFjdXRlTGNvbW1hYWNjZW50bGNvbW1hYWNjZW50TGNhcm9ubGNhcm9uTGRvdGxkb3ROYWN1dGVuYWN1dGVOY29tbWFhY2NlbnRuY29tbWFhY2NlbnROY2Fyb25uY2Fyb25uYXBvc3Ryb3BoZUVuZ2VuZ09tYWNyb25vbWFjcm9uT2JyZXZlb2JyZXZlT2h1bmdhcnVtbGF1dG9odW5nYXJ1bWxhdXRSYWN1dGVyYWN1dGVSY29tbWFhY2NlbnRyY29tbWFhY2NlbnRSY2Fyb25yY2Fyb25TYWN1dGVzYWN1dGVTY2lyY3VtZmxleHNjaXJjdW1mbGV4U2NlZGlsbGFzY2VkaWxsYVRjZWRpbGxhdGNlZGlsbGFUY2Fyb250Y2Fyb25UYmFydGJhclV0aWxkZXV0aWxkZVVtYWNyb251bWFjcm9uVWJyZXZldWJyZXZlVXJpbmd1cmluZ1VodW5nYXJ1bWxhdXR1aHVuZ2FydW1sYXV0VW9nb25la3VvZ29uZWtXY2lyY3VtZmxleHdjaXJjdW1mbGV4WWNpcmN1bWZsZXh5Y2lyY3VtZmxleFphY3V0ZXphY3V0ZVpkb3RhY2NlbnR6ZG90YWNjZW50bG9uZ3N1bmkwMTgwdW5pMDE4MXVuaTAxODJ1bmkwMTgzdW5pMDE4NHVuaTAxODV1bmkwMTg2dW5pMDE4N3VuaTAxODh1bmkwMTg5dW5pMDE4QXVuaTAxOEJ1bmkwMThDdW5pMDE4RHVuaTAxOEV1bmkwMThGdW5pMDE5MHVuaTAxOTF1bmkwMTkzdW5pMDE5NHVuaTAxOTV1bmkwMTk2dW5pMDE5N3VuaTAxOTh1bmkwMTk5dW5pMDE5QXVuaTAxOUJ1bmkwMTlDdW5pMDE5RHVuaTAxOUV1bmkwMTlGT2hvcm5vaG9ybnVuaTAxQTJ1bmkwMUEzdW5pMDFBNHVuaTAxQTV1bmkwMUE2dW5pMDFBN3VuaTAxQTh1bmkwMUE5dW5pMDFBQXVuaTAxQUJ1bmkwMUFDdW5pMDFBRHVuaTAxQUVVaG9ybnVob3JudW5pMDFCMXVuaTAxQjJ1bmkwMUIzdW5pMDFCNHVuaTAxQjV1bmkwMUI2dW5pMDFCN3VuaTAxQjh1bmkwMUI5dW5pMDFCQXVuaTAxQkJ1bmkwMUJDdW5pMDFCRHVuaTAxQkV1bmkwMUJGdW5pMDFDMHVuaTAxQzF1bmkwMUMydW5pMDFDM3VuaTAxQzR1bmkwMUM1dW5pMDFDNnVuaTAxQzd1bmkwMUM4dW5pMDFDOXVuaTAxQ0F1bmkwMUNCdW5pMDFDQ3VuaTAxQ0R1bmkwMUNFdW5pMDFDRnVuaTAxRDB1bmkwMUQxdW5pMDFEMnVuaTAxRDN1bmkwMUQ0dW5pMDFENXVuaTAxRDZ1bmkwMUQ3dW5pMDFEOHVuaTAxRDl1bmkwMURBdW5pMDFEQnVuaTAxREN1bmkwMUREdW5pMDFERXVuaTAxREZ1bmkwMUUwdW5pMDFFMXVuaTAxRTJ1bmkwMUUzdW5pMDFFNHVuaTAxRTVHY2Fyb25nY2Fyb251bmkwMUU4dW5pMDFFOXVuaTAxRUF1bmkwMUVCdW5pMDFFQ3VuaTAxRUR1bmkwMUVFdW5pMDFFRnVuaTAxRjB1bmkwMUYxdW5pMDFGMnVuaTAxRjN1bmkwMUY0dW5pMDFGNXVuaTAxRjZ1bmkwMUY3dW5pMDFGOHVuaTAxRjlBcmluZ2FjdXRlYXJpbmdhY3V0ZUFFYWN1dGVhZWFjdXRlT3NsYXNoYWN1dGVvc2xhc2hhY3V0ZXVuaTAyMDB1bmkwMjAxdW5pMDIwMnVuaTAyMDN1bmkwMjA0dW5pMDIwNXVuaTAyMDZ1bmkwMjA3dW5pMDIwOHVuaTAyMDl1bmkwMjBBdW5pMDIwQnVuaTAyMEN1bmkwMjBEdW5pMDIwRXVuaTAyMEZ1bmkwMjEwdW5pMDIxMXVuaTAyMTJ1bmkwMjEzdW5pMDIxNHVuaTAyMTV1bmkwMjE2dW5pMDIxN1Njb21tYWFjY2VudHNjb21tYWFjY2VudFRjb21tYWFjY2VudHRjb21tYWFjY2VudHVuaTAyMUN1bmkwMjFEdW5pMDIxRXVuaTAyMUZ1bmkwMjIwdW5pMDIyMXVuaTAyMjJ1bmkwMjIzdW5pMDIyNHVuaTAyMjV1bmkwMjI2dW5pMDIyN3VuaTAyMjh1bmkwMjI5dW5pMDIyQXVuaTAyMkJ1bmkwMjJDdW5pMDIyRHVuaTAyMkV1bmkwMjJGdW5pMDIzMHVuaTAyMzF1bmkwMjMydW5pMDIzM3VuaTAyMzR1bmkwMjM1dW5pMDIzNmRvdGxlc3NqdW5pMDIzOHVuaTAyMzl1bmkwMjNBdW5pMDIzQnVuaTAyM0N1bmkwMjNEdW5pMDIzRXVuaTAyM0Z1bmkwMjQxdW5pMDI0M3VuaTAyNTB1bmkwMjUxdW5pMDI1MnVuaTAyNTN1bmkwMjU0dW5pMDI1NXVuaTAyNTZ1bmkwMjU3dW5pMDI1OHVuaTAyNTl1bmkwMjVBdW5pMDI1QnVuaTAyNUN1bmkwMjVEdW5pMDI1RXVuaTAyNUZ1bmkwMjYwdW5pMDI2MXVuaTAyNjJnYW1tYWxhdGludW5pMDI2NHVuaTAyNjVoaG9va3VuaTAyNjd1bmkwMjY4dW5pMDI2OXVuaTAyNkF1bmkwMjZCdW5pMDI2Q3VuaTAyNkR1bmkwMjZFdW5pMDI2RnVuaTAyNzB1bmkwMjcxdW5pMDI3MnVuaTAyNzN1bmkwMjc0dW5pMDI3NXVuaTAyNzZ1bmkwMjc3dW5pMDI3OHJ0dXJuZWR1bmkwMjdBcmhvb2t0dXJuZWR1bmkwMjdDdW5pMDI3RHVuaTAyN0V1bmkwMjdGUnNtYWxsY2FwUnNtYWxsaW52ZXJ0ZWR1bmkwMjgydW5pMDI4M3VuaTAyODR1bmkwMjg1dW5pMDI4NnVuaTAyODd1bmkwMjg4dW5pMDI4OXVuaTAyOEF1bmkwMjhCdW5pMDI4Q3VuaTAyOER1bmkwMjhFdW5pMDI4RnVuaTAyOTB1bmkwMjkxdW5pMDI5MnVuaTAyOTN1bmkwMjk0Z2xvdHRhbHN0b3ByZXZlcnNlZHVuaTAyOTZ1bmkwMjk3dW5pMDI5OHVuaTAyOTl1bmkwMjlBdW5pMDI5QnVuaTAyOUN1bmkwMjlEdW5pMDI5RXVuaTAyOUZ1bmkwMkEwdW5pMDJBMXVuaTAyQTJ1bmkwMkEzdW5pMDJBNHVuaTAyQTV1bmkwMkE2dW5pMDJBN3VuaTAyQTh1bmkwMkE5dW5pMDJBQXVuaTAyQUJ1bmkwMkFDdW5pMDJBRHVuaTAyQUV1bmkwMkFGaC5zdXBlcmlvcmhob29rLnN1cGVyaW9yai5zdXBlcmlvcnIuc3VwZXJpb3JydHVybmVkLnN1cGVyaW9ycmhvb2t0dXJuZWQuc3VwZXJpb3JSc21hbGxpbnZlcnRlZC5zdXBlcmlvcncuc3VwZXJpb3J5LnN1cGVyaW9ydW5pMDJCOXVuaTAyQkF1bmkwMkJCYWZpaTU3OTI5YWZpaTY0OTM3dW5pMDJCRXVuaTAyQkZ1bmkwMkMwdW5pMDJDMXVuaTAyQzJ1bmkwMkMzdW5pMDJDNHVuaTAyQzV1bmkwMkM4dW5pMDJDOXVuaTAyQ0F1bmkwMkNCdW5pMDJDQ3VuaTAyQ0R1bmkwMkNFdW5pMDJDRnVuaTAyRDB1bmkwMkQxdW5pMDJEMnVuaTAyRDN1bmkwMkQ0dW5pMDJENXVuaTAyRDZ1bmkwMkQ3dW5pMDJERXVuaTAyREZnYW1tYWxhdGluLnN1cGVyaW9ybC5zdXBlcmlvcnMuc3VwZXJpb3J4LnN1cGVyaW9yZ2xvdHRhbHN0b3ByZXZlcnNlZC5zdXBlcmlvcnVuaTAyRTV1bmkwMkU2dW5pMDJFN3VuaTAyRTh1bmkwMkU5dW5pMDJFQXVuaTAyRUJ1bmkwMkVDdW5pMDJFRHVuaTAyRUV1bmkwMkVGdW5pMDJGMHVuaTAyRjF1bmkwMkYydW5pMDJGM3VuaTAyRjR1bmkwMkY1dW5pMDJGNnVuaTAyRjd1bmkwMkY4dW5pMDJGOXVuaTAyRkF1bmkwMkZCdW5pMDJGQ3VuaTAyRkR1bmkwMkZFdW5pMDJGRmdyYXZlY29tYmFjdXRlY29tYmNpcmN1bWZsZXhjb21idGlsZGVjb21ibWFjcm9uY29tYnVuaTAzMDVicmV2ZWNvbWJ1bmkwMzA3dW5pMDMwOGhvb2thYm92ZWNvbWJ1bmkwMzBBdW5pMDMwQnVuaTAzMEN1bmkwMzBEdW5pMDMwRXVuaTAzMEZ1bmkwMzEwdW5pMDMxMXVuaTAzMTJ1bmkwMzEzdW5pMDMxNHVuaTAzMTV1bmkwMzE2dW5pMDMxN3VuaTAzMTh1bmkwMzE5dW5pMDMxQXVuaTAzMUJ1bmkwMzFDdW5pMDMxRHVuaTAzMUV1bmkwMzFGdW5pMDMyMHVuaTAzMjF1bmkwMzIyZG90YmVsb3djb21idW5pMDMyNHVuaTAzMjV1bmkwMzI2dW5pMDMyN3VuaTAzMjh1bmkwMzI5dW5pMDMyQXVuaTAzMkJ1bmkwMzJDdW5pMDMyRHVuaTAzMkV1bmkwMzJGdW5pMDMzMHVuaTAzMzF1bmkwMzMydW5pMDMzM3VuaTAzMzR1bmkwMzM1dW5pMDMzNnVuaTAzMzd1bmkwMzM4dW5pMDMzOXVuaTAzM0F1bmkwMzNCdW5pMDMzQ3VuaTAzM0R1bmkwMzNFdW5pMDMzRnVuaTAzNDB1bmkwMzQxdW5pMDM0MnVuaTAzNDN1bmkwMzQ0dW5pMDM0NXVuaTAzNDZ1bmkwMzQ3dW5pMDM0OHVuaTAzNDl1bmkwMzRBdW5pMDM0QnVuaTAzNEN1bmkwMzREdW5pMDM0RXVuaTAzNTB1bmkwMzUxdW5pMDM1MnVuaTAzNTN1bmkwMzU0dW5pMDM1NXVuaTAzNTZ1bmkwMzU3dW5pMDM1OHVuaTAzNTl1bmkwMzVBdW5pMDM1QnVuaTAzNUN1bmkwMzVEdW5pMDM1RXVuaTAzNUZ1bmkwMzYwdW5pMDM2MXVuaTAzNjJ1bmkwMzYzdW5pMDM2NHVuaTAzNjV1bmkwMzY2dW5pMDM2N3VuaTAzNjh1bmkwMzY5dW5pMDM2QXVuaTAzNkJ1bmkwMzZDdW5pMDM2RHVuaTAzNkV1bmkwMzZGdW5pMDM3NHVuaTAzNzV1bmkwMzdBdW5pMDM3QnVuaTAzN0N1bmkwMzdEdW5pMDM3RXRvbm9zZGllcmVzaXN0b25vc0FscGhhdG9ub3Nhbm90ZWxlaWFFcHNpbG9udG9ub3NFdGF0b25vc0lvdGF0b25vc09taWNyb250b25vc1Vwc2lsb250b25vc09tZWdhdG9ub3Npb3RhZGllcmVzaXN0b25vc0FscGhhQmV0YUdhbW1hRGVsdGFFcHNpbG9uWmV0YUV0YVRoZXRhSW90YUthcHBhTGFtYmRhTXVOdVhpT21pY3JvblBpUmhvU2lnbWFUYXVVcHNpbG9uUGhpQ2hpUHNpT21lZ2FJb3RhZGllcmVzaXNVcHNpbG9uZGllcmVzaXNhbHBoYXRvbm9zZXBzaWxvbnRvbm9zZXRhdG9ub3Npb3RhdG9ub3N1cHNpbG9uZGllcmVzaXN0b25vc2FscGhhYmV0YWdhbW1hZGVsdGFlcHNpbG9uemV0YWV0YXRoZXRhaW90YWthcHBhbGFtYmRhbnV4aW9taWNyb25waXJob3NpZ21hMXNpZ21hdGF1dXBzaWxvbnBoaWNoaXBzaW9tZWdhaW90YWRpZXJlc2lzdXBzaWxvbmRpZXJlc2lzb21pY3JvbnRvbm9zdXBzaWxvbnRvbm9zb21lZ2F0b25vc3VuaTAzRDB0aGV0YTFVcHNpbG9uMXVuaTAzRDN1bmkwM0Q0cGhpMW9tZWdhMXVuaTAzRDd1bmkwM0Q4dW5pMDNEOXVuaTAzREF1bmkwM0RCdW5pMDNEQ3VuaTAzRER1bmkwM0RFdW5pMDNERnVuaTAzRTB1bmkwM0UxdW5pMDNGMHVuaTAzRjF1bmkwM0YydW5pMDNGM3VuaTAzRjR1bmkwM0Y1dW5pMDNGNnVuaTAzRjh1bmkwM0Y5dW5pMDNGQnVuaTAzRkR1bmkwM0ZFdW5pMDNGRnVuaTA0MDBhZmlpMTAwMjNhZmlpMTAwNTFhZmlpMTAwNTJhZmlpMTAwNTNhZmlpMTAwNTRhZmlpMTAwNTVhZmlpMTAwNTZhZmlpMTAwNTdhZmlpMTAwNThhZmlpMTAwNTlhZmlpMTAwNjBhZmlpMTAwNjF1bmkwNDBEYWZpaTEwMDYyYWZpaTEwMTQ1YWZpaTEwMDE3YWZpaTEwMDE4YWZpaTEwMDE5YWZpaTEwMDIwYWZpaTEwMDIxYWZpaTEwMDIyYWZpaTEwMDI0YWZpaTEwMDI1YWZpaTEwMDI2YWZpaTEwMDI3YWZpaTEwMDI4YWZpaTEwMDI5YWZpaTEwMDMwYWZpaTEwMDMxYWZpaTEwMDMyYWZpaTEwMDMzYWZpaTEwMDM0YWZpaTEwMDM1YWZpaTEwMDM2YWZpaTEwMDM3YWZpaTEwMDM4YWZpaTEwMDM5YWZpaTEwMDQwYWZpaTEwMDQxYWZpaTEwMDQyYWZpaTEwMDQzYWZpaTEwMDQ0YWZpaTEwMDQ1YWZpaTEwMDQ2YWZpaTEwMDQ3YWZpaTEwMDQ4YWZpaTEwMDQ5YWZpaTEwMDY1YWZpaTEwMDY2YWZpaTEwMDY3YWZpaTEwMDY4YWZpaTEwMDY5YWZpaTEwMDcwYWZpaTEwMDcyYWZpaTEwMDczYWZpaTEwMDc0YWZpaTEwMDc1YWZpaTEwMDc2YWZpaTEwMDc3YWZpaTEwMDc4YWZpaTEwMDc5YWZpaTEwMDgwYWZpaTEwMDgxYWZpaTEwMDgyYWZpaTEwMDgzYWZpaTEwMDg0YWZpaTEwMDg1YWZpaTEwMDg2YWZpaTEwMDg3YWZpaTEwMDg4YWZpaTEwMDg5YWZpaTEwMDkwYWZpaTEwMDkxYWZpaTEwMDkyYWZpaTEwMDkzYWZpaTEwMDk0YWZpaTEwMDk1YWZpaTEwMDk2YWZpaTEwMDk3dW5pMDQ1MGFmaWkxMDA3MWFmaWkxMDA5OWFmaWkxMDEwMGFmaWkxMDEwMWFmaWkxMDEwMmFmaWkxMDEwM2FmaWkxMDEwNGFmaWkxMDEwNWFmaWkxMDEwNmFmaWkxMDEwN2FmaWkxMDEwOGFmaWkxMDEwOXVuaTA0NURhZmlpMTAxMTBhZmlpMTAxOTN1bmkwNDYwdW5pMDQ2MWFmaWkxMDE0NmFmaWkxMDE5NHVuaTA0NjR1bmkwNDY1dW5pMDQ2NnVuaTA0Njd1bmkwNDY4dW5pMDQ2OXVuaTA0NkF1bmkwNDZCdW5pMDQ2Q3VuaTA0NkR1bmkwNDZFdW5pMDQ2RnVuaTA0NzB1bmkwNDcxYWZpaTEwMTQ3YWZpaTEwMTk1YWZpaTEwMTQ4YWZpaTEwMTk2dW5pMDQ3NnVuaTA0Nzd1bmkwNDdDdW5pMDQ3RHVuaTA0N0V1bmkwNDdGdW5pMDQ4M3VuaTA0OEN1bmkwNDhEdW5pMDQ4RXVuaTA0OEZhZmlpMTAwNTBhZmlpMTAwOTh1bmkwNDkydW5pMDQ5M3VuaTA0OTR1bmkwNDk1dW5pMDQ5NnVuaTA0OTd1bmkwNDk4dW5pMDQ5OXVuaTA0OUF1bmkwNDlCdW5pMDQ5Q3VuaTA0OUR1bmkwNDlFdW5pMDQ5RnVuaTA0QTB1bmkwNEExdW5pMDRBMnVuaTA0QTN1bmkwNEE0dW5pMDRBNXVuaTA0QTZ1bmkwNEE3dW5pMDRBOHVuaTA0QTl1bmkwNEFBdW5pMDRBQnVuaTA0QUN1bmkwNEFEdW5pMDRBRXVuaTA0QUZ1bmkwNEIwdW5pMDRCMXVuaTA0QjJ1bmkwNEIzdW5pMDRCNHVuaTA0QjV1bmkwNEI2dW5pMDRCN3VuaTA0Qjh1bmkwNEI5dW5pMDRCQXVuaTA0QkJ1bmkwNEJDdW5pMDRCRHVuaTA0QkV1bmkwNEJGdW5pMDRDMHVuaTA0QzF1bmkwNEMydW5pMDRDM3VuaTA0QzR1bmkwNEM3dW5pMDRDOHVuaTA0Qzl1bmkwNENBdW5pMDRDQnVuaTA0Q0N1bmkwNEQwdW5pMDREMXVuaTA0RDJ1bmkwNEQzdW5pMDRENHVuaTA0RDV1bmkwNEQ2dW5pMDREN3VuaTA0RDhhZmlpMTA4NDZ1bmkwNERBdW5pMDREQnVuaTA0REN1bmkwNEREdW5pMDRERXVuaTA0REZ1bmkwNEUwdW5pMDRFMXVuaTA0RTJ1bmkwNEUzdW5pMDRFNHVuaTA0RTV1bmkwNEU2dW5pMDRFN3VuaTA0RTh1bmkwNEU5dW5pMDRFQXVuaTA0RUJ1bmkwNEVDdW5pMDRFRHVuaTA0RUV1bmkwNEVGdW5pMDRGMHVuaTA0RjF1bmkwNEYydW5pMDRGM3VuaTA0RjR1bmkwNEY1dW5pMDRGNnVuaTA0Rjd1bmkwNEY4dW5pMDRGOWFmaWk1Nzc5OWFmaWk1NzgwMWFmaWk1NzgwMGFmaWk1NzgwMmFmaWk1Nzc5M2FmaWk1Nzc5NGFmaWk1Nzc5NWFmaWk1Nzc5OGFmaWk1Nzc5N2FmaWk1NzgwNnVuaTA1QkFhZmlpNTc3OTZhZmlpNTc4MDdhZmlpNTc4MzlhZmlpNTc2NDVhZmlpNTc4NDFhZmlpNTc4NDJhZmlpNTc4MDRhZmlpNTc4MDNhZmlpNTc2NTh1bmkwNUM2YWZpaTU3NjY0YWZpaTU3NjY1YWZpaTU3NjY2YWZpaTU3NjY3YWZpaTU3NjY4YWZpaTU3NjY5YWZpaTU3NjcwYWZpaTU3NjcxYWZpaTU3NjcyYWZpaTU3NjczYWZpaTU3Njc0YWZpaTU3Njc1YWZpaTU3Njc2YWZpaTU3Njc3YWZpaTU3Njc4YWZpaTU3Njc5YWZpaTU3NjgwYWZpaTU3NjgxYWZpaTU3NjgyYWZpaTU3NjgzYWZpaTU3Njg0YWZpaTU3Njg1YWZpaTU3Njg2YWZpaTU3Njg3YWZpaTU3Njg4YWZpaTU3Njg5YWZpaTU3NjkwYWZpaTU3NzE2YWZpaTU3NzE3YWZpaTU3NzE4dW5pMDVGM3VuaTA1RjR1bmkxRDE1dW5pMUUwMHVuaTFFMDF1bmkxRTAydW5pMUUwM3VuaTFFMDR1bmkxRTA1dW5pMUUwNnVuaTFFMDd1bmkxRTA4dW5pMUUwOXVuaTFFMEF1bmkxRTBCdW5pMUUwQ3VuaTFFMER1bmkxRTBFdW5pMUUwRnVuaTFFMTB1bmkxRTExdW5pMUUxMnVuaTFFMTN1bmkxRTE0dW5pMUUxNXVuaTFFMTZ1bmkxRTE3dW5pMUUxOHVuaTFFMTl1bmkxRTFBdW5pMUUxQnVuaTFFMUN1bmkxRTFEdW5pMUUxRXVuaTFFMUZ1bmkxRTIwdW5pMUUyMXVuaTFFMjJ1bmkxRTIzdW5pMUUyNHVuaTFFMjV1bmkxRTI2dW5pMUUyN3VuaTFFMjh1bmkxRTI5dW5pMUUyQXVuaTFFMkJ1bmkxRTJDdW5pMUUyRHVuaTFFMkV1bmkxRTJGdW5pMUUzMHVuaTFFMzF1bmkxRTMydW5pMUUzM3VuaTFFMzR1bmkxRTM1dW5pMUUzNnVuaTFFMzd1bmkxRTM4dW5pMUUzOXVuaTFFM0F1bmkxRTNCdW5pMUUzQ3VuaTFFM0R1bmkxRTNFdW5pMUUzRnVuaTFFNDB1bmkxRTQxdW5pMUU0MnVuaTFFNDN1bmkxRTQ0dW5pMUU0NXVuaTFFNDZ1bmkxRTQ3dW5pMUU0OHVuaTFFNDl1bmkxRTRBdW5pMUU0QnVuaTFFNEN1bmkxRTREdW5pMUU0RXVuaTFFNEZ1bmkxRTUwdW5pMUU1MXVuaTFFNTJ1bmkxRTUzdW5pMUU1NHVuaTFFNTV1bmkxRTU2dW5pMUU1N3VuaTFFNTh1bmkxRTU5dW5pMUU1QXVuaTFFNUJ1bmkxRTVDdW5pMUU1RHVuaTFFNUV1bmkxRTVGdW5pMUU2MHVuaTFFNjF1bmkxRTYydW5pMUU2M3VuaTFFNjR1bmkxRTY1dW5pMUU2NnVuaTFFNjd1bmkxRTY4dW5pMUU2OXVuaTFFNkF1bmkxRTZCdW5pMUU2Q3VuaTFFNkR1bmkxRTZFdW5pMUU2RnVuaTFFNzB1bmkxRTcxdW5pMUU3MnVuaTFFNzN1bmkxRTc0dW5pMUU3NXVuaTFFNzZ1bmkxRTc3dW5pMUU3OHVuaTFFNzl1bmkxRTdBdW5pMUU3QnVuaTFFN0N1bmkxRTdEdW5pMUU3RXVuaTFFN0ZXZ3JhdmV3Z3JhdmVXYWN1dGV3YWN1dGVXZGllcmVzaXN3ZGllcmVzaXN1bmkxRTg2dW5pMUU4N3VuaTFFODh1bmkxRTg5dW5pMUU4QXVuaTFFOEJ1bmkxRThDdW5pMUU4RHVuaTFFOEV1bmkxRThGdW5pMUU5MHVuaTFFOTF1bmkxRTkydW5pMUU5M3VuaTFFOTR1bmkxRTk1dW5pMUU5NnVuaTFFOTd1bmkxRTk4dW5pMUU5OXVuaTFFOUF1bmkxRTlCdW5pMUU5Q3VuaTFFOURHZXJtYW5kYmxzdW5pMUU5RnVuaTFFQTB1bmkxRUExdW5pMUVBMnVuaTFFQTN1bmkxRUE0dW5pMUVBNXVuaTFFQTZ1bmkxRUE3dW5pMUVBOHVuaTFFQTl1bmkxRUFBdW5pMUVBQnVuaTFFQUN1bmkxRUFEdW5pMUVBRXVuaTFFQUZ1bmkxRUIwdW5pMUVCMXVuaTFFQjJ1bmkxRUIzdW5pMUVCNHVuaTFFQjV1bmkxRUI2dW5pMUVCN3VuaTFFQjh1bmkxRUI5dW5pMUVCQXVuaTFFQkJ1bmkxRUJDdW5pMUVCRHVuaTFFQkV1bmkxRUJGdW5pMUVDMHVuaTFFQzF1bmkxRUMydW5pMUVDM3VuaTFFQzR1bmkxRUM1dW5pMUVDNnVuaTFFQzd1bmkxRUM4dW5pMUVDOXVuaTFFQ0F1bmkxRUNCdW5pMUVDQ3VuaTFFQ0R1bmkxRUNFdW5pMUVDRnVuaTFFRDB1bmkxRUQxdW5pMUVEMnVuaTFFRDN1bmkxRUQ0dW5pMUVENXVuaTFFRDZ1bmkxRUQ3dW5pMUVEOHVuaTFFRDl1bmkxRURBdW5pMUVEQnVuaTFFREN1bmkxRUREdW5pMUVERXVuaTFFREZ1bmkxRUUwdW5pMUVFMXVuaTFFRTJ1bmkxRUUzdW5pMUVFNHVuaTFFRTV1bmkxRUU2dW5pMUVFN3VuaTFFRTh1bmkxRUU5dW5pMUVFQXVuaTFFRUJ1bmkxRUVDdW5pMUVFRHVuaTFFRUV1bmkxRUVGdW5pMUVGMHVuaTFFRjFZZ3JhdmV5Z3JhdmV1bmkxRUY0dW5pMUVGNXVuaTFFRjZ1bmkxRUY3dW5pMUVGOHVuaTFFRjl1bmkxRUZBdW5pMUVGQnVuaTFFRkN1bmkxRUZEdW5pMUVGRXVuaTFFRkZ1bmkxRjAwdW5pMUYwMXVuaTFGMDJ1bmkxRjAzdW5pMUYwNHVuaTFGMDV1bmkxRjA2dW5pMUYwN3VuaTFGMDh1bmkxRjA5dW5pMUYwQXVuaTFGMEJ1bmkxRjBDdW5pMUYwRHVuaTFGMEV1bmkxRjBGdW5pMUYxMHVuaTFGMTF1bmkxRjEydW5pMUYxM3VuaTFGMTR1bmkxRjE1dW5pMUYxOHVuaTFGMTl1bmkxRjFBdW5pMUYxQnVuaTFGMUN1bmkxRjFEdW5pMUYyMHVuaTFGMjF1bmkxRjIydW5pMUYyM3VuaTFGMjR1bmkxRjI1dW5pMUYyNnVuaTFGMjd1bmkxRjI4dW5pMUYyOXVuaTFGMkF1bmkxRjJCdW5pMUYyQ3VuaTFGMkR1bmkxRjJFdW5pMUYyRnVuaTFGMzB1bmkxRjMxdW5pMUYzMnVuaTFGMzN1bmkxRjM0dW5pMUYzNXVuaTFGMzZ1bmkxRjM3dW5pMUYzOHVuaTFGMzl1bmkxRjNBdW5pMUYzQnVuaTFGM0N1bmkxRjNEdW5pMUYzRXVuaTFGM0Z1bmkxRjQwdW5pMUY0MXVuaTFGNDJ1bmkxRjQzdW5pMUY0NHVuaTFGNDV1bmkxRjQ4dW5pMUY0OXVuaTFGNEF1bmkxRjRCdW5pMUY0Q3VuaTFGNER1bmkxRjUwdW5pMUY1MXVuaTFGNTJ1bmkxRjUzdW5pMUY1NHVuaTFGNTV1bmkxRjU2dW5pMUY1N3VuaTFGNTl1bmkxRjVCdW5pMUY1RHVuaTFGNUZ1bmkxRjYwdW5pMUY2MXVuaTFGNjJ1bmkxRjYzdW5pMUY2NHVuaTFGNjV1bmkxRjY2dW5pMUY2N3VuaTFGNjh1bmkxRjY5dW5pMUY2QXVuaTFGNkJ1bmkxRjZDdW5pMUY2RHVuaTFGNkV1bmkxRjZGdW5pMUY3MHVuaTFGNzF1bmkxRjcydW5pMUY3M3VuaTFGNzR1bmkxRjc1dW5pMUY3NnVuaTFGNzd1bmkxRjc4dW5pMUY3OXVuaTFGN0F1bmkxRjdCdW5pMUY3Q3VuaTFGN0R1bmkxRjgwdW5pMUY4MXVuaTFGODJ1bmkxRjgzdW5pMUY4NHVuaTFGODV1bmkxRjg2dW5pMUY4N3VuaTFGODh1bmkxRjg5dW5pMUY4QXVuaTFGOEJ1bmkxRjhDdW5pMUY4RHVuaTFGOEV1bmkxRjhGdW5pMUY5MHVuaTFGOTF1bmkxRjkydW5pMUY5M3VuaTFGOTR1bmkxRjk1dW5pMUY5NnVuaTFGOTd1bmkxRjk4dW5pMUY5OXVuaTFGOUF1bmkxRjlCdW5pMUY5Q3VuaTFGOUR1bmkxRjlFdW5pMUY5RnVuaTFGQTB1bmkxRkExdW5pMUZBMnVuaTFGQTN1bmkxRkE0dW5pMUZBNXVuaTFGQTZ1bmkxRkE3dW5pMUZBOHVuaTFGQTl1bmkxRkFBdW5pMUZBQnVuaTFGQUN1bmkxRkFEdW5pMUZBRXVuaTFGQUZ1bmkxRkIwdW5pMUZCMXVuaTFGQjJ1bmkxRkIzdW5pMUZCNHVuaTFGQjZ1bmkxRkI3dW5pMUZCOHVuaTFGQjl1bmkxRkJBdW5pMUZCQnVuaTFGQkN1bmkxRkJEdW5pMUZCRXVuaTFGQkZ1bmkxRkMwdW5pMUZDMXVuaTFGQzJ1bmkxRkMzdW5pMUZDNHVuaTFGQzZ1bmkxRkM3dW5pMUZDOHVuaTFGQzl1bmkxRkNBdW5pMUZDQnVuaTFGQ0N1bmkxRkNEdW5pMUZDRXVuaTFGQ0Z1bmkxRkQwdW5pMUZEMXVuaTFGRDJ1bmkxRkQzdW5pMUZENnVuaTFGRDd1bmkxRkQ4dW5pMUZEOXVuaTFGREF1bmkxRkRCdW5pMUZERHVuaTFGREV1bmkxRkRGdW5pMUZFMHVuaTFGRTF1bmkxRkUydW5pMUZFM3VuaTFGRTR1bmkxRkU1dW5pMUZFNnVuaTFGRTd1bmkxRkU4dW5pMUZFOXVuaTFGRUF1bmkxRkVCdW5pMUZFQ3VuaTFGRUR1bmkxRkVFdW5pMUZFRnVuaTFGRjJ1bmkxRkYzdW5pMUZGNHVuaTFGRjZ1bmkxRkY3dW5pMUZGOHVuaTFGRjl1bmkxRkZBdW5pMUZGQnVuaTFGRkN1bmkxRkZEdW5pMUZGRWVucXVhZGVtcXVhZGVuc3BhY2VlbXNwYWNldGhyZWVwZXJlbXNwYWNlZm91cnBlcmVtc3BhY2VzaXhwZXJlbXNwYWNlZmlndXJlc3BhY2VwdW5jdHVhdGlvbnNwYWNldGhpbnNwYWNlaGFpcnNwYWNlemVyb3dpZHRoc3BhY2VoeXBoZW50d29oeXBoZW5ub2JyZWFraG9yaXpvbnRhbGJhcnVuaTIwMTZ1bmRlcnNjb3JlZGJscXVvdGVyZXZlcnNlZHF1b3RlZGJscmV2dHJpYW5nbGVidWxsZXRoeXBoZW5kb3R1bmkyMDJGcGVydGVudGhvdXNhbmRtaW51dGVzZWNvbmRwcmltZXRyaXBsZXByaW1lcmV2ZXJzZWR1bmkyMDM2dW5pMjAzN3VuaTIwM0JleGNsYW1kYmxpbnRlcnJvYmFuZ3VuaTIwM0V1bmkyMDQycXVlc3Rpb25fcXVlc3Rpb25xdWVzdGlvbl9leGNsYW1leGNsYW1fcXVlc3Rpb251bmkyMDRBdW5pMjA0QnVuaTIwNEZ6ZXJvLnN1cGVyaW9yaS5zdXBlcmlvcmZvdXIuc3VwZXJpb3JmaXZlLnN1cGVyaW9yc2l4LnN1cGVyaW9yc2V2ZW4uc3VwZXJpb3JlaWdodC5zdXBlcmlvcm5pbmUuc3VwZXJpb3JwbHVzLnN1cGVyaW9ybWludXMuc3VwZXJpb3JlcXVhbC5zdXBlcmlvcnBhcmVubGVmdC5zdXBlcmlvcnBhcmVucmlnaHQuc3VwZXJpb3JuLnN1cGVyaW9yemVyby5pbmZlcmlvcm9uZS5pbmZlcmlvcnR3by5pbmZlcmlvcnRocmVlLmluZmVyaW9yZm91ci5pbmZlcmlvcmZpdmUuaW5mZXJpb3JzaXguaW5mZXJpb3JzZXZlbi5pbmZlcmlvcmVpZ2h0LmluZmVyaW9ybmluZS5pbmZlcmlvcnBsdXMuaW5mZXJpb3JtaW51cy5pbmZlcmlvcmVxdWFsLmluZmVyaW9ycGFyZW5sZWZ0LmluZmVyaW9ycGFyZW5yaWdodC5pbmZlcmlvcmEuaW5mZXJpb3JlLmluZmVyaW9yby5pbmZlcmlvcnguaW5mZXJpb3J1bmkyMDk0dW5pMjA5OHVuaTIwOTl1bmkyMEEyZnJhbmNsaXJhcGVzZXRhdW5pMjBBOGRvbmdFdXJvdW5pMjBBRnBlc291bmkyMTAwdW5pMjEwMXVuaTIxMDJjZW50aWdyYWRlYWZpaTYxMjQ4dW5pMjEwNmZhaHJlbmhlaXR1bmkyMTBDdW5pMjEwRHVuaTIxMEV1bmkyMTBGSWZyYWt0dXJhZmlpNjEyODl1bmkyMTE1bnVtZXJvdW5pMjExOXVuaTIxMUFSZnJha3R1cnVuaTIxMUR1bmkyMTIwdW5pMjEyNHVuaTIxMjZPbWVnYWludmVzdGltYXRlZGFsZXBodW5pMjEzNnVuaTIxMzd1bmkyMTM4dW5pMjEzOXVuaTIxNEZvbmVmaWZ0aHR3b2ZpZnRoc3RocmVlZmlmdGhzZm91cmZpZnRoc29uZXNpeHRoZml2ZXNpeHRoc29uZW51bWVyYXRvck9uZXJvbWFuVHdvcm9tYW5UaHJlZXJvbWFuRm91cnJvbWFuRml2ZXJvbWFuU2l4cm9tYW5TZXZlbnJvbWFuRWlnaHRyb21hbk5pbmVyb21hblRlbnJvbWFuRWxldmVucm9tYW5Ud2VsdmVyb21hbnVuaTIxNkN1bmkyMTZEdW5pMjE2RXVuaTIxNkZvbmVyb21hbnR3b3JvbWFudGhyZWVyb21hbmZvdXJyb21hbmZpdmVyb21hbnNpeHJvbWFuc2V2ZW5yb21hbmVpZ2h0cm9tYW5uaW5lcm9tYW50ZW5yb21hbmVsZXZlbnJvbWFudHdlbHZlcm9tYW51bmkyMTdDdW5pMjE3RHVuaTIxN0V1bmkyMTdGdW5pMjE4MHVuaTIxODF1bmkyMTgydW5pMjE4M3VuaTIxODRhcnJvd2xlZnRhcnJvd3VwYXJyb3dyaWdodGFycm93ZG93bmFycm93Ym90aGFycm93dXBkbnVuaTIxOTZ1bmkyMTk3dW5pMjE5OHVuaTIxOTl1bmkyMTlBdW5pMjE5QnVuaTIxQTZhcnJvd3VwZG5ic2V1bmkyMUFFdW5pMjFCQ3VuaTIxQkR1bmkyMUMwdW5pMjFDMXVuaTIxQ0J1bmkyMUNDdW5pMjFDRHVuaTIxQ0V1bmkyMUNGYXJyb3dkYmxsZWZ0YXJyb3dkYmx1cGFycm93ZGJscmlnaHRhcnJvd2RibGRvd25hcnJvd2RibGJvdGh1bmkyMUQ1TndhcnJvd05lYXJyb3dTZWFycm93U3dhcnJvd3VuaXZlcnNhbHVuaTIyMDFwYXJ0aWFsZGlmZmV4aXN0ZW50aWFsdW5pMjIwNGVtcHR5c2V0dW5pMjIwNmdyYWRpZW50ZWxlbWVudG5vdGVsZW1lbnR1bmkyMjBBc3VjaHRoYXR1bmkyMjBDdW5pMjIwRHByb2R1Y3R1bmkyMjEwc3VtbWF0aW9udW5pMjIxM3VuaTIyMTR1bmkyMjE1dW5pMjIxNmFzdGVyaXNrbWF0aHVuaTIyMTh1bmkyMjE5cmFkaWNhbHVuaTIyMUJ1bmkyMjFDcHJvcG9ydGlvbmFsaW5maW5pdHl1bmkyMjFGYW5nbGV1bmkyMjIxdW5pMjIyMnVuaTIyMjN1bmkyMjI0dW5pMjIyNXVuaTIyMjZsb2dpY2FsYW5kbG9naWNhbG9yaW50ZXJzZWN0aW9udW5pb25pbnRlZ3JhbHVuaTIyMkN1bmkyMjJEdW5pMjIyRXVuaTIyMzZzaW1pbGFydW5pMjI0MWNvbmdydWVudGFwcHJveGVxdWFsdW5pMjI0OXVuaTIyNTlub3RlcXVhbGVxdWl2YWxlbmNldW5pMjI2Mmxlc3NlcXVhbGdyZWF0ZXJlcXVhbHVuaTIyNkF1bmkyMjZCdW5pMjI2RXVuaTIyNkZ1bmkyMjcwdW5pMjI3MXByb3BlcnN1YnNldHByb3BlcnN1cGVyc2V0bm90c3Vic2V0dW5pMjI4NWNpcmNsZXBsdXN1bmkyMjk2Y2lyY2xlbXVsdGlwbHl1bmkyMjk4dW5pMjJBMnVuaTIyQTN1bmkyMkE0cGVycGVuZGljdWxhcnVuaTIyQTZ1bmkyMkI2dW5pMjJCN2RvdG1hdGh1bmkyMkVFdW5pMjJFRnVuaTIzMDB1bmkyMzAydW5pMjMwM3VuaTIzMTB1bmkyMzIwdW5pMjMyMXVuaTIzMjZ1bmkyMzI3dW5pMjMyOXVuaTIzMkF1bmkyMzJCdW5pMjM3RHVuaTIzODB1bmkyM0QzdW5pMjQyM3VuaTI0NjB1bmkyNDYxdW5pMjQ2MnVuaTI0NjN1bmkyNDY0dW5pMjQ2NXVuaTI0NjZ1bmkyNDY3dW5pMjQ2OHVuaTI0Njl1bmkyNDZBdW5pMjQ2QnVuaTI0NkN1bmkyNDZEdW5pMjQ2RXVuaTI0NkZ1bmkyNDcwdW5pMjQ3MXVuaTI0NzJ1bmkyNDczdW5pMjQ3NHVuaTI0NzV1bmkyNDc2dW5pMjQ3N3VuaTI0Nzh1bmkyNDc5dW5pMjQ3QXVuaTI0N0J1bmkyNDdDdW5pMjQ3RHVuaTI0N0V1bmkyNDdGdW5pMjQ4MHVuaTI0ODF1bmkyNDgydW5pMjQ4M3VuaTI0ODR1bmkyNDg1dW5pMjQ4NnVuaTI0ODd1bmkyNEI2dW5pMjRCN3VuaTI0Qjh1bmkyNEI5dW5pMjRCQXVuaTI0QkJ1bmkyNEJDdW5pMjRCRHVuaTI0QkV1bmkyNEJGdW5pMjRDMHVuaTI0QzF1bmkyNEMydW5pMjRDM3VuaTI0QzR1bmkyNEM1dW5pMjRDNnVuaTI0Qzd1bmkyNEM4dW5pMjRDOXVuaTI0Q0F1bmkyNENCdW5pMjRDQ3VuaTI0Q0R1bmkyNENFdW5pMjRDRnVuaTI0RDB1bmkyNEQxdW5pMjREMnVuaTI0RDN1bmkyNEQ0dW5pMjRENXVuaTI0RDZ1bmkyNEQ3dW5pMjREOHVuaTI0RDl1bmkyNERBdW5pMjREQnVuaTI0REN1bmkyNEREdW5pMjRERXVuaTI0REZ1bmkyNEUwdW5pMjRFMXVuaTI0RTJ1bmkyNEUzdW5pMjRFNHVuaTI0RTV1bmkyNEU2dW5pMjRFN3VuaTI0RTh1bmkyNEU5dW5pMjRFQXVuaTI0RUJ1bmkyNEVDdW5pMjRFRHVuaTI0RUV1bmkyNEVGdW5pMjRGMHVuaTI0RjF1bmkyNEYydW5pMjRGM3VuaTI0RjR1bmkyNEY1dW5pMjRGNnVuaTI0Rjd1bmkyNEY4dW5pMjRGOXVuaTI0RkF1bmkyNEZCdW5pMjRGQ3VuaTI0RkR1bmkyNEZFdW5pMjRGRmZpbGxlZGJveEgyMjA3M3RyaWFndXB1bmkyNUIzdW5pMjVCNnVuaTI1Qjd0cmlhZ2RudW5pMjVCRHVuaTI1QzB1bmkyNUMxdW5pMjVDNnVuaTI1Qzd1bmkyNUM5bG96ZW5nZWJpZ2NpcmNsZXVuaTI1Q0VIMTg1MzN1bmkyNUQwdW5pMjVEMXVuaTI1RDJ1bmkyNUQzdW5pMjVENHVuaTI1RDV1bmkyNUQ2dW5pMjVEN29wZW5idWxsZXR1bmkyNjA1dW5pMjYwOXVuaTI2MTl1bmkyNjFCdW5pMjYxRXVuaTI2Mjd1bmkyNjJGdW5pMjYzOXVuaTI2M0F1bmkyNjNCdW5pMjYzQ3VuaTI2M0R1bmkyNjNFdW5pMjYzRmZlbWFsZXVuaTI2NDFtYWxldW5pMjY0M3VuaTI2NDR1bmkyNjQ1dW5pMjY0NnVuaTI2NDd1bmkyNjQ4dW5pMjY0OXVuaTI2NEF1bmkyNjRCdW5pMjY0Q3VuaTI2NER1bmkyNjRFdW5pMjY0RnVuaTI2NTB1bmkyNjUxdW5pMjY1MnVuaTI2NTN1bmkyNjYwdW5pMjY2M3VuaTI2NjV1bmkyNjY2dW5pMjY2OW11c2ljYWxub3RlbXVzaWNhbG5vdGVkYmx1bmkyNjZDdW5pMjY2RHVuaTI2NkV1bmkyNjZGdW5pMjY5NXVuaTI2OTh1bmkyNkEydW5pMjZBM3VuaTI2QTR1bmkyNkE1dW5pMjZBQ21hcnJpZWRkaXZvcmNlZHVuaTI2QUZ1bmkyNzE0dW5pMjcxOGRpZWR1bmkyNzY3dW5pMjc3NnVuaTI3Nzd1bmkyNzc4dW5pMjc3OXVuaTI3N0F1bmkyNzdCdW5pMjc3Q3VuaTI3N0R1bmkyNzdFdW5pMjc3RnVuaTI3QzJ1bmkyN0U2dW5pMjdFN3VuaTJDNjB1bmkyQzYxdW5pMkM2MnVuaTJDNjN1bmkyQzY0dW5pMkM2NXVuaTJDNjZ1bmkyQzY3dW5pMkM2OHVuaTJDNjl1bmkyQzZBdW5pMkM2QnVuaTJDNkN1bmkyQzc0dW5pMkM3NXVuaTJDNzZ1bmkyQzc3dW5pMkUwMnVuaTJFMDN1bmkyRTA0dW5pMkUwNXVuaTJFMDh1bmkyRTA5dW5pMkUwQXVuaTJFMTd1bmkyRTE4dW5pQTcxRHVuaUE3MjB1bmlBNzIxdW5pQTc2NVR1eHVuaUUwMDF1bmlFMDAydW5pRTAwM3VuaUUwMDR1bmlFMDA1dW5pRTAwNnVuaUUwMDd1bmlFMDA4dW5pRTAwOXVuaUUwMEF1bmlFMDBCY29weWxlZnRsZWFmemVyby5zbGFzaGZpdHRlZHplcm8uZml0dGVkb25lLmZpdHRlZHR3by5maXR0ZWR0aHJlZS5maXR0ZWRmb3VyLmZpdHRlZGZpdmUuZml0dGVkc2l4LmZpdHRlZHNldmVuLmZpdHRlZGVpZ2h0LmZpdHRlZG5pbmUuZml0dGVkRXVyby5maXR0ZWRZZW4uZml0dGVkdW5pRTAxQ2EuYWx0dW5pRTAxRXBlcnRob3VzYW5kemVyb3plcm8ub2xkc3R5bGVvbmUub2xkc3R5bGV0d28ub2xkc3R5bGV0aHJlZS5vbGRzdHlsZWZvdXIub2xkc3R5bGVmaXZlLm9sZHN0eWxlc2l4Lm9sZHN0eWxlc2V2ZW4ub2xkc3R5bGVlaWdodC5vbGRzdHlsZW5pbmUub2xkc3R5bGVBZGllcmVzaXMuYWx0T2RpZXJlc2lzLmFsdFVkaWVyZXNpcy5hbHRXLmFsdGZfYmZfZl9oZl9mX2pmX2Zfa2ZfZl90Zl9oZl9qZl9rZl90Y19rY19odF90Y190bG9uZ3NfaWxvbmdzX2xvbmdzdW5pRTA0MHVuaUUwNDF1bmlFMDQybG9uZ3NfbGxvbmdzX2xvbmdzX2lsb25nc19zYWUuYWx0bG9uZ3NfaFFfdVRfaHRfemguYWx0Z2VybWFuZGJscy5hbHRnZXJtYW5kYmxzLnNzMDNHZXJtYW5kYmxzLmFsdHVuaUUwNEZhbXBlcnNhbmQuYWx0YS5zY2Iuc2NjLnNjZC5zY2Uuc2NmLnNjZy5zY2guc2NpLnNjai5zY2suc2NsLnNjbS5zY24uc2NvLnNjcC5zY3Euc2NyLnNjcy5zY3Quc2N1LnNjdi5zY3cuc2N4LnNjeS5zY3ouc2N1bmlFMDZCaHlwaGVuLnNjYWdyYXZlLnNjYWFjdXRlLnNjYWNpcmN1bWZsZXguc2NhdGlsZGUuc2NhZGllcmVzaXMuc2NhcmluZy5zY2FlLnNjY2NlZGlsbGEuc2NlZ3JhdmUuc2NlYWN1dGUuc2NlY2lyY3VtZmxleC5zY2VkaWVyZXNpcy5zY2lncmF2ZS5zY2lhY3V0ZS5zY2ljaXJjdW1mbGV4LnNjaWRpZXJlc2lzLnNjZXRoLnNjbnRpbGRlLnNjb2dyYXZlLnNjb2FjdXRlLnNjb2NpcmN1bWZsZXguc2NvdGlsZGUuc2NvZGllcmVzaXMuc2NvZS5zY29zbGFzaC5zY3VncmF2ZS5zY3VhY3V0ZS5zY3VjaXJjdW1mbGV4LnNjdWRpZXJlc2lzLnNjeWFjdXRlLnNjdGhvcm4uc2N5ZGllcmVzaXMuc2Npai5zY2dlcm1hbmRibHMuc2NhbHRnZXJtYW5kYmxzLnNjUV91LnNjZGNyb2F0LnNjYWJyZXZlLnNjYW9nb25lay5zY2NhY3V0ZS5zY2NjYXJvbi5zY2RjYXJvbi5zY2VvZ29uZWsuc2NlY2Fyb24uc2NnYnJldmUuc2NsYWN1dGUuc2Nsc2xhc2guc2NuYWN1dGUuc2NuY2Fyb24uc2Nlbmcuc2NvaHVuZ2FydW1sYXV0LnNjcmFjdXRlLnNjcmNhcm9uLnNjc2FjdXRlLnNjc2NlZGlsbGEuc2NzY2Fyb24uc2N0Y2VkaWxsYS5zY3RiYXIuc2N1cmluZy5zY3VodW5nYXJ1bWxhdXQuc2N6YWN1dGUuc2N6ZG90YWNjZW50LnNjemNhcm9uLnNjbGNhcm9uLnNjdGNhcm9uLnNjdGNvbW1hYWNjZW50LnNjc2NvbW1hYWNjZW50LnNjaWRvdGFjY2VudC5zY2FtcGVyc2FuZC5zY2Euc2NhbHRhLnN1cGVyaW9yYi5zdXBlcmlvcmMuc3VwZXJpb3JkLnN1cGVyaW9yZS5zdXBlcmlvcmYuc3VwZXJpb3JnLnN1cGVyaW9yay5zdXBlcmlvcm0uc3VwZXJpb3JvLnN1cGVyaW9ycC5zdXBlcmlvcnEuc3VwZXJpb3J0LnN1cGVyaW9ydS5zdXBlcmlvcnYuc3VwZXJpb3J6LnN1cGVyaW9yZi5zaG9ydGZfZi5zaG9ydHVuaUUwRTh1bmlFMEU5Vi5hbHRLLmFsdFIuYWx0Si5hbHR1bmlFMEVFdW5pRTBFRnVuaUUwRjB3LmFsdHVuaUUwRjJ1bmlFMEYzdW5pRTBGNHVuaUUwRjV5LmFsdHVuaUUwRjl1bmlFMEZCa3JlaXN1bmlFMTAxdW5pRTEwNHVuaUUxMDV1bmlFMTA2dW5pRTEwN3plcm8uY2Fwb25lLmNhcHR3by5jYXB0aHJlZS5jYXBmb3VyLmNhcGZpdmUuY2Fwc2l4LmNhcHNldmVuLmNhcGVpZ2h0LmNhcG5pbmUuY2FwemVyby50YWJvbGRzdHlsZW9uZS50YWJvbGRzdHlsZXR3by50YWJvbGRzdHlsZXRocmVlLnRhYm9sZHN0eWxlZm91ci50YWJvbGRzdHlsZWZpdmUudGFib2xkc3R5bGVzaXgudGFib2xkc3R5bGVzZXZlbi50YWJvbGRzdHlsZWVpZ2h0LnRhYm9sZHN0eWxlbmluZS50YWJvbGRzdHlsZXVuaUUxMjh1bmlFMTI5dW5pRTEyQXVuaUUxMzBiLmluZmVyaW9yYy5pbmZlcmlvcmQuaW5mZXJpb3JmLmluZmVyaW9yZy5pbmZlcmlvcmguaW5mZXJpb3JpLmluZmVyaW9yai5pbmZlcmlvcmsuaW5mZXJpb3JsLmluZmVyaW9ybS5pbmZlcmlvcm4uaW5mZXJpb3JwLmluZmVyaW9ycS5pbmZlcmlvcnIuaW5mZXJpb3JzLmluZmVyaW9ydC5pbmZlcmlvcnUuaW5mZXJpb3J2LmluZmVyaW9ydy5pbmZlcmlvcnkuaW5mZXJpb3J6LmluZmVyaW9yZ3JhdmUuY2FwYWN1dGUuY2FwY2lyY3VtZmxleC5jYXBjYXJvbi5jYXBicmV2ZS5jYXBodW5nYXJ1bWxhdXQuY2Fwc3BhY2VfdW5pMDMwRi5jYXBicmV2ZWludmVydGVkY21iLmNhcGJyZXZlLmN5cmNhcGJyZXZlLmN5cmRpZXJlc2lzLmNhcGhvb2thYm92ZWNvbWIuY2FwZG90YWNjZW50LmNhcG1ldHJpY3plcm8uc2xhc2hwYXJlbmxlZnQuc2NwYXJlbnJpZ2h0LnNjYnJhY2tldGxlZnQuc2NicmFja2V0cmlnaHQuc2NicmFjZWxlZnQuc2NicmFjZXJpZ2h0LnNjZXhjbGFtZG93bi5zY3F1ZXN0aW9uZG93bi5zY2d1aWxsZW1vdGxlZnQuc2NndWlsbGVtb3RyaWdodC5zY2d1aWxzaW5nbGxlZnQuc2NndWlsc2luZ2xyaWdodC5zY2h5cGhlbi5jYXB1bmlGNkJFZl9mZl9pZl9sZl9mX2lmX2ZfbGxvbmdzX3RzX3R1bmlGRkZENC43LjNMaW51eCBMaWJlcnRpbmUgYnkgUGhpbGlwcCBILiBQb2xsLCBPcGVuIEZvbnQgdW5kZXIgVGVybXMgb2YgZm9sbG93aW5nIEZyZWUgU29mdHdhcmUgTGljZW5zZXM6CkdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkgd2l0aCBmb250LWV4Y2VwdGlvbiBhbmQgT0ZMIChPcGVuIEZvbnQgTGljZW5zZSkuCkNyZWF0ZWQgd2l0aCBGb250Rm9yZ2UgKGh0dHA6Ly9mb250Zm9yZ2Uuc2YubmV0KSBTZXB0IDIwMDMsIC4uLiwgMjAwOUxpbnV4IExpYmVydGluZSBPTGludXggTGliZXJ0aW5lIE8AAAAAAQACAAMABAAFAAYABwBoAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQAB8AEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAYcAYABhAGIAZwBkAKAAZgCDAKoAiwBqAJcBiAClAIAAoQCcAYkBigB9AYsBjAByAIUBjQCPAHgAngCbAKMAewCuAKsArACwAK0ArwCKALEAtQCyALMAtAC5ALYAtwC4AJoAugC+ALsAvAC/AL0AqACNAMQAwQDCAMMAxQCdAJUAywDIAMkAzQDKAMwAkADOANIAzwDQANEA1gDTANQA1QCnANcA2wDYANkA3ADaAJ8AkwDhAN4A3wDgAOIAogDjAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4AkQG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQCMAJIBzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwAjgCUAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAMAA3QHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AMYB/wIAAgECAgDHAOQCAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQBlAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgB+AIgDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgCBAIIAhACHAH8AhgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXAJgEGAQZBBoEGwQcBB0EHgQfBCAEIQQiBCMEJAQlBCYEJwQoBCkEKgQrBCwELQQuBC8EMAQxBDIEMwQ0BDUENgQ3BDgEOQQ6BDsEPAQ9BD4EPwRABEEEQgRDBEQERQRGBEcESARJBEoESwRMBE0ETgRPBFAEUQRSBFMEVARVBFYEVwRYBFkEWgRbBFwEXQReBF8EYARhBGIEYwRkBGUEZgRnBGgEaQRqBGsEbARtBG4EbwRwBHEEcgRzBHQEdQR2BHcEeAR5BHoEewR8BH0EfgR/BIAEgQSCBIMEhASFBIYEhwSIBIkEigSLBIwEjQSOBI8EkASRBJIEkwSUBJUElgSXBJgEmQSaBJsEnASdBJ4EnwSgBKEEogSjBKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE/AT9BP4E/wUABQEFAgUDBQQFBQUGBQcFCAUJBQoFCwUMBQ0FDgUPBRAFEQUSBRMFFAUVBRYFFwUYBRkFGgUbBRwFHQUeBR8FIAUhBSIFIwUkBSUFJgUnBSgFKQUqBSsFLAUtBS4FLwUwBTEFMgUzBTQFNQU2BTcFOAU5BToFOwU8BT0FPgU/BUAFQQVCBUMFRAVFBUYFRwVIBUkFSgVLBUwFTQVOBU8FUAVRBVIFUwVUBVUFVgVXBVgFWQVaBVsFXAVdBV4FXwVgBWEFYgVjBWQFZQVmBWcFaAVpBWoFawVsBW0FbgVvBXAFcQVyBXMFdAV1BXYFdwV4BXkFegV7BXwFfQV+BX8FgAWBBYIFgwWEBYUFhgWHBYgFiQWKBYsFjAWNBY4FjwWQBZEFkgWTBZQFlQWWBZcFmAWZBZoFmwWcBZ0FngWfBaAFoQWiBaMFpAWlBaYFpwWoBakFqgWrBawFrQWuBa8FsAWxBbIFswW0BbUFtgW3BbgFuQW6BbsFvAW9Bb4FvwXABcEFwgXDBcQFxQXGBccFyAXJBcoFywXMBc0FzgXPBdAF0QXSBdMF1AXVBdYF1wXYBdkF2gXbBdwF3QXeBd8F4AXhBeIF4wXkBeUF5gXnBegF6QXqBesF7AXtBe4F7wXwBfEF8gXzBfQF9QX2BfcF+AX5BfoF+wX8Bf0F/gX/BgAGAQYCBgMGBAYFBgYGBwYIBgkGCgYLBgwGDQYOBg8GEAYRBhIGEwYUBhUGFgYXBhgGGQYaBhsGHAYdBh4GHwYgBiEGIgYjBiQGJQYmBicGKAYpBioGKwYsBi0GLgYvBjAGMQYyBjMGNAY1BjYGNwY4BjkGOgY7BjwGPQY+Bj8GQAZBBkIGQwZEBkUGRgZHBkgGSQZKBksGTAZNBk4GTwZQBlEGUgZTBlQGVQZWBlcGWAZZBloGWwZcBl0GXgZfBmAGYQZiBmMGZAZlBmYGZwZoBmkGagZrBmwGbQZuBm8GcAZxBnIGcwZ0BnUGdgZ3BngGeQZ6BnsGfAZ9Bn4GfwaABoEGggaDBoQGhQaGBocGiAaJBooGiwaMBo0GjgaPBpAGkQaSBpMGlAaVBpYGlwaYBpkGmgabBpwGnQaeBp8GoAahBqIGowakBqUGpganBqgGqQaqBqsGrAatBq4GrwawBrEGsgazBrQGtQa2BrcGuAa5BroGuwa8Br0Gvga/BsAGwQbCBsMGxAbFBsYGxwbIBskGygbLBswGzQbOBs8G0AbRBtIG0wbUBtUG1gbXBtgG2QbaBtsG3AbdBt4G3wbgBuEG4gbjBuQG5QbmBucG6AbpBuoG6wbsBu0G7gbvBvAG8QbyBvMG9Ab1BvYG9wb4BvkG+gb7BvwG/Qb+Bv8HAAcBBwIHAwcEBwUHBgcHBwgHCQcKBwsHDAcNBw4HDwcQBxEHEgcTBxQHFQcWBxcHGAcZBxoHGwccBx0HHgcfByAHIQciByMHJAclByYHJwcoBykHKgcrBywHLQcuBy8HMAcxBzIHMwc0BzUHNgc3BzgHOQc6BzsHPAc9Bz4HPwdAB0EHQgdDB0QHRQdGB0cHSAdJB0oHSwdMB00HTgdPB1AHUQdSB1MHVAdVB1YHVwdYB1kHWgdbAToAbwCJB1wHXQdeAEEACAB1B18AaQB3AHYHYABwAHEAdAdhAO4A7QB5B2IHYwB6B2QHZQdmB2cHaAdpB2oAawBsB2sHbAdtB24HbwBjB3AHcQdyB3MHdAd1B3YHdwd4B3kHegd7B3wHfQd+B38HgAeBB4IHgweEB4UHhgeHB4gHiQeKB4sHjAeNB44HjweQB5EHkgeTB5QHlQeWB5cHmAeZB5oHmwecB50HngefB6AHoQeiB6MHpAelB6YHpweoB6kHqgerB6wHrQeuB68HsAexB7IHswe0B7UHtgCZB7cHuAe5B7oHuwe8B70Hvge/B8ABRAFFB8EHwgfDB8QHxQfGAUABQQFCAUMHxwfIB8kHygfLB8wHzQfOB88H0AfRB9IH0wfUB9UH1gfXB9gH2QfaB9sH3AfdB94H3wfgB+EH4gfjB+QH5QfmB+cH6AfpB+oH6wfsB+0H7gfvB/AH8QfyB/MH9Af1B/YH9wf4B/kH+gf7B/wH/Qf+B/8IAAgBCAIIAwgECAUIBggHCAgICQgKCAsIDAgNCA4IDwgQCBEIEggTCBQIFQgWCBcIGAgZCBoIGwgcCB0IHggfAKYIIAghCCIIIwgkCCUIJggnCCgIKQgqCCsILAgtCC4ILwgwCDEIMggzCDQINQg2CDcIOAg5CDoIOwg8CD0IPgg/CEAIQQhCCEMIRAhFCEYIRwhICEkISghLCEwITQhOCE8IUAhRCFIIUwhUCFUIVghXCFgIWQhaCFsIXAhdCF4IXwhgCGEIYghjCGQIZQhmCGcIaAhpCGoIawhsCG0IbghvCHAIcQhyCHMIdAh1CHYIdwh4CHkIegh7CHwIfQh+CH8IgAiBCIIIgwiECIUIhgiHCIgIiQiKCIsIjAiNCI4IjwiQCJEIkgiTCJQIlQiWCJcImAiZCJoImwicCJ0IngifCKAIoQiiCKMIpAilCKYIpwioCKkIqgirCKwIrQiuCK8IsAixCLIIswi0CLUItgi3CLgIuQi6CLsIvAi9CL4IvwjACMEIwgjDCMQIxQjGCMcIyAjJCMoIywjMCM0IzgjPCNAI0QjSCNMI1AjVCNYI1wjYCNkI2gjbCNwI3QjeCN8I4AjhCOII4wjkCOUI5gjnCOgI6QjqCOsI7AjtCO4I7wjwCPEI8gjzCPQI9Qj2CPcI+Aj5CPoI+wj8CP0I/gj/CQAJAQkCCQMJBAkFCQYJBwkICQkJCgkLCQwJDQkOCQ8JEAkRCRIJEwkUCRUJFgkXCRgJGQkaCRsJHAkdCR4JHwkgCSEJIgkjCSQJJQkmCScJKAkpCSoJKwksCS0JLgkvCTAJMQkyCTMJNAk1CTYJNwk4CTkJOgk7CTwJPQk+CT8JQAlBCUIJQwlECUUJRglHCUgJSQlKCUsJTAlNCU4JTwlQCVEJUglTCVQJVQlWCVcJWAlZCVoJWwlcCV0JXglfCWAJYQliCWMJZAllCWYJZwloCWkJaglrCWwJbQluCW8JcAlxCXIJcwl0CXUJdgl3CXgJeQl6CXsJfAl9CX4JfwmACYEJggmDCYQJhQmGCYcJiAmJCYoJiwmMCY0JjgmPCZAJkQmSCZMJlAmVCZYJlwmYCZkJmgmbCZwJnQmeCZ8JoAmhCaIJowmkCaUJpgmnCagJqQmqCasJrAmtCa4JrwmwCbEJsgmzCbQJtQm2CbcJuAm5CboJuwm8Cb0Jvgm/CcAJwQnCCcMJxAnFCcYJxwnICckJygnLCcwJzQnOCc8J0AnRCdIJ0wnUCdUJ1gnXCdgJ2QnaCdsJ3AndCd4J3wngCeEJ4gnjCeQJ5QnmCecJ6AnpCeoJ6wnsCe0J7gnvCfAJ8QnyCfMJ9An1CfYJ9wn4CfkJ+gn7CfwJ/Qn+Cf8KAAoBCgIKAwoECgUKBgoHCggKCQoKCgsKDAoNCg4KDwoQChEKEgoTChQKFQoWChcKGAoZChoKGwocCh0KHgofCiAKIQoiCiMKJAolCiYKJwooCikKKgorCiwKLQouCi8KMAoxCjIKMwo0CjUKNgo3CjgKOQo6CjsKPAo9Cj4KPwpACkEKQgpDCkQKRQpGCkcKSApJCkoKSwpMCk0KTgpPClAKUQpSClMKVApVClYKVwpYClkKWgpbClwKXQpeCl8KYAphCmIKYwpkCmUKZgpnCmgKaQpqCmsKbAptCm4KbwpwCnEKcgpzCnQKdQp2CncKeAp5CnoKewp8Cn0Kfgp/CoAKgQqCCoMKhAqFCoYKhwqICokKigqLCe0DAAABAABOAABRAABqAACEAADgAAKWAALIAAQKAAQbAARuAATDAATNAATeAATxAAUDAAURAAUqAAVGAAXzAAaDAAanAAa+AAbVAAb+AAcRAAenAAfQAAfnAAgKAAgYAAgrAAg5AAjIAAmkAAm9AAnqAAn+AAoYAAp2AAslAAu+AAvXAAvqAAv/AAweAAxAAAxTAAxvAAyLAA0SAA0xAA1aAA6GAA9kAA95AA+IAA+YAA+mABDFABFUABGMABGgABHYABHrABILABIeABJFABJkABJ5ABKnABLGABLfABPGABURABUzABVWABVwABWCABWiABZcABZ3ABagABevABfIABfwABgCABj9ABkMABkcABkrABk7ABlcABm7ABnTABowABpFABpIABpiABv4AByvAB0qAB5OAB5mAB/eAB/1ACCBACCeACCtACDxACEDACHBACHmACIDACIbACJ5ACKcACKrACNUACRPACRiACR2ACSIACTDACTSACT3ACVXACWTACW2ACXYACX6ACYcACZNACZ7ACfCACgoAChDACiIACjNACkSAClfACl5ACmUACmvACnWACnzACooACpMACpwACqUACrFACr2ACsiACtKACtoACuGACukACvIACvjACyCAC07AC1sAC2dAC3OAC4LAC5FAC6FAC64AC7hAC8HAC8tAC9TAC+NAC+nAC/CAC/dADAHADCNADDCADDlADEIADErADFhADGTADKAADKoADLQADL4ADMgADNUADNqADSAADSjADTEADT4ADUhADVcADa6ADefADe8ADfZADf2ADgTADgzADhUADhxADiRADi0ADlSADnXADqTADrZADsAADtHADuAADvHADvwADzGAD2eAD3jAD4LAD45AD6lAD7dAD9gAD+RAEABAEA3AECqAEDMAEDxAEIaAEOOAEO2AESRAEStAEUDAEUiAEWuAEaTAEd7AEecAEevAEfPAEgPAEgsAEhKAEh4AEifAEnmAEoVAEoxAEplAEqxAErkAEsLAEs9AEttAEv/AEyMAEy1AEzcAE0LAE04AE1hAE2KAE22AE9MAFB8AFCgAFDEAFDtAFEaAFFGAFF0AFJBAFL2AFMnAFNPAFOIAFOxAFPhAFQLAFRVAFTMAFUWAFVFAFbwAFfcAFglAFhXAFl3AFqLAFrAAFrhAFuwAFxjAFyOAFzEAFzhAF0LAF0tAF1hAF2LAF3DAF3pAF4cAF88AGCUAGEDAGEbAGE2AGFNAGJMAGJ3AGKiAGLXAGMGAGM3AGNkAGPmAGTGAGXzAGYwAGbFAGd8AGgkAGjCAGmxAGp7AGqYAGuFAGwtAGzYAG19AG4xAG5OAG7PAHAOAHC5AHHRAHLWAHP/AHSDAHUDAHY9AHc2AHevAHi0AHp3AHs2AHysAH1JAH1xAH2cAH7QAH+2AICLAIF4AIJLAILGAINSAIN3AIP8AIUSAIWoAIZAAIbMAIbmAIhBAIjZAIleAIolAIrVAIuZAIxPAIxkAIzjAI1eAI3yAI7TAI8uAI+bAJA2AJDlAJD7AJEbAJFTAJFsAJHOAJIPAJLoAJMZAJNgAJOeAJPJAJQKAJTtAJUOAJVCAJVdAJV3AJWaAJXAAJXeAJYJAJY0AJZ3AJceAJf6AJiwAJmOAJomAJr2AJsXAJtOAJuYAJvnAJwmAJymAJzsAJ2PAJ8AAJ8tAJ+dAJ/FAKDzAKEXAKE6AKFnAKGTAKGyAKIyAKJTAKLIAKMBAKP8AKQqAKSWAKYRAKa6AKbjAKcKAKi4AKkGAKmHAKnIAKn6AKopAKpQAKqLAKq2AKrtAKs4AKtnAKuwAKvnAKwIAKwqAKxMAKzMAKz2AK0kAK1PAK19AK37AK4sAK5qAK6bAK6/AK7yAK8WAK9HAK+YAK/VALAQALAxALDMALFWALF4ALGkALMcALQHALSYALUrALWeALYVALY6ALZwALbcALcQALdSALeNALggALhgALiHALitALj9ALkqALlGALleALpeALs4ALwIALweAL0FAL4yAMAfAMGwAML8AMN3AMTUAMXNAMZIAMbjAMenAMh0AMlEAMoiAMp9AMtRAMxwAM0JAM2KAM2rAM+UAM+7ANBsANJkANLeANPTANTgANWNANYyANbpANdnANitANnjANrnANt8ANuPANujANyeAN1KAN3MAN6RAOATAOHnAOOUAOSuAOXOAOZjAOb3AOfkAOh+AOmeAOo3AOsoAOu5AOypAO0lAO2LAO3uAO6DAO8fAPA5APDBAPFoAPHSAPJcAPLzAPNdAPRzAPUAAPUbAPYaAPd4APi9APmUAPsjAPvRAPxUAP1TAP45AP7QAP9oAP/BAP/rAQAeAQCYAQGwAQHIAQJ5AQOIAQRUAQVTAQaQAQeHAQk0AQojAQuoAQyLAQ3oAQ+SARGRARKFARNxARONARPCARRvARUeARYJARa/ARbpARepARgrARi8ARloARl3ARpHARqWARqxARrkARr2ARsJARtRARuXARv/ARxgARx+ARycARyvARzSARzhARzrAR0sAR0+AR1RAR1kAR1yAR2FAR2YAR2rAR3JAR3XAR4fAR5lAR53AR6MAR7cAR8LAR8fAR8vAR9JAR9bAR94AR+TAR/hASAvASDhASGEASHhASMaASOqASPFASPkASQFASQkASQ/ASRUASRuASSNASSqASUQASVYASWgASW9ASXaASXzASZZASbCASd+ASfKASfiASgUAShLASh/ASiyASj7ASlCASl0ASl8ASmEASmXASnlASn1ASoTASonASo3ASpOASpgASp5ASqIASqQASrRASrxASsBASsgASszAStFAStWASuwASvBASvUASvnASwpASxqASyiASzVAS0bAS0sAS0/AS2NAS23AS3oAS4WAS4pAS5FAS5dAS5vAS6AAS6RAS6jAS7AAS8aAS9DAS9wAS+DAS+ZAS+yAS/EAS/QAS/rATAFATAWATAiATA/ATByATC4ATEAATEjATF+ATIHATMQATMlATM3ATNJATNkATN1ATOTATOlATPCATPXATPxATQtATVGATYIATaLATbfATcUATdbATehATfUAThiATiBATigATkKATkdATktATm0ATpwATrXATriATrwATr9ATsKATtpATuaATvKATxQATyiAT0RAT1JAT3UAT53AT8oAT/WAUEQAUGLAUHqAUJ2AUN6AUPHAUP6AUQMAUQgAURCAURlAUSIAUSXAUS3AUTXAUTrAUUyAUVTAUVuAUWRAUWsAUXgAUYTAUYsAUZZAUaEAUbCAUb4AUcaAUczAUemAUe5AUfYAUitAUjAAUjcAUoNAUopAUpRAUp+AUqjAUrLAUreAUwSAUwkAU10AU2eAU3FAU3qAU4dAU5OAU59AU6YAU7RAU73AU/cAVCGAVEvAVFWAVIBAVImAVKAAVKTAVO1AVR4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4AP3dvifFU8KDrWJrP8BFeZm/wAmZmb/AQqzNKwB9eAD91P3DhVQCg5GiaxssvjTrBLz4PevrBN49ycWUQoTuFIKE3hTChO4VAoO94iJrPjbrAH/ApazNPcIFVUKDvOWdpOs+NusEvG8+Cm8E3j4wPiUFVYKE7hXCg72ga347K0BsOv4SesD99/5BBVYCvfj+7sVWQoOS4ms94+t98KtAfPg93XoA/dR+L4VqJqu09DQdPsT+wBXXyoecotjjYCOCDb3XhX8JQeLOHqGRYiFhYt2kYW8jKmMvovDi7GKvYqRkYughZE9j3OPi94I9z4HoYSjiK6LCPdKwvcL4MZk9vtNH3GLRIRji1mLboxZjIWFi3aRhdGInIaLOAgO9vtlxLG3+UqtAbDr+EnrA/ff+QQVWAr7VP2dFVoKDoOBqnSs95it97mtEvPg92znEzz3pPj+FVsKOPyEFVwKE7xdChN8XgoO+wKBr/jqrQG+/wBHZmb/AO2Zmt8D/wGKmZr5CxX//8YzNJP/AAIzMp7//55mZov//6SZmosoSIshi///ouZm/wBC5mb//8/Mzv8ATYAA///eTMzK///kmZr/AGWZmv//7TMyi///jTM0izr//9LmaGH//7AzMov//6KZmov//8PMzP8AKoAAdf8AY4AACP//87Mzj///9WZn///+GZr///ZmZv//+uZmjz6PcZdayov/ABvmZ3T/AFizM4v/AHjMzov/AGCZmOeL8Yv/AF8zNEq7//+35mb/AB7MzP//zxma/wAUzMz//3hmZv8AIzM0i+0IyP8ALZmavv8AP+ZmHv8AYRmai6pNn0n/AAuAAP8AADM0l////szMlJL///yAALuHp///9ZmawAgOg4ms+NOyAaiq92Hg91CpA/fy9w4V+DoHrZ+nrx7JBsKLknucPv8AC0zM/wAATMz/AAtMzP///xmc/wALZmj/AAWZmIO+hsGLvIH////maIH///8ZmIGICIWKenYe/EcGdouckR////gzM/8AAszM///4Zmf/AALMzP//8GZm///+ZmiHWoVXf1b/AAnmZv//++Zo/wALmZr///7mZP8ADIAA/wAAMzSf25iYwosI2gawn29sH/w9B4s4eoY7iIWFi3aRhbyMr4zCi8GLroq9ipGRi6CFkTuOepCL3ggOzYG0+NusAeLg9/a8A/dA+J8VXwoO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d7kS29r3gOET3PdD9+MVfgqDrBV/ChPsgAoT3IEKDi/7fqz3U7f4B60BruH3ddoD99b/AXBmZhWf///pmZqP///xGZqL///n5mYI+3oHi3mKhn7///kzM///6Jma///z5mf//+UzMv///uZm///wMzSLCFE0tfcr87XV2x//AB5mZov/ABqzNP//8+Zm/wAV5mb//+eAAAij//4gmZoViziAh06IhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo6Aj4veCPikB5mHloAehIv///oZmv//+EzM///35mb///SzNH55h4h//wAHzMz//+BmZv8AFIAAZP8ACLM0///VmZqLCPsOMSf7GC7K+xD3JB+mi/8AIOZm/wAFmZr/ABEZmpWi/wANZmaPjYt2CA77c4ms9+7JVacS79oT0O/30RWCChOwgwoO+2iBrIl2+CqsEruqetL3IddVqxN0u/ceFYQKE6yFChOqhgoTtIcKDvurgcL37bIB5NoDtvhBFYgKDkWBuvf9rAHj2vdS2gP3bYEVsou0n7z/AChMzf8ABMzM/wAD5mb/AAczNP8AAczNi4SL///oszOW///cTM2Li/8AB5ma///9GZr/AAOzMv8AAIAA/wAHszT/AAJmZqGdsZrIkpGRi5qFkQhLkIKei7wI91QHqY//AEjmZose/wADGZqIjoYehop8inyLa4tqjGaMhYWLdpGFvIiYf4tJCPtVB4t4///+GZr///gzM///8eZm///zzM1ma2t7cosIbVmZ5B/3Sgepj/8ASOZmix7/AAMZmoiOhh6GinyKfItri2qMZoyFhYt2kYW7h5mAi0oI+1QHRqlI7h4OKZR2+C6sAffZ+CIViQoO9yyUdvgurAH3X/giFYoKDiKJrPgDrAH3Svf6FYsKDj/7fNv4uqwB92T7NBWMCg77P4ut9/2tmXYSs6wTsMj4ThWNChPQjgoTsI8KE9CQCg770vtoo/n7owH10wP3RvjGFYvmq56xlpGRi5eFkSaIYmiL+wcI+0wHi1l7WVN7CHwHwX6dX4tOCPs+B4v7FrNs8YmRkYuXhZEIX3G/0x/3MweL4IK1UaS8oJ2mi+YIDvwa+2d2+jZ3Ady3A/cR+3wV+jZf/jYHDvvS+2mj+fujAerTA+pHFYswa3hlgIWFi3+RhfCOtK6L9wcI90wHi72bvcObCJoHVZh5t4vICPc+B4v3FmOqJY2FhYt/kYUIt6VXQx/7MweLNpRhxXJadnlwizAIDvsm92nGkcYBpZz3+ZwDpfdlFZEKDvvtDvvH+2R2+Mb1Aeb1A/ck+3kVkgrA+PsVkwoO+y+Udv8AXzMz/wAr5mb33qn/AFrmZncB/wBBTM3/AE1mZv8ATUzNrf8ANzM0/wBOTMwD93D41hX//6IzNAf//7CzM///8IAA//+0mZr//7QZmov//45mZov//5QzM/8AN+Zm//+zMzP/AGLMzf//9ZmZCP//n8zNrf8AXzMzB/8AMbM0/wACMzL/ACxmZv8AE4AA/wAqGZrQ///8Zmb/AAgZmv//+MzM/wADmZr///fmZv8AAOZm///hZmb//9hmZv//2UzO///sMzT//9lMzIv///zmZov///zmaP8AABmZ///85mb/AABMzQj/AUmZmgf/AC0zNP///LM0/wAGmZr//+JMzP8AA2Zm///iTMz/AALMzP//57M0/wAMgAD///fmZv8AEuZmi/8AEuZmi/8AGTM0/wALszSL/wAb5maL/wAwszT//85mZv8AI7My//+sGZr/AAEZmgj/AFrmZgdp//5HZmYV///TGZr/ABaAAP//35mZ/wA6GZqL3Iv/AFRMzP8AH0zN/wA3mZq5/wAOmZoIDvsvgb+Ps/dYsvdouAGa07bbA9H3rhXHewaLNYA/U2JxfXV8i3kIfJuAnaCclqGVkJisHt6LjFPgi8mLuq2ivIeShv8AAkzNg/8AALMzcmlehG+L//++mZqL/wALGZq3//+KTMyLq6mxwIz3BQjxBpWYj5MfoAePiY2GHvsKzgbdrsq3HqCLmYCXgJaBlIOZiwiim5qjrVWXdR9Zi2B2amlXWHJXizsIeGAHeoV/gx9+B4aMipAeDvsv9wW19561AbXH933IA/H3tRXSvMjRyb9RQERdTUVEXcjUHvcJ+0QVtIuvl6ykCLlYr7FXtwWjqpivi7OLtX6vcqkIwrdktF1UBWukZ5dii2SLaIBqcwhdvmZjv2IFcW1+Zotgi2KYZqVsCFVgtGO2wAWrc69/s4sIDvsviazrssqz96CsAfdJ2wP3SfcOFZD7GgeGi4yQH5gHk5CXnB73Ccr7GgaGi4yQH5kHk5CXnB73BYsm92MFeq93oGSPhZGLoJGRqYq1ipiLkYu7jKmMkYWLdoWF///dszOL///2MzP///9maP8AEBma///emZgI8PtljYv/AEizNPc7Bf8AHeZm/wBEszSP/wADMzT//9BmZv8ABBmYhZGLoJGRqYqoipuLm4ucjKmMkYWJdoWFWf//+5mY////szT///2ZnP//4MzM//+6zMwI//+pgAD7VPcOiwWPjomHH3YHgn6HgR77CEz3GAaPjomHH3cHgn6HgR77CIYGizichtuIkYWLdoWFWYxqjFaLVYtoilqKhZGLoJGR246ckIveCA78FNy8A/cW+TYVWvv+vAb7KwRa+/68Bg77DvtAqvmUqhK9wXPQWNj3D9hY0HPBE+L3Ef8BnzM0Ff//04AA///cGZr//+GAAP//0DMyi///v4AAi/sP/wBqMzP//9RmZv8ATMzN///WmZrMaKVmi1yLXWloXIsIE8pgi3yogbGGnoGhcYsIcIJ6dmS1TezywM3NH4u1gf8AIYAAaP8AI0zNCBPR/wAsgAD/ACPmZ/8AHoAA/wAtzMyL/wBCgACL9w///5XMzP8AK5ma//+zMzT/AClmZkqucbCLuou5ra66iwgT1LaLmm6VZZB4lXWliwimlJygsmHJKiRWSUkfi2GV///egACu///cszQI/wDJzMz//rqzMhX//+yAAJv//+czNP8AEMzN///ggAD/ABJMzQgT4UO1QLOL54v/ACKAAP8AEIAA/wAXMzT/ABnMzf8AF0zM/wATgAB7/wAYzM3//+9MzP8AH2Zm///tszTTYdZjiy+L///ggAD//+3mZv//4+Zm///n5mb//+qAAAgO+2z4pOoBvenW6QO9+NMVlAr3PRaUCg66oqvsqPeRou6rAa2z5sn36bMD+Ev3bBX///tmZv8ABhma///7Zmb/AAYzM///9jM0/wACszOAe29pWIsIR2jE1O2/pLMfxIugb5xdk4uSjJCOjKP///9mZv8AFrM0///1mZr/AB9MzHeNgJhFiwgzRUM3PM5F5B/Ci7asn6oI+wr7VRWVCvipBJYKDvu09/qr93KkAaq/9wHBA/dU+IoVlwq2+yQVmAoO+xf3D/drFZkK9zgWmQoOj/fXtwH4h8ED+IfuFZ6C/wASZmj/AAKZmv8AEJmY/wAGZmYI96D8lQf///lMzXmO///yzMz/AAOzM///8zM0CPhfBg77lfdzxwGz95YD96P3cxUqCg66oqv3BKPso/cB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EDMzgAgT9v8AEuZmff8AEuZmef8AE8zNi/8AKWZmi/8AGhmasv8ACszNx///+pmaj///9v//jv//9hmaigj///NmZmH///YZm4H//+wzM4sI///85mb8VxXgCg77voms+Nus7b0B9eAD95P5fRXuCvc0/QMVTgoO+9iJrPf2p6h3670B8doD/wDb5mb4mhX/AAuzM/8ACeZnoJeR///8ZmaWgh///zWAAAb///YZmv//9hmad3+E/wADmZmA/wAIGZof/wCiszP8IBXgCg77voms+NusuL8BmKfM4M2nA/ex+bkV7wot/T8VTgoO+9iJrPf2p6h33MTldwH/AAPmZv8AGEzN/wBJzM3a/wApmZr/ABhMzAP/ABwzM/keFf//57MzfwX/AAyZmjb/AC3mZlnKi/8ANRmai/8AOZmZvP8ACszN4Qj//+ezNJcFglH//9aZmWv//9EzM4v//89mZ4v//9lMzbD///YZmcAI/wCYzM38pBXgCg77vvtcsfc0rPjbrBLUyW7gE/D3o/sbFYeShY+Ci3V1e3tuiwhmfqClubzO0h////+Zmv8AAIAABf8AB2Zm////zM3/AAezNP///+Zm/wAITMz////MzZGRi6CFkQgT6EWOepCL3gj4JQeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6L/wAHGZqL/wAGszP////mZv8ABmZmiwgT8P//w4AA///lGZr//9xMzf//xoAAi///1oAAi1Wxd72LCLSLs5+ouAgO+9j7XLH3NKz39qeod/cR7xLIyWrvM9oT/PeX+xsVh5KFj4KLdXV7e26LCGZ+oKW5vM7SH////8zN/wAAMzP/AAozM////8zNBZGRi6CFkQgT+U6PgI+L3gj/AMdMzAf/ADGzNI/Lix6Pho6DHv//44AAgP//2IAAgkaCiYWNe42F/wA2gAD///rmZv8ACoAA///6GZqLUgj7VweLOICIToaFhYt2kYW1jKWMt4sI/wAPTM0GE/z//8OAAf//5Rma///cMzP//8ZmZov//9aAAItVsXe9iwi0i7OfqLgIE/r7PflyFXUKDvu+iaz426y+8xLp8y/gE/Dp+YIV9wQKE+js/QgV9xQKDvvYiaz4L3cB8doD90n3DhXgCg6O+0C49xGs+Nus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mov/AGJmZov/AF8zNEq7//+35mb/AB7MzP//zxma/wAUzMz//3hmZv8AIzM0i+2LyP8ALZmavv8AP+ZmiwgT9oD/AGEZmouqTZ9J/wALgAD/AAAzNJf///7MzJSS///8gAC7h6f///WzNMD//8YzNJP/AAIZmJ7//55MzYv//6SzM4soSIshi///ouZm/wBC5mb//8/Mzv8ATYAA///eTMwIE/sAyv//5Jma/wBlmZr//+0zMov//40zNIs6///SzMxh//+wMzSL//+igACLT/8AKoAAdf8AY4AA///zszOP///1Zmf///4Zmv//9mZm///65maPPo9xl1r/ADmZmov/ABwzM///7MzN/wBIMzP///yzMwhn//+pgACRhQWbkJWMnosIDvto+1yo1qvgdvgqrBK7qnrS38mG11WrE/gAu/ceFY9ajlyLYZWNlYyQi5KLkYuSif8AFWZm///6gAD/ABVMzf///EzN/wAaTM3///6zMwgT9gBn//+pgACRhQWbkJWMnosIopV9dnF2fW0fd4uAj3CVhISIhIt/pICchauLCMi5qraxbKNjH4KLgoqDiQj/ABVmZv8AOWZmBRP1AP8AOYAA/wADszT/AFkZmv8AHczMi/8AXBmai/8AREzN///OzMz/ACczM///vDM0/wAZszNP/wAWzM1jmovCi7Svoq2LCBP0gIYKE/kAhwoO+wKBr/jqrcd2Eqb/ACCAAP//94AA/wBHZmb/AO2Zmt9L/wAggAAT4Pdr+U0V9Ar/ALOzNEkV9yIKE+z3IwoT9PckChPq9yUKDvtogayJdvgqrPdidxK7qnrS9yHXVasTerv3HhWEChO2hQoTtYYKE7qHCvcN+AAV9QoOg/tcqNaryaz407ISkq1/qvdh4IPJ9xqpdq0T8QD3ySsVopV9dnF2fW0fd4uAj3CVhISIhIt/pICchauLCMi5qraxbKNjH4KLgoqDiQik/wBC5mYF/wApTMz////Mzf8AH4AA////GZr/ACozNP///zMzkZGLoIWRCBPyQDuOepCL3gj4Ogetn6evHskGwouSe5w+/wALTMz/AABMzP8AC0zM////GZz/AAtmaP8ABZmYCBP0gPcmChP6AIdahVd/Vv8ACeZm///75mj/AAuZmv///uZk/wAMgAD/AAAzNJ/bmJjCiwjaBrCfb2wf/D0Hizh6hjuI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B1b7BR+LMdhjqYAIE/BHeD9Ri/sAi/sl9xxq8ovbi7ilw5QInPckbY4Fc/sBN2RGiwg9Sbf3DMyp1vYf7AaWkZGYloWUgB9HBhPo+wdu4L3eyLTbH+6LokudOwiqkHj3IwVYkHWkRIsIDvsK+0C4+Fax1nf3UbNwqBLw3PdIrLaoE/fw3BX7SFhvah59i///+UzNk///+LMzlf//9kzN/wANMzP///SzM/8ADczNbIsIfXN9dWe1eaEfpIu3jLixxbm6yYv3FAj3cPcTB62LmIKObgiOcgWIjYaQHqGLj44FiLOKpoufi5+MqY6zCIePdYsFh4iHhx+IcgWIb399aIsI+xP3Zgajl5WjHvQG1oudY6FGCKiQBf//+szMtP//8OZm/wBgZmj///6Zmv8AB5mY////mZr/AAJMzP///szM/wAAszT///2Zmov//+6AAP///JmY///6szT///9maP//58zMiwj//wKzNAYT72SLYoxcjAgT94mJi3cFE++LiIz///yAAJL///+AAAipiQX/ACZmZv///WZo/wAMmZr///SZmItsCA77L/t8r/jesveEqAFtzvfY0gP3QfgaFX/7BAV3+06R+7Qzi3WLkp+El4WZgJN5iwh3f3h8eKlmwx/3DIub92S9+CIIjZvxiwWUmY+UH58Hj4iNhh77A4uZ9wQF/wANMzT1/wAdzMyhnYuii5VojnuOeJuFn4sIn5ecn6hxsjsfUYv//8NmZv//vMzM///rmZr//2wzNIdufHJniwhnBnmGf4MffgeGjIqPHg73EoGv94mv986wmdISq+b4NeBhrRP8+T75exX//9sZmIv//7kzNP//17M0///4Zmj//6mZmP//0hmY/wAKZmhh/wAfTMz//5ozNIsI+0D7QfsX+3D7Qfcf+yT3XR/3Covers/FgJSGk4uWCPcEB4v/ACMzNJz/AAnMzKiOkZGLo4WRbYp4imOLZItljFyMhYWLc5GF/wA25mj///vMzP8AGxmY///8TM6L///X5mYI+ykHaWtSe1WLCPtGLfc99xj3Q/T3C/cbHxP69yWLvDmlNQitkQWCtYWzhNMI////MzQG/wADzMz/ABuZmP8ADUzM/wAagAD/AByzNP8ABOZojYyOi46LkIuTipKLCKKmj6ofl4Ojbx4Ooft8tvm7qAH3VLvN1AP3t3cVmmSLYIt1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aI7/AAKZmIuQCIueiY0FWopuilmLW4tzjFmMCImJi3gFi4aP///9TMyP////szQIoYkF/wAn5mj///xmaP8ADhmY///3mZiLbQj8ZAdYWlpyZYsIYmumzR/4UQeLp/8ADxma/wAKMzT/ACfmZv8AA8zMCKCNBZD/AABmaI7/AAKZmIuQCIueiY0FWopxiluLW4tzjFmMCImJi3gFi4aP///9TMyP////szQIoYkF/wAl5mb///yZmP8AEBma///3ZmiLbQj8PQeLfIt/jH1XV193YIsIYmukzR/4UweLp5n/AAoZmLT/AAPmaAigjQWQ/wAAZmiO/wACmZiLkAiLnomNBVqKcYpbi1mLcIxZjAiJiYt4BYuGj////UzMj////7M0CKaJBf8AJ0zN///9GZj/AA6zM///9uZoi20I/DwHMqBC6R7Gi8qlyceVXLJkxovOi8awvrwIjYqJNqKLBRN8oZ29mMmWCIiiW5AF///qmZj/AAIzM////GZo/wAFzM2LvQgO7/tPqfc+dvkGpwFfzd24+C24A/PjFU+L+01NHoCLhY+IlYaffJ99iwiDc4hrd6tuuvcEjfci9xof9/IHrY2akx6Ri5aAnHUI9/H8TQWWfJiFm4oImZKVnh/4rAepmqqyHqYGj4+OkB+LnomMBYtDimRnQYyLHoaKi3gFhpSIkB6lBrSYaXAf/A8HeIt4hh6Ci///8jM0/wAcGZr//+LMzP8AJOZmCPvx+E37FouIiYt5BYaSiJAevIuhU41/CA5D+36o91+o+AC7jncS5tb3WtYT7Pc6+EsVE9z/AAJmZv///mZm/wAAmZr///2Zmh7//+OAAIBkgv//uYAAgAiNc7aHBf8ADmZm///+TMz/AAeZmv//9bM0i1kI+40Hi27///YZmv//9YAA///e5mb///yAAAh4iQWG////gACI///9gACLhgiLeI2JBYv/AD9mZo3/ACiZmv8AJ8zN/wA+MzOJix6NjYueBYuQ///85mb/AAJMzf//+xma/wAAszMIfY0F///fMzP/AASzM///9czN/wAJTM2LqAj3hgcT7L7HsZy3iwjAl2pFH/xUB4tugP//9pmaa///+2ZmCH2JBf//+xma////TM3///zmZv///bMzi4YIi3iNiQWL/wA7zMyN/wAmMzT/ACoZmv8AQeZmiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+CzNP8AA0zN///1TMz/AAqzM4uoCPhNB+R30DEeWItbfUtACIgGDvaBrfexsveorQGw/wBgTM3/AbSzNOsD+S733RVZCv//nszMnhX//kyZmgb/AAbmZv8AwszM/wBmzM7/AFEzNP8AV+Zmi/8Af4AAi/8AYmZk//+i5mj/AAvmaP//SRmYCP8AATM0ZBX///+zNP//TZma//+qGZj//5VmZv//jjM0i///i8zNi///jpma/wBoGZr///jmZv8AtOZmCA72ga347K2l4RKw6/hJ60CwE/j33/kEFfc4Cvfj+7sV9zkKE/T3OgoOLYGs+BOssd8StOH3juFqrRP4tPdhFfc7ChP09zwKE/j3PQr3XfddFX0KDve2+0io9yGt+NawfK0Sr+f37dz3OdwT3vfi+QQVwIu5eLNnCPyQB2xyaX9iiwj7F/sA9wP3VB/3ZvcC4useE+73znUVyZSJSB/9EgeLb///9bM0///yszP//99MzP///UzNCHOJBYb///+Zmoj///1mZouGCIt4jYkFi9iNrrLXiYsejY2LngWLkIf/AAKzM4f/AABMzQhzjQX//+CzNP8AApma///0TMz/AA1mZounCPklB/8AL4AAjv8AMIAAix4T3pL///mAAI7///eAAB4T7mR6b4lNi2CLVf8AAYAAgP8ABYAACBPe/wAJgACI/wACgAB/HoCBeXh6hWCiWZdZiwj7R/sY+yz7WPtZ9yD7D/dAH92L0qPAuQj4fgf/ADGAAP8ACYAA/wACgAD/AFSAAB4O6vt+qPdXt/flrIytAa/X93bW9w7WA/fm9+QV+6wHcXdoiXiLCFEztfcr87bV2x+1i61zpl4I96T8ghX47HwHdYtlZUOLbYtEjG6ab5prj2mLCPsOOif7GC7B+xD3JB/Ei9ipuKoI98gHnpOjj5WLCKyvi18f/HkHi27///UZmP//9hma///f5mj///rmZgh4iAX///sZmv///zMz///85mb///3MzYuGCIt4jYkFi8+Nr7LPiYsejY2LngWLkIf/AAJmZof/AACZmgh4jgX//97MzP8ABTMz///2MzT/AAnMzYuoCA6Aiaj3k6z3w6dxrRKLyvcE3Pd14BPe95T48hWekreSnosI0NVy+xP7AFNeKR9zi2eNgI4IOvuOFW9+fGIecAaGiIiG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tPgLrPdjdxKv3kvV9zjZE+T3UfiLFfUK8/uiFc0KE/TOCtr7OBVmChPsZwoT9GgKDvu+iaz426zSdgH14AP3DvlNFfQK0PzTFU4KDvvYiaz39qeodwHx2gP0+IgV9QrX/A4V4AoO9oGt+Oytx3YBsOv4SesD99r5TRX0CpBCFVgK9+P7uxVZCg4wgaz4E6z3YncBtOH3juED92r4ihX1CvtB+70VfAr3XfddFX0KDs2BtPjbrNJ2AeLg9/a8A/fa+U0V9Ar7LvtCFV8KDkWBuoSm9+ms92p3EuPa91LaEzz3ePiKFfUKE7yA/JQV6woTfOwKE7ztCg7TgbT426yY6Zm9AeTgxem96ca8A/fXgRXKCjD5YRXLCvckFssK0cgV7goORYG6hKb36azs6rW9EuPaX+nW6W7aEzkA9/75LRXuChM6AHwxFdEKEzkA9z0W0QoTuoBA/N0V6woTfIDsChO8AO0KDtOBtPjbrJjpAeTgxem96ca8A/fXgRXKCjD5YRXLCvckFssK/wA6GZr/AI7MzBX//6CAAP//tGZoBYH///gZmP///oAA///7mZyL///5zMyLhP8ABJma///5zMz/AAbmZov/AAbmZov/AAlMzP8AApmY/wAQMzT/AAfmaAj/AG7MzP8AMxmYBf//9jM0/wASzMz///AzNP8ADzM0///p5mb/AAuzNAgORYG6hKb36azs6hLj2l/p1ulu2hMw/wE5Zmb/AuszNBX//8OZmv//lOZkBf//+YAA///0gAD///1Mzf///GZoi///9eZoi///+bM0/wAFmZn///qZmP8ABZmai/8ABZmai/8ABmZm/wADmZiX/wANgAAI5/8AYhmc///9mZr/AAnmZAX//+2Zmv8AE8zM///rgAD/AADmaP//+uZmiwiHi///+zMy////GZz///2Zmv///xmYCBM0//9BmZr//1PMzBXRChMy9z0W0QoTtUD83RXrChN57AoTuO0KDtOBtPjbrJjpAeTgxem96ca8A/fXgRXKCjD5YRXLCvckFssK///XMzT/ACkZmBX/ACEZmAb/ABcZmv8AHeZo/wAYmZr/ABwzNP8AHUzM/wAZgAAI///0Zmj/ABGZmAX//+KzNP//8eZo///nZmT//+9MzP//44AA///pGZj//+aZmqH//+XMzv8AELM0bZoI///zszL//+5maAX/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ThX///2ZmP///GZo///8Zmb///2Zmh+KXoVlg1r/AAjMzP///EzM/wAMmZz///4Zmv8AC5mY/wACmZqf1KqgqYsI9x6L+4r7/wWDf4qIi4YIhJOGmh73zAaQqpW6nMX///mAAP8AA7Mz///0gAD/AANMzX+LCH5uBXNWenBRiwj7GYv3hPf1BZylkJeLj4uPho6Ei4aLa4Ruiwj7Xwb//9/maIv/AACZmP8ACZma///ugAD/AANmZgj7WfvSFfcAChOPwPcBCoD//vhMzBVtChMvwG4KE4fAbwoO74Gv94mv986wyHYSq+b4NeBhrRP4+EH5yBWwClf7NhX3BgoT/PcHChP69wgKDiz7grD3TsRVyOKq94WqdbgSq9Bi3UHA91rbncITkGD3r/kzFc8Kr/wcFS5ceGYeE5lg9wkK+0/7tRUT0mD3CgoTsmD3Cwr3zPghFfcMChOVYPcNChO5YPcOChOw4HQKE7Jg9w8KE9Tg9xAKDvfFgbpkqPe6tZDV90SoEvXc99rc93KwE7/4lfcYFTDKWPPb6Nf3S/cMbdRGcH14eR6LbKqGloqohqttiysIKU4lQFxkpswe+FEHi6f/AA6zNP8ACuZo/wAoTMz/AAMZmAiljQWQ/wAAZmiO/wACmZiLkAiLnomNBYsuiWdkNI2LHomJi3gFi4aP///9ZmiQ////mZgIpYkF/wAnTMyI/wAOszSCi20I+2f72vdnB4un/wAOzM3/AArmaP8AKDMz/wADGZgIpY0FkP8AAGZojv8AApmYi5AIi56JjQWLLolnZDSNix6JiYt4BYuGj////UzMj////7M0CKaJBf8AJczN///9MzT/ABAzM///9szMi20I/IoHi2////LMzX///9czM4gIE39wiQWH////szOI///9TM2LhgiLeI2JBYvoja6z4YmLHo2Ni54Fi5CH/wACszOH/wAATM0IcY0F///YTM3/AAMZmv//8LMz/wAI5maLqgj3jffaBw5U+2F2+de8Adrc95LlA/fW+PUV0KJI+xEfi/sY+xb7B/sQIwj4SgfV1baquIsI+zZNFcyOr4sekoeOgh7//+bmZoH//7SZmn7//9eAAIgIjXMFi4j/AALMzf///jM0/wADMzP////MzAiriQWflX5KH/0dB4tqgXltggh3hQWGioqIjIYIknL3H7CL92YF90T3G/c8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HlH//+WzNAWF///8TMz///dmZon/AACZmoT/AAIZmv//6TM0////5mb///bMzIv//60Zmghd////5mYFfYd/gx9+B4aMio8exgYO+9f7c7f5AXcB9wXaA/cF99EV9xYKDvcugbVhp/gNt2iu95d3Eq3Z93jW93HYE5/36PftFfukB3NwbH1niwhaM7j3LNmk7PAfuouseKFjCNb7tRX3uwcTb7qxvJGViwjIwUYl+wZZLywfbItymHekCED4jxX7KwcTn2ejX453iwg5+xBU+0EjzPsJ9xAfuouxm6usCFidB5aWlpyUlggTb6hyr3+2iwju9wne9zj3DjbbNR9ai192aWYI914HzI6zix6Sh46CHv//5uZmgf//upmafv//14AAiAiNcwWLiP8AAszM///+MzT/AAMzNP///8zMCKuJBZ+VfkofDvct+36o91e3X634BblorhKv1/d21maw93DZE7aA+J34HRXOuEL7AjVwJyEfeotnjWm0CPeIB6HAvqiuiwj7APy+FfdBB6R9qoOviwjo9wXY9z72R+orH2yLUYFeRQgTzYDDB5eJmoAegYv///azNP//9MzM///7TMz///YzNAh/cgVqqWCYWosI+w46KPsYL8H7EvckHxO2gMSLq5+amAj7TAeLb///9Jma///1TM3//+BmZv///LMzCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+NrrLQiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+DmZv8AA0zN///1GZr/AAqzM4unCBPOgPtG+MkVtYutcqZdCPupB3F3aIl4iwhRM7X3LR/zttLbHg7uiaz3ZrX4C3fHdwH/AYEzNP8BqYAAFf//opmY//9xgAD//+MzNIsF///pzM2L///4zM3/AAKAAP8ABDMz/wAKzMwI/wBkMzP/AP2zNI2LBf8AP2Zm//9RZmYV/wAhmZr//6OZmv//oczMiwX//7FmaGEV//+QZmb//1XMzQX/AACAAP8AApma/wAAzMz/AAKzNP8AARma/wAC5mYIwvclBZCYkY+jiwj/AEYzNBb/AInMzIvI+z0F/wAO5mj//9bMzf//1rMy/wADmZn//9BmZv///JmahYWLdpGFsIzCjLKLtIuvirCKkZGLoIWR///ZMzT/AAOAAP//30zMi///7YAA/wAzgAAI//90gAD/AXDMzP8An4AA/wDzMzRYi///gMzM//8+GZr//9EzNP8Ae+ZmBf//+LM0/wATTMz///pMzP8ACrM0fYv///FMzIv///hmZv//9xmY///0mZr//+UzNAj//yGzNP/997M0Bf//5Zma///CMzP//+HmZv//+czN///UgACIhYWLdpGFsIyYjLKLCP8AChmai///t+Zm+wK+i/8AR8zN/wBtgAAF/wAX5mf///+Zmv8AF4AA////Zmb/ABPMzf///4AAkZGLoIWR///xzM2M///wTM3/AAEzM37/AANmZwgOvoG0+OKws3cBsOb4SqwD/wC3gAD/AIBMzRX//9qZmv8AOWZo///t5mb/AEuAAIv/AEjMzIv/AFZMzP8AFuZm/wBCzM7/ACSAAP8ALOZm/wAxmZrIxae/i7qL/wAlTM7///aAAP8AHeZm///wGZgI//8G/////ghmaBX/ARzmaP8B3oAABf8AIxma///gmZj/ABSZmP//1YAC/wANMzT//9RmZpeH/wAJszSO/wALTMyRhr+Du4LC///wgAD/AAGAAHz/AATMzP//7zM0/wAF5mgI/wArTMz/AEjMzFiL///dTMz//8WZmAX//+AZmv8ACbM0///XszT/AAizNP//xuZmizaLRGxQVf//vZma///DMzT//9hmZv//oxmYi///l7M0i///ohma/wAjmZr//6EzM/8ASGZm///BMzMIJP//UoAAvYv/AFfmZv8Ak5maBf8ALzMz///iTMz/ADrmZ///7hma0ovsi+S5z+SGlISRgItEPUdsLov//8PmZov//9BMzf8AF5maZ/8AJWZmCA77QIG8+AOsAbDhA/gY+FoV///dzMz//9aZmgX//+XMzP8AEJma///aAAL/AAnMzP//0GZmiyiLITKL+yKL///KmZr/AAxmZv//0UzM/wAXZmf//9vMzQj//8MzM///tkzNBY18l4Cbiwj/ADhMzf8ARJmaBf8AIUzO///fzMz/AC4Zmf//7Zma/wA5TM2Lx4vAnr3dh5SDj4KMaV9gdWCL///WGZqL///Z////ABhmZv//50zNtgj/AKaAAP8AyrM0Bf8ABpma///5Zmb/AAkzNP///YAA/wALTMyLoIunmIuqi/8AD2Zm///7mZr/AA4Zmv//94AA/wAMgAAI/wAk5ma4BYeYgZV6iwj//wLMzfvHFf//+GZo/wAYTM3///vMzP8AG8zNi/8AHuZmi/cCu83Ni/8AMOZmi/8ADeZmc/8ABZma///jzMwIDkaJrGyy98+392ysEvPg96+sE3z3JxZRChO8UgoTfHdDcFA/iwj7BQZueZ6qH/ed9ywHmJWdl5GHk4If+zb3EQaL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI+xEtB4CAen+Ej4OUH/L7fAYTvFQKDoOJrPjTshKSrX+q92Hg91Cpdq0Tyvfy9w4Vi/8A8bM0/wCOZmb/APCZmAX/ACFMzv//+kzM/wAHMzT//+oZnP8ADhmY///ATMz/AAtMzP8AAEzM/wALTMz///8ZnP8AC2Zo/wAFmZgIE8yDvobBi7yB////5miB////GZiBiIuFiv//70zM///rgAD///+zNAgT2v8AQIAA9wFYi///v4AA+wH//n+AAIsFdouckR////gzM/8AAszM///4Zmf/AALMzP//8GZm///+ZmgIE+qHWoVXf1b/AAnmZv//++Zo/wALmZr///7mZP8ADIAA/wAAMzSf25iYwosI2gawn29sH4v//w9MzPtr//6UszS+i/c4/wEVGZqL//+d5mYFizh6hjuIhYWLdpGFvIyvjMKLwYuuir2KkZGLoIWRCDuOepCL3gj/AUfmZgT/AF4Zmgetn6evHv8AJGZmBg77aPtBpvccrIl2+CqsEruqetL3IddAzl2rE7kAu/ceFY9ajlyLYZWNlYyQi5KLkYuSiQj/AAMzM////zMz////zM3///7MzQWrhpJuoFWgWK5qtouji52Rn5eWk5KWi5WLkomVhpGGkYGRhIsIhIuCiIaFhISFgId+h4GGhoGLc4t5mHDR///4mZr/ABHMzf//+szM/wASzM3///WZmv8AETMzCBPWAP8ACGZm////gACU////szP/AAmZmovDi/Kmi+6L/wBETM3//87MzP8AJzMz//+8MzT/ABmzM0//ABbMzWOai8KLtK+irYsIE9SAhgoT2gCHCg77Homs+Fd29zOxAZXn0+Dl2gP3l/cOFdsHi/cb9z2Xi/ciCOgy1fsWKiVcI2+jeaCwnaSjHouYg52LnIuWjpaWlaWhqZO0iwjyrENdUnEj+ykf+3AHizl6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCA6E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AGRMzf8Ae7Mz9zI7zif7H1gxN4CShZcf95yNBf//ZszN//+2szP//8YzM///yUzNHlGLY6BmsQgO+yiDrPcOrfdlvAGn4fdY4gP3yvcnFfdMCjr3VBX3TQoOh4Gs+Ae7AbvY91LfA/8BL4AA/wElmZoV/wAHMzR0/wAETMz//+PMzIv//92Zmgj7LEhqXFxuq8Iei/8ASJma/wBTgAD/ADiAAOr/ADaAAAj//+9mZv8AJczMFf//k5ma///JGZr//32AAP//tmZmi///nRmaCFqlSvcE9z239x33AR6L/wAkszT///iAAP8AIkzM///xzMz/AB2zNP8AGGZm/wARTMz/ACGZmv8AFBmY/wAUmZr/AAczNP///GZm///2Zmb///9Mzv//77M0/wACGZr///IzNP8ABpma///TgAD/ABfmZv//9UzM/wAPzMz/AAJmZv8AGbM0/wADzMyf/wAPGZz/ACszNP8AKszMCP//8jMw/wASMzQFd///8OZm///15mj///lmZv//6jM0///8zMz//+0zNP///TM0///4mZia///8zMz/ABXMzP//+rM0/wAjmZr/AAuzMqP/AA0Zmv8AGzM0CP//8IAA/wAI5mYF///bZmb//9dMzP//zAAC///dgAD//8xmZm7//96Zmv8ALJma///L5mb/ABwZmv//veZmi0mLOlRoWP8AAkzN///3TMz/AASzM///+rM0lomzsr6uu4v/ABhMzYv/ADH/////9hma/wAfmZr//8tMzAgO+1qBsfdKrPc3rBK32k/S9yPVE/T3D/cNFfdwChPs93EKE/T3cgoO+1uBsPdFsvc7qBL3m9JQ2RPo96f3BBVWZWtQHlyLZZtkpv//+IAAh///+WZm///5TM3///4Zmv//9rMzrGzBbsqL9x6LptWLxAgT8Iuii8AxqQiNB/8ALkzM/wATTM3/ABizNP8AI3//i/8AKzM0CLNq0/sLPklnZ26eg5ceoYuWm5Scl6GkpLKLCKu2bktOZ3lgH4qLX5CFiwh5gIV/f5OCoR+Ti66Qk4sIw61iUx8O+ymBsPdFsvc7qBL3m9JQ2f//xOZm/wARzM4T8P8Az5ma/wG2MzQV/wAAszP///+AAAX///ezNP8AAMzM///3TM3/AACAAP//9rMziwg+SWdnbp6Dlx+hi5ablJyXoaSksosIq7ZuS05neWAfiotfkIWLCHmAhX9/k4KhH5OLrpCTiwgT6MOtYlNWZWtQH1yLZZtkpv//+IAAh///+WZm///5TM3///4Zmv//9rMzrGzBbsqL9x6LptWLxAgT8Iuii8AxqQiNB/8ALkzM/wATTM3/ABizNP8AI3//i/8AKzM0i/8AH0zM///rzMz/ADLMzP//vkzO/wAUszT/AA3MzP8AGszM/wAVZmj/ACJMzv8AD0zM/wAQGZr/AAEzNP//9czM/wAGzMz///EzNP8ACBma///0mZr/ABozNP//22Zm/wAaGZj/AAFmaJj/AAlMzP8AFTM0/wAPGZr/AArmZv8AFpma/wAS5mb/ADnMzAj//+tmZv8ACczMBf//9Rma///pZmj///nmZv//9ZmY///uGZr///MzNP//8IAAgP//8rMy/wAKGZr///MzNP8AEeZmCBPk///rGZr/AB1MzP///2Zo/wAamZj///9MzP8AHjM0CP//7jMy/wAAzMwF///wszT//8ZMzGj//8SZnGf//8szNAgOIIHK9xrC9xrKAa2y9+C3AxTg95r4SxX7AfsLRvs4+x33Djz3A/cis8vAH4u7ZrRNntKhp6+LsQjBa9X7Lx78FgT7GVPH7Lqt9wv3Kfa1dFMfi2RudUx+ZJZhk3WLCG17gnh4nIOtH7WLq5Skkst8pm+LZwhHTog5Hg77sPtitf8BZWZm/wAr5mf/AKCzM6wB9xXaA/cV98cV//+6TM3//6jMzQf///QzNP///7M0///1zM3///KZmov///BmZov///czM/8ABTMz///5zM3/AAmAAP8AAGZmCP8AXoAA//9qmZoG+0hpb2wefouFkoSVgpeAmG+LCH50fnZqsnqgH6KLtIy1rsG2rc2L9xII/wCAZmbKB5j///+Zmv8ACoAAnYv/AAuzM4uU///8gAD/AAVMzf//9UzM/wAATM0I//+3szT/AEWzMwaL3paOyJCRkYughZFhinGKX4tei2+MYIyFhYt2kYXIh5uHizgIDlT7gqz3V7f4B633da0Sr+FG2Pdn2vPcE/v36/hxFf//xDM0B///45ma/wAPmZr//95mZv8ABjMyZosI+w41J/sYLsb7EPckH8SLqZ+amAhzB/sgXEtBHhP3XItosoOf///4TM3/ABMZmv//97Mz/wAP5mZwiwh2fnx2V/Bkwx/Ai/8AKhma/wAIZmb/ACfmZv8AHJmawLGh1IvxCPgpB4v/AAWAAP///2Zm/wAE5mb///6Zmv8ABBmaCP8AKoAAB/cMndHAHqOLkniPd5BwmX2mi6WLlKCLnIucgJt8mHeddZdiiwhINUz7Mh+J+yEV+6wHcXdqiXiLCBP7UTi19yvzsdXbH7WLq3OmXggOKvuCqvdZt/gHrQGv4Pdw2gP4OJcV+CkHmYeWgB6Ei4SEhH8IfHMFaqhgllqLCPsONSf7GC7G+xD3JB/Ei6mfmpgIcwf7IFxLQR5ci2iyg5////hMzf8AExma///3szP/AA/mZnCLCHZ+fHZX8GTDH8CL/wAqGZr/AAhmZv8AJ+Zm/wAcmZrAsaHUi/EIPPfYFfusB3F3aol4iwhROLX3K/Ox1dsftYurc6ZeCA5Bgaz3Gaj3cawSrd73mctnpxP4+A73AxVqB3pqYnVpiwj7DVvu9vcG1MrTHxP04ouyeJ0xCKeNgPcYBWOLSpNdiwj7ICks+x0l1PsH9y4fE/jYi8yissEIzQeLlI6Rko+QjqSNi4sIj5GMkh+LnYmNBW2KZ4p3i3eLb4xtjAiJiYt4BYuHjIiRigiXiQX/AB+AAP//+szN/wADgAD///gzM4ttCA5D+16v+MyoAfc+utDGA/eM+14VxbKvtB+Lr4K4YtsI9x731AWasJmUqYsIkgaRj46QH6AHi2CJb2pXjYsedQeIjIePHpsGnpKGgR+LhIiBhn0I+w37p3m1LPd9BYeWiJOLkwiXkpKeHpsGjY+Mkh+gB4tOiWRoVY2LHnUHh4+IkB6SBq+LlXiWbgj3Kvv3XTkFgnqDe4t0CGWscrgebNQVi5ubqaK0pkaOgIt/CHl7fXl1fpijHg77Z3+u+BCnAfG6y8YD90h/FdWdxZ8fi6mLoVTtCMn3AAWsw5yar5IIpwdOi///7Bmadv//2+ZmTQhWMFnkBWrFeqc7iwhvB6yGmXekXAjV+xl4aQVlSYl8i2wIZatxuR5s1BWLm5Wyo7QIkYAFnG+SW4t+CHmAe3l1fpmjHg5A+212paj3Qbr4AagB49b3WtYD9/37DxVKiGOLHoSPiJQe/wAZGZqV/wBFZmaY/wAogACOCImjBYuO///9MzT/AAHMzf///MzM/wAAMzMIa40Fd4GYzB/4YAeLqP8ACOZm/wAKZmb/ACIZmv8AA5maCJ6NBZD/AACAAI3/AAKAAIuQCIueiY0Fi0iJZ2RHjYseiYmLeAWLho////1mZo////+ZmgieiQX/ACCzNP///Jma/wAKTMz///VmZotuCPuLB1tcYHFuiwhTdZvcH/dzB4uo/wAJGZr/AApmZv8AIeZm/wADmZoIno0FkP8AAIAAjv8AAoAAi5AIi56JjQWLR4loY0eNix6JiYt4BYuGj////WZmj////5maCJ6JBf8AIJma///8mZr/AApmZv//9WZmi24I+2gHJK9X0x6yi8abzs4IDkCJqPgBuvd1rRLj1vcj1nfWE/Tj+GcV/B8Hi27///cZmv//9Zma///d5mb///xmZgh4iQWG////gACJ///9gACLhgiLeI2JBYvOja+yz4mLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeI0F///fTM3/AANmZv//9bMz/wAKmZqLqAj3iwe7uralqIsIw6F7Oh/7cweLbv//9uZm///1mZr//94Zmv///GZmCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+NrrPPiYsejY2LngWLkIf/AAKZmof/AABmZgh4jQX//99mZv8AA2Zm///1mZr/AAqZmouoCPdoB/Jnv0MeZItQe0hICPcUB/cwu6OsHhP4qYuefphqk3qYgJ+Lnouamougi5uCnHeacpxxkmWLCDcwQvsyHw5A+3Gv90uo+AG693WtEuPW9yPWd9YT+vhI9wEV90MH8me/Qx5ki1B7SEgI9xQH9zC7o6weE/ypi55+mGqTepiAn4uei5qai6CLm4Kcd5pynHGSZYsINzBC+zIf/B8Hi27///cZmv//9Zma///d5mb///xmZgh4iQWG////gACJ///9gACLhgiLeI2JBYvOja+yz4mLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeI0F///fTM3/AANmZv//9bMz/wAKmZqLqAj3iwe7uralqIsIE/rDoXs6H/twB/sAlfssXx6Ai4WShZSDlYGXcYsIgHh/eW2tfZ0fn4uti7CqCLqxm++L9zUIDvvHiaz3Y7L3AKeod/cR7xLz7zPaE/r3oPepFUL/ACxMzAb/ADGzNI/Lix6Pho6DHv//44AAgP//2IAAgkaCiYWNe42F/wA2gAD///rmZv8ACoAA///6GZqLUghjK2Tr+wgHiziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo+Aj4veCPcI1AcT/Ps49/0VdQoO+86AwvgXdwHf2gPf99YV93MKDvvWiaz4A6wB7NoD90T3xxX3dAoO+8iJqPeKt4+598ufAfbWA/dl99QVg4v///hmZv8AAUzO///4mZr/AAJMzAj/AQNmZgfMj7OLHpKHjoIecoFAfWOIiYONe5GFv4iXkIs3CP//QmZmB///+Rma/wACTMz///izM/8AAUzO///4MzOLYIt0ZH1QkYWVipaNlayVmqWL/wAJMzOL/wAJ5mf///2Zmv8ACeZm///8GZoI//9CTMwHiziAhk6IhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo6AkIveCP8AkjM0B/8AA0zN////MzT/AANMzf///5mY/wADZmaLuYuospfHhY+BjoCKfWGAgXWLCA77gYqo95Gt3Kn3bKmblRKdqfcd1mynE/737vfPFTn3oAbMj7OLHpKHjoIecoFAfWOIiYONe5GFv4iXkIs3CP//QeZmB///60zN/wAfZmb//+JMzf8AGbM0///OZmaLCHVed2FNsXblH7L7MwaLOICGToiFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOjoCQi94I9zPdB/s1rRVQBlttnqijn5SjH8KLo1mZbAgO+/L7fKv50qm8dgH7RtYD9z3TFYvEi/haBcyOs4sekoeOgh7//+bmZoH//7qZmn7//9eAAIgIjXMFi4j/AALMzf///jM0/wADMzP////MzAiriQWflX5KH4v8RotSi2cF+0XRXMfgqriqoX6Zdh5wi315hnaFdoZ3bYsIbnap9y4fDjz7f673WqzTrfeWrfdoqaZ3EuraYdf3VtwT/oDq9w4ViziAhk6IhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo6AkIveCP8A4bM0B/8AE0zN/wAjszT/ABiAAP8AC5mY/wAWMzOLCPcli/s8+7ScfAWdj6mSlosI2apjJvsARlVZHxP9gPd1ChP+gP//9czNi///+IAA/wADMzT///uzM48I/wCSzMwHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwgO902Bv3Gn9/asEuTa90/a/wC5zMz/AE4zNBO8+O7wFf//2GZo///ZTM3//+CAAP//67Mz///hGZiLCGVvo84f90IHi92TkMGPkJGLoIaRYYp3imOLYot9jGCMhoWLdpCFvYeUhos5CPszB4t9i32Mf1tWZH5kiwhlc6HOH/dEB4vdlZC/j5CRi6CGkWGKd4pji2KLeIxgjIaFi3aQhcKHlIaLOQj7MgcynEXjHv8AMzMzi/8AN7Mz/wASzM3/ADQZmsKO/wADMzORkI3///dmZv8ACYAAYv8AJoAA///fmZq/i8WLt663uf8AA4AA/wADmZr/AAZMzP8ACmZmi32Lbf//+zM0XYuLCIaPiJMeE3z/AByAAJb/ACiAAJTQlI2RiZuJkf//yYAA/wAFGZr///WAAP8ABOZmi8UI91cHi92YkMKPkZGLoIWRYopzimCLZIv//+5MzIz//9XmaIyFhYt2kYX/ADLMzIaUh4s5CPs4B4t2gv//87Mzg///90zNCA73OYG7+ACoAd/W90nW90fWA/jm+zMVijyiiwWhnbeYyZYIiKJbkAX//+qZmP8AAjMz///9Zmj/AAXMzYu9CPhlB4un/wAJmZj/AArmZv8AIGZo/wAFGZoIno4F/wAE5mj/AADMzP8AAxmY/wACMzSLkAiLnomNBYtHiWhkRo2LHomJi3gFi4b/AAQZmP///czM/wAE5mj///8zNAieiAX/AB+ZmIb/AAtmaICLbwj7iQdbWmt0aIsIZXGkzR/3dgeLp/8ACpma/wAK5mb/ACBmZv8ABRmaCJ6OBf8ABOZm/wAAzMz/AAMZmv8AAjM0i5AIi56JjQWLR4lnZEeNix6JiYt4BYuGj////Zmaj////2ZmCJ6IBf8AIMzM///6zMz/AAozNP//9TM0i28I+2IHi3yLfo1+W1dreWSLCGVxos0f93gHi6f/AApMzf8ACszM/wAgszP/AAUzNAiejgX/AATmZv8AAMzM/wADGZr/AAIzNIuQCIueiY0Fi0eJaGNHjYseiYmLeAWLho////2Zmo////9mZgifiAX/AB6zM///+2Zm/wALTM3///SZmotvCPthBzKaROMewYu8pcTHkl2sY8KLyYu1rru8CI6LiPsFBQ73T/txr/dLqPf8o3e7EvHW903W90/WE975T/cBFfc/B+R60TMeVYtWdFJPhLhosVOLTYtdaVxZCIiLjt8F/wACZmb///5mZv8AAJma///9mZoeE+7//+OAAIBkgv//uYAAgAiNc7aHBf8ADmZm///+TMz/AAeZmv//9bM0i1kI+40Hi27///cZmv//9Zma///d5mb///xmZgh4iQWG////gACI///9gACLhgiLeI2JBbOMpIyyi7SLoIqzigiNjYueBYuQh/8AAmZmh/8AAJmaCH2NBf//45ma/wAEGZr///FmZv8ACeZmi6gI94wHE966vLChrosIsadzSB/7eAeLbn7///XmZm7///wZmgh8iQWG////TM2I///9szOLhgiLeI2JBbOMn4yyi7SLoIqzigiNjYueBYuQ///75mb/AAIzM///+xma/wAAzM0If40F///jGZr/AATMzf//8OZm/wAJMzOLqAj3ZQeLmYuZipe7wK6csosIsad1SB/7dwf7AJX7LF8egIuFkoWUg5WBl3GLCIB4f3ltrX2dH5+LrYuwqgi6sZvui/c2CA5D+3Gv90uo9/yjd7sS5tb3WtYT3Pc69wEV92EHvsexnLeLCMCXakUf+2wHi26A///2mZpr///7ZmYIfYkF///7GZr///9Mzf///OZm///9szOLhgiLeI2JBbOMn4yyi7SLpYqzigiNjYueBYuQh/8AAoAAhv8AAIAACHiNBf//4LM0/wADTM3///VMzP8ACrMzi6gI92UH5HfQMR5Yi1t9S0AIiIuO5AX/AAJmZv///mZm/wAAmZr///2Zmh4T7P//44AAgGSC//+5gACACI1ztocF/wAOZmb///5MzP8AB5ma///1szSLWQj7igf7AJX7LF8egIuFkoWUg5WBl3GLCIB4f3ltrX2dH5+LrYuwqgi6sZvvi/c1CA5D+3Gv90uo9/yjd7sS5tb3WtYT3PgA9wEVi/s1kye6ZbBssouiiwidrZmpnXiXgB9xi4F/g4GFgoWEgIsIX5X3KvcCH/diB+R30DEeWItbfUtACIiLjuQF/wACZmb///5mZv8AAJma///9mZoeE+z//+OAAIBkgv//uYAAgAiNc7aHBf8ADmZm///+TMz/AAeZmv//9bM0i1kI+40Hi27///YZmv//9YAA///e5mb///yAAAh4iQWG////gACI///9gACLhgiLeI2JBbOMpIyyi7SLoIqzigiNjYueBYuQ///85mb/AAJMzf//+xma/wAAszMIfY0F///fMzP/AASzM///9czN/wAJTM2LqAj3hgcT3L7HsZy3iwjAl2pFHw5qlHaXpvgLqBLzuPeXuBN4z6YVbQaFiYiHH3UHi8aNsLLFiYseoAeRho2IHm4GbIWUsB+L95X3h/vRBRO4ln2WgJuLCJeWmJ8f9+MHsJCUqx6oBpGLjI+MjgihB4tQiWVlUI2LHnUHiIyHkh6pBqyPfWsfi/uT+5P33vsPi4t1BYeOiI8eqgasjoJoH/uxB2qLfmceDjCBrPdBsvc/rAG04/eM4QO092EVfAr/AU2ZmqkV//8IgAAG/wABmZn/AFTMzP8AH5ma/wBWMzT/AFGzM4vWi/8ALszO///FgAD/AArMzP//j4AACP8AAjMyZBX/AAAZmv//+2Zm/wAAGZr///tMzYv///tMzYv7GE5wXIv//6VmZov//9eZmv8AYRmagv8AS+ZmCA7fiahwrfc5q/c4rXCoEqjg92XW9w2oyqd8pxOvAPeuphUkSrv3HvcqzrLWtqOJbR/7ygd0hYFoHhM3gPd/+AQVy4ueVpZmCKePBRM3QISxhLKKtggTL0CJjQUTN0CLRIltHvszBhOvQGaLVI2Hiwj7ISsx+yD7IPJM9xsfE2dA93YKE6dAqcaJix8Td0CNjZ/3B2+OBX9XdGtYiwj7AQZ6fZCeH/ch2Aeli5SAj3cIj3UFjImNiI+LCKCLjY0FiKOIn4uki6OPp42iCI2KjIkedwaIi4mIiogIhnYFhneEf3CLCD73IQacl5GeHg73Cn+u94ex9KwBrdj3Yaampvdd3QP5PPdWFfA49yf7i/tN+xf7FfsR+yTmU+UezIvArKXQqDzCdL6LCODwtfc4H/zNjBX3IurT9yrM90Vs+0X7C2dQOh5Ti2eyeNCev5O4i6MIrH+ebnF9d2Uei3ePYqBVdkNnZ1aLCCl13OYf95e1FYt5h2+AXouPf7CLuAiikJaTlo5+ex4Ocft+qPdaqvgSrPeXdwGr1/cg1vcg1wP3jKMVYpIoqov3LYv3G9e6y5YI1vwUFfgSB+R4vliL+wuLZYH7GfsWdQhA+K8V+w8HT4j7ME2L+zKLUKn7K/dOfQj7KweLb///9czN///1MzP//98zM///+szNCHiIBf//+xma////MzP///zmZv///czNi4YIi3iNiQWLz42vss+Jix6NjYueBYuQh/8AAmZmh/8AAJmaCHiOBf//4MzM/wAE5mb///QzNP8ACxmai6cI9ysH9xKa5euL9wOL9xn7A9wilQj3JAfMjrOLHpKHjoIe///m5maB//+6mZp+///XgACICI1zBYuI/wACzM3///4zNP8AAzMz////zMwIq4kFn5V+Sh8O+3OByWen9/asEvdQ2hOw95/3BBX3VweL3pePyY+RkYughZFhimuKY4tii2aMYIyFhYt2kYXRhpeIizgI+x8Hi3F/dH95gHt0an+LhIuDjIWRgZWBnnaLCHN0cnL//+zmZp3//+MZmrUfuou0t6KykZaOhouGi2uGW4uLi4eQiJOLCBNwp5azlNCUjZGLm4eRCFWQgJOLwggO+4SByGqj+NSoEvdW1hOw96H40RWLqP8ACmZm/wAKmZj/ACCZmv8AA2ZoCJ6NBZD/AACAAI3/AAKAAIuQCIueio0FZopsimeLZYtgjGaMCImJi3gFi4aP///9TMyQ////szQIqIkF/wAfzM3///3MzP8ACzMz///0MzSLbgj8RweLfoZ+hIJzaXV5gIuEi4SOhZGBlYCTd4sIcXp7cXGad7Qfuou3vqWyCI6LiDEF///9mZr/AAGZmv///2Zm/wACZmYeE3D/AByAAJaylP8ARoAAlgiJo2CPBf//8Zma/wABszP///hmZv8ACkzNi70IDvtW+0Ky9w+v+A6oAfdl2NjZA/fY+CYVnAaSjI+NH6IHi0+JZGJMjYsedQeGjomQHpsGsI18ax/7hgd4YGNdc4uAi4ORiJWHlHqtbosIbnx8b3aYbMsfrYuil6KhmZahpJKbCIx3BftCxVXDxcWauJd6oXMedYuBe4Z7iYCBf3uLYIuGnor3MQj3zgeli6CxHg77hPt+qPjbyFejEuzWE9Ds+zQVi27///WZmv//9WZm///fZmb///yZmgh4iQWG////gACJ///9gACLhgiLeIyJBbCMqoyvi7GLtoqwigiNjYueBYuQh/8AArMzhv8AAEzNCG6NBf//4DMz/wACMzP///TMzf8AC8zNi6gI+FcHi5iQmJKUo62hnZaLkouSiJGFlYGWg5+LCKWcm6WlfJ9iH1yLX1hxZAiIi47lBf8AAmZm///+Zmb/AACZmv///ZmaHhOw///jgACAZIL//7mAAIAIjXO2hwX/AA5mZv///kzM/wAHmZr///WzNItZCA77eft8s/jLqYyvAeDW69MDyvgRFZ2Pencf+9wHjvsbovsF9wSLCKrVoribgph0H3OLgXqFeIiAf4F5iwhafbv3JB/30wearrW/pYuU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i4SL///oszOW///cTM2Li/8AB5ma///9GZr/AAOzMv8AAIAA/wAHszT/AAJmZggTfKGdsZrIkpGRi5qFkUuQgp6LvAj3AMYH+x4W+wYHi3j///4Zmv//+DMz///x5mb///PMzQgTvGZra3tyiwhtWZnkH+0HDkqBrPf/uBKVpIfY97fYh6QT0PeRohU3Tt7UH4vjtq61nwiI3AWKpIWOfIsI+yKLBRPgey+kiQWTt5GQsIsI04uQXwUT2DxlVlGLPAg11DD3K/cq0ubhHovaVsU8sQiQt9OLBRPEsIuRhpNfCKSNe+f7IosFfIuFiIpyCIg6BRPYtXe2aIszCEJOODYeDiKBsvf4p6h3Aefa9360A/c//wFBTMwV93cKDimKrPgudwH3PKsVVY////pmZv8ADDMz/wAU5mf/ADLMzQj/AFCzM/dYBf8AEDMz/wAngAD/AAUzM////0zM/wAPmZr//9YzNAj/AEgZmvtVBf8AEeZmW/8ADTM0///yZmb//8HMzP//+pmahYWLdpGFsIynjLSLroubirCKkZGLoIWR///GgAD/AAbMzf///YAA/wAPmZn//+uZmv8AMpmaCP//gGZm99AFhZqFkX6LgYv///kZmv//+Zma///45mb//+9mZgj//3qZmvvNBf//7UzM///UGZr///UZmv//5uZmU4aFhYt2kYWhjJ2MpYuwi6GKsIqRkYughZEIDvcsiqz4LncB+K2rFYWFi3aRhbCMqoyvi7GL/wAXzMyK/wAaMzSKkZGLoIWR///Q5mj/AATMzf//9RmY/wAKMzP//+rmaL8I//99GZj31wWFmYORgYuCi4OFhHsIJvuKJPeMBYWZg5GBi4KLg4WFfAj//32AAPvRBf//7zMz///XTM3//+9Mzf//47MzWIiFhYt2kYWkjJSMr4uxi6iKsIqRkYughZFAj/8ACkzM/wAc5mb/AA4Zmv8AIxmaCP8AU5ma92QFlaT/AADMzf8AB+Zm/wALZmb//+MZmgj/AFZMzftvBf8AEoAAXImBVoeFhYt2kYWwjKeMrouui5uKsIqRkYughZFYj///+EzM/wAdMzP//+4Zmv8ALMzNCP//+Zmam9H3RQWYrP8AAjM0/wABgAD/AAzmZv//34AACP8AT//++2IF/wASszT//8/mZv///zM0///wGZpbiAgOP4ms+LrbAfe/+OEV///wZmb//+QzNP//8uZm///jZmT///OzNP//4mZo//+vmZr//z8Zmv//1GZm//+Y5mZW+wR9bm1rZoiFhYt2kYWkjJ2Mp4uui56KsIoIkZGLoIWR///gZmaO///f5mf/AAXMzf8AD7Mz/wAkMzMI/wBjMzP3eQX/AAb///8AEBma/wAIZmf/AAKzMv8ACIAA///sMzQI/wBYszL7ZAWd///VzM3/AAqAAHn//8KzNP//+zMzhYWLdpGFsIyzjK+LrYumip+KkZGLoIWR///UZmaP///4GZr/AAdMzf//5Jma/wA/szMI//+O5mb3mwX///dMzP8AFBma///wszT/AC3mZpWn/wAL5mb/ACFmZv8ADBma/wAbmZqaqpafmZSki5mLj4iWiwiomqmYoHebcB92i2ODZ0sIDvsPiaz4A6wB91/aA/8AcGZm99kV/wBamZr7OotmBYs4gIhOhoWFi3aRhbWMpYy3i7aLpIq2ipGRi6CFkU6PgI+L3giLvP8AS2Zm9y0F/wAUmZq2mKXDkJGRi6CFkXWKeYpxi2aLdYxmjIWFi3aRhcGHj37//+izNFkI///CTMz7Ev//wOZm9xIF///pGZq5///vzM3/AA+Zmv8APjMz/wAFZmaRkYughZFmim+KYotoi3uMZoyFhYt2kYX/ADmAAP//+TM0/wAEgAD//+3MzP8AGmZmWwgO+z+Lrff9rZl2ErOs/wFRmZr/ADhMzBPY/wFTTMz//0qAABX/ADQZmv//8bMz/wBAGZr/ABnmZ/8AC2Zm/wApgAD/AANmZv8ADIAA///5zM7/AA8zM///8Jma/wAEMzP///KAAP8AA7Mz///sMzL///gAAf//+zM0///umZn///qzNP//7LMz///nTMx5///n5mb/AAaZmv//22Zm/wAKGZqP/wAwf///AA/mZv8AOeZnCP8ACOZo/wAgZmb/ABdMzIsFkKqVupzF///5gAD/AAOzM///9IAA/wADTM1/iwh+bgX///lmZv//8UzN///55mj///NmZv//+WZm///1TM0I///0TMz/AAMzM///+LM0///lgAAF///xszT///OZmf//7ZmY///5szNviwj7GYv3hPf1BZylkJeLjwgTuI8KE9iQChO4jQoT2J/UqqCpiwj3Hov7ivv/BYN/ioiLhgiEk4aaHv8A+DM0i///80zM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rLmzrLaL0wjdR7YkKilMQmugep+im5adHov/ABpmaIT/AAOZmIudCLPIsLzBvW1BHotQ///nszT//+qAAP//10zM///agAD//89Mzf//0xma///sTMxs///5TM3//83mZgj//4kZmgaHhYmFi4OLhYyFj4QI/wB1MzMG////5mX///szM////+Znhov///rMzQj7KweLbv//9jMz///0zM3//97Mzf///TMzCHOJBYb///+Zmon///1mZouGCIt4jIkFvYyfjLKLtIufir2KCI2Ni54Fi5CH/wACszOH/wAATM0Ic40F///eszP/AALMzf//90zN/wALMzOLqAgO+zqJqPdnsvdrdvcuqgGx2s/W0tQD/wEBGZr3qRX///lMzf8AMhma///sTMyq///PTM3/ACzmZmKwc6GLxgjVvanBvMhmYx6LeYSHi3EIeZuAop+gnKvUKcoqJEdgOR6LQ6xguWOx///e5mb/ABSZmf//6Rma/wAGzM1gCP//kJmaBoeFiYWLg4uFjIWPhAj3B/s6BotugoBqiAhziQWHh4iGH4t4jYkFvYyfjLSLsoufir2KCIyNi54FkImOhh5zjQVqjoGWi6gI9ysHi/8ABTMz////5maQ////5mb/AATMzQj/AG4zNAaOko2Qi5KLkYqSh5IIDvdjgbpmrff9rXKu916ppncSsOH3cNqUrBMvgPhY+E4V///9mZr///xmZv///GZm///9mZofil6FZYNa/wAIzMz///xMzP8ADJma///+GZr/AAuZmv8AApman9SqoKmLCPcei///Hxma//60GZoF///hGZr/AAmZmf//+szM/wAT5meL/wAlZmYI+FkHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwj7FAeEiYmEHhOfgIeLYpxqi0mLX3VjZWBgcVCLQYv7D8kx9wCLsouwn7z/AChMzf8ABMzM/wAD5mb/AAczNP8AAczNi4QIc5Zoix6TiI6Mk43/AAyZmv8ACkzN/wARszT/AAlMzf8AGEzM/wAHZmb///+AAP///kzN////5mb///5mZov///5MzQgTb4CEk4aaHvfMBpCqlbqcxf//+YAA/wADszP///SAAP8AA0zNf4sIfm4Fc1Z6cFGLCPsZi/eE9/UFnKWQl4uPi4+GjoSLhotrhG6LCPtfBv//3+Zmi/8AAJma/wAJmZr//+6AAP8AA2ZmCPsB+9IV9wAKE5+A9wEKDvc0+3+u91K6hKa5rfeWrXKu916ppncSsuH3cNpX1/dW3BPX0Pft9xAVbAqA//74TMwVbQoTu9ChnbGayJKRkYuahZFLkIKei7wI/wDpmZoH/wARZmb/ABdmZp+T/wASmZqLCPcli/s8+7ScfAWdj6mSlosI2apjJvsARlVZHxObsPd1ChPX0P//+2Zmi4f/AACZmv///Jma/wABGZoI/wCYTMwHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwj7FAeEiYmEHoeLYpxqi0mLX3VjZWBgcVCLQYv7D8kx9wCLsouwn7z/AChMzQgO93KBumay5az3ebJxrvdeqaZ3ErLh93Dajqb3zqkTZ+D5lOgV93gK+zwuFccG4r6xw8FcmXMfZov//+EZmP//8OZm///q5mj//+wZmnr//+/mZnj//94ZmnplCEmL93r38AWUmZOWi5IIEzfgk4WOgB77gwZui4mVio8Ido9t+ymmhgWQrZy0lZSWk5mQn4sI9yKL//8o5mb//rjMzAX//+MZmv8ACczOhv8AE+Zmi/8AJIAACPhZB8yPs4sekoeOgh5ygUB9Y4iJg417kYW/iJeQizcI+xQHhImJhB4Tr+CHi2KcaotJi191Y2VgYHFQi0GL+w/JMfcAi7KLsJ+8/wAoTM3/AATMzP8AA+Zm/wAHMzT/AAHMzYuECHOWaIsek4iOjJON/wAMMzT/AAnmZv8AEP/+/wAJGZr/ABcZmv8AB0zN////zMyK////5mj///7MzYv///7mZggTd+CAm4meHvUGfGV/Y4RmCKqEBZCvmLebtQj7k/cQFfcAChOv4PcBCg6Pf6n4CbJ5qRLk1lHF9Mn3OM5qnxO25OIVK7KI9ycesYv/AI3mZv8AABma/wAuGZr/ABjmZv8AKOZo/wAWGZr/ABQZmP8AH+Zmi7qLtf//8bM0/wAuMzP//7NMzP8AHMzNK69fsouni8a5nrKLCBOloYvIgKn7AAifjH/3DQV4llebWYs6i0lYi0aLQ/8ALTM0///rZmb/ADPMzP//65maCBPWzXHKbYtOi1lXc2WL+wWLI5N5soaZiqGLrAj3lfcDsgcTzPsD9y4GUXeLeAWLX4dvg3x9dWqFcIsIZAcT1tAGDvsZ+3Ox90PC9+2y93atEuTaW83k1hP29yv7DxV4f3p7YsFxtR+ai/8AFuZm/wABGZr/ACMZmv8AHOZm/wA7zMz/ADEzM/8AATM0/wBQzM2L9gj4OQfqlerFHpyLm36VcpB7kn6hiwidmZmfpmqzQB9vi3GBcHb//8QzNP//0DM0///8zMz//7FMzIv//5mAAAgT+iCyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoIXf///+ZmBX2Hf4MffgeGjIqPHsb7wQZEqm+5Hv8AJEzNi/8AJszN/wANszP/ACHmZv8AG2ZnCP//2OZmB/sqanB1HhP2dIuGmoWaCIachZpziwj3EP8AvkzNFXP///AzNP//5WZm///5gAD//+iZmosIE/pwhanJH/eR8weMi4yLjP8AABmaCA62gcL3C6T3XbJ0rBLk2tjh907lcqwTzfja9xUV928KrJgVi/8AEbMz///5Zmj/AA3mZ///9JmY/wAHZmb///WAAP8ABszN///xZmj/AAEzM///8hmYi///sIAAi///vhma//+gMzP///BmZv//4MzNVa1/34vOCBPe1rjf0h7Bi5hvjm3/AAKzNP//5WZm/wAGTMz//+mZmq6LCKKinKPOQKtG+xo3I/sQH4tY/wALszL//8+zM/8AGRma///YZmf//+ZMzP//7LMz///igAL///gzM///5mZmiwhwhanJHxPt95HzB5WZj5QfnwePiI2GHvsMsgbMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRmaCF3////mZgV9h3+DH34HhoyKjx7G+8EGRKpvuR7/ACxmZou7/wAUgAD/ACZmZv8AKOZm/wAQTMz//+xMzf8AFEzO///vMzP/ABiZmv//8xmaCFAsBZGE/wAOZmaG/wALmZqKnaqir5+rl4ioi5iL04vswYvtCA73dvtxr/dLqPf/smW793asEuvW90HuTdb3XtYT7YD39PgaFaWOf1If+40Hi27///RmZv//9UzN///gmZr///yzMwh4iQWG////gACI///9gACLhgiLeI2JBa+Mq4yxi7CLq4qvigiNjYueBYuQh/8AApmah/8AAGZmCHiNBf//3Zma/wADmZr///dmZv8ACmZmi6gI/wD9TMwHE96A/wAu5mb/ADGZmv8AMzMy/wAQGZr/ACXmaIsIsad1SB/7dwf7AJX7LF8egIuFkoWUg5WBl3GLCIB4f3ltrX2dH5+LrYuwqrqxm+6L9zYI9z8H5XrQMx7//81MzIv//74Zmv//65maVP//y8zM/wAAzMz/ACMZmv8AAczO/wAlgACLi4v/AAHmZor/AAEZmoiLCBPugG1/bYpoiwj7UcQG9y7PpKweq4uqf5Rg/wALTMz//8oZmP8AELM0///n5miqi5+Ln52Ln4uwav8AJuZoZv8AGRmYcpxxlWWLCDcjU/taH3xYB3mGf4MffgeGjIqPHtD70gaLbv//9WZm///1Zmb//9+Zmv///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFr4ysjLCLr4u6iq+KCI2Ni54Fi5CH/wACzM2H/wAAMzMIao0F///cTM3/AAIzM///+LMz/wALzM2LqAj30gcORoGscqz4C6z3XqmmdxLq2qKqetL3IddVqxN9gOr3DhWLOICGToiFhYt2kYW1jKWMt4u2i6SKtor/AADMzf8AAMzN/wAAszP/AAEZmf8AAJma/wABTM0I/wAA5mb////MzQUTvYCFChO9QIYKE76A/wBSzMz//92Zmv8AEzM0///rZmaLYItaW3Zmi2SLdZiBlnOigreFpIWReIqFhf8AAuZm///cszP/AAJMzf//3czN/wABGZr//9/mZghz/wAHzM3///qzM/8AE+Zni/8AOeZmCPhhB8yPs4sekoeOgh5ygUB9Y4iJg417kYW/iJeQizcIDoeLrff9rZl292+ppncS6tq5rBO+94X4ThWNChPen9SqoKmLCPcei///CjMz//6VTMwF///UTMz/AAQAAf//94AA/wAMmZmL/wBJGZoI+GEHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwj8SQeLOICGToiFhYt2kYW1jKWMt4u2i6SKtor/AACAAP8AAIAA/wAAmZr/AACzM/8AAGZm/wAAzM0I/wEwgAAGkKqVupzF///5gAD/AAOzM///9IAA/wADTM1/iwh+bgVzVnpwUYsI+xmL94T39QWcpZCXi48IE76PChPekAoO+yr3oqL3z6IB993zA/cT96cV934K9+YE934KDvta9z7B97DBAbyn94eoA/fx9/4V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UQiijILWBYCSZJVsi1qLXmuLYYte/wAfGZr///BMzP8ALeZm///sszQIE+j3jQoO+7T4AKH3daEBoPemA/8A6jMz+M0Vp/8AI+Zo/wAEszL/AARMzP8AHBma/wABzMyPj4uZh495ioSKdItzi3yMeYyHh4t9j4eoiv///jMz///3zMz///LMzf//7TM0CGJSZ8QFf5+LkqiMj4+LmYePeYpuinOLdIuBjHmMh4eLfY+H/wAcGZr///4zNP8AARma///9mZj/ABqZmf//2jM0CP8AODMzOwWIiP//zszNUYuL///hmZn//9yAAP///bM0///7TMz//+PmZv///jM0h4eLfY+HnYySjKKLo4ubip2Kj4+LmYePCG6MjJSZnQizvatZBZd4joNuioeHi32Ph52MpYyji6KLmoqdio+Pi5mHj///4+Zm/wABzMz///mZmv8AAuZo///lszP/ACVMzAj//8vMzdUFDvvw+ACi996hAaW7srydwwP3TfgXFXSLlJ0f0AeLuf//5uZm/wAb5mj//+gZmv8AGRmYd6B4oYurCKmbqbCppXpyHouHioeKiIuIioiLhwh4nIeVl5yVnL9RqFZMZ2tZHotdonehd6B5oHmLZAg7B4t5ioF0igiABoeKiYgfeQeLsoykpLKKix6dB4+IjIkeDvsyoHb44cMB98nKA/gI+RkV++5T96/84coGDvsyoHb4m8PRdwH3ycoD+Aj5GRVMRfuvU/ev/JvKBg77MqB2987D96d3AffJygP4CPkZFUz7p/uvU/ev+87KBg77MqB20MP4nHcB98nKA/gI+RkVTPyc+69T969GygYO+zKLw/jhdwH3ycoD+Aj5GRVM/OH7r1P37gYO+3rVuAG9vgO91RX3nbj7aveNWAYO+3P3YrkBvb8D8b4V9y/3cLn7cPcrV/v0Bw77r/sV95QBmPcTFfcT+5Sqi/cO95ReizP7Si33SgUO+wH427botwH4dvjbFbb8cWAH+HH3HBW3/HFfBw77bfhXn9vdAfcWrfcNrQPx+Q0V944K9y+NFWh7cnt6lXOz/wAYMzT/AATMzP8ABpmY///sZmgfi3R3a1J/i4SMgo+HsZD/ABwZmv8AEOZm/wAQ5mb/ABUZmpufkqGLowivdLBkHg78EP//HYAA91UBlf8Aw7MzA/8Aa+Zm//9hszMV///DgAD/AHzM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FdsKDviGwInCEvsbphOg+0r4uxWyChNgswoToLQKDvhqn9vdAVStAzj5IBX3jgoO+3f4pOoBvenW6QO9+NMVlAr3PRaUCqT3ZxX3mQoO+4KzAfty1tSkA/tyQRX3mgoO+Hf3C1+3EvwLt/cstxNw+9/4gRX3lQoTsPeWCg77Z7e5twFC+w0V95cK9+0xFfeXCg77dfdFAfuis9GzA/t6+20V95sK9wIW95sKDv//l4AAsgH//2OAALMD//8GgAD//76AABWChoeCi4aLhYyGk4II7EUGkIGSiZCLkIuVkJOZCIvmf5YFDvikwInCEiKmE6D//ylmZv8B72ZmFf8ADEzN/wAuZmYF/wAMMzL///gzNP8ADGZnhf8ADLMzi7mLqLKXx4WPgY6Ain1hgIF1i///8pmai///87Mz/wADgAD///RMzf8ABjM0CP8AEGZm/wA+TMwFg5SG/wAEgAD///cZmov///wZmov///2Zmf///5mY///6zM3///9maAj///HmZv//yoAABRNg///wMzP/AAtMzP//7kzN/wAKszR1i2CLdGR9UJGFlYqWjZWslZqli/8AD5mai/8AEUzM///5TMz/ABCZmv//9mZoCHz//8dMzAX/AAaAAIP/AAKzM////DM0/wAGTM2LCI+Lkv8AAMzM/wAHZmb/AABmZggO/wHT5mb/AEIzMv8AA+ZowInC///35mj/AEIzMBL//trmZv8AQjM0/wAXzMz/AEIzNP8AH+ZmphOO+5j/AdPmZhWd/wAPGZr/AA8Zmp2d///w5mb/AA8ZmHl5///w5mb///DmaHkfef8ADxma///w5madHhOe5f8AqAACFZ3/AA8Zmv8ADxmYnZ3///DmZv8ADxmYeXn///DmZv//8OZoeR95/wAPGZr///DmaJ0eE86d///TGZgVsgoTrrMKE860Cg74jq6LrKaui60B/An3oQP7DPjTFYaLf2lfi3eLSaxui2yLcXl3aouFl36Ti5GLlrCvi6mLyWiriwipi6Oena2LkYOVg4sI6wSFi4BoX4t3i0itb4tri3J4d2oIigeLiI2IkYePh4+Ij4uRi5WvsIusi8Zoq4upi6OfnayLk4OUg4sIDvspqQH8MvsTFYAHx2ule55oCK0GfKt2oHmeCPddBnl3dXd9awiuBqeqsauxnwiWB1mdYrp+mwhpBploqXGU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px8O+JGh9wacAfuBscSuA/s6+SoVYG9iZGSiabkfo4ufmJme///95mb/AAWzNP///IAA/wAEszT///iZmv8AAZmYgX+FgXaLCIBvkLuznqCcH5qL/wAEszP///YZmP8AAUzN///z5miMgpSElIuTi5ORi5iLlf//+OZm/wAMGZj///MZmv8ABuZo///1zM3/AAWAAP//8czN/wABgAD///FmZosIDviSnPcGm6uZAfugssavA/s++LQVgoGBhIOLCHh+l7yzlpidH5mLkoOUgQiKKxWNiop6mIsFmJKbjp2NCImaBX6Ngv8ABMzMi/8ADzM0CPcxgAd+hXmHeYkIjH0FmoiT/wABmZiL///yZmgIbgeDk32PfYthi3dhi2iL///pTMz/AAZmZv//6rM0/wAMmZp//wAKzM3///WzNP8ADZmZ///8TMz/ABCZmouXi5qTlZQIDviUmfcEo7CZAfu/r8mvA/ub+TYVo4yZix6OiYyIHoKHaoZ8igh+B4qMi4wel4oFko+Hcx/7DQeLf4qKfokIhooFiYuJih+AB4ugjJidp4qLHpYHjYmMih6FjAWBjIeNi5cI0geWmJaXl4sInJaHbh9MB4t/iImAigiFigWJiomKH4AHi6GMmZylioselgeLjIuMiYwIh4wFgI2IjYuWCM8HsXGZch53i3h4g4IIDviVmfcCogH7wK+/rr+vA/to+LQVi36EioCIioeLhYyHlYyajJSLloudipOKjI+LkYqPgY6DjouWCMsHi/8AA8zM////zMz/AAOZmP///5ma/wADZmj/AAmZmv8ACjM0/wAMMzOT/wAJzM2LCJuQhG8fUQeLgIOIgYiKh4uFjIeTjJ2MlouUi52KlYqMj4uRio+AjoKMi5gIywevd5tzHv//7UzNi///62Zm///tszT///ezM///9szM///5mZr/ABLmaP//8WZm/wAImZj//+2Zmot4i3t6g4IIiYyMpICLBX6FeYd5iYuF/wAAmZr///vMzP8AAWZm///8MzSbiZGKi34IQQeLfoKKgIiKh4uFjIeVjJ2MlIuWi52Kk4qMj4uRio+BjoOOi5YI0geVl5aVlosIm4+Ebx8O+JOZ9wKmAfuLrwP7aPkOFY2KBZWZmJqeiwibkoOAgISFgB+Di4aOiI+JjYeLiYuHi4WHgn6JiIiGi4cISweLgJOIlYiM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MzT/AAgZmv//+pmY/wAGTMz///UzNP8AApmafHmDhH2LdYuCoG26CEP3CAWDl4Cci5SLkIuPjo8IrrYFsbuXnJqLkYuUiZKElIOWhJyLCJ6cnJyudpdsH16L///eGZr//+CAAP//uuZm//+qgAAIZVwF///tGZr//+iZmv//9uZm///5ZmZ9iwj/AExMzAf/ADGzNI/Lix6Pho6DHhPY///jgACA///YgACCRoKJhY17jYUI/wA2gAD///rmZv8ACoAA///6GZqLUggOS4DI+N/IAfigzBX///yzNJT///qZmP8ABJma///0szT/AAJmZnZxd4Z2i2uL///0szT/ACAzM///2EzM/wCDzM0IIPf3Bf//3IAA/wB1zMz//8iAAP8ACzM0bYtki2tscWX/AAIZmv//8zM0/wAHmZn///4zNP8AB0zN///9mZifmqWVpIuni/8AJkzN///qzMz/ACmzM///djM0CJhg+3H8R6R/BaKRpI+mjQj3I/f/0vuBBacuo1+9i6iLsrCdsggOIvttdvd4uPggdxLB2jza91PaE/T31scVjQaOb5phxYsIvLGzkJKEk4cf///6MzSLiHv//+fMzIsIZIq0uR/3cgerjsuLHnyFeId4i36Le4yFjJFri1qLbwj7cQd1allqVYsIVn+8zB/3VgericuLHnyFeId4i36Le4yFjJVrjFqLbwj7ZgeLeI90i4CLdod5i3CL+xCKVH5pCJZ52qoFj6CNpIuki8CDxouei4+MjYuMl4Sfhp2LCMiLtaWztwgO+w34EKaudwH38eYD8ffpFfcD+/EF/wAJszP///xMzf8ACZma////Zmb/AAmzM/8ABEzN9x33Ucj3GIvVCKd9pm1se3N6HotYno2LSYv//96AAHP//82AAEP7AP//+YAA///2TM2H/wAEzM3///1mZv8ACOZmCP//oBma998FiJb///2AAI3///mAAIv//+GAAH5h///3gAD//8SAAP//8oAA///+MzOD/wAAzM2Aj4MIsIkF/wAXMzP///6zNP8ACpma///5MzL/AAkzM///4xmaCA77Pft4s/dKzfeW0Uqu91+p9ncSstNt0vdsqxPdgPdh+MwVW2g/UotUi1amerl8CBPegDRjb0iLUAg3ti/3RMy4dVlTbFVoHneLd455lHeUepN4iwgT3YB2fIB5aq6EtfXM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iftodveOdvhSdwHJrvfz0AP4VBaWf8Wdi/g9dZY7gPsS++n7HPfpZJZXgIv9JpSFpZGL+OONjPcp+/sF/wACzM3///lMzf8ABDMz///8szOPi5GL/wAYTMz/AAMzM/8AArM0/wAGzM0I9y74HI2KBQ6Pgbj44a0B+GvlA934rxX3xAoOj4G393/3CPd+sgGy5Pc99wgD9/f3oRX3oAr3afsoFffDCg6Pgbj3efcI94itAfc49wj3U+UD93L3nBX3oAr7IPenFffECg5diaxssvewsfeIs2ys03YS5+D3SqyyrJuuEyfA94L5xhWvCjD8CRUw91wGEzfAvQoTr8BIChNnwEkKE6fAvgoTd8C/Cg5diaxssvewsfeIs2yswusS5+Bm6+jrSayyrJuuEySw9935ghXAChMlMPtRFsAK9xT8GRUTNnBHChOucEgKE2ZwSQoTpnC+ChN2cL8KDvcf+yzT2az39cL3O7ISkq1/qvdX4PdGqXatxsoT8sD36PcOFf8AxOZmB/8AOszM/wA3MzT/AEfmaP8ACeZm/wAhTMyLp4uehJ3//++AAP8AL4AA///UZmb/AAOAAP//npmai///soAAi2SM+0tai3+Lf5CCj4GQf45+iwh3end1cal2sB+hi6SXnZ29vK31i/cbi/8AXLM0///2Zmj/AGGAAP//05mY/wAuTMz//+uzNP8AFRma///izMz/AA1mZv//2YAAi///w8zMi///vEzO///sMzL//7bmZv//wLM0CP8AvBmaB62fp68evwbCi5J7nD7/AAtMzP8AAEzM/wALTMz///8ZnP8AC2Zo/wAFmZgIE/dAg76GwYu8gf///+Zogf///xmYgYgIhYp6dh78MwZ2i5yRH///+DMz/wACzMz///hmZ/8AAszM///wZmb///5maAgT+sCHWoVXf1b/AAnmZv//++Zo/wALmZr///7mZP8ADIAA/wAAMzSf25iYwosI0Aawn29sH/w9B4s4eoY7iIWFi3aRhbyMr4zCi8GLroq9ipGRi6CFkQg7jnqQi94IDvsGiaz40rNsrNN2Eu7g96CoE5z37fnIFbAKE9z7YPtDFRO896oKE9z3qwoTvPesChPc960KDqSBrveevXnD94awErDi9/3mZqkTvLD32RX7Te77Kvdr7PcUx9WfgqByHm6LfG5+Zn1jY2k/i/soi0P3CoH3MqyaqJKxiwgT2vfFChO6UItgsUyLfotJf05pCIqMBfdp9wfV2h73HovEOqU1CKmPBYG/g7yHwVKOY7X7E4sI+zr7DPsQ+2UfDvsCga/46q0Spv8AIIAA///3gAD/AEdmZv8A7Zma30v/ACCAABPY/wGKszT5CxX3YQoT6PckChPU92IKDvu+iaz426wB9eAD91P3DhVOCg77voms+NuszusBkeuP4I/rAxQc91f5jhW1CvtRFrUK9039FBVOCg77Z///+LMz/wAoTM342awB92bgA/e7+J8Vi96ckMeOkZGLoIWRWopzilyLVYtojFmMhYWLdpGF24ichos4CPvUB/s1WoJqHn2L///5TM2f///4szOV///2TM3/AA0zM///9LMz/wANzM1siwh9c311///OgAD/AFbmZv//9DMz/wAZszQf/wAbGZmL/wAg5meT/wAgZmb/ABdMzf8AMBma/wAiszP/AB/mZv8AQkzNi+8IDve6f8dZqffFs/eIpxL3bbf3ROD3iuQTfvie9+EV4gb3FakxT01oLvssVYadrB/4UASL3pyQ0Y6RkYughZFaijqKi4sI+4EGSmaMix+Kiot6BYuDjv///xmYnf///uZovoiRe4sni/tfePsMeE0IE75/Ynlydot/i4COg6KFnX6acYsIcHh3a1bCfbAfxYuvr6C/sOeW91aL9zgI1pGbth7WBraUeG4f/IUHi2////FMzP//9Bma///XszT///zmZghxiQWG////mZqI///9ZmaLhgiLeAUTfo2JBYv0jaceqIuqia+LCPcN9zGd9zvkbvD7ih9PBg733Imp986x94KnAfXc97Db94rlA/i7+A8V91UHi6f/AA9maJj/ACeZmI4IpY0FkP8AAGZojv8AApmYi5AIi56JjAWLLopnZDSMix6Jiot4BYuGj////WZokP///5mYCKWJBf8AKZma///8zMz/AA1mZv//9TM0i20I+1T7sPdUB4un/wALZmb/AAyZmP8AK5ma/wADZmgIpY0FkP8AAGZojv8AApmYi5AIi56JjAWLLopnZDSMix6Jiot4BYuGj////UzMj////7M0CKaJBf8AIbMz///9gAD/ABRMzf//9IAAi20I/IYHi2////GZmv//8eZm///YZmb///0ZmghwiQWH////szOI///9TM2LhgiLeI2JBYvoja6z4YmLHo2Ni54Fi5CH/wACszOH/wAATM0IcY0F///YZmaO///wmZqWi6oI96D3sPugB4tv///0mZr///JmZv//1GZm///8mZoIcYkFhv///5maiP///WZmi4YIi3iNiQWL742oHqiLqomviwj3Dfcxnfc75G32+4kfTmQV4wb3FKkqT01pLvssVIadrB8O9yqJqPgCuvc5sxKSqYOm91zg90mlhKiY1hPlgPeU+MoV/IAHi2////GZmv//8hma///XZmb///zmZghxiQWG////mZqI///9ZmaLhgiLeI2JBYvqja6y6ImLHoqNjJ4Fi5CH/wACmZqG/wAAZmYIcY0F///ZZmaO///vmZqWi6oI94oHxsO/nKiLCLnDZTof+1wHi27///dmaP//85ma///dmZj///xmZgh4iQWG////gACI///9gACLhgiLeI2JBYvPja+yz4mLHo2Ni54Fi5CH/wACZmaG/wAAmZoIeY0F///imZj/AANMzf//8mZo/wAMszOLqAj3ZAfyTsJDHmSLPXtISAj3Ygetl5OvHsoGwouZf587CKiQBRPugIDAhL+HvAhxhwWFinp2Hvw7BnaLnJEfcI8FE/WAh1qFV39WCKmGBZ/bmJfCiwjdBrCXg2wfDpaJqPe9tfd0yGqo03YS9eATzPg/+cgVsAr8Lf3IFY2JBbyNq4u9i72LqIu7iQiNjYueBZCHjocecY0FY/8AAxmafP8ACOZmi6kI95EH9waL/wAS5mZq/wAnGZontvsCrzrZigjaioyNi54FkIiOhh57jAVojv//zRmaz///y+Zm9xtw0WS2RosIkAfXp6DhlskIE+z/AAUZmqj/AAbmZqypi5iLk4aWgJWBmYaYiwigopaoonmoVh88i29TgU2CU31LUGtzfV6KZ4sI92QHi6ea/wAK5miz/wADGZgIE9z3xgoO9weJrPjbrNN2AfXg99bgA/e/+cYVxgr3Rvz4FffHCg58dcn40qy9qgH3T9H3A9AD98z5bBX3yAr//zCAAPthFffJCg70iahwsvjXpxL14Pcirvci4BQcE3z45/jQFYun/wAPZmiY/wAmmZiOCKWNBZD/AABmaI7/AAKZmIuQCIueiYwFiyqKZ2Q0jIseioqLeAWLho7///1maJD///+ZmAiliQX/ACaZmoj/ABBmZoCLbQj8fQdphYFtHvuKBm6Dn6Mf+H0Hi6f/AA1mZv8ADMzM/wApmZr/AAMzNAiljQWQ/wAAZmiO/wACmZiLkAiLnomMBYsuimdkMIyLHomKi3gFi4aP///9TMyP////szQIpokF/wApmZr///zmaP8ADGZm///1GZiLbQj8iQeLZf//+mZm///+GZr//+GZmv///eZmCBO8bokFhf///5maiP///GZmi4YIE3yLeQUTvI2JBRN8i+SNqR73Dwapi55jkyYIrgaT75u0rIsI9xMGE7yp4YmLHxN8jI2LnwUTvIuPiP8AAszNiP8AADMzCGyNBf//4JmYjf//+mZojouwCA7viaz3ZrX4C3cB95v3rxU+Cvuu+2AVPwoOf4ms98Kz93yzbKwS8eD3mOVCrhPM90/34RX3MQphOhX3MgoT6vczChPciY0FE+yLOol3Hvt9BhPc9zQKDoSJrPfBrfeLrRL14Pds3GnoE/j3U/jOFUAKaQTQBhP0QQpg+LcVQgoT+EMKDvsGiaz40rNsrBLu4PegqBPY9yH5GRUTuPeqChPY96sKE7j3rAoT2PetCg7Li7L4yrNwqBKtpvgn4L2mE7z3BLoV///xgAD///GAAHv///2AAP//7IAAiP//9hma///+gAD///WAAP//+oAA////ZmZ/CIT7KKaKBZa/peTeiwj3tgbbi682l1MIi4uMph6E9ygF////ZmiX///4TMz/AANMzf//6kzM/wADszP//+6AAI7//+mAAJaLsAj4eweLr/8ABMzM/wAMzMz/ACAzNP8AAjM0CKiNBY//AABMzI//AAGzNIuRCBPci54FE7yJjQUT3Is8iW0e+5kGE7xtRY2LHxPciYmLdgUTvIeOiZAeqYgFpf///WZolP//9ZmYi3aLTH8kdfsGCGv7MP//7hma//+4GZr//+XmZv//5eZmCBPc98/4whWqkYNsH/x7B2Z/iHMe+28GfX6Qlx+LoKTuofcJl8//AA/mZvP/AAgZmvCNpJWZposIDl2JrGyy97Cx94izbKwS7OD3SqyyrJuuEzeA96X3/RVHChOvgEgKE2eASQoTp4C+ChN3gEoKDvegiaj3vbX3dMhqqBL4GeAT6JEWi4nWjAXVjK3ctPcCr++drPSLCPuRB4tvf///9RmaYf///OZmCHCJBYeIiIYfi3iNiQW8jamLvYu9i6qLu4kIjY2LngWQh46H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zmZm///JmZprhwiCigWHiIiGHw77HoG0+AusEq/eS9X3ONkT6Pe5930VZQra+zgVZgoT2GcKE+hoCg77Bn+r+BmsEq3i943Za6ET8PcN938Vv6D3DvHZuyz7DPsSUVtVHjlU1PciHzShFftV9wE/7PcS3fcD9wv3AFf3CPshHiyLVlp1WwiFjQWPtJq4mqWrwrH/ABbMzOf/AAozNAgT6OWVy6iU9wQIdQaDW///yuZm///zgAD//6wZmv//8oAAOn5HW2E8Z0eBO4s8CA77Iomo91Ko9y6qEvHV9yrQUdMT+PdE94oV93kKTW4V0gYT9Pd6CvskQRX3ewoT+Pd8Cg77VYmo9/+ycKgS9dYT0PXVFYtu///0mZr///KzM///4GZm///9TM0IdIkFhv///5maiP///WZmi4YIi3iNiQWL042vstOJix6NjYueBYuQh/8AArMzh/8AAEzNCHSNBf//3mZm/wAC5mb///aZmv8ADRmai6gI958HtZGSrB6yBsWLoVKYUQimjwWFvoe5icAIE7CJjQUT0PfUChOwbTmNix8T0IiJi3UFE7D31QoOMouy9/SxcKgSo6Xzr/cf1rmkE76j+xQVpYoFk7Cl59+LCPc2Bt6LqDOTYwiki4X3GgWLmYT/AAPMzXn/AAMzM3qOdJSLsAj3qQeLrZX/AAjMzK//AAQzNAicjQWOj46PHxPei58FE76KjQUT3otCiWoe+1IGE756PY2LHxPeiImLdQUTvoeOio8epokFroiRd4t/i/sL///t5mYw///tGZo2hXBwfnGIfYl+iYp5CPcNuRWLnKTQmfd4CBPej5Choh7SBrCOfGkf+5IHaoh7Zh77CwaBgoyWHw77KIG892Wt9w6sAbDf91vhA/cQ964VcArc+1QVcQoOzYmo90ut9xPOZ6gS97nWE+ibFvfWChPY99cKE+j32AoO+yuBqvdNtPc1qhLDpPdz2VHcE/Sx3hX32QoT+PfaChP099sKDnmJqPgLqAH3ANb3YtYD9yT4QRX33AoOeYmo+Auo0aoS9wDWgdTr1HHWE+z4M/jgFffdCvuj+zMVYEmNix+IiYt1BYuHjf///0zMj////7M0CKmJBRPy/wAlszP///2AAP8AAkzN///3gACLYQj7ogeLaP///bMz///1Zmb//9pMzf///ZmaCGyJBYj////MzYn///4zM4uICIt1jIkFs4ynjLaLq4uUirOKCIyNi6AFi4+J/wABmZqH/wAAZmZpjoiWi6MIi433YveMi/uABYto///8zMz///NmZv//2jM0///9mZoIbIkFiP///8zNif///jMzi4gIi3WNiQWzjKaMtou4i6mKs4oIjI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//90zNP8AAkzN///6zMz/AAqzM4uwCPehB4u1/wADGZr/AAeAAP8AJOZm/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CKjQWLRYleb16Nix6JiYt1BYuHjf///0zMjv///7M0rYiMeotzCPti+4yL94IFi7SO/wAIgACx/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CJjQWLRYlfHg77Como90qu9xPOZ6gS8NYT6KsWjYkFi8+NrrLFiYsejY2LngWLkIeNh4x1jm2Ri6wI9yAH1oahZ55U/wAPMzT//9QZmv8AHszM//+65ma9igjTio6Ni50FkoSNhx6DjAVnkGLie7F3vGahVYsIjwewlv8AF8zM/wAiGZr/AA4zNP8AJ+ZmlqqeoZWLlIuSiJGHkoaUh5eLCKCcnZ+jgKBiH1uLa1V5XP//6uZmVP//4xmaZUiLCPcGBxPY994KDi1/tGyo9/+ycKgSj9Per/cS1hOuj7kVbKVwtx67i/8AG5ma/wAZ5mb/ABVmZv8ANhmanruQ8YvPCNmOpbEeuAavj31pH/ugB4tug39ohwgTTniJBYaKiImLhgiLeI2JBYvPja+yz4mLHo2Ni54FkIeOhx4TnniNBWuOgJiLqAj3qweLsY6RsY4Ip40FkY2NkB8TLoufBRMeiI0FEy6LR4lgHvtCBhMeY0yNix8TLoiJi3sFE56Lgo+KnIrD///8szSO///xTMyLIosi///4szP//8kZmv//8kzN///W5mZ/Z3t+e4t/i4eTiZj///0Zmv8AEuZm///65mb/ABMZmnCLCHN+d3UfDsyJqPgLqBL1r3Cu9+HQE9i2+EMViomLdQWLiIz///5MzI////+zNAioiQWl///+MzSY///5zMyLaAgT6IL7rgX///7mZmj///mAAP//92Zm///cmZr///2ZmghtiQWH////szOJ///+TM2LiAiLdYyJBYvLjampvImLHo2Ni6AFi4+J/wABgACH/wAAgAAIeo0Fbf8AA4AAg/8ACYAAi6wIE9iT97aNi/cq+/sFjoSPiI+LkYuQjo6SCPcw+AyMi4r7xgX////mZmf///zMzv//+kzN///dTMz///qzMwh+iQWI////gACJ///+gACLhwiLdoyJBYvCjamp4omLHoyNi6AFi46J/wACszOH/wAATM0IbY0F///Y5mj/AAKZmv///BmY/wALTMyL/wAhGZoI960Hi7D/AAOAAP8AA2Zm/wAkgAD/AAKZmginjQWP/wAATMyN/wABszSLjgiLoYmN+y6J+x375/sc9+cFDmSJqPdNrfcwqAHy1vdh1gP4E9gV930KDjCBrPgTrAG04feO4QO092EVfAr3XfddFX0KDmyJqPf/snCoEvXW91/VE9j19/MV+6cHi2j///qzM///9mZm///cTM3///2ZmghtiQWH////szOJ///+TM2LiAiLdY2JBYv/AERMzY3/ACuzM/8AKoAA/wBCgACJix6MjYugBYuPif8AAczNiP8AADMzCHCNBf//3kzN/wACgAD///mzM/8ABoAAi7EI96cHrp+PoB73DQafoIlmH/unB4to///6szT///aZmv//3EzM///9ZmYIcIkFiP///8zNif///jMzi4gIi3WMiQWL/wBDGZqN/wAq5mb/ACuzNP8AREzMiYsejI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//91MzP8AAkzN///5szT/AAazM4uxCPeoB4u0/wADGZr/AASAAP8AJeZm/wACgAAIE7ipjQWP/wAATMyN/wABszSLjwgT2IugBRO4io0FE9iLRYleHvupBhO4998KE9iJiYt1BRO49+AKDi37fqj3V634BblmqBLs1fdm3hPs9z/3yxWhwLyorYsIyLdL+w01eCkgH3uLao1otAj3/gQT3ImNBYt0iX1oR42LHomJi3gFi4aO///9gACQ////gAAInokF/wAhZmb///yAAP8ACZma///zgACLbwj8lweLb///8oAA///zGZr//+KAAP///OZmCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+NrrLQiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+CZmv8AA0zN///0Zmb/AAyzM4unCPc/B6V9p4Ovi7+LtZyysri5pMmL3AgT7PfhCg77QIG8+AOsAbDh903iA/gi5hVrCg77KYuo9/+wAfdM1gP3qvgcFdyLm2+cOgiljwWFuYexisUI/AUGilGHZYRdCKaHBZzcmqfdiwic+9AGi2T///vMzf//+bMz///cMzP///5MzQhiiQWH////zM2J///+MzOLhwh0B4v/AEkzM43/AC7Mzf8AMeZm/wBOGZqJix6iB4uOif8AAszNh/8AADMzCGONBf//4TM0/wABgAD///bMzP8ABYAAi7MI99AHDj/7fNv4uqwB92T7NBWMCg6s+21293iz+AWzAbLZ9zTW9zPZA/dnqRU9e/cA3+Kc5d0foIuegaBwCPu0B3ltdX1xiwj3YvgFFdqaIDc0ezA5H3eLd5F2qwj3tQegq6KVoIsISvxiFd0HoHWghKiLCO7O9wH3G/cDWeksH16LcXl2cAj3AgeLv53Hz7YIfKAFQmV0Yn5vgadzuEGtCHt2BdFgnE+LVwgoB3mgc5huiwg1OjX7NPsAvizqH7GLqJekpwguB4tXelBFXwibdwXVraO4laaYb6Jj1GUImp8FR7Z5x4u/CA4iiaz4A6wB90r3+hWLCg5giahwsvf/qBLw1vdc1hN4+Az39BX7nAdpiHxmHvsMBmiGl7Af950Hi7T/AAaAAP8AAszM/wAhgAD/AAMzNAigjQWP/wAAZmaN/wABmZqLjwiLoImNBYv//8CZmon//9dmZv//1kzN//++szONix6KiYt1BYuHjf///0zMj////7M0CKWJBf8AIpma///9TMz/AAVmZv//+bM0i2UI+6wHi2T///pMzYr//92zM4cIE7h6iQWI////mZqJ///+ZmaLhwgTeIt2BRO4jYkFE3iLyo2pHveHBtqLqTuWWgikjIX3GQUTuIqc///1zMyN///uMzSOeY55m4upCPeoB4u0/wAHZmb/AARMzP8AIZma/wACszQIpI0Fj/8AAEzMjf8AAbM0i44Ii6GJjQWL//++GZqJ///V5mb//9gzNP//wczMjYseiomLdQWLh43///9MzI7///+zNAigiQX/ACKAAP///LM0/wAFgAD///pMzItkCA42iaj3C673cagB0tb3UdYD9+P39RX34goO93OJqHCt+ASoEvLW91PW91PWFBwTfPla9/UVi7T/AAhmaI7/AB+ZmI4IoI0Fjv8AAEzMjf8AAbM0i48Ii6CKjSGJI42KiYt1BYuHjf///0zMj////7M0CKOJBf8AJJmYiP8ABGZohYtlCPugB2yId2Ye+wMGb3+UtR/3nweLtP8ACWZm/wAEZmb/AB6Zmv8AApmaCKONBY//AABMzI3/AAGzNIuOCIuhio37AIknjYqJi3UFi4eN////TMyO////szQIn4kF/wAgzMz///yzNP8ABzM0///6TMyLZAj7oAdmhn5oHvsCBmiFlrMf96AHi7T/AAeZmv8AAoAA/wAhZmb/AAOAAAiejQWP/wAAZmaN/wABmZqLjwiLoImNJon7AI2KiYt1BYuHjf///zM0jv///8zMCKWJBf8AI+Zm///9MzT/AAQZmv//+czMi2UI+60Hi2r///rMzf//+LMz///dMzP///1MzQgTvHGJBYf///+AAIr///6AAIuICBN8i3UFE7yMiQUTfIvVjake+KkGE7yp34mLHxN8jo2LoAUTvIuOif8AArMzh/8AAEzNCGyNBf//3xmY/wACGZr///jmaP8AA+Zmi68IDvdqiahwrfgEqBLz1fdT1vdT1RQcE3z5Wff1FYu0/wAGGZj/AAKzNP8AIuZo/wADTMwIoI0Fjv8AAEzMjf8AAbM0i48Ii6CKjfsAiSWNiomLdQWLh43///9MzI////+zNAijiQX/ACCZmP///UzM/wAIZmj///mzNItlCPuhB2qHemYe+wEGbn+TtB/3oQeLtJD/AAQZmq7/AALmZgijjQWP/wAATMyN/wABszSLjgiLoYqNIIkmjYqJi3UFi4eN////TMyO////szQIn4kF/wAhgAD///yzNP8ABoAA///6TMyLZAj7oQdmhn9oHvsCBmiFlbIf96IHi7T/AAeZmv8AAoAA/wAhZmb/AAOAAAiejQWP/wAAZmaN/wABmZqLjwiLoImNJYkgjYqJi3UFi4eN////MzSO////zMwIpYkF/wAi5mb///1MzP8ABhma///5szSLZQj7rQeLaP//+GZm///6mZr//96Zmv///WZmCBO8cYkFh////4AAiv///oAAi4cIE3yLdgUTvIyJBRN8i9WNqR74hwbbi6Y7l1oIpIyF9xkFE7yKnf//8eZo/wACTM3///MZmP8AAbMzdI59noukCA5Riar3V6v3HLBwqBL3WNb3NNYT3PdY1RWLbv//+MzN///zzM3//9wzM////DMzCHiJBYb///+AAIj///2AAIuGCIt4jYkFi/8APszNjf8AKDMz/wAnzMz/AD4zNImLHvcEyMHf6TmlKx9S8AaLrv8ABBma/wAFszT/ACPmZv8AAkzMCKqNBY7/AAAzNI3/AADMzIuPCBPsi6EFE9yJjQUT7PsDiftYiwWKUYdehF0IpoYFnN2art2LCKGSg2Yf93/7cRU5XHxZXXqYrx73Js4H0qFeVh8O4Ymq91er9yKsAfXW9zTW59oD+N/3xxX3dAr7io8V9+MK+39XFffkCg77KImq91er9yWoAfXW9zTWA/fp9xIV9+MK+39XFffkCg77N4Gs9zmzebn3LKoSrtNTpPeD3BPart0VVtJk5u7v0fc19w1S7PsZHlyLYntaiAgT1ohlhmmBWwikhwWcy6q71YsI5Kk1Lx+IiQUTunGbcJduiwgT2vflChO69+YKDuaBrnCo9z+y9zmocqwS7NXs2/dx2xOv+FX4KhXZtUD7JvsYVm9iLWr3ENgf4qbo1R77SPs9FSn3CwaLp/8ADDMz/wAMzMz/AB7Mzf8AAzM0CBN3no0FkP8AAIAAj/8AAoAAi5AIi56JjQWLRolkaEeNix6JiYt4BYuGjv///YAAkP///4AACJ6JBf8AIMzN///8gAD/AAozM///84AAi28I+64Hi27///VmZv//82Zm///fmZr///yZmgh4iQWG////gACI///9gACLhgiLeI2JBYvPja6y0ImLHo2Ni54Fi5CH/wACgACG/wAAgAAIeI0F///fmZr/AANmZv//9WZm/wAMmZqLqAj3EOwHE6+NJscg9xSLCPcfv/cT7/Nd9wr7JB/7B4tKOIH7CwgO+zCJqPc9rXGl90CoEsTW9yjWE9yZFo6JyowFq4yss528/wAYMzP/AEHmZv8AG8zN/wApGZqziwik+wsGi2SJ///4MzNq///9zM0IfIoFh4mIhx91B4vEja+uw4mLHp8HjYmSgx51jAV7jIahi6UI97kHi6CSk52MCKSNBY2MjI0fi6OJjQWLVolpHmuLpY0/iwj7P4Ivbh8TvETUaMIeiAdvhmpzemL///CzM///2xma///fTM3//8DmZnCICIOKBYeFioQf9wr3whW6m63hspKHax4T3PscBxO8SAZSc7S9Hw77KIG892Wt9w6sAbDf91vhA/dm+TMVZAr7MPubFXAK3PtUFXEKDvsogbz3Za33Dqzm6hKw33Xp1ulh4RP07vjTFdEKE/L3PRbRCvsk+7kV3AoT8d0K3PtUFd4KE/nfCg5Ciaj3sre4rgH3Adb3cNYD99n4SRX7Ic4Gi7+dx8+2CHygBUJldGJ+b4Gnc7hBrQh7dgXRYJxPi1cISEJo1PvcB4tu///0zM3///NMzf//4DMz///8szMIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42vss+Jix6NjYueBYuQh/8AApmah/8AAGZmCHiNBf//35ma/wADZmb///VmZv8ADJmai6gI90gHwMS0jaWLuovAZov7J4v7jTN3T10IlnwF9wa87dyL91+L90Q6vDyLW4tnhFhXCPP3IQcO+1WJqPf/snCoEvXW9z+mE5j3mPkzFc8K+y786RWLbv//9Jma///yszP//+BmZv///UzNCHSJBYb///+Zmoj///1mZouGCIt4jYkFi9ONr7LTiYsejY2LngWLkIf/AAKzM4f/AABMzQh0jQX//95mZv8AAuZm///2mZr/AA0ZmouoCPefBxPYtZGSrB6yBsWLoVKYUQimjwWFvoe5icAIE7iJjQUT2PfUChO4bTmNix8T2IiJi3UFE7j31QoO+zeBrPc5s3m59yyqEq/c94OkE7yv93EV+zXvRe7m0rLAm4CYeR56i///9DM0///65mb///HMzP//4Bmaf3Bwc2OLN4texov3C5eQmI+YiwgT3PfnChO8aItwp2CLCBPcbotwf3F7CIiNBeep4eQe1YuqW5xLCKSPBYG7hq2IsVqOYptciwj7GVIq+w0fDvtogayJdvgqrBK7qnrS9yHXVasTdLv3HhWEChOshQoTqoYKE7SHCg77zomo+Auo9wjvEuzvOtUT6PdS+EEViY0Fi3WJfGhHjYseiYmLeAWLho7///2AAJD///+AAAieiQX/ACFmZv///IAA/wAJmZr///OAAItvCPuuB4tu///1Zmb///NmZv//35ma///8mZoIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//35ma/wADZmb///VmZv8ADJmai6gIE/Au+KEVdQoO+9KJqPgLqOvqEpDpnNV76RP491L4QRWJjQWLdYl8aEeNix6JiYt4BYuGjv///YAAkP///4AACJ6JBa7///xMzJP///OzNItvCPuuB4tu///5Zmb///PMzf//25ma///8MzMIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//4YAA/wADMzP///OAAP8ADMzNi6gI+034iBWUChP09z0W0QoO+9v7ca/436j3CO8S5e891hPo90/3ARWL99SJjQWLdIl9Z0eNix6JiYt4BYuGjv///YAAkP///4AACJ6JBf8AJGZm///8MzT/AAaZmv//88zMi28I+6wH+wGV+yxfHoCLhZKFlIOVgZdxiwiAeH95ba19nh+fi6yLsaoIubGb74v3NQgT8Cr4fhV1Cg7Pf7RsqvdXq/casnCoEo/T3q/3Etb3NdUTZ4D4wfcSFTlbfFldepWuHvcqzgfToV5WHxN3gPvV95wVuAavj31pH/ugB4tu///2szT///OZmv//3kzM///8ZmYIeIkFhv///4AAiP///YAAi4YIi3iNiQWLyo20HrKLoomyiwj3BMjB3+k5pSwfUewGi7H/AANMzP8ABkzM/wAlszT/AAKzNAgTL4CnjQWR/wAAZmaN/wABmZqLkAgTN4CLnwUTL4CIjQUTN4CLR4lgHvtXBhMvgGNhjYsfEzeAiImLewUTr4CLgo+KnIrD///8szSO///xTMyLIosi///4szP//8kZmv//8kzN///W5mZ/Z3t+e4t/i4eTiZj///0Zmv8AEuZm///65mb/ABMZmnCLCHN+d3VspXC3H7uL/wAbmZr/ABnmZv8AFWZm/wA2GZqeu5Dxi88I2Y6lsR4O9xaJqPdSrfcrqAHx1vdj1vc01gP4X/f4FYun/wAIzMz/AAyzNP8AITM0/wADTMwIn40Fj/8AAGZmjv8AApmai5AIi56JjQWLR4loZEqNix6JiYt4BYuGj////YAAj////4AACJuJBaz///vmZpX///QZmotvCCL7Y/QHi6f/AAnmZv8AC5ma/wAhGZr/AARmZgiajQWQ/wAAszSO/wACTMyLkAiLnomNBYtLiWdkR42LHomJi3gFi4aP///9ZmaP////mZoInokF/wAgmZr///yZmv8ACmZm///zZmaLbwj7rgeLbv//9pma///zgAD//95mZv///IAACHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Nr7LMiYsejY2LngWLkIf/AAJMzYb/AACzMwh8jQX//98zM/8ABGZm///1zM3/AAuZmouoCPcj92P7IweLbv//9zM0///zmZr//93MzP///GZmCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Nrh7xiQX3A8m/3+o5oSsfUgb3NPsTFTlcflldepWuHvcjzgfSoWNWHw5Xiaj3qrq9rgH3BtX3WtYD9+34SRX7Mc4Gi7+ex8+2CHygBUJldGJ+b4Gnc7hArQh8dgXRYJxPi1cISD9o1/vcB4tu///2szP///OZmv//3kzN///8ZmYIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//35ma/wADZmb///VmZv8ADJmai6gI90QHu7u3kqiLCMKheDof+xcHi27///ZmZv//84AA///emZr///yAAAh4iQWG////gACI///9gACLhgiLeI2JBYvPja+yz4mLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeI0F///hgAD/AAMzM///84AA/wAMzM2LqAj3DAfyZ8JDHmSLRYNTUwj3BvcxBw77Como90qu9xPOZ6gS8NYTyPe2+TMVzwr7lv0zFY2JBYvPja6yxYmLHo2Ni54Fi5CHjYeMdY5tkYusCPcgB9aGoWeeVP8ADzM0///UGZr/AB7MzP//uuZmvYoI04qOjYudBZKEjYceg4wFZ5Bi4nuxd7xmoVWLCI8HsJb/ABfMzP8AIhma/wAOMzT/ACfmZggT6JaqnqGVi5SLkoiRh5KGlIeXiwignJ2fo4CgYh9bi2tVeVz//+rmZlT//+MZmmVIiwj3BgcT2PfeCg55iaj4C6gB9wDW92LWA/eg+TMVZAr7VvsIFffcCg4/+3zb+LqsyKoB9yvU69QD+B341xX36Ar7Tf13FYwKDmyJqHCz9/6oEvXW4K3h1hN8+Bb38xX7nwdphoFsHvsZBmqImakf96EHi7T/AAWAAP8AArM0/wAigAD/AANMzAigjQWP/wAAZmaN/wABmZqLjwiLoImNIokhjYqJi3UFi4eN////TMyP////szQIpIkF/wAjmZr///0zNP8ABWZm///5zMyLZQj7rgeLZP//+bMz////GZr//+FMzf///eZmCBO8bokFhv///7MziP///UzNi4YIE3yLeAUTvI2JBRN8jYvzjZGLCNcGpYuYVJBCCK0GkNOXw6aLCNoGE7yZi+SJk4sIE3yNjYufBRO8i42K/wAEgACE/wAAgAAIbY0F///iTMyN///4szSOi7AI96wHi7T/AAdMzP8ABYAA/wAgszT/AAKAAAiljQWP/wAATMyN/wABszSLjgiLoYmN+wCJJY2JiYt1BYuHjf///2Zmj////5maCKCJBf8AIMzM///85mb/AAczNP//+Rmai2QIDvf7f673Zaj3/q4BwOf3udz3u+cD+Er3UBX36QoO2X+n90So91WnAa3a9w/IjdaNyPcP2gP3v/coFffqCg73B4mt98au9x6yp3fHpxKVqYOl9zXc94mlg6l55RP7APif+LoV+3OkBqeYmrQepgaQjo6QH4ueiYwFiy2KaGQ0jIseiYqLeAWGj4iPHqYGspp9bR9z+x8Hdoqckh9xjwUT/SCHWYRYgFUIqYYFn9uYmMKLCOb8SQZof39jHm4GhYmIhh+LeI2JBYvYjb0exYuMieSL91uLxuWL4YvoWMElsWqXS41niwg89x73QwYT+UDCi5h+nzsIqZAFE/uAgMGEvoe9CHGHBYSKenYe+3P7aBXpBhP5IPcKykwxTmkv+yw5hJKsHw5Oiar3Uqv3IbASmqb3JNX3NKh21hP895j3jxX3IboH3Iuad5w5CKiPBYS5h6qKxQj7RdYGi7+dx9C2CHygBUFldGJ/b4GncrhBrQh8dgXRYJxPi1cIQPs0B4pRh2WFXQimhwWc3Jqn3IsIqvvUBm6Be2oeeAaGiIiGH4t4jYkFi8qNsx61i6KJtIsIE/r3BMu+3+o2oiwf9PsTFTlZflpcdZWuHvcl1AfSo2BXHw73kIGucKz3l7JlvXnD93+scbAS9eD/AFkzNP8AVszM9/zmZqkTocD3U/cOFfc8/wBZMzQH/wAL5mb//1dmZv8AY5ma//98mZr/AMlMzIsI7PcUx9WfgqByH26LfG5+Zn1jY2k/i/soi0P3CoH3MggTCaCsmqiSsYsIExGg98UKEwugUItgsUyLfotJf05pCIqMBfdp9wfV2h73HovEOqU1CKmPBYG/g7yHwVKOY7X7E4sIE2XA//9bGZqL//+IZmb//4WZmP///oAA//8xZmgIM/dWBovenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZEIRY56kIveCA7MgaxyqPc1s3KtcLn3Jqh0qhLs1f8AXmZm/wBQmZr3g6QTkcD/AQlmZvdfFf8ABzM0//9rzM3/AGAzMv//vzMz/wBfMzSLCObSssCbgJh5H3qL///0MzT///rmZv//8czM///gGZp/cHBzY4s3i17Gi/cLCBMJwJeQmI+YiwgTIcD35woTCcBoi3CnYIsIEyPAbotwf3F7CIiNBeep4eQe1YuqW5xLCKSPBYG7hq2IsVqOYptciwgTVcD//4DmZov//8ZMzP//p2Zm///7GZr//46Zmgj//6GzNPcNBqeWm6sengaQj46QH4ueiY0Fi0aJZGhHjYseiYmLeAWGjoiQHp4GrJV7bx/7sgdugXtqHngGhoiIhh+LeI2JBYvPja6y0ImLHo2Ni54FkIeOhh54BmuAm6gf9xcHDveKiaj5C3cB9//WA/ie994V9+sKr/xyFdMHi7+ry822CPcS+3sF/wAE5miC/wACGZiFi4UIeXaFbh55BoaIiIYfi3iNiQWL4o2vsteJix6OjYueBZCGjocefwZ2i3mcdLUI+7v4sgWAoIOUf4uBi4KEfnQI+8D8twV6a3x1YosIfwaGiIiGH4t4jYkFi8uNpaPliYsejI2LngWQiI6GHngGbHuXmx+LkY2QjpEI9xL3eQXMYKtMi1gIQwdugntpHngGhoiIhh+LeI2JBYvPja+yz4mLHo2Ni54FkIeOhx54BmqBm6gfDsqJqPgzdwH3qNYD93X3hRXS9wwFkZX/AAXmZv8AAOZm/wAHGZr///UZmgjc+xEFVmp4aYBygqR2slGsCL77hRXW1gaLuJi+urQI7vstBZV7hntqiwh+BoeIiIgfi3aNiQWL042nqcGJix6OjYugBY6KjoUec4t4mXWuCPtx9+kFfqB+j3+LhIt9iH91CPtj++8F///s5mZr///qGZqAcYsIiIiIiB+Ldo2JBYu8jZ6ezomLHoyNi6AFjoiOiB6DBnGL///qGZr/AATmZv8AD+Zm/wAbGZoI5/cxBcBhmFeLXAgO+O+JqPebsvexrJZ3EvXg+KDWE8z5/vfeFffrCq/8chXTB4u/q8vNtgj3Evt7Bf8ABOZogv8AAhmYhYuFCHl2hW4eeQaGiIiGH4t4jYkFi+KNr7LXiYsejo2LngWQho6HHn8Gdot5nHS1CPu7+LIFE9yAoIOUf4uBi4KEfnQI+zj7v/wci4v3VgUT7IvenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I9zz/AXKZmAf//41maPtlBXprfHViiwh/BoaIiIYfi3iNiQWLy42lo+WJix6MjYueBZCIjoYeeAZse5ebH4uRjZCOkQj3Evd5Bcxgq0yLWAhDB26Ce2keeAaGiIiGH4t4jYkFi8+Nr7LPiYsejY2LngWQh46HHngGaoGbqB8O9/OJqPdErfc5qJZ3EuzV+B3WE8z4lfeFFdL3DAWRlf8ABeZo/wAA5mb/AAcZmP//9RmaCNz7EQVWanhpgHIIgqR2slGsCL77hRXW1gaLuJi+urQI7vstBZV7hntqiwh+BoeIiIgfi3aNiQWL042nqcGJix6OjYugBY6KjoUec4t4mXWuCPtx9+kFE9x+oH6Pf4uEi32If3UI//+UmZr7SP/+12Zmi4v3DQUT7KeWm6sengaQj46QH4ueiY0Fi0aJZGhHjYseiYmLeAWGjoiQHp4GrJV7bx/7sgdugXtqHngGhoiIhh+LeI2JBYvPja6y0ImLHo2Ni54FkIeOhh54BmuAm6gf9xf/ARRMzAf//7CzNPsZBf//7OZma///6hmagHGLCIiIiIgfi3aNiQWLvI2ens6Jix6MjYugBY6IjogegwZxi///6hma/wAE5mb/AA/mZv8AGxmaCOf3MQXAYZhXi1wIDvfaiaj3vLL3jK4B+DXcA/gG99cVuvuQBm99e2IeewaGiIiGH4t4jYkFi96Nr7LYiYsejY2LngWQh46HHnoGZHyZqR/3kMEHu4uufatKCN37QQWbaXqBYosIdQaGiIiGH4t4jYkFi+SNrrLUiYsejY2LngWQh46GHn8GbYt0m36nCDj3QQX//9fMzP8AU+Zm///SMzT/ACIZmjOLCF6L91r3mwWXm3uPfosI/KYGeot9h5l7CPdy+5toiwUyi11pYzcIOftBBX1vdXtsiwh/BoeHiIYfi3iNiQWL042yr+OJix6NjYueBZCIjoYedgZii3mVm60I3vdBBf8AHzM0/wBA5mb/ACPMzP8ADhmau4sI9wa1Fftk94n4HYsFDvdjiaj3RK33Mq0B+ADVA/fS918VufsYBm99e2IehAaGiIiGH4t4jYkFi9KNr7LLiYsejY2LngWQh46HHoQGZHuZqR/3GLUHu4uidLdRCLFYBaFvfntiiwh6BoaIiIYfi3iNiQWL042vstKJix6NjYueBZCHjocefwZsi///7jM0/wAUMzP//+3MzP8AF8zNCGS+Bf//z2Zo/wA/gAD//9WZmP8AM4AAO4sIbov3EPdABZeagJB6iwj8GQZ6i3+Fl30I9y77QGyLBTKLbGZXPQhqWAV7dHd2bIsIfwaHh4iGH4t4jYkFi9KNsq7UiYsejY2LngWQiI6GHnoGYouAmp6oCK2+BbPHpqC7iwj3AbEV+x73LvePiwUO+RyJqPe8sveMrgH14Pi43AP5uvgBFftk94n4HYsF/bT8fBX3Xf8BZ4AAB///6xmY///tTMz//+6zNHH//++zNP//3bM0CDn7QQV9b3V7bIsIfwaHh4iGH4t4jYkFi9ONsq/jiYsejY2LngWQiI6GHnYGYot5lZutCN73QQX/AB8zNP8AQOZm/wAjzMz/AA4ZmruLCLiLjYuL+5AFb317Yh57BoaIiIYfi3iNiQWL3o2vstiJix6NjYueBZCHjoceegZkfJmpH/eQwQe7i659q0oI3ftBBZtpeoFiiwh1BoaIiIYfi3iNiQWL5I2ustSJix6NjYueBZCHjoYefwZti3SbfqcIOPdBBf//18zQ/wBT5mb//9IzMP8AIhmaM4sIXov3WvebBZebe49+iwj8pgZ6i32HmXsI93L7m2iL/HSLi/c1BYvenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IDvhmiaj3RK33Mq1wqBLs1fhY1RPs+UL3hRX7Hvcu94+LBftm+1QVrfsYBm99e2IehAaGiIiGH4t4jYkFi9KNr7LLiYsejY2LngWQh46HHoQGZHuZqR/3GLUHu4uidLdRCLFYBaFvfntiiwh6BoaIiIYfi3iNiQWL042vstKJix6NjYueBZCHjocefwZsi///7jM0/wAUMzP//+3MzP8AF8zNCGS+Bf//z2Zo/wA/gAD//9WZmP8AM4AAO4sIbov3EPdABZeagJB6iwj8GQZ6i3+Fl30I9y77QGyL/BWLi/cNBRPcp5abqx6eBpCPjpAfE+yLngUT3ImNBRPsi0aJZB4T3GhHjYsfE+yJiYt4BRPcho6IkB6eBqyVe28f+7IHboF7ah54BoaIiIYfi3iNiQWLz42ustCJix6NjYueBZCHjoYeeAZrgJuoH/cX/wEV5mYH///pzMz//+0Zmv//7MzO///lMzP//+iAAP//3LMzCGpYBXt0d3Zsiwh/BoeHiIYfi3iNiQWL0o2yrtSJix6NjYueBZCIjoYeegZii4CanqgIrb4Fs8emoLuLCA5W+3yt+KKp+CatEsGpcr33k7Zw41HnE/LB+FoVqYkFo9ym5vcLiwjJy2M9QWpB+wtoXX9md5l/nh+yi5G+x4sIE+nauV88H4shN2Q9dyX//+XmZjT//9wZmoszCCXzd9fz1a2zmYWbcx51i///7zM0///xzM3//+7MzP//8DMzcXNpe1iLT4tYl4vBi9P1p72V/wB8zMyk/wBwMzTRi/cOi/Y4rUCcCJAHE+LQpsKyi9uL8yO2M5EIvd8F/wAHGZr/AAvmaP8AB+Zm/wAHGZiUiwgT9JSLjoWNhP8AAxmagP8ABOZmhpaLCJuTlpmfe51xH3GL///tZmb///KzNP//7pma///kTMwIZlA66IWNQ4uIhPcD+xIFZIhiek6ECA77Uftas/gLrPe8qxKzpnSr92LVSNwT9LP3thWmhgWZz6rH2osIsr93UD9Og2BwYn1udJmBnR+ki4q2t4sIE+rHnmxXH4tHQ3dkgf//rRma///qszP//8zmZv//3UzNi0cIP8tp9baukqude5d3HmSLcW5ki2yLXpGLuIu3taLKm/8AjbM0r/8AL0zMvIvOi9pFoW+QCI8HE/S2lrSxi7iL2D6mT5AIt98FkZeSlJWLkouPiI6D/wAEGZqA/wAG5maFlYsIm5CWmZt/nm0fdIt6gHxwCGpNQ+eFjU+LiYHr+w0FYoiAg0qDCIpYh2SFYQgO54mo/wBgZmb/AB+Zmvf7oN6nAevQ9xzb9yLPA/j6+KsVQnlOPR+L///aMzT///eAAP//TmZm//96gAD//+TmZgj/AaSAAAenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+IkB6lBrOafW0f/DcH//++zM3/AA9Mzf//uTMz/wA3MzOL/wCfgAAI7Wy/Th5sBoCCioAfi4aQiZOJoYWygIv7FIv//1GzM/8AZuZm///EszP/AGYZmn8I///LmZoHb317Yh5xBoaIiIYfi3iNiQWL6I2vsuKJix6NjYueBZCHjoYecQZjfJmpH78H/wBmszT/AAuZmv8Aa0zM/wA/5maL/wDBgACL8bGWoZKTjZKNi5IIlYCNfx4OtvtcqP8AoIAA/wAegAD4GaD3fKcS0tFVzvcU/wBKzMz/AH8zNM9V0BP6APeunxX//62AAP8ACjMz///FgAD/ADNMzYv/AKCAAAgT9gCLspi3i7EIr3+qYB5eBoCCioAfi4aRiZKJqIWWeItwCBP6gItpe1yLWYv//1ozM/8AXmZm///DTM3/AHSZmoEI//+LgAAHb4J7aR54BoaIiIYfi3iNiQWLz42vss+Jix6NjYueBZCHjoYeeQZqgZunH////+Zm/wB0mZoF/wB05mb/AAoZmf8AXTM0/wA8zM2L/wClgAAIE/MAi718uouti6aVnqiRk42QjYuQCJaDjIAeXgZgfmxnHxP6gItlmV+LZIv//1+zM///yYAA///MszP//6lMzP//9bM0CP///zM0/wKb5miKjQWLdIl9Z0eNix6JiYt5BYaOiJAengatlHtvHw72ga33hsSAxfeSrRKw6/hJ6xPc99/5BBX37AoTvPftCvfj+7sVWQor///yTMwV9+4KE9z37woO+yB/rvcxvHW09zWsErDb93TZE5yw918VJMj7BPcV9x/A9xXv81z3DfsjHvsTSiT7HB//AS3mZv8AIjMzFRPc///y5mb///sZmf//8OZo///8szP//+5MzIsIE7xki3qeX4v//+HmZov//+FmZ///94AA///vszP///XmZv8AAMzN/wBWGZr/AB0zM/8AXYAA04vQi/8AKkzM///EgAD/AAmZmv//j7MzCP//Ihma///dZmcV/wAGgAD/AAFMzf8ACEzN/wADGZn/AAozM4sIE9yui6hwtov/ACJmZov/ACPMzv8AEkzN/wAVTMz/AAvMzf8AAEzM///35mb/AAAzNP//95mai///92Zmi/sYU21iizaL///cGZr/AGbmZ///+eZm/wBMszMIDtmUdvkKp3OvEvjuzhOw+N/5JhX38AoT0PfxChOw9/IKDlGUdvgys2OoEvhV0xPQ+EP4JhX38woTsPf0Cg7ZlHb5Cqdzr712EvjuzhOY91L5qRX3XAr3F5AV91cKE7j3nvscFffwChPY9/EKE7j38goOUZR2+DKzY6j3cncS+FXTE5j3EPkhFfdYCvcckRX3WQoT2Pc/+5UV9/MKE7j39AoO9/t/rvdlqPf+rrugsqASwOf3SvFxvXzcleu6svLnE/7w+Er3UBX36QrF+OsVE/1wVmNbZx8T/PBynn6bmpuVnB4T/XCLnHuUi5yLl5Serou+i7VPv4sItaaxr6h7oXN3fnyBH4tprZCLcIt+f4F8i2eLU8dSiwgO2X+n90So91Wn2qCyoLd3Eq3a3b2CyI3WjcimssTaE/9497T47hVWY1tncp5+m5qblZwfi5x7lIuci5eUnq6Lvou1T7+LCLWmsa+oe6Fzd358gR+Laa2Qi3CLfn+BfIsIZ4tTx1KLCJb8WhVsB2aES0Uue/cX1PcAp+HYHhP++JmPhoMfi4aKhomIiIiKhYuECHiZfZ6fmpugqXSvT/sBRC77FibJ+xb3Bx7Zi6mym7IIjgabZKlk2YsI9wjI9xbw9xZE6PsBT3RnbXaae5+fmZmeH4uSiZGJjomOiZCLkAiTj5CZ2aY1+wBCe/sXLkWEy7AeqgeolZqsHp4Gj4+OkB+LnomNBYtHiWRnR42LHomJi3gFho6IkB6eBq2Ue28fDvf7f673Zaj3/q4BwOf3SvGU3JXr91HnA/hK91AV9+kKDtl/p/dEqPdVpwGt2vcPyI3Wjcj3D9oD97/3KBX36goO+IagsqAB/CW992+yA/vI+NcVVmNbZ3Kefpuam5WcH4uce5SLnIuXlJ6ui76LtU+/iwi1prGvqHuhc3d+fIEfi2mtkItwi35/gXyLZ4tTx1KLCA7lia33xq73H63TpwH3Vdz3p+UD96b35hXpBvcKykwxTmkv+yw5hJKsHzr4TBX8Sgdof39kHm0GhYmIhh+LeI2JBYvYjb0exYuMieSL91yLxeWL4YvoWP8ANeZmJf8AJhmaa5dKjWeLCDz3H/ebrfubqAanmZq0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+Ijx6mBrKafW0fb/tGaQcONomq91Kr9ySt96F3AfcO1vdj1gP4KPcQFTlKflpcXZWuHvcl6wfTsmBXH/tj+NIVdAZ3gn2HeYd6iP//24AA///6zMz//++AAP///zM0CI1zBYuI/wACzM3///4zNP8AAzMz////zMwIq4kFn4v/AAmZmoD/AABmZlII+yQmafD71wdugntpHnMGhoiIhh+LeI2JBYvPjbQevounib6LCPcE2r7f6ieiLB809yT3W637WwYOS4ms94+tc6j3Cnf3W60S8+D3degT3vdR+L4VqJqu09DQdPsTHov//8KzNP//70zO///XTMz//9/MzP//6EzMCP//q+Zm/wBgszRsdNr//6SAAAX//+2AAP//+jM0///qszT///1MzP//58zMiwgTvveyCjb3XhX3swoT3qGEo4iui/8AIMzMi/8AHLM0/wAD5mik/wAGzMwI/wBZgAD//5hMzKim//+wszT/AFszNAXe/wAngAD/ABxMzP8ATmZmi/8APOZmi8Zk9vtNi3GLRIRji1mLboxZjIWFi3aRhdGInIaLOAgOLft+qPdXrfgFuWaoEuzV92beE+z3P/fLFaHAvKiti8iLt0uL+w2L///VZmb///tmaP//0oAA///uTMz//9zmZwj//6hMzP8AZTMzbHPq//+SZmYF///tTMz//+5mZ///5jM0///1MzP//9yAAIt7i2qNaLQI9/4EE9yJjQWLdIl9aEeNix6JiYt4BYuGjv///YAAkP///4AACJ6JBf8AIWZm///8gAD/AAmZmv//84AAi28I/JcHi2////KAAP//8xma///igAD///zmZgh4iQWG////gACI///9gACLhgiLeI2JBYvPja6y0ImLHo2Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gmZr/AANMzf//9GZm/wAMszOLpwj3PwelfaeDr4v/ACaZmov/ACEZmv8ACWZm/wAeZmb/ABSzNAj/AEjmZv//q+ZmqKX//7gZmv8AUxma/wAA5mb/AADmZgW4uaTJi9wIE+z34QoOIImn+NiycKcS9Nz3mqUTuPcl+RgVfot/jCWMCImJi3kFho6Ijx6pBraUgWgf/IoHbXx8Yx5xBoeHiIYfi3mNiQWL4Y2zruiJix6NjYudBZCIjocecAZifpynH/iKBxPYppmRoR73GwbMi5l7l1sIpY+L93BwiwWFVG5JWIsI+x4GDvtaiaj3+7dwphLz1fc8oBPY89MVboF7ah5zBoaIiIYfi3iNiQWL1I2ustSJix6NjYueBZCHjocecwZqgZuoH/fO9woHqYuYgJJ2CKD3UHAGiFVxUVaLCBO4+3t1BoiNiY4eqgaviZCCi2UIDiqJrPeUsvers2ysEu7g96CoE+z3IfkZFRPci4s8jFmMhYWLdpGF0Yichos4CPtZO2Tb+zkHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPc59LIi94kHE+z3qwoT3PesChPs960KDvtViaj3SrL3IrJwqBL11vc/phPs90n3ZRXosi7oBrWRkqwesgbFi6FSmFEIpo8Fhb6HuYnACBPciY0FE+z31AoT3G05jYsfE+yIiYt1BRPci4iN///+TMyP////szQIqYkFrv///bM0kf//+EzMi2UIIzZk4PsbB4tu///0mZr///KzM///4GZm///9TM0IdIkFhv///5maiP///WZmi4YIi3iNiQWL042vstOJix6NjYueBYuQh/8AArMzh/8AAEzNCHSNBf//3mZm/wAC5mb///aZmv8ADRmai6gIDon7QKj3Iaz3zKr3e7NsrBLu4H+i95WogNoT9ID4uegV94X7a7P7Kh73WQejl5WjHvcPBhPtANaLmFmgRv8ACbM0///+zMz/AAmZmP8AAOZo/wAJszT/AARMzP//++Zm/wBUTMz///qZmv8AJuZo///6gAD/ACHMzAgT9IBkijqKi4sI+2EGE+yAi4s8jFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3gj3cQf3LfcZWftm+z1HUkAfW4tsmXaeeZx+o4umCBPygHP7LKIGi5CMqI2QjI6RkZWLmouhcd2LCPcS5PcK9ycfDjf7fq33Wqj/AKjmZv8AIhma9zSycKgS9dZF3fczpojZE/SA9dUVi27///SZmv//8rMz///gZmb///1MzQh0iQWG////mZqI///9ZmaLhgiLeI2JBYvTja+y04mLHo2Ni54Fi5CH/wACszOH/wAATM0IdI0F///eZmb/AALmZv//9pma/wANGZqLqAj/AHnmZgf/AF4Zmv///hma/wBk5mb//9eZmov//05mZov7AG9HQosIE/KASYuBtoWsh6N6l3SLCHR8fG5gv1D19wzM9wD3EB8T9QCL/wDImZr//1tMzP8AHjMz//+TszT/AAEzMwj3Awe1kZKsHrIGxYuhUphRCKaPBYW+h7mJwAgT7ICJjQUT9ID31AoT7IBtOY2LHxP0gIiJi3UFE+yA99UKDvekiaj3vbX3dMhqqBL4GeD4AKYT7JEWi4nWjAXVjK3ctPcCr++drPSLCPuRB4tvf///9RmaYf///OZmCHCJBYeIiIYfi3iNiQW8jamLvYu9i6qLu4kIjY2LngWQh46HHnGNBWP/AAMZmnz/AAjmZoupCPeRB/SLnWqvJ/8AGLM0//+9mZr/ABYzNP//yEzMqf//3eZnCP//+hmY///7MzMFpHKxfKJw/wAd5mho/wAOGZhfj3IIpouF9ycF////zMz/AAOAAP///0zMjv///uZo/wACmZoI/wAD5mYHkImOhh58jAVrjlzPW/cbcdFmtkmLCJAH06eg4ZXJkKiRrKeLl4uThpWAlIGYhpeLCJ+glqiieqhZH0CLcVOCTf//9+ZoU///8hmYS1RrdX1himmLCPdkB4unmv8ACuZos/8AAxmYCBPc98oKE+z3ywoO5omo90ut9wzRa6gS97nW96SkE+z3ufeIFX8GV4tumWLi///izM3/AD3mZv//5DMz/wAbGZpsiwhpfHp0d5p5oB+di52Tk4uXi/8ACuZmdv8ACRmadaBYsWarhWeL///TZmb//+vmZv//7Zma///OGZp9ZWcsaYsIggaHhIqEH4t7jonPjQW4i6fTmLT/ABOAAP8AOpma/wANzM3/ACSZmf8AULMz/wABszMI//92GZoHboJ7aR6EBoaIiIYfi3iNiQWLw42vssWJix6NjYueBZCHjoYegwZqgZuoH/ceB/8AUmZm///+5mb/AA3mZv//2zM0/wATszT//8TmZppgpkSii7aLsziTXwiki4X3GgWKnn6Ne4t5i3GPXPcSeLxfoGaLrJCusKK+lqGUoJiLkoueg5yLCKGanp+he5xpH22LbnBuTv//1rM0//+pGZr//+NMzP//8eZmV4sIffcIBhPc9/UKDnr7fbH3S6/3ubz3C3b3NK0Sz6n3O8bs40vnE/6A9w37OhWoXrB1tIvAi7aoi8KL/wAyTM3//+OzNP8ANszN///PZmb/ACFMzJj///8Zmv8ADZma////gAD/AA5MzIv3E4v3DsWL9xeL4ErQLZoIkQcT/wD3zQoT/oD3DbBBQjBQTigfPYtYq3K6fqV8pW+Ld4t+e4tzi2r/ABMZmv//7Rma/wAa5mb//+fmZv8AD7Mzff8AGgAB///yszP/ACNmZv//9oAACP///eZm///9zM0FyniwUYtIi3JycWeLbot6mHaiCA77Qft9sfgltPc1qhLDpPc8xofZUdwT+vT7OhWpXq91tIvBi7Woi8yL/wBA5mb//+WAALb//9GzM/8AFYAA/wBYGZn/AASZmv8AUbM0tYvdi8dXtECVCJAHE/T32goT+t6iWF9QZmdGH1aL///gTM3/ABszM///7LMz/wAgzM2BnIGac4t6i3x9i3uLdZl7n3v/ABAZmv//82Zm/wAdTMz///HmZ/8AKZma///4szMIhoYFz4GmbIs5i3JzZmaLbot7mHWiCA6tiaz/ASzmZv8AJxma927KZawS9eD4I6cT7PjhpxVbi3WtRfcFCEH3DAV7p2+kcYvUo67nocabuKSglYumi6VypYsIoKKdo6J7olcf+wCLcTKCbnxWbUtUbP//5zM0///ymZr//9FMzP///oAA///cgAD////mZgj3LAcT3IvenJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I/wDR5mYHwP///oAA/wAgZmb//+UzNP8ALJma//+0ZmYI1/sNBbJNr2+rc7NtqnKaPAini4T3KQWTipd2Hg4qiaj3S633C9FsqBLl1ve/ohPs5dMVboJ7aR6EBoaIiIYfi3iNiQWLw42vssWJix6NjYueBZCHjoYegwZqgZuoH/ceB+qL/wAPmZr//9nMzf8AGGZm///FMzOcYqtEu33/ACnmZv//88zN/wATGZr//8UzM5FfCKKLhvcaBYqedo2Ai2aLY+d7sXi8WKBji6+QsbCmvpahl6CYi5SLn4Ofiwijm56foX2cZR9pi///4TM0///k5mb//9/MzP//wxmaXTRnfVKLCHj3CAYT3Pf1Cg6Wiaj3vbX3dMhqqBL14Ne3E+z3y/cNFf8AqGZmB/8AFIAAdv8ADZma///gTM3/ABHmZv//0kzNtvsCrzrZigjaioyNi54FkIiOhh57jAVojv//zRmaz///y+Zm9xv//+YZmv8AQzM0///a5mb/ACpmZEv/AAMzNAj/AAhmaAf/AEWAAP8AHuZm/wAT5mb/AFIZmv8ACpma/wA7zMz/AAUZmqj/AAbmZqypi5iLk4aWgJWBmYaYiwigopaoonmoVh88i29TgU3///fMzP//zRma///zszT//8aAAP//0YAA///d5mYI/wCfgABf//9NGZoH///oszP///tmZv//45ma////gAD//+ezM4sI92QHi6ea/wAK5miz/wADGZgIE9yljQWQjo6QH4ueiY0FWopuilmLWYttjFmMCImJi3gFho+Ijx6liQWyiJqCi20I/IsHi29////1GZph///85mYIcIkFh4iIhh+LeI2JBbyNq4u9i72LqIu7iQiNjYueBZCHjocecY0FY/8AAxmafP8ACOZmi6kI95EHq4v/ABhmZv///WZm/wATmZr///oZmgj//z2AAAcOZYmo90ut9xXQY6gS89bOtxPs97bTFf8Ae+ZmB7n//+/Mzf8ADGZm///i5mf/AA+Zmv//2mZmnGKoQ72KCNSKjY2LngWShIyHHoMGZotj53uxd7xkoFWLvpOlvZuxlaGYp5aLkouVipCHk4eXhpWLCKCbnZ+kep9lH1uLclR2Xv//7mZm///YzMz//+szNP//2MzO///PZmb///HmZgj/AGiAAF/7Akj3BgcT3LShjqaPj46QHoueiY0Fi1SJZGdHjYseiYmLeAWGjoiQHp4GrZR7bx/7tQdvgn1pHngGhoiIhh+LeI2JBYvPja+yxImLHo2Ni54FkIeOh3hrjrIe9yEH/wAaTM3////Mzf8AFhmZ///+mZn/ABKZmv///YAACP//ehmaBw6Wiaj3vbX3DbLLyGqoEvXgE/SdFo2JBbyNq4u9i72LqIu7iQiNjYueBZCHjocecY0FY/8AAxmafP8ACOZmi6kI95EH9waL/wAS5mZq/wAnGZontvsCrzrZigjaioyNi54FkIiOhh57jAVojv//zRmaz///y+Zm9xtw0WS2RosIkAfXp6Dhlsn/AAUZmqj/AAbmZqypi5iLk4aWgJWBmYaYiwigopaoonmoVh88i29TgU2CU31LUGtzfV6KZ4sI9w3ssiq7B4unmv8ACuZos/8AAxmYCBPspY0FkI6OkB+LnomNBVqKbopZi1mLbYxZjAiJiYt4BYaPiI8epYkFsoiagottCFsyZOT8NAeLb3////UZmmH///zmZghwiQWHiIiGHw77CImo/wC2TM3/ACKzM/cV0K+tAfP/AEpmZgP3RtAV/wAATM3/AIxMzQX/AEsZmv//+mZn/wATgAD//9uAAP8AFRma///JzM2cYqhDvYoI1IqNjYueBZKEjIcegwZmi2PnfLF2vGSgVYu+k6W9m7GVoZinlouTi5SKkYeSh5eGlYsIoJydn6R5n2UfW4v//+czNP//yOZm///rzMz//9MZmnX//88Zmv//5BmY///PGZn//7BMzv///8zNCP8AAIAA937/AJwZmouLrf//ZDMziwX/AAHMzP8AMhmY/wASgAD/ADgZnP8AQYAA/wAozMwIfKAFQWV0Yn9vgadyuEGtCHx2Bf8AQmZm///XMzT/ABLMzv//x+Zk/wABszL//83maAj//7QZmmnX/CoGbYJ8aR54BoaIiIYfi3iNiQWLz42vssSJix6NjYueBZCHjocegwZqgJioHw73MYmo/wE25mb/ACsZmvdkyl+xb6cS95XbE+T5eYkVjY2LngWQh46GHoEGZ4v//8hMzP8ATRma///EszT/AIPmZnDHb8lGi9ikruagxf8AChmYp/8AGeZoqJeLmYuYhpiEmISYhZiLCKCinaOie6JXHzWLbVdzUf//6uZoWP//5xmYTFJr///nmZr///LmZv//0pma///+TM7//9zMzP///8zMCPdVBxPMp5mbtB6lBpCOjpAfi56JjAWLLopnHv//7xmai///5jMz/wAAMzT//+gzM/8AADM0CBPU////gAD/AACZmFGLBRPM+x2Lefs7nIsFlaiYqZ2pCBPUlZ6foKyLCP8Aa5maBv8ACWZm///4zMyP///0szSL///wgAAI/IsHb317Yh5xBoaIiIYfi3iNiQWL6I2vsuKJix6NjYueBZCHjoYecQZke5mpH/8BCuZmB/8AdrM0///95mb/ABEZmP//x0zO/wApMzT//5zmZv8ALMzM//+UTM3/AB0zNP//t8zN2////uZmCA5wiaj/ALYZmv8AIuZm9xXQYqkSo5z3JNYT7PeY0BX/AIwZmgf/AEqAAIX/ABIzNP//25mZ/wAWTMz//8pMzZxiqEO9igjTio6Ni54FkoSMhx6DBmaLY+d7sXe8ZKBVi76Tpb2bsZShmaeVi5OLlIqRh5OHl4aViwigm52fpHqfZR9bi3JUdl7//+ozNP//z2Zm///lMzL//89mZ///sJma////MzMI9wgHqJWYrB6TBo+PjpAfi54FE9yJjQWLUolkHv//8UzNi///68zN/wAATM7//+1mZv8AAGZmCP//44AA/wABTMx1i0CLefsanIsFpfCpjMGNCP8AA5ma/wAAGZoF/wAXszP///xMzP8ABrMz///wzM6L///nzMwI+7UHb4J9aR54BoaIiIYfi3iNiQWLz42vssSJix6NjYueBZCHjocegwZqgZmnHw70iaj3vbL3k6cB9dz329u/pwP4lBbpi6oplGAIp4uE9yYFmH2ShB57BmyGlq8f+IoHp5mbtB6lBpCOjpAfi56JjAWLLopnZDSMix6Jiot4BYaPiJAepQazmn1tH/tn+9v3ZwenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+Ijx6mBrKafW0f/IoHb356Yh5wBoeIiIYfi3iNiQWL6I2us+GJix6NjYueBZCHjocecQZjfJmqH/eQ99v7kAdvfXpiHnEGhoiIhh+LeI2JBYu/jaweDmmJqPdNrfcwqAHz1fdh1sWfA/he1RX3rAe0kZKtHqQGj42Njh+LoYqN+wWJKY2KiYt1BYeNio4eoAavkIJkH/sA+2H3AQe0kpGtHp8Gj42Njx+LoIqN+wCIJI6KiYt1BYeNio4epQaukYJlH/usB4tlhoJnighxBoiJiYgfi3WMifKN9wCJjI2LoAWPiY2HHncGaYyEkouzCPcd92H7Hgdkh4NmHnYGiImJhx+Ldo2JzYwF84uhJZFyCJ+LhvcbBZeEk30eewZrh5euHw73loms97a194e0aqwS9eD36uD3YKUT7vj+9w4V+CUHi/8ANEzM/wAGszT/ABVMzP8AFoAA/wAJZmgI/wBAzMwGzYunVptDCKWPePc1BWuLbYlli///+TM0i///+EzM/wAAgACD/wAAgAD///+AAP8AAMzM////mZj/AACZnP///2Zo/wAAmZh6////szT///EzMP///5mY///x5mj///+zNAj//+TmaIv///6ZmP///2ZoBf//7zM0////szT//+5maP///+Zk///qzMyLCBPeWYtujFmMhYWLdpGF0Yichos4CPs0++r3NAeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPdb9+r7WweLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZEIRY56kIveCA73FYmo902t9yWzbqgS8tb3Ydb3eaUT7vgT2BWLZf//+5ma///4zM3//9tmZv///TMzCHGJBYj////MzYn///4zM4uICIt1jIkFqYy1jK+LsIuviqmKCI2Ni6AFi4+J/wABmZqH/wAAZmYId40F///egAD/AANMzf//+IAA/wAEszOLswj3qAeL/wADgAD/AAAZmv8AAzM0/wAAGZqO/wABzMyi/wAPTMz/AAVMzP8AFLM0iwjcBs2Lp1abQwilj3f3NAVsi22JZYt9i3mOeosI///rMzT///+Zmv///8zM/wAAZmYFbYpmimaLCBPeZ4tijG2MCImJi3UFi4eN////MzSO////zMwIpYkF/wAgszT///2AAP8ACEzM///5gACLZQgg+2H2B4u0/wAHgAD/AAKzNP8AIYAA/wADTMwIn40Fj/8AAGZmjf8AAZmai48Ii6CKjQVtimWKZotni2OMbYwIiYmLdQWLh43///8zNI7////MzAiliQX/ACCzM////YAA/wAITM3///mAAItlCPuoB4tl///7mZr///jMzf//22Zm///9MzMIcYkFiP///8zNif///jMzi4gIi3WMiQWpjLSMr4uwi7CKqYoIjY2LoAWLj4n/AAGZmof/AABmZgh3jQX//96AAP8AA0zN///4gAD/AASzM4uzCPcb92EHDvgG+0Co9yGs98yq93uzbKwS8+D3teB4oven2hPugPot6BWL/wDtTMz//zCAAP8AKoAA//9pgAD/AAEzNAj3KQeL3pyQ0Y6RkYughZEIE/aAWYpXinCLCPwLBhPugPeuChP2gMmhl6Me91kGo6F/TR/8LQeLOHqGRYiFhYt2kYW9jKiMvYu+i6mKvIqRkYughZFFjnqQi94I93EH9yr///6AAPcV///MTMyL//8xMzSL+z1HUkCLW4tsmXaeeZx+o4umCBPtgHP7LKIGi5CMqI2QjI6RkZWLmouicd2LCPcR5PcK9ycfDvdU+36t91qo/wCo5mat/wCgGZqycKgS9db3X9VD3vdL2BP2gPX38xX7pweLaP//+rMz///2Zmb//9xMzf///ZmaCG2JBYf///+zM4n///5MzYuICIt1jYkFi/8AREzNjf8AK7Mz/wAqgAD/AEKAAImLHoyNi6AFi4+J/wABzM2I/wAAMzMIcI0F///eTM3/AAKAAP//+bMz/wAGgACLsQj3pweun4+gHvcNBp+giWYf+6cHi2j/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5mb/AAEzNAiljAWO/wAAGZqN/wAB5maLjgiLoYqNBYv//7uzNIn//9RMzP//27M0///HTMyNix6JiYt1BYuHjf///0zMj////7M0CJqKBf8AIszM///9szT/AAYzNP//+UzMi2QI+xQH///vGZr//+8Zmv//7Rma///0szL//+rMzP//+RmaCP8AfhmaX///ebMzB///+czN////mZn///mzM////7Mz///5gACLCE2ErdkfzQeLq/8ABzMz/wAHzMz/ACDMzf8AAjM0CJqMBY//AABMzI3/AAGzNIuPCIugio0Fi06JZP//3bMz///KTM2Nix6KiYt1BYuHjf///2Zmjv///5maCJOKBf8AIkzN///7szT/AAazM///+0zMi2UIUgchrl7tHv8ACszNi5X/AACAAP8ACTMz/wAA5mYI//+/mZoHDsqKqPgDufdFpwH13Pe93AP3T/fUFdG91qSqiwjXuGM6H/teB26CfGYefgaGiIiGH4t4jYkFi8yNsrXViYsejo2LngWQho6GHnYGaICaqB/3ZgfyXMMnHkyLQXQtVAj3ZwenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+Ijx6mBrKafW0f/IsHb358Yh5wBoeIiIYfi3iNiQWL6I2us9qJix6NjYueBZCHjoceeAZjfJipHw5Xiqj3pbrBqAHx1vdk1gP3RdMV9zEH/wAvmZr/AC5mZv8AKpma/wAZmZr/ABzMzIsIw6x4Oh/7FQdugnxpHngGhoiIhh+LeI2JBYvPja+yz4mLHo2Ni54FkIeOhx54BmqBmqgf9woH8lzCQh7//9kzNIv//8ZmZv//8TM0//+9Zmb//73MzAjmB6eUm60emgaQjo6QH4ueiY0Fi0uJZ2RHjYseiYmLeAWGj4iPHp4GrJV7bx/7sgdugnxpHngGhoiIhh+LeI2JBYvPja+yzImLHo2Ni54FkIeOhh58BmqBmqgfDvdof634ALf//9/mZv8AK7M0/wBl5mb/AD/maP8AEJmYrRL/AAqZmv8AKEzN/wB2GZnl//+2mZr/AFazMhPe+VP3DhVWWE5aLov7G4sl9yGL906LmIuYjJYI+IYGgPciOvcW+1SLCBO99/YKE97///uzM///5uZm///9zM3//+WZmov//+SZmov7Muv7Qfdri/cCi8Sw2tQIW/fgFf/+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+2QHaYthjHWZVKv///IZmsv///fmZsOCyXHDQIsIWXpudG6ggJ8fl4uYkJSVlZaTkJeLp4uRapBulU2gNdNvCIYHSYtmYHFFW/sbXEdriAh8igWGiYiGHw7Niaj3S633E85nqOvqEvdb6YvWi+kUBxPvmxb31goT3/fXChPv99gK90v4wBWUCvc9FpQKDnp/r/e5vPcLdvc0rb7qEs+psOnW6aLjS+cT/0C39wcV98wKE/+A980KE/9A984K5vkVFZQK9z0WlAoO+yuBqvdNtPc1quLqEsOkgOnW6W7ZUdwT8ICx3hX32QoT+QD32goT9ID32wqr+H4VlAoT8gD3PRbRCg6Y+2ew+Z+zAcul+BXkA/c7+RkV90IKDvtH+3+u98Ot95atErOlc9f3VtwT7PcT9hWcfAWdj6mSlosI2apjJvsARlVZH2OLcLGDoYOjfpV0iwh1gXl5a8VO4PcP4On3C/U6wCsf9yv3jgWbppGWi4+Lj4WNhIuJi2eFbosI+18GfIuCkomRCHIGE/T3UwoO9weJrPjbrM29AfXg99bgA/jq9w4V98cK+yH44xXuCg55iaj4C6jivQH3ANb3YtYD9yT4QRX33Ar3kuQV7goO9weJrPjbrMXrAfXgmuvo66HgA/gf+YUVtQr7URa1Cvgc/QsV98cKDnmJqPgLqOvqEvcA1nrp1ulj1hPy9yT4QRVgSY2LH4iJi3UFi4eN////TMyP////szQIqYkF/wAlszP///2AAP8AAkzN///3gACLYQj7ogeLaP///bMz///1Zmb//9pMzf///ZmaCGyJBYj////MzYn///4zM4uICIt1jIkFs4ynjLaLq4uUirOKCIyNi6AFi4+J/wABmZqH/wAAZmZpjoiWi6MIi433YveMi/uABYto///8zMz///NmZv//2jM0///9mZoIbIkFiP///8zNif///jMzi4gIi3WNiQWzjKaMtou4i6mKs4oIjI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//90zNP8AAkzN///6zMz/AAqzM4uwCPehB4u1/wADGZr/AAeAAP8AJOZm/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CKjQWLRYleb16Nix6JiYt1BYuHjf///0zMjv///7M0rYiMeotzCPti+4yL94IFi7SO/wAIgACx/wACgAAIqY0FE+iP/wAATMyN/wABszSLjwiLoImNBYtFiV8eofclFZQKE+T3PRbRCg72ga347K256wGw69Lr6Ovc6wP4HfmEFbUK+1EWtQr3E/sUFVgK9+P7uxVZCg4wgaz4E6zk6hK04YXp1umE4RPo9w340xXRChPk9z0W0QoT8vuN/AYV5wr3XfddFX0KDvaBrfeGxIDF95KtErDr+EnrE9z33/kEFffsChO89+0K9+P7uxVZCiv///JMzBX37goT3PfvCg4wgaz3ML11tfcxrBK04feO4ROctPdhFecK9133XRX3+goT3Pf7ChO89/wK/wCGZmb//zxMzRX3/QoT3Pf+Cg72ga33hsSAxfeSrbvrErDrz+vo69/rE5+A+Br5hhXACvtRFrUK9xb7FhX/AH0zNIv/AGEzMP//pjMw/wAOszT//0+ZnAgT34D//9+ZmP//6UzM///SgAT///PmaP//4MzMiwgTv4D37Qr34/u7FVkKK///8kzMFffuChPfgPfvCg4wgaz3ML11tfcxrOLqErThgOnW6YnhE5yAtPdhFecK9133XRX3+goT3AD3+woTvAD3/AoTmgD7Evc7FdEKE5kA9z0W0Qr/AFtmZv/+lUzMFRO4gPf9ChPYgPf+Cg6mga73nr15w/eGsLnrErnmN6nC6+jr1uITmcD32/mEFcAK+1EWtQr3Gf2OFfdr7vcq9033ZfsM9xD7Oh/7E4tjYVKICBO7wIdVg1qBVwiphwWl4cTc9x6LCNr3B0H7aR+KigVOrUmXfosIE93A99IKE73Azouoq8WLsYuohKx8gfsyQ/sK+yiLP4tjrX2zfrB8pm6LCHKCeHdB9xRP7B8O+zeBrPc5s3m59yyq4uoSvqSS6dbpbNwT3oCu3RVW0mTm7u/R9zX3DVLs+xkeXItie1qIiGWGaYFbCKSHBZzLqrvViwjkqTUvH4iJBRO+gHGbcJduiwgT3oD35QoTvoD35gq7+H8VlAoTnwD3PRbRCg58dcn40qzNvQH/AGiAAPifFffJCv8BNYAA91IV7goOP/t82/i6rOK9Afdk+zQVjAr3O/k6Fe4KDnx1yfjSrMXrAfdB6+jrA/f++YUVtQr7URa1Cv//u4AA+3oV98kKDj/7fNv4uqzq6gH3KenW6QP3ZPs0FYwKUPlxFZQK9z0WlAoOfHXJ+NKsznYB+Gv5rxX3Gwr7F5AV9xwK//8UgAD7qRX3yQoOP/t82/i6rPdydgH3ZPs0FYwK95L5mxX3HQr7GJEV9x4KDsKJrPdvxffGrMXrEvHgjevo63bgE/74DvmFFcAK+1EWtQo0+3oVLAcotDz3Bh4T/f8AOTM0i/8AQuZm/wAPgAD/AEfmZv8AMWZmCP//PxmaB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3gj4JQeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI+z4HTP//1uZm///BgAD///wZmv//44AAiwhDY6bdH/UHi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CA42iaj3C673cajq6hLS1nDp1ulc1hP59+P39RX34goT9Pts93AV0QoT8vc9FhPxcaB2pR4T8qWgoKUfE/H3/woOKomo+NazcKcS9Ny+p/dVphPc6IkV7YuwVJQ3CKeLhfcoBYqZfpGEiwh6BmqJmqof+IkHpZmQoR73EwbNi6dWmkMIpo939zX71IsFE7x++waMix8T3ImKi3cFE7yHjoiPHqkGtpSCaB/8iQdsfHxjHnEGh4eIhh+LeI2JBQ77RIum9/q3cKgS89XFn/cKoRPc8xbsiqFMmEsIn4uH9xsFipd+k4SLCHoGbIaUrx/3zfcEB8OLm1aXUQihi4D3L/uIiwUTvPsEjQUT3ImJi3UFE7yIjYmOHqoGr5CBZR/7rgdugXtqHnMGhoiIhh+LeI2JBQ73XYms98Kz94asw+sS8+DL69voO+vR4BP9gPhO+YQVwAr7URa1CvhM/QkVTgr8Uy8VW4KtrB/3f9YHE/6A9xSwMU9NbDH7LB/7IuYV99EKDuGJqvdXq/cirOrqEvXWvuma1nzpmNoT/ID43/fHFfd0ChP+gPuKjxX34wr7f1cV9+QK9xL3bhWUChP9gPc9FtEKDvtt0LHQAfcG0QP3BvtKFfgACvYE+AAKDvts0LDQErnRfNF+0d7RE8T3y/tKFfgBCvYE+AAKE+T7nRb4AQoTzPcEFvgBChPUUiEV+AEKDvtt0LHQVLQS96PRE7CwKxX3HbT7HQb3fvsTFfgACvYEE9D4AAoO+23QsdBTtRLkrvcq0ROY96b7ShX4AQr2BBPY+AAKE7j7jnUV+AIKDvsn0AH3F9ED9xf7BBX4AAoO+yfQAdbRttED91D7BBX4AAr7BRb4AAoO+2zQsNAS19F80X7RE9D3F/tJFfgBChPIxPUV+AEKE+D7BBb4AQoO+xW1AeD3OAPg+xUV9zi1+zgGDiG1AfcqrgPgIRX4AgoO+OfQAbPRA7P5ChX4AAoO+OfQAbPRA7P5ChX4AAoO+23Qe9B80BKu0bXRtdEUHBOc95f7ShX4AQr7BMAVE1z4AAr7BMEVEzz4AAoO927QAfcX0QP3F/eRFfgACg77X/ceAfclsAP3JUoV+x6w9x4HDvtw+DbiAcn3jwPJ+DYV93uLn+L7eosFDvjttQHf9zgD3/jtFfc4tfs4Bg77xJl2+Nd3AfcGxAP3BoQVxPjXUgYO+OXQAffR0QP30fkIFfgACg745dABWdEDWfkIFfgACg77h512AeP3RAP3nPg9FVqffoxxznRQeIBdecN1kY2lRpu1maLFowj76QRTonyhereCdXxhS3K1e6GDo0ylzpmLu58IDvuhi+8BzaYDzfekFYsxbUiLV4tvjHaPfQj3kYtr7/s+iwWQp4+ji6iLvoPci8OLpJ+Ypo3Sj7eoi7OL01+Li4uFamj///5MzG7///6zNAhdiVyDi0+LUp1Oi1EIDvsGoHYSrL1junf3BPd1uhOo+Fn4ThX4AwoTyPgEChOY+AUKE8j4BgoO+xOL7/fZ9wC4dwH4BrED94L4qRX4BwoO+5iadpHvErz3VWujE1D3fve8FRNg+AgKE1D4CQoTkPgKCg77MZ92+DL2Evejx1POE+D33/e3FfgLChPQ+AwKDvsJk3b4OfcAEsPO93e9YMwT4PcL9zMVi6uTqZuVCJgHho6FjIWLWotzYYtHi3iOT4t5i3uGeYOCCJKABbyOo6iLsgiLnofKi54IE/D3rfcdFYvvr4mLswijB7GBn1Ye+4oGcot4oIaiCItehEFiqG29H/e7BmVeeE2LPQgT6IthkjGLYYt3h3qDfQiTgQW5kqKri8UIi8112ovNCA77ypp2EvdHwGCwE8D3R4UVi8CRvh8ToPgNCg77xp52AfcJygP3Cb4Vi3WGeoF9i4vZjYvpi9Ns1ovZi6COtpexmYSkgaCLkYuSjJCNCJOWkaGLlIvIcZn7DI96j4CWh54Ii2OFQV2tc88fcVR+SotNi1GbTItRCA77CJ52+DP2Esa9Xsv3cLtjyhPo+CD3vxWL7Lh5i9cIuHWgXh77hAZwi3uchqIIi1iKSl2qaMofUVN/Tos6CBPQi1GQUItti2+Ic395i4vajYvoCBPoi8l42IvJi8GctKujCPeNBmZedUmLPAgTxIthkzGLYYt2h3qCfouL142L4AiLyHTqi8UIDvsBi+/3y/cCJfcAEqf3KfsEq/fYqhOs6/guFXpffVqLYYs1s/sKjEQI96sGtfcJpPSL44v3TUmrYotui294d3NxbnRWa0EIo38FvN+qnriLwYuqZYtEizt5Q29RCPtzBmrXddCLyoullrSWsAgT1JGLkYqRi5eLl42Vjo+ZjZmLmYu0eP8AFMzMZP8AATM0aox6mIiji4tlios+CItapny0hAgO+9n4M/UB91OwA/cs94cV+A4KDvsM+Cz3ABL378hXrxOg+Bz3/RUTwIunkpqUjpqQmZ6LpgilgqtQHvuGBm6LepaFogiLYIlEYqNvuh8ToPeRiwUTwIL81QWXvJHYHw77GIvv9833AAH4B7ED+Af3jBUqblg9Hvtmi3En91GLBfc6pd/3Sfc9YOIkH/sYBnCLe5aGogiLYIJEYqJ2uR/3OgbilEQtHw77C5V2+Dz2AfdZyfcEtgPd+MIVi5ePnZCZjpSby4uOi6V2lXmQg413komdi4ptiYtei3WhgpeHCJiGnoSLeYuChXqGgX9rf2WLWwherHa9HvctBt2Wa1ofi0t9elpZaWk+O4tSCHCWfaGhlpejHouWh5WLmoutrLC2vdLak5iL4gj3AYK9Mx77PgZmb5CsHw5Hi+/30fYBxrf33LUD90z4NRX3JgbXi59lkPsoCI/7F/vli5D3JgWMwafDv8gI+xn8NRX4RYuA9+kFhvckb7L7JosI+zAGcYt8l4WiCItfi0ZipGu7H6oGYmD//85MzUb///6zM2EIDkCL7xKwrmn3I/eVrROw97f4qRWGWWZoVG2BkYWbi5iLmI6Ni5yLsG2Pco0IE9B3jXGPg6oIE7CLaYZMH4tooG20greCloSLcQgT0D84YfsMi/scCG+OeJmUlJSQHov3GqLpt8y2zMqzvovfi8VBiy+LWXxTgGgI+2OLZyf3iIuo3gWSoKLci84Ii/cXTvcW+wyfCA77zfcn0064E4D3J/tfFZCNzn2L9x0IE0B7984FE4CLuI61mLGYsZKki5aL1laOW451jGaNhK6Li2SGi0KLYK7//+hMzMv///yzNAiyiaOCi3qLgod/hX8IE0B5bIJwi3QIDvuqi+8B92SvA/eI96QVi8WdyIvEi8dck12Nbv8AAUzMaP8AAbM0hayLi1+Li0OLY7du0oemiZ9+i3IIi1qCS4tXi4OLg4yEjW6Nc5BvCPs+i2sn95KLBY6ZjKCLp4u/bc6L5QgONoDw99n2Ab6z99OvA/e1+DMV66RPIfshQnk3SiqP9zcfi8OZwqe6CPcJ/D4V7O6r94n3WkTFIx/7GgZwi3uXhqIIi12JRnaZWrofaFV5Ros9CPtb9xpwzB4OK6j3M/sAt7mq92TEE3D3rPcOFTz///MZmov/AG3mZgWLwneXaKL//+8Zmv8ACxma///65mb/ABLmZouki5mMnI6dm4uYi6GGCBOQj5SQoouWi89hjW+NgIxojoOti4toh4tFi2esbrKCCBNwfmeDaYt3i1ydeK5v/wARszP///EzM/8AErMz///STM3/AACZmv//v5maCPsJ///s5mZ3KPdprQXllbm4i9qL9w3f9wyL0oupev8AEczMaP8ABTM0XJJ/lIWli4tmiItCi2ijdLuACJuHlICLeIuB///25mZv///uGZplCP//tpma//9kMzP/ACpmZv//7MzNRIIIDvsL+DH2EqTE96vOVLMT0Pc491UVnZCgpR+Lo3uabJFck4GYi6mLpJagn6oI9yMGuYutf5dzl3SXWotPCBPgf/xaBZ+6kcofi8r///2ZmvcK///8ZmbmCBPQgvd1BYT3GnKp+zCLCDQGcYt6ooaii4tQe4tTi2iqYqiFZFZwUotKi1yYf5uLn4uYmaCLCA77DYvv9832AaTE98ixA/ga94wVKm5YPR77ZotxJ/dRiwX3OqXf90n3PWDiJB/7GAZwi3uWhqKLi2CCi0SLb/8ACszN///tTMz/ABWAAIII////szP///+zNAVkVnBMi0qLXJh/m4ufi5iZoIsIwwadkKClH4uje5pskVyTgZiLqYv/ABezNP8ACeZm/wAZZmadqP8ABUzO////TMz/AAWzMv///5ma/wAGGZqLCPc6BuKURC0fDvsFrPdDM7Ntx+T3PxNQ90TcFYvMtN/V252esLG0q52LmYedgpSWj7aLlYvDZpVhjnKMb5WHqwiLaIU7H4tkpXO+g0ZTQj1dLwiDi4njBROQi8i924uzi8FelmOReI1tmYWmi4tofItECBMwi16lfdJ9momQf4t9CBNQi2RtUIthCIuJBRMwlfxHBZLAjuMfi8V924vBCA77B4vvEqH3M2Sq9Pc6E7D/AVfmZv8AvUzNFf//6oAA/wAVMzT///mZmv8AF5mai/8AGuZmi7ar1KyrpYuViJqElJiOsouWi75rkGiOe4xmj4esCIthikIfi2mobrSC///iGZr//9gZmmj//8AZmnT//8IZmQj//8PmZv8AKbMzBXmagqeLpQgT0Iuik72LoovFd5Fbjn6MbY6FrQiLYYdFYaxwvaqUcmkfE7CIQwWLdJR1oHsI9yYlBZKFk4OLgwj7notsJ/fqiwWgkLG9i7WLm4SbfJYIDin4MfcAAcO618n3OrcDzftwFaGYmpeLlgj4kIIHdHd8cotvCPxnB/dN95IVi76xo8au0ba2pYv3EwjRifb7DB77TgZvi3uWhqIIi1iKSWKrabof918G2o5QXx+LRUFXfoNocyFEiz4IcZR/n6KWlqEei5mKmYuSCA4hlHb4PfcAEvgRwV64E+D4EX8Vi8GOtR8T0PfLB/cjZK37Jh77EgZwi3uYhaIIi1qETGKparof90MG46Ne+xofDpyL7xKs9yT7AKv3Hfcm9x7FE7j42PhYFYvEX5R8kHuRd42Hp4uLYoiLO4tvnHirgJT///zmZqP///wZmotui3qCdXpzCP//vIAA//+gszP//96AAP//tUzNe1oI+zQGueeu9qT3BKGLloiZgpCWkqiLmIvH///Y5mb/AATMzP//5xma/wAGMzR7j3aKhKyLi2WGi0QIi2ufc7R8afsPZCBfOQh3BmbUc82LwIu1krKUrZyLlo2miwgT2I2Rjp2Llou2e6VqkmGTgpKEo4uLZoKLQotqn3W0fwgTuH5kf12LWotPnlugOZFyh2+Sagj3uQae93H3KvcMi/cDCA47lHaX7/fN9wAS5bb3rsFeuBO4+DN/FYvBjrUfE3T3ywf3I2St+yYe+xIGcIt7mIWiCItahExiqWq6H/8AFbMzBv//3WZm///JmZr//93mZv//xUzMi///qBmai4GRSI1oCE6Leif3G4uRxQWLtm/Ti96L/wAyGZr/ACDMzP8ARIAA/wAVGZr/ACZmZgj/AH0Zmgbjo177Gh8OZZp2EvdDwGCw93TAYLATkPhShRWLwJG+HxOI+A0KE8D7rfvqFYvAkb4fE6D4DQoOWZp2+Dn1EvdTsPduwGCwE+D3LPeHFfgOChPw98D7lBWLwJG+HxPo+A0KDk34M/UB91Ow93mwA/g294cV+A4K+5iEFfgOCg78DPfl93UB1PcDA/ch+MYV+A8KDvtm9+X3dQHU9wPE9wMD98n4xhX4Dwr7PBb4DwoO+3SBqfgzdxKr0lXK9yfKVdET2PeX9+gVi///2WZma///5Jmae4Fbn1iai9KLsaGTi5OKk4aOgYtii29ci2CLPuBokIUIE+RpfkJfi0sITMZW5+LPxdMei/8AU+ZmL/8AIhmah5MIE9i2n7Cvi7kIoH/NUXqEh4Iei3aqfotbCBPk+zD7dRW/ybSRHtBjp3CLVQhpbWpiHk5qwLUfDu/7bav1q7is92a1+At3AfeMs+uzA/fkPBW2CjNWFdMKmvgzFT4K+677YBU/Cg77Hvtuq/WrsbT4C6wSr95L1ZKz67N42RPzAPd0OxXSCjNWFdMKE/qA9zH4AhVlCtr7OBVmChP2gGcKE/qAaAoOhIms98Gt94utwvMS9eCs89rcaegT/Pd0+YYV9wQKavtMFayLleIeE/74EAppBNAGE/1BCmD4txVCChP+QwoOJYGt+Ae39wDvhammdxLZ2sjvv+ET7/du+OsVdQpf+4AVaQqEqhX///mzM///+kzM///8TM3/AAGzNIuUCPdMB8yPs4sekoeOgh4T33KBQH1jiImDjXuRhb+Il5CLNwj8fAeLZIp5iH2Qg5CHl4v/AAYZmv8ABczN/wAJ5mb/AAlMzf8AB7Mz/wAI5mb/AApMzZeRi5b///bMzf8AFuZm///sszP/AB3Mzf//+oAA/wAjTM2LCPH3C+j3M/cOMdY0H///1Rmai///2eZmemxvCA6E+2Tv9az3wa33i60S9eCo7+LcaegT/Pdw+zAV+BEKbvlqFayLleIeE/74EAppBNAGE/1BCmD4txVCChP+QwoOJftk7+2t+Ae3916ppncB2dqd7+rhA/dD+zAV+BIKivibFWkKhKoVagoOhPsXt+Cs98Gt94utEvXg92zcaegT+PgJ+xcV94UKovlRFayLleIeE/z4EAppBNAGE/pBCmD4txVCChP8QwoOJfsXt9it+Ae3916ppncB2dr3aeED9+v7FxX3hQqv+IIVaQqEqhVqCg6++1yo1qvBtPjisMd2AbDm96TJ86wD+Cz5xxWwCmL+JxW8Cg77QPtcqNar/wA2TM3/ADCzM/gDrBKw4fceyXziE/j3svkzFc8KUf2TFRP82QoT+toKDvWJrfjZrcLzAfXgwPP3ausD94j5hhXyClb9MxVFCmD4xhVGCg4ygbqEpvfvrvcA74WppncSsuGO7/cJ2hM3gPcU+OsVdQr3bfxvFfcAChOngPcBCoD//vhMzBVtChNvgG4KE6eAbwoO9ftk7/Wt+NmtAfXgvO/3cusD94T7MBX4Egpa94MVRQpg+MYVRgoOMvtk7+26hKb37673XqmmdxKy4cfvx9oTn4D3TfswFfgRCvc096wV9wAKE9+A9wEKgP/++EzMFW0KE7+AbgoT34BvCg71+xe34K342a0B9eD4B+sD+BD7FxX3hQqb92oVRQpg+MYVRgoOMvsXt9i6hKb37673XqmmdxKy4fdw2hOf99/7FxX3hQr3b/eTFfcAChPf9wEKgP/++EzMFW0KE79uChPfbwoO9ftcqNarya342a0B9eClyfev6wP3TCsVopV9dnF2fW0fd4uAj3CVhISIhIt/pICchauLCMi5qraxbKNjH4KLgoqDiQj/ABizM/8AQjMzBf8AHRmZ////f///ACZMzf///0zN/wA45maLCPch907L94r3Tvst9y37VB9Li02JZItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6L/wAHmZqL/wAHzMz////mZv8ACIAA////5mcI///YGZr//6AzM5GFBZuQlYyeiwiS90cVRQoOMvtcqNar6ab37673XqmmdwGy4fcMybHaA/doKxWilX12cXZ9bR93i4CPcJWEhIiEi3+kgJyFq4sIyLmqtrFso2MfgouCioOJCP8AFjMz/wA7ZmYFqv8ABmZn/wAfmZj/ABMzM/8AJzM0/wAgTM3/AATMzP8AA+Zm/wAHMzT/AAHMzYuEi3OWaIuLk4iOjJONoZ2xmsiSkZGLmoWRCEuQgp6LvAj4WQfMj7OLHpKHjoIecoFAfWOIiYONe5GFv4iXkIs3CPsUB4SJiYQeh4tinGqLSYtfdWNlYGBxUItBi///iZma/wA5Zmb//6gzM/8AZJma///5mZkIZ///qZmakYUFm5CVjJ6LCPcZ93AVbAoO9Ymt+NmtAfXg+AfrA/evYBX4Ewov9xIVRQpg+MYVRgoOMoG6hKb37673XqmmdxKy4fdw2hM+93xgFfgUCvcF9zsV9wAKE773AQqA//74TMwVbQoTfm4KE75vCg5diaxssvewsfeIs2yszb0S7OD3SqyyrJuuEyfA+C75XRXuCuL79BUw91wGEzfAvQoTr8BIChNnwEkKE6fAvgoTd8C/Cv//A+Zm/wHWGZgV///lszT///XMzP//7eZm///yMzT///HmZv//8GZoCP8Adpma///IgAAF/wAQMzP///gZmP8ACrMz///9Zmj/AAYzNIv/AAYzMov/AAVMzv8ABjM0i5KL/wAGMzSI/wAFTMz///eAAJIIDvsogbz3Za33DqzcvQGw3/db4QP/ANQzM/8C/TM0Ff///MzM/wAA5mj///szM/8AAOZkh4v//+TMzYv//+2Zmf//8LM0///5mZr///qZmAj///5mZ///9hmc/wBbMzP//53mZAX/AAzMzv//8oAA/wAFmZr///uAAP8ABMzMi/8ABmZmi/8ABZma/wAFZmiL/wAEgACL/wAGTMz///8zNP8ABkzMh5QI/wBEzMz//3ozNBXuCpb7gBVwCtz7VBVxCg5diaxssvewsfeIs2yszb0S7OD3SqyyrJuuEyfA9/X5XRXuCvck+/QVMPdcBhM3wL0KE6/ASAoTZ8BJChOnwL4KE3fAvwr/AQYZmP8B1uZoFfgVCg77KIG892Wt9w6s3L0BsN/3W+ED/wEIZmb/AvczNBX3VAr/AEiZmv//DszMFe4KlvuAFXAK3PtUFXEKDl2JrGyy97Cx94izbKwS7OD3SqyyrJuuEyeA97dgFfgTCnn4KBUw91wGEzeAvQoTr4BIChNngEkKE6eAvgoTd4C/Cg77KIG892Wt9w6sAbDf91vhA/eCYBX4FAr7BvfZFXAK3PtUFXEKDl37PsCJwsmsbLL3sLH3iLNsrBLs4PdKrH2mpaybrhOJcPfk+wkVsgoTSXCzChOJcLQKTPhyFTD3XAYTDbC9ChMrsEgKExmwSQoTKbC+ChMdsL8KDvso+zzAicK/vPdlrfcOrBKw3/db4USmE733tPsHFbIKE32zChO9tAr7OPghFdwKEz7dCtz7VBVxCg5d+1yo1qvJrGyy97Cx94izbKy4vxLs4Hmn7MmYrJani6ybrhPJfvhI+bkV9wMK+0j+GRWilX12cXZ9bR93i4CPcJWEhIiEi3+kgJyFq4sIyLmqtrFso2MfgouCioOJCBPZvqTO14sFE+m+vgoT3b73BQoT675IChPZvvdnCg77KPtcqNar/wA2TM3/ADCzM/dlrfcOrMvE5XcSsN9npvcqyYfhPaYT/pD3BPkcFfAK9wn9fBUT/0D3aAoT/yD3aQoi+A4VcAoO+wqJrPe4sfeIs2yswvMS7OCf88essKoTz4D3XvmGFfcECtT8QxXgi450jl6RhaCLkZGKroqei62LrYyhjKmFkXaLhYWIVIh+NosILvdmBhPvgKOXlaMe9AbWi5tjoUYIqpAF///6zMy0///w5mb/AGBmaP///pma/wAHmZj///+Zmv8AAkzM///+zMz/AACzNP///Zmai///7oAA///8mZj///ozNP///2Zo///oTMyLCP//ALM0BhPfgEsKDvuxiaz3+7L3f63E7wHr2qjvldwD92D5uxXzCm79QRVyCg7vga/3ia/3zrDivRKr5vg14GGtE/j4bfl9Fe4K9xQ0FfcGChP89wcKE/r3CAoOLPuCsPdOxFXI4qr3hap1uMO9EqvQYt1BwPda253CE5Iw9/D4mhXuCvdX+4MVLlx4Zh4TmrD3CQr7T/u1FRPTMPcKChOzMPcLCvfM+CEV9wwKE5aw9w0KE7qw9w4KE7JwdAoTszD3DwoT1nD3EAoO9xuJrPe2tfePrMHzAfXg9xnz9OAD99j5hRXyCve6/QsVTQoOTIms9/i/9wDvhammdxLj2tLvrNoT7/eC+OsVdQpE//7G5mYV92UKE9/3ZgoO9xv7ZO/1rPe2tfePrAH14PcZ7/cB4AP4/vcOFU0K+7r7qhX4EgoOTPtl7/as9/i/916ppncB49q278jaA/dm+zEV+BIKYP8BuuZmFfcTCg73G4ms97a194+swusB9eCo6+jrp+AD+P73DhVNCvtl+QgVtQr7URa1Cg5Miaz3+L/j5qKppncS49q05brmStoT/wD37fjQFXKfd6SkoJ+kpHagch5yd3ZyH/sdFveSCmL//uHmZhWL/wAVGZqU/wAMTMyT/wAIszSx/wAlTMz/ACyZmv8AFbM0/wAnZmaL/wAUZmaLoP//8uZm/wALmZr//+kZmggT/oCV///sMzSN///kzMyLbQj7LAeLOYGHV4aGhYt2kIW1jJ+Ms4u0i6GKtoqQkYughpFTkICPi90I9ykHi8L///xMzP8AMIAA///oszT/AB6AAP//7zM0of//4MzMl2iL///O5maL///KGZp+Tkf///yZmv///DM0///5mZn///XMzIuZCP8AAMzN93UF/wAAMzPM/wADzM2zi4uLkoeOgotygUB9Y4iJg417kYW/iJeQizcI/EkHizj///QzM4dRh4WFi3aRhf8AKTMzjP8AGZmajLaLsov/ABGzNIr/ACoZmYqRkYughZH//80zM4+Cj4veCA73G/tcqNaryaz3trX3j6wS9eB9yfe64BP9+P73DhX4JQeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI+zT76vc0B4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYX/ACuZmv8AAOZm/wAcmZn/AADmZ/8AKczN/wAAMzMIYyuRhQWbkJWMnosIE/uilX12cXZ9bR93i4CPcJWEhIiEi3+kgJyFq4sIyLmqtrFso2MfgouCioOJCKTOBf8AJ7Mz////zM3/ABuZmv///xmZ/wArszP///8ZmpGRi6CFkQgT/UWOepCL3gj3W/fq+1sHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRCEWOepCL3ggOTPtcqNaryaz3+L/3XqmmdxLj2nrJ9zPaE/2A9wkrFaKVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kIpM4F/wAfGZr////Mzf8AEhma////GZn/ACWZmf///xmakZGLoIWRCBP+gP//zTMzj4KPi94I/wCj5mYHi/8AFRmalP8ADEzMk/8ACLM0sf8AJUzM/wAsmZr/ABWzNP8AJ2Zmi/8AFGZmi6D///LmZv8AC5ma///pGZqV///sMzSN///kzMyLbQj7LAeLOYGHV4aGhYt2kIW1jJ+Ms4u0i6GKtoqQkYughpFTkICPi90I9ykHi8L///xMzP8AMIAA///oszT/AB6AAP//7zM0of//4MzMl2iL///O5maL///KGZp+Tkf///yZmv///DM0///5mZn///XMzIuZCP8AAMzN93UF/wAAMzPM/wADzM2zi4uLkoeOgotygUB9Y4iJg417kYW/iJeQizcI/EkHizj///QzM4dRh4WFi3aRhf8AIZma/wAAzM3/ABdmZv8AAMzN/wAezM3/AABMzAhj//+gGZqRhQWbkJWMnosIDvcb+1vE9yCs97a194+sAfXgsab3bKat4AP4/vcOFU0K+/77QhX3igoOTPtlxPcqrPf4v/deqaZ3EuPadKb3XNpMphP6gPc/TRXwChP9AIf/AVvmZhWL/wAVGZqU/wAMTMyT/wAIszSx/wAlTMz/ACyZmv8AFbM0/wAnZmaL/wAUZmaLoP//8uZm/wALmZr//+kZmpX//+wzNI3//+TMzIttCPssB4s5gYdXhoaFi3aQhbWMn4yzi7SLoYq2ipCRi6CGkVOQgI+L3Qj3KQeLwv///EzM/wAwgAD//+izNP8AHoAA///vMzSh///gzMyXaIv//87mZov//8oZmn5OR////Jma///8MzT///mZmf//9czMi5kI/wAAzM33dQUT+gD/AAAzM8z/AAPMzbOLi4uSh46Ci3KBQH1jiImDjXuRhQgT/QC/iJeQizcI/EkHizj///QzM4dRh4WFi3aRhf8AKTMzjP8AGZmajLaLsov/ABGzNIr/ACoZmYqRkYughZH//80zM4+Cj4veCA77vvs+wInCyaz426wS9eDTphO892z7CRWyChN8swoTvLQKcveDFU4KDvvY+z7AicLJrPf2p6h39xHvEuXvM9rPphO8gPde+wkVsgoTfICzChO8gLQKEz6A+wT5YBV1ChM9gOb8cRV2Cg77voms+NuszusBkeuP4I/rAxQc/wDhGZr/A3nmaBX//6CAAP//tEzMBYH///gZmP///oAA///7mZyL///5zMyLhP8ABJma///5zMz/AAbmZov/AAbmZov/AAlMzf8AApmY/wAQMzP/AAfmaAj/AG7mZv8AMxmYBf//9jM0/wASzMz///AZmv8AD0zQ///p5mb/AAuzNAj//+HmZv//gBmYFbUK+1EWtQr3Tf0UFU4KDvvYiaz39qeod/XqEofpl9p76RP490X5eBX//8XMzf//l0zMBf//+bM0///0szT///2AAP///Jmci///9hmYi///+czM/wAFZmb///qzNP8ABWZni/8ABWZni/8ABhmZ/wADmZj/AAuAAP8ADTM0CP8AWJmZ/wBf5mj///2zNP8ACbMwBf//7kzN/wATZmj//+wzMv8AAMzM///7GZqLCP///Bmai///+4AA////GZz///2zM////xmYCPtJ+zkVlAoT+vc9FtEKE/yb/FkVdgoOtYms/wEV5mb/ACZmZv8BCrM0rNJ2AfXgA/gt+ccVsAr7bv1NFVAKDvsFiaz4A6z3ZqmmdwHh2gP37/kzFdsK+5n8uRV4Cg61+2Tv9az/ARXmZv8AJmZm/wEKszSsAfXg4O8D96j7MBX4Ego296oVUAoO+wX7ZO/1rPgDrPdmqaZ3AeHasO8D9177MBX4Egr7CPeqFXgKDrX7F7fgrP8BFeZm/wAmZmb/AQqzNKwB9eAD+Ej7FxX3hQpj95EVUAoO+wX7F7fgrPgDrPdmqaZ3AeHaA/f8+xcV94UKRveRFXgKDkb7ZO/1rGyy+NOsEvPgse/3JawTnvd3+zAV+BEKE7479zAVUQoT3lIKE75TChPeVAoO+9/7ZO/1rPj2qaZ3Et3vNNoT9Or3DhV5ChP4fv1fFfgRCg5G+2Tv9axssvjTrM29EvPgse/3JawTn/eV+V0V7gr3Vv35FfgSChO/O/cwFVEKE99SChO/UwoT31QKDvvf+2Tv9az49qmmd8W9Et3vNNoT+ur3DhV5ChP8fv1fFfgRCvcp+hAV7goORvsXt+CsbLL406wS8+D3r6wTnPgE+xcV94UKE7x79xcVUQoT3FIKE7xTChPcVAoO+9/7F7fgrPj2qaZ3AeraA+r3DhV5CvcY/UYV94UKDkaJrGyy+NOsEvPg96+sEzj3vmAV+BMKE3j7K7YVUQoTuFIKE3hTChO4VAoO+9+JrPj2qaZ3AeraA+r3DhV5CsH87hX4FAoO94iJrPjbrNJ2Afhk+ccVsAr/AMazNP1TFVUKDvdNiaz39qdxvxLp2vdN2vdP2hOc+Cn5MxXPCvtr++sVE7x6ChPcewoO94iJrPjbrMLzAfgH8wP4B/mGFfIK/wEjszT9EhVVCg73TYms9/ancb/3AO8S6dr3Pe832vdP2hOd9+r46xV1Cvss+6MVE7t6ChPbewoO94j7ZO/1rPjbrAH37u8D9+77MBX4Egr/ATyzNPekFVUKDvdN+2Tv9az39qdxvxLp2vdF7y/a90/aE8338vswFfgRCvs0+HgVE9t6ChPrewoO85Z2k6z426zC8xLxvPct8/covBM+98T5hhX3BAr3kPuGFcMKE37EChO+xQoOUIms9/ancb/3AO8S69rK767aE573gvjrFXUKVfuFFeEKE97iChO+4woO8/tk7/cLdpOs+NusEvG89ynv9zC8E573wPswFfgRCveU+TAVwwoTvsQKE97FCg5Q+2Tv9az39qdxvxLr2rPvxdoTzvdr+zAV+BEKbPiWFeEKE+7iChPe4woO8/sXt+12k6z426wS8bz4KbwTnPhZ+xcV94UK98j5FxXDChO8xAoT3MUKDlD7F7fgrPf2p3G/Euva91raE8z3+/sXFfeFCqn4fRXhChPs4goT3OMKDvOWdpOs+NusEvG8+Cm8Ezj4A2AV+BMK91H4vxXDChN4xAoTuMUKDlCJrPf2p3G/Euva91raE5j3sWAV+BMKJvglFeEKE9jiChO44woO9oGt+Oyt/wAfzMz/ADpMzP//4mZodv8AMGZo/wA8gAASsOv/AF4zM6L/AL5mZ/8AFuZm/wBqgADrE+eA/wGQszT/AuwZmBX3bAoTz4D3bQoT54D3bgr//7pMzP//g+ZoFVgK9+P7uxVZCv//xhmY/wHb5mgV//+ggAD//7RMzAWB///4GZj///6AAv//+5mci///+czMCBPXgIT/AASZmP//+czM/wAG5mYe/wAG5miL/wAJTMz/AAKZmP8AEDM0/wAH5mgI/wBu5mj/ADMZmAX///YzNP8AEszM///wGZT/AA9M0P//6eZo/wALszQIDjCBrPgTrMbAicIStOH3dKaK4RPs98T4uxWyChPcswoT7LQK+5v77hXlChPK5gr3XfddFX0K7vfsFf//xczM//+XTMwF///5szT///SzNP///YAA///8mZyL///2GZiL///5zMz/AAVmZv//+rM0/wAFZmaL/wAFZmaL/wAGGZr/AAOZmP8AC4AA/wANMzQI/wBYmZr/AF/maP///bM0/wAJszAF///uTMz/ABNmaP//7DM0/wAAzMz///sZmov///wZmov///t//v///xmc///9szT///8ZmAgO9oGt+Oyt/wAfzMz/ADpMzP//1eZo5///y+Zo/wA8gAASsOtr5/8AIjMzov8AvmZn/wAW5mb/AC+AAOdq6xPRwPiT+YQV+BYKE9OA/C4W+BYKE+GA/wErszT///wZmBX3bAoTyYD3bQoT4YD3bgr//7pMzP//g+ZoFRPFoFgK9+P7uxVZCg4wgaz4E6zGwInCquoStOF66dbpdaaK4RPsgPfE+LsVsgoT3ICzChPsgLQK+5v77hXlChPMQOYK9133XRV9ChPKAPsY96gV0QoTyQD3PRbRCg72ga347K3ivQGw6/hJ6wP/AbpMzPl9FfdrCtr7DRVYCvfj+7sVWQr//cXmaP8B3BmYFf//5bM0///1zMz//+3mZv//8jM0///x5mb///BmaAj/AHaZmv//yIAABf8AEDMz///4GZj/AAqzNP///WZo/wAGMzOL/wAGMzOL/wAFTM3/AAYzNIuSi/8ABjM0iP8ABUzM///3gACSCA4wgaz4E6zavQG04feO4QP/ANXmZvmKFf///OZm/wAA5mj///tMzv8AAOZk///8MzOL///lzM2L///uZmb///EZmP//+czN///6szQI///+Zmb///ZM0P8AV8zN//+gGZgF/wAMTM3///LMzP8ABWZl///7mZz/AASZmov/AAYzNIv/AAVmZv8ABTMwi/8ABGZoi/8ABjM0////MzL/AAYzNP///DM0/wAIzMwI/wBcMzT//37MzBXuCiz7zRV8Cvdd910VfQoO9oGt+Oyt/wA8gAB2/wAvgAC9AbDr+EnrA/8BpEzM+X0V92sK8PsNFVgK9+P7uxVZCv//wRmY/wHb5mgV+BUKDjCBrPgTrNq9AbTh947hA/el+ZMV///FzM3//5dMzAX///mzNP//9LM0///9gAD///yZnIv///YZmIv///nMzP8ABWZn///6szT/AAVmZov/AAVmZov/AAYZmv8AA5mY/wALgAD/AA0zNAj/AFiZmf8AX+Zo///9szT/AAmzMAX//+5MzP8AE2Zo///sMzT/AADMzP//+xmai////Bmai///+3/+////GZz///2zNP///xmYCOL7jRXuCiz7zRV8Cvdd910VfQoOS4ms94+tc6j3va3NdhLz4Pd16BOe9+z5xxWwCvsv+50V+BcKE977AFdfKh4TvveyCjb3XhX3swoT3ve0Cg4/+36s91Ot9/2nd7kS29r3gOETzPfN+TMVzwr7HvvkFRPcfgqDrBV/ChPsgAoT3IEKDkuJrPePrXOo972tvfMS8+C489foE5/3fvmGFfcECl77XBX4FwoT3/sAV18qHhO/97IKNvdeFfezChPf97QKDj/7fqz3U633/ad3ufcA7xLb2sbv2OETz/du+OsVdQpg+5wVE99+CoOsFX8KE++AChPfgQoOg4GqdKz3mK33ua298xLz4K7z2OcTP/d0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6awS49r3Uto+phON98z7CRWyChNNswoTjbQKEy4s9hXrChMe7AoTLu0KDs2BtPjbrAHi4Pf2vAP38l8V+BMK+0b4yxVfCg5FgbqEpvfprBLj2vdS2hM495ZgFfgUChO4YqwV6woTeOwKE7jtCg7NgbT426z/ACfMzP8AOkzM///9zND/ADyAABLi4P8APDMzov8AvkzNov8AOYAAvBPv/wGVmZr/AukZmBX//+/mZov///GAAP8AB7M0///yZmb/AA0zNAgT33r/AA9maP//7UzOof//5oAAi///24AAi///7GZl///VGZj///QZmv//vxmY/wAFGZr///lmaP8ACIAA///+5mT/AAlmZv8AAjM0/wAIgAH/ACRMzP8ACGZm/wAQgAT/ABYZmov/AA6AAIv/ABAzNP//9zMw/wAPTMz///PmaAgT7/8AEczM///wmZj/ABHMzP//7DM0/wASszSL/wAnGZqL/wAYszL/ACrmaP8ACjM0zf//+uZm/wAEZmj///eAAP8AA0zI///2mZr///7maAj///QZmv//0czM///2szSA///tTMyLCP//FmZm//8h5mgVXwr/AaYZmP8CMuZoFfgVCg5FgbqEpvfprOTAicIS49r3UtpKphMk98z5nhX//8XMzf//l0zMBf//+bM0///0szT///2AAP///Jmci///9hmYi///+czM/wAFZmf///qzNP8ABWZmi/8ABWZni/8ABhmY/wADmZj/AAuAAP8ADTM0CP8AWJma/wBf5mj///2zNP8ACbMwBf//7kzM/wATZmj//+wzNP8AAMzM///7GZqLCP///Bmai///+3/+////GZz///2zNP///xmYCBM1l/thFbIKEy2zChM1tAoTpiD82xXrChNm7AoTpu0KDs2BtPjbrM/eVL0S4uBQ3ffC3Va8E+L4rvlfFZ6hm6Sldpt3dHl7cR9uo3+cHvwUjhUTxKOcn6CheZ50cnt3dnSceaMfE9D/ARdMzKQV92sKE8lE+3AVXwoORYG6hKb36azivdDqEuPaaOnW6WXaEzoA9xj5QBXRChM5APc9FtEKyfs6Fe4KE7yA2fykFesKE3yA7AoTvIDtCg7ElHb5Bqy6wInCEvhFphPo+Bb5fxWyChPYswoT6LQKyfsZFWAKDimUdvgurOTAicIS+AimE+j32fjRFbIKE9izChPo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+N+otttYdhLk3Pf4udexE974K/nIFbAK92T7XhX4KQoT7vgqCg5LgbqEpvfprLvdEuPa91Larq0TPven+TMVzwoTvlH9PRXrChN++CsKE77tCg7qgbT436i221h2EuTc9/i517ET3ve0+cYVrwr3YvsIFfgpChPu+CoKDkuBuoSm9+msu90S49r3UtqurRM+92r5MxVkChO+SPy/FesKE374KwoTvu0KDuqBtPjfqLbboKMB5NzquKGlm7/vudexA/g++YsV+B0K91H7IRX3QQoOS4G6hKb36ay73ax2xKYS49qUtpqnlb2u2q6tEz/w99b46xX4HgoTv/Ai/PUV6woTf/D4KwoTv/DtCg7qgbT436i22z7AicIS5Nz3w6aludexE9eA+D75fhWyChPPgLMKE9eAtAr3UfsUFfgpChPngPgqCg5LgbqEpvfprLvdYsCJwhLj2vdFpn3arq0TK0D3vfjRFbIKEydAswoTK0C0ChOiwDv82xXrChNywPgrChOiwO0KDur7ZO/ttPjfqLbbAeTc9wfv9yG517ED97H7MBX4Egr33vmaFfdBCg5L+2Tv7bqEpvfprLvdEuPape/L2q6tE5+A91X7MBX4EQoT34Cj9yYV6woTv4D4KwoT34DtCg53iaz426zSdgH3kOAD93f5xRWvCoD89xXMCg4/+3zb+LqsAfd3+TMVZAoy/VUVjAoOd/tk7/Ws+NusEveJ7y7gE/D3ifswFfgRChPo5/eqFfgcCg4/+3zbU+/4jqwS99DvE3D30PswFfgRCvsAhxX/AA+Zmv8AG8zN/wANGZn/AByZmf8ADEzN/wAdmZr/AFBmZv8AwOZm/wArmZr/AGcZmsD3BJmoqauwjpGRi6CFkXKKeYpvi2iLeIxmjAiFhYt2kYX/AB+Zmoj/ACAZmv//+jM0///wTMz//9vMzAj//5zMzPt5BYT//+/mZv//95ma///9TM3///eAAP8AE8zNCP//p0zN92QF///t////ACozNP//9YAAnf8APUzN/wAEzMyRkYughZFmimOKZ4tpi3CMd4yFhYt2kYX/ACuZmof/AAfmZv//+LM0/wAbZmb//8BMzAj/AHEZmvubBf8ACLMz///r5mb/AA9Mzf//0hmagW////QZmv//3pma///z5mb//+RmZnxsgHd9gnKLCBOwfYuHjoCLCG58bX52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gxU4Cv8AbeZm+KgV/wAeMzT//+zMzP8AE+Zm///egACL///fszSLYX5sY2r///WZmv//92Zm///3TMz///eAAP//+Jma///3gAAI/wADgAD/AB6ZmgX/AAmzNP8AUYAA/wAOszL/ACyzNP8AAYAA/wA7zMwIDvtA+Ri3AfgY+UQV+/Rf9/QGDpT/AFYZmv8AOUzM/wEmszT/ADlMzAH/AFUZmv8ANeZm/wBwGZr/ADXmZv8Aahma/wA15mYD/wGpmZr/AFKzMxX//+PMzP//4GZm///UZmb///kZmYv//9szM4v///MzNP8ACkzO///05mb/AA6AAIv/ACCAAIuR/wAyZmb/ABVmZv8AJoAA/wAVZmb//96zNP8ABgAC///IZmb/ACFMzIuXi/8ADMzM/wAJZmaL/wAPZmeL/wAiMzP//9YZmv8ACJma///i5mb/AB+ZmQj/AA9mZv8AApmZ/wAPZmb/AADMzv8AEDM0iwj/AB0ZmP8AHeZo/wAF5mb/ABmzM/8ACIAA///6GZj/ABEzM///6OZoH///48zMi///8jM0///kmZr//9izNP//7uZm/wABszT/ABmzNP8ADpmY/wAiMzKL/wAXGZoI/wAUgAD///MzMv8ACWZn///wmZr///CZmv//9bM0///wmZl5Hov//+nMzf8AEEzM///o5mf/AANmZv//3rMz///aZmb/AA9mZ///8Jmc/wAcMzL//+LmZosI///rgAD///hMzP//8kzNf///5kzN/wAbTM7///oZmv8AKeZmH/8ADMzMi5f///8zMv8ACxma///9ZmcI+9oW///jzMz//+BmZv//1GZn///5GZmL///bMzOL///zMzT/AApMzf//9OZm/wAOgACL/wAggACLkf8AMmZm/wAVZmb/ACaAAP8AFWZm///eszSR///IZmb/ACFMzYuXi/8ADMzN/wAJZmaL/wAPZmeL/wAiMzP//9YZmv8ACJma///i5mb/AB+ZmQj/AA9mZv8AApmZ/wAPZmf/AADMzv8AEDMziwj/AB0Zmv8AHeZm/wAF5mb/ABmzM/8ACIAA///6GZr/ABEzM///6OZmH///48zNi///8jMz///kmZr//9izM///7uZm/wABszP/ABmzNP8ADpma/wAiMzKL/wAXGZoI/wAUgAD///MzNP8ACWZn///wmZn///CZmf//9bM0///wmZl5Hov//+nMzf8AEEzM///o5mf/AANmZ///3rMz///aZmf/AA9mZ///8JmZ/wAcMzL//+LmZosI///rgAD///hMzf//8kzNf///5kzN/wAbTM3///oZmv8AKeZmH/8ADMzNi5f///8zMv8ACxma///9ZmcI9zr39BX//+PMzf//4GZm///UZmb///kZmIv//9szNIv///MzNP8ACkzN///05mb/AA6AAIv/ACCAAIuR/wAyZmb/ABVmZv8AJoAA/wAVZmb//96zNP8ABgAC///IZmb/ACFMzIuXi/8ADMzM/wAJZmaL/wAPZmaL/wAiMzT//9YZmv8ACJma///i5mb/AB+Zmgj/AA9mZv8AApma/wAPZmb/AADMzP8AEDM0iwj/AB0Zmv8AHeZm/wAF5mb/ABmzNP8ACIAA///6GZr/ABEzMv//6OZmH///48zMi///8jM0///kmZr//9izNP//7uZm/wABszT/ABmzNP8ADpmY/wAiMzSL/wAXGZoI/wAUgAD///MzMv8ACWZk///wmZr///CZmv//9bM0///wmZx5Hov//+nMzP8AEEzM///o5mT/AANmZv//3rM0///aZmb/AA9mZv//8Jmb/wAcMzT//+LmZosI///rgAD///hMzf//8kzOf///5kzM/wAbTMz///oZmv8AKeZnH/8ADMzNi5f///8zNP8ACxma///9ZmYIDvy793T47RX8Xv0jtIv4X/kjBQ73bIH1+KasErnPqfVGrOferM+p9Uas594T5sD4fvjQFamzo8TEsVJKHotcfG5jZv//v5mY///EZmb///pmaP//xZmai2AIXQeEk4iTk5SOkh63B4ujjKOYpJScn5uinLqtybeL2ovmSccli1aLYX1ucm1zdm+LZQhopIObnp+Xoh6LmImRh5AIh5CJkYuaCBPnQKn8pRU4Cvwq+KUV+GAKE+5A+GEKE/ZAqfylFTgKDtuD9fikrBK5z6n1Rqzn3uT1E+b4p/koFfhfClb8+xUhCvwA+KMV+GAKE+74YQoT9qn8pRU4Cg61gfX4pKwS5vW+z6n1Rqzn3hPy9yT5JhUgClb8+xUhCvd1+KMV+GAKE/b4YQoT+qn8pRU4Cg77MffY4Kd3AfeWsQPO9+UVsoO3hrqLvIu+kb6YVPtUaPumi4oIjoWujAWLi6X3oNb3kY6Vj5qLlwiUiJGGdnFyix5ohWaHZYtPi02UUZ4IDpL7fKz4dfgBaKwS873c98r7yr0TtPd/+NIV/XMHcHqAdHR5kqoe+XMHqp2Soh6inIBwH2LSFRPURotOi1yNCBO0iYmLeAWGj4iPHqWJBbP///zmaJr///cZmIttCP1zB4ttfP//9xmaY////OZmCHGJBYeHiIYfi3iNiQW6jciL0IvQi8aLvIkIjY2LngWQiI6HHnCNBWH/AAMZmn//AArmZounCPhSBxPYlImTipqLCPcm3cz3GtpR4vsYH0CLUIlwiwgO/Az7GaT3Auj3Y/US/wAqTM2y///lszP1E/D/AGxMzeoV+FwKE+j//8qzM/eYFTgKDvu09/uj962jAarG9xPGA/cu+SwV+GIKiPvFFfhjCg78JfgBqPdhoMjFEtPFWbsT8PD5dxX4ZAoT6Kb7vxX3HAcT8PhlChPo/wAgZmb///6AAP8ACpma/wAEszSL///KzMwI+wEHi2J+iGOJhoOMfI+FqYz/AAqzM4v/ACNMzYupi5uLqYqPkouZh5MIaY16jou0CA77tPgBqNGt91h3AfdIuwP3SPhMFfhmCg77tPf7pvc5ptGuAfdfxAP3X/hiFfhnCg77tPf7o/cpo/cFngG4wPcLxAP3bfhbFfhoCsSQFfhpCg77tPkZsRK2oIOdn60TsPcD+RkV7wZxXlP7EGj7AwitBqr0xPcOwOYI+0IGe4aMjx95BhPQ+GoKDvu09/ul96mlErq9aLzsumrFE9j3M/kqFfhrCutiFfhsChPk+G0KJCkV+G4KDvu09/ue9wWk9yijAbPD9wvDA+v45BX4bwpThhX4cAoO+7T4fLIB9xuyA/dC+KMV9mQgIGT2IbL19bIHDvu0+HyyAa73ggP3pfijFfuCZPeCBg77tPhurbKtAbL3egP3ofjZFft6afd6BmQE+3pp93oGDvwir8ADr/icFfhxCg78IvcAwQP3NvieFfhyCg77kfgBqPdhoHqtEs679wS7E7j3d/hMFYtiiYhpiYeDi32PhKmMkouji/8AI0zMi/8ABbM0i6mKj5GMmoaTY42Djou0CPQHzm6kXR7//9wZmoto///dGZh9ev8AAGZm/wAXszT/AAGAAP8AFTM0i4uLkImNhYsIE9h7hFyDcYmKg4yEj4X/ACBmZv///oAA/wAKmZr/AASzNIv//8rMzAj7AQeLYoOIY4mGg4x8j4WpjP8ABbMzi/8AI0zNi6OLk4upio+Si5mHk2mNiI6LtAj3CgcTuPhzCg77tPsJo/etowGqxvcTxgP3LvdQFfhiCoj7xRX4YwoO+7T7A6gB9ynBA/cb9yUVl42Cax/7FgeLWGyIY4mGg4x8j4WpjP8AHrMzi/8AI0zNi6yLoIupio+Si5mHk2mNdo6Lvgj3gwf///qzM5D///iZmv///eZm///6szP///0Zml9wcX9ceot//wACGZr///cZmv8AB+Zm///55maklJ6RmIsIDvu0+wSr95qpErrA78l7oxPw1PcDFZWLmY6Onf8AAUzN/wAH5mb///0zM/8ADMzN/wADgAD/AAhMzZCXl5Sqi52Lq4SLXItVc3ReZ1tmZWGLWwj3YgYT6KoKE/CdCg77tPsKqfccpvapErm95cZqyRP49073KBWsChP0o76HUktffm4fa4v///ezM/8ABoAA///6TM3/AAuAAIWXgZB9iwj///OzM///84AA///3GZr///KzM///4IAA/wBGmZr///SzM/8AGjMz28a50B+LxVymao4IE/igCg77tPsDqNGtAfdIuwP3SGcV+GYKDvu0+wmm9zmm0a4B91/EA/dffRX4ZwoO+7T7CaP3KaP3BZ4BscD3C8QD92Z2FfhoCsSQFfhpCg77tPc9sAH3A/c9Fe8GcV5T+xBo+wMIrQaq9MT3DsDmCPtCBnuGjI8feQaKcYRjhm8IoIgFl7uSkaeLCA77tPsJpfeppRK0vWi87LpqxRPY9y33ThX4awrrYhX4bAoT5PhtCiQpFfhuCg77tPsJnvcFpPcoowGsw/cLwwPk9wgV+G8KU4YV+HAKDvu0lrIB9xqyA/dBvRX2ZCAhZPUhsvX2sgcO+7SWsgGu94ID96W9FfuCZPeCBg77tIitsa4Bsvd6A/eh8xX7emj3egZlBPt6afd6Bg78Iq/AA6+6FfhxCg78IvcAwQP3NroV+HIKDvu0+wqr93KkAaq/9wHBA/dUpRWXCrb7JBWei56XlJX/AACZmpP///yzMv8ABUzN///4szT/AAKzM4iIhomHiwiChpu0H9YH6VKfWmFNamN8loGanpKYkx6LkIqQio2KjYqPi5IIm6CWrKKqg0AeUXwF///BGZr//++zM///1+Zm///kTM2LYYtgrnC1i6yLnZStqY55mXakiwgO+7T7Car3FKfNpAGtwfcGxAP3ODUV+HQKsfcwFfh1Cg77tPsJpPd4pAGixvcgxgP3LPc1Ffh2CtH7NhX4dwoO+7T7BKH3daEBnvemA/8A6DMz6BWn/wAj5mb/AASzMv8ABEzN/wAcGZr/AAHMzY+Pi5mHj3mKhIp0i3OLfIx5jIeHi32Ph6iK///+MzP///fMzf//8szN///tMzMIYlJnxAV/n4uSqIyPj4uZh495im6Kc4t0i4GMeYyHh4t9j4f/ABwZmv///jMz/wABGZr///2Zmv8AGpmZ///aMzMI/wA4MzM7BYiI///OzM1Ri4v//+GZmf//3IAA///9szT///tMzf//4+Zm///+MzOHh4t9j4edjJKMoouji5uKnYqPj4uZh48IboyMlJmdCLO9q1kFl3iOg26Kh4eLfY+HnYyljKOLoouaip2Kj4+LmYeP///j5mb/AAHMzf//+Zma/wAC5mb//+WzM/8AJUzNCP//y8zN1QUO+7T7CaTNp/cUqgG3xPcGwQP3H/cWFaCLo3uadZd4j3KLcouJi3yKhwj7PgaOTZxS4IsI07vS1dRjxzYfXYttdHFoCJ97BZ6hn6Cxiwhl+zAV9wIGhm5yZmyLCHNymMAfDvtj+AGnxXbhqvcNqAGnqPcOqvcOpwPE+KcV+HgKbhb4eQr3SpsV4mw0NGziNarh4aoHDvtj+AGn9w+q9w2oAaeo96enA8T4pxX4eApuFvh5CvegfBWq+2BsBw77Mfeouvd3rhKj4vHO1aR8oxP094V7FdOLwsOfzghzkgX//+7MzP//0DMz///gmZr//+WZmv//3Jma///25mYI/wCZTM0HqrbIlh6Ri5KKkIGRfZiEnIsInpehnaF4nG4fZYtrVHduCImLjd58iwWFi4SIgodxf4GGZIIIkHIFj4yPi4+LCJqXg28f//87gAAH//+7zM3/ABXMzf//3jMz4ov/AJezM4v3Hb73DOSLuYvJY5I3CKWNBRP4fvcwcomLgwWBiIiGHn2LbKNbiwj7FCb7DftNH/tD3/sM9xkeDvsxiqj3YrK6svdCsnGnEvcB2/dsphP298X3+xX7CPciBqWakaEe0QbMi6hWmkMIpo939zT7TYs9iwUT7n77B42LHxP2iomLeQUT7oaOiI8eqQa2lIFoH/siNGTiXDRk4vs2B2x8fmMecQaGiIiGH4t4jIkFi+KNsq/oiYsejY2LngWQiI6HHnAGYn2bpx/3NvcIsvsIuvcIBw77MX+9k7L3JbK6svdGtQGczb3UA/cn4BX///1MzYuI////zM3///yzM////5mZCJD/AAOZmgX/AB5mZqL/ABcAAf8AKIAA/wAHMzP/AE6AAAj/AHhmZrL//4nMzQb/AAAZm/8ABczM/wAAGZmRi/8ABjM0CKj3CrL7CqwH3bLKtx6gi5mAl4CWgZSDmYsIopuZo6xVlnUfWYtgeWpp///PTM3//9BMzP//6bMz///PTM7///1Mzf//uGZmCP//pLMzZOZcMGT/AFoZmgb///0Zmv//yOZm///0mZn//8VmZ///2zMz///YszOF///5Zmb///tmZv//+5ma///65mf///uzM///5YAA///ygAD//+ozM///7TMzi///6ZmaCH+Yf5idoZallZSbrB6li6J/pH3/ABwZmv//8DMz/wAd5mb//+/MzbCL0Yu3rp28CISRBXNqU4Rvi3GLfJN6lnaZcZlQiwgO97uBvlmkeqX3eKnQrn2l9zGidqkS6tP3OtGuzVi+3KB8wvcmyGygExHA9zv4thWbkZ6Rm4sIw8Z0+wYqXmI8H3eLgI6AjQhD+3QVEzjmcn99Zh5zBoeJiIcfi3qMiQWL342rrtqJix6MjYucBY+IjocecwZofJemH/dbB5eFlYeji/8AYGZmi/8AM0zM/wAtzMz/ABgzNP8ANTM0CP8ANRma+6QGE5DGS6JxtR7/AB9MzIv/ABxMzP8ADDMz/wAbMzT/ABcZmgj/AAEzNP//5rMzBZSNk4uQi5GLkIuRiQgTVMaihaeIq4u+i+Shi+WL1E2nQqv//88zNP8AFWZm///ozMz/AAqZmouxi760m66LCBNUxZ6LwYCmKwigjID3AAV6lVuZXYtDi1Fei02LSLF6zm8IE1Dq1GuicYtki11cdmiLaotvnIKUc6KDtomgCHaK/wADTMz//7mAAAUTmeD//+1MzP//88zN///wzND///uzM///7JmYiwhyhaXDH/d54AeUl46TH50Hj4mNhx4TGdAn9x4GWHqLeQWLT///9EzM///dmZpf///4zMyPnP8AAbM0nIv/AA+Zmou/bu37Kot2i2uKXYgIEzrmX4lWiH+LCHoHiIuIkR6Pi6GMkosIm6OGaB8O91KCpH2Z94Ou3qX3MqB8pRLq1Pcv2tegfMP3JMhtoBNzgPhy9xQVE3NgkfsUBZSNkouQi5GLkYuRiQgTs2CihaeIq4u9i+Shi+WL1P//wuZo/wAbszP//7YZmP8AIEzNW6B1louxi76ym66LCBOzUJ6LwoCmKwigjID3AAV6lVuZXYtDi1Fei02LSP8AJjM0///vgAD/AEHMzP//44AACBOzoNVroXGLZItdXHZpi2mLcJyBlHSigraKoAj7RPfBFYtlgWx7cnhscnxOiwhz954GEzcAnZCXjaOLvIu/cYsgCNqNFYu4///y5mb/ACPmaP//4xma/wAeGZj//9jMzP8AKMzM///HMzT/AAUzNFiLCBM7ACyLRIV4hgh6B4eNiZAepo0FjYyNi42LCKOOe3If/FgHcn98Zh5zBoeJiIcfi3qMiQWL342rrtqJix6MjYucBY+IjocecwZofZenH/dSB8iLjIaOhQjf+0EFn2CwabqLmIuZjpSOCIeeBWSL///0TMz/ABEZmv//57M0/wAz5mYINfdMBa6Z1r2L6wgOMiy5srqEpvfvrumy0KmmdxKy4fdw2hOfgKlaFV34XLkH+QEETZYGzI+zix6Sh46CHnKBQH1jiImDjXuRhf8AMTM0///9MzT/AA1mZv8ABEzM/wABTMz//7mAAAj//2UZmmT3LyUGhImJhB6Hi2KcaotJi191Y2VgYHFQi0EIE9+A+w/JMfcAHrKLsJ+8/wAoTM3/AATMzP8AA+Zm/wAHMzT/AAHMzYuEi3OWaIuLk4iOjJONCBO/gPcCCvsi/C0V9wAKE9+A9wEKDvsxgaz3Wa2+rfdirAHE3PeQqwOZ98UVtgaKgYuBi4GLhIuEjIQIZot3couCxosFmvsk1zX3C4u+i7Oap43/AA+AAP8AJoAA/wAJ5mb/AC0zM/8ACJma/wAxTM2C/wAFGZr///SZmv8AAbMz///0Zmb/AAEzM3ZIdlFFi0GLVs2A9xcI9zyLna37UIuLrIud92GLna37cYsFlfcGtufZi9SLqEmbSZX///7mZpX/AACZmpX/AASAAP///DM0/wAz5mb///mzMv8AMRma///2GZq4ao1imFeL+wWLOTF5+ykIcYt4cgUO+GeIpvftrfcpqQH4hNj39twD+jP3nBX7AFD7GPsEHnCLeZRzo4SEeXeCiQi2900FqvcYxKO5iwjDtHI7H/vg/FsVobSc6ZzTo36jhbGLCPdC7Pc59NtTwy8fYItQfVxlb3NobG77EQhj+0YFcfsDdFV4bAiSewX7tfjFFf8AFDMz/wBkMzT/ABEzM/8AQDMy/wAUGZr/AC2Zmgj/AASAAAb3JMj7AfsI+x5Y+zT7YkmKkJwfi5GLjoyPCP8AgEzM/wIFgAAV/wATszT/ACJMzP8AFxma/wAWgAD/AB7mZv8AF7M0CIaYBf//zxmadf//1jMy///j5mj//9zmZ///z4AA//+4GZn///WzNP//vUzO///nGZj//7VmZv//1MzMCJV3Bf8APxma/wAc5mb/ADoZmf8AGszK/wA+MzP/AAvmaP//5IAA///PmZr//+kzNP//vrM0///t5mb//6UZmghU+6gFhW59f2mLCHAGh4uIh4qHCIh69wiNBauLnoneiwj3W/cH9zD3Q/ci+wD3AvsfH///97M0i///97My////zMz///fmZv///7M0CA77MYql93ip0rK5s9iidqkS5dP3OtAT9/hE+HMV///XZmYG///yGZr/ADKZmP//1EzM/wA6Zmj//4wzNIt3i2uKXYgIE/tfiWCIf4sIegeIi4iRHo+LloyTiwibo4ZoH2VMY8pdTGTK+7YHcn99Zh59BoeJiIcfi3qMiQWL1Y2rrtmJix6NjYucBY+HjocedAZnfZemH/dbB5aFloeji/8AYOZmi/8AM0zM/wAu5mb/ABezNP8ANhmaCP8ANBmasv//2EzMBv8AA0zM/wAPgAD/AAFmaP8AD0zMi/8ADjM0CIyuB///kWZmsxX//2CZms4GE/ebkZ6Rmov/AC2Zmov/AC7mZv//8UzM/wAQ5mb//7+zNAj/AAYZmmMV/wAATMz///pMzP8AADM0hYv///mzNIv///YZmv///4AA///2szL///8Zmv//9zM0CP//W2ZmuQb/AJwzNDYV///uzMz//86zNP//2IAA///qTMz//8aAAIt3i3+OgY0IzQcO9wJ/rPeDpPcTq/eEpAGt2ve23PcD1gP5L/lqFfh6CtP4yhX4ewp3JBX4fAr3xvxlFceLrqiqqwhxoQVxbmR2fIsIem2Y1eq+xLWRmod3H4t4iIyLfwiAkn+nlamTo6x0sEM7Lzn7AWK2SsweDvcCfaP3jqL3Fav3hKQSrdr3v66J0rvXcLAT+ID5L/lqFfh6CtP4yhX4ewp3JBX4fAr3yPxnFRP7ANHErMcfi69eqValeZODmoufCKKboqoeE/qApqJrXx+wiI7SBW+icpNqi0mLU22LU4tvm3m3cggT/QCme6t2i20IaHN9cmByrbweaImPKgWpi6yDrYsIDr6BtPjisAGw5t+t99SsA/f5gRXsi+S5z+SGlISRgItEPUdsLov//9UZmov//9tmZpf//+GAAP8AFIAACP8CC4AAB/8AIbM0/wAXGZj/ACLMzP8ACuZo/wAggACL9x6LwjmlNZeH/wAJszSO/wALTMyRhr+Du4LCWJBes/sPizaLRGxQVQj//72Zmv//wzM0///YZmb//6MZmIv//5ezNIv7NfT7OPdriwj7Jf8AZjMzFf//x0zN/wA7GZj//+SzM/8AXWZni/8AWUzNi/8AVkzM/wAW5mb/AELMzv8AJIAA/wAs5maT/wAJzMz/AAgzNP8ACRmc/wAIZmb/AAgZmAgO91uBtvg9qcOtvqkBt633F62L5fgSqAP4r4EV+H0K+974yxWaCvs5jBWbCg73NH6n94am9w+s94OkAcLb9wTW6933GtsD+S/5ahX4egqV+D8V+H4K9+X7wBXEo+jLsZNdY2J4+wdIe2uX2x45hhVonzvo5ejh8rpzyDL7CkojPR4O9zR8svdkvvcQrPeDpBLC2/cE1u3aZdwT/Pkv+WoV+HoKlfg/Ffh+CvgG+2QVE/2Qn4+gi5aLl4mfaYtqi2x4YmIIn3kFmp2XlJOLjYuOiIuEi4aJgYh/CG77AwUT/omAhnCLfotqmXy5i62Lr5ywtYZ8iYKLiYt/jnasi6yLqp+0tAh3nAV9en6BhIuIi4iOi5KLkY2UjpcIvfdmBXeIX4V/iwht+xMFdzZQZXiLgIuJk4udi5X/AAIZmpz/AAPmZpoIDvdjiaj3iK73LKmys3Gnx6kSt633F633Ldz3UKTGqBP34Phx+IUVo5aRox73DgbWi51YoUYIqJAFhLSCyIbACPvWiwUT7+D7EY0FE/fgh4mLeAUT7+CLiIz///yAAJL///+AAAipiQX/ACpMzP///TM0/wAJszT///LMzItvCPw5B4tv///zMzT///IZmv//1czM///85mYIcIkF///7gAD///+zM////YAA///9TM2LhgiLeI2JBYvoja8e9xGJjY2LngWLkP///YAA/wACmZr///qAAP8AAGZmCHGNBf//2TM0jv//8MzMlouqCPdZ9xcHrYuWfJFvCJFsBYeNh5EeoouNjwWHqoepi66LrJCyjqIIjYqLiR51BoeIiYcfhG0FhG+De2eLCPsXBvug948Vmgr7OYwVmwoOekbCqXb4hsAB6cfQxPdV0wP4tfc9FYv3DTbd+wGtYGZZbllva6p1t4u4i7qnrrClqnSsc7OLw4uzuae3CH6PBXxxbnxui2SLZ6FwqE1KJF6LIov7B/cVWIssi3B4dXd9CEq9LECWgKqjzFgFv77suIvei7prtm6tpZyxo6uL7IvI+xKLNYs5aEhGXXClZadkiwhUi2FeamYIlYMFnJ+imqWLuou2ZqdrrNz3S7GL91AIDvcxiqj3vLL3k6cB1K2+3Pfa3AP4ydMVb357Yh5wBoaJiIYfi3iNiQWL6I2usuKJix6NjYueBZCHjocecQZjfJiqH/iKB6eZm7QepQaQjo6QH4ueiYwFiy6KZ2Q0jIseiYqLeAWGj4iPHqYGspp9bR/7Z/va92cHp5ibtB6mBpCOjpAfi56JjAWLLYpoZPsfjIseiYqLeAWGj4iPHqYG/wAGZmaL/wAHGZr///+zNP8AB4AA////MzQI//20TMwH///4mZr///8zMv//+OZm////mZr///mAAIsIcAaHiIiGH4t4jYkFi/clja6y4omLHo2Ni54FkIeOhx5wBmR8mKof95D32gf8Xv8BHuZoFf8AG2Zm///5GZj/ABeZmv//88zMi///7jM0CPyKB4v//+8zM///6Jma///zgAD//+RmZv//+LMzCA5Tf8D39Lz3XKmldxL30duA2RP0tBaPf9Sjw/eEBdnux7Wui6CLnX2LbIt5hnODbAhh+zUFE/j4fwoT9JOokaqLoIvHbZ1li1eLSnQw+wAI5PgXdYsFdYJ8h3eHeohlhXuLCIdyBYiNiY4erI8FmJKBeB+LgYl+h3sIDlN/wPf0vPdgppqVEvfR24DZE/T/AOrMzf8CAoAAFf8AgDMz/wAbgACLs///iYAA///mmZj/ACCAAP8AjWZodYsFdYJ8h3eHeohlhXuLCIdyBYiNiY4erI8FmJKBeB+LgYl+h3sI///3GZr//9nMzP//kOZm///oMzSLY/8AZWZm/wAVszT//4yZmv/+DkzMj3/Uo8P3hAXZ7se1rougi519i2yLeYZzg2wIYfs1BRP4+H8KE/STqJGqi6CLx22dZYtXi0p0MPsACA5Xf9Opyvc6n/eG2AG9rfeJyLzNA734dhWL+xjrd9iACIyfBVCW///0GZr/AAMZmv//4OZm/wAc5mZv/wAaGZqB/wAd5maLqIvSybbYi8yL4WWweQhNQQV7eod3i3WLc5JwmHUI1vsGBY+Flm+LcItIPXp3i3uLfZF5kwj7Ds0FfpJ+kX+Lf4t8hnZ/CD5cmXsFpJaZkZmLmIuYh59/CPcdQAWZg5iIlYuZi5qUmJL3Ou6NwYuwi8r7B/cXi72LmZGempwI3ukFMr0upVqL+xSLNj6LKAgO+6aBvPiXowHf0eW0A/cu99kV9wMH4J2sqqCfdWAei1VoWltWCK/7uhX//9rmZv//+hmatNMfi/cdl5UF0826wovbCK97tVBEVG/7Mh77GAdzdnF1c3gImHbIvov7AQUmo2/GHrKLt6Swwgh5nAVsY3CDfYsIDvcemHaSqPjipxLErb64+C23E3z5FPjBFamaqrMepQaQjo6QH4ueiowFi0OKZGdBjIsehoqLeAWGk4iQHqYGtJhpcB+L/A+LdAWAiYeIHoOL///wMzT/ABsZmv//48zM/wAl5mb7F/dE+273nYuLCPs9i4mHi3sFhpKIkB6QBv8ABhmai/8ABxmZ///+mZj/AAfMzf///YAACP/9teZoageGg4eGH4t5kokFi/cBja+y04mLHo2Ni54FkIeOhx5wBmR8qakf9/MHrYyakx6Si5WAnHUI9/L8TQUTvJV8mYWaigiZkpWeH/y5/wJBszQVpP//8ZmY/wAWmZr//+xMzP8AA2Zm///xZmgI/GIHi///5bMz///zmZpr///ZZmb///5mZwgO996Bq7C31qT3eKT3Nqd3qxKP19S499a41NdMxvcgxhP30Pda9zwV96MHpIyXjx6Oi5CDk34I95r8TQWYd6KFm4sImZ2Znh/4dAfwkqOyHpmLkXaSfpR5l36hiwidmpelq2OmWDN8YPsbH/vCB26Jf4UehIv///QzNP8AExma///izMz/ADDmZggT+9D7m/hN+xiLiYoFE/fQeAcT+9CGk4iQHpAGrIuoYZFxCPwnByaEc2QefYuFoISYgp1/mHWLCHl8f3Frs3C+H+OatvcbH/k8+wEVmJmflJOHkoEf+2UGf356foSRhJQf9wD4IRUT87AyY0BES7pH3P8AUxmY/wAu5mjRzP8ASBmaZv8ARuZmLx/R+zYV+IAKDsiKqPeUsfe6pXunEtytv9z3etwT3vhy+HIV+IEK+3r7VhXNi9GNsJy1nevAi/SLvXq0Z61buESQTIsIE+77CYv7L4R2hgh4B4eOiJAetf8AAWZoi//9spmYU4sFhoiIhh+LeI2JBYv3L42us+GJix6NjYueBZCHjocecQZjfJmpH/sZ/wIigAAVm/8AAIAABY2MjYuOiwiljnpuH/yKB2+Ke2IegQYO9wn7ZcSxt/lKrQGw69Gt9+HrA/cf+y0VWgrt/wDigAAV/wIGmZgH/wAd5mb/ABXMzKz/AAoZnP8AHxmaiwj3HPIh+2T7RzUg+wYf///Q5maL///RZmb/ABEZmv//2LM0/wAgZmYIaf8AIjMzFf//1bMz/wAzmZj//+RMzf8ASkzOi/8AXWZmi/8AbZma/wAdMzP/AEwzMv8AKMzN/wAvszQIDvcFrNn4a9ZXwBKiq/cWt9jgE7yi+G8Vi/sa9zaLi12LgH6Dh4UIn3yrugWQko+Ti5WLnoCha5sINbYFc5d2q4urCKGf2+r3AqUo+0Eei/sFhjlUOghEvQWHjoiMhouBi4KAeXsIS1WdfQWZlZqSmIuci5aDmoAIrW8FoJbZx7XBvMuNwYvsi8OH1H/aCMOvBRPclpKXkJWLmouchJx6CNNI+0H7DJV5j4sFpIuXgZZsufsXYvsj8lcI7dp+oAWBh3+EfotOi8D3U/sD9yII9zf3B/sl9xIFhZGEjYaLf4uAhIOECPsJNgVzsIehYKEIE7xxmHCRcIsI+wc/QfsBHw7IhaZ1qPeUsfe6pXunEtytv9z3etwTL/hy+HIV+IEK3IwVi716tGetW7hEkEyLCBN3+wmL+y+EdoYIeAeHjoiQHrX/AAFmaIv//bKZmFOLBYaIiIYfi3iNiQWL9y+NrrPhiYsejY2LngWQh46HHnEGY3yZqR/3aAfPi6iFkIQI8vtUBROv/wAZMzT//9EZmv8ALMzM///Z5mbGi5qLnY2VjwiHoAVmi2qsdLcIIPdhBbeZ6cSL9Aj8UP8Ai4AAFZv/AACAAAWNjI2LjosIpY56bh/8igcTZ2+Ke2IegQYO9y/3r6N9oPfSnxKhyU+pd6n3EdBbqBOy93n5EBVyjJCbR4tWi0lmi1CLTNRutXuogKJ9i1mLYHFzaItoi2q1hrMIE6iKk22IBROmj2aRf4tUCKmMBYyQi46KjY2KjIqOipWFm4K1i9CLvr+LxYvMVKNZnQgTsXaSW52LuouroqWoi7eLoGqUXgiojwX4H/toFYyJi4iLiQgTYICJf4YefQYToIKDiYYfi4MFE2CRhQWLuY2foLeJix6RkQUToJMHE2CQhY1+Hn0Gg4uJmYmbCHT3nouRBZaOkJEemgaQl4yQH4uTiJE5iyD7nfsE950yi4aFi4MFi4iQiZeKCJsGkY6Gfx+LiYuIBYU1///4GZos///55mY2in2Ie4SLCH0GE6B/hYmGH4uDBRNgkIUFi6iNnqCyiYsejpEFE6CTBxNgkIGNhB58BoaKlJkfkQePy5DLkMwI7vuCBY+ElIiPi5WLj4+OkQjt94cFDvdc97mg9652vqUB9x/PA/dj9+kV95wHnI6Plh62BqGLkYWXXgiikHjmcoMFjIiMg4yLCPt9BoyLjJOMjghzk3gxoYUFlriSkaCLCL4GlY+Hex/7nQd5goV1Hn0GiImJiB+LfoyKBYvIjKCfyoqLHoyMi5gFjomNiB59BnSElJof+GeOFYQHgIp/hh59BoKDiYYfi4ORhQWLuY2foLeJix6RkYuTBZCEjX8efQaDi4mZiZsIdPeei5EFlo6QkR6aBpCXjJAfi5OIkTmLIPud+wT3nTKLhoWLgwWLiJCJl4oImwaRjoZ/H4uJi4gFhTWDLIU2iX2Je4SLCH0Gf4WJhh+Lg5CFBYunjZ6hsomLHo6Ri5MFkIGNhB58BoaJlJkfkQeRy4/Lj8wI7/uCBY+ElIiPi5WLj4+NkQju94cFDqeLsvjKswH4zxaPw5bElr8IbZAFd0NuUD6LCPt9BnuCj5Qfi5COkZGUCPgK+JsFn6ePlYuWi5KIjniLfot4imyICPvkBlyLjpRmjodVgUODYgiphgWg0J2+1osI91wGko6JhR+LhoiEhoQI/Bn8sQWGg4iDi4QIgZCGmR7gqBVSi/gv+NTFiwUO8YvG+MmtErekeOf4N+ZypRPY+F33CRX3pgoT4PenChPY96gKE8T3qQoO8YSt+MnGErelcub4N+d4pBPY94T4qhX7A2Y3JIv7DAj7KPH7Gfdb91nz9yn3GB6L9xQ06vsAsAiHxfKLBRPEwIuehJBW/wAITMz///xmaP8ACGZo////TMz/AAhMzP8ABEzMi7T///2zNP8AJ8zM///7TMz/ACYzNAj7aQaAhYWCH5P7FAUT2OdNsk6L+wQI+xRF+wr7H/sWO/X3IR6L9wCz1OfACJP3FQWUhpB/HvtkBhPgh2mIXotj/wAHTM2H/wAIszOLlY+RxKCOvIsI7AYOOYGo906n90aoAane97DeA/cF930V7weeyMbd28hSeR4kB/uwbxX4Awb3KfsJ4fsA+xAmJvsQ+xHwJ/cQHtSLzK60vwhplgVoXlhzUYsIOU7Ioh8O+wagdhKsvWO6d/cE93W6E6j4WfhOFfgDChPI+AQKE5j4BQoTyPgGCg77E4vv99n3ALh3AfgGsQP3gvipFfgHCg77mJp2ke8SvPdVa6MTUPd+97wVE2D4CAoTUPgJChOQ+AoKDvsxn3b4MvYS96PHU84T4Pff97cV+AsKE9D4DAoO+8mJrff3qen3DAHw9wID92f/AUFMzBW9jv8ASLM0ix7/AAJmZv//+2Zm/wAAmZr///2Zmh7//+CAAIFF///1gAD//7qAAP//9oAACI1ttIcFmYqTgItZCPuIB4tve///9jMzbP//+szNCH+JBf///Bma////TM3///zmZv///bMzi4UIi3SNiQWL3I2vstyJix6NjYuiBYuR///75mb/AAIZmv///Bma/wAA5mYIgY0F///iZmb/AAXmZv//7pma/wAJGZqLpwj7CPiCFWqmcKyspqasrHCmampwcGoeDvhkgdP3wNgB9yqs9az3CK30rfcTrPWsA/nP9/4VsZdYfB+LVm9Yd21ypWq3i8EInJfGtx783xaqnWVvH4tQZFhva3mrdreLvgiel8m4Hve0FqybZXAfi1BsVHJodKlxvIvACJ+XybceY/uNFXBvX3Rei3qLV49duKmvrtuL4QjEedBISHdCUh6LQZxKol5gaU50QYoIlEEFnYvsj+HaxzzIhK+Lq4vBksfSq2XBY9GLtIvBl8TbuV3RYuSJCJTVBU+NSppRt6K3otCL1QivgONDPYArah6LP6dGql5yb2BtUotXi2GhcaOltKzbi+EIrX/lQkh2QFMeiz+iRaZaCA7MNqn3HKb2qdGoEvcbwfdrveXGaskT/Pio+O0VqAoT/m38MBX4ggoT/fiDChP++IQK/Dv4GhWkCg7MNKn3HKb2qdSr95qpErrA78l7o/cUveXGaskT/ID4qPjtFagK/IlVFfiFChP+gKkKE/2AnAoT/oCrChP8wPhl+/wV+IIKE/yg+IMKE/zA+IQKDsw1pvc5ptGu2agB9yLB9/rEA/io+O0VqAp3/NQV+GcK/D74vxWkCg7MNqb3OabRrtir95qpErvA78l7o/ewxBP8gPio+O0VqAp4/NMV+GcK/HX4nRX4hQoT/oCpChP9gJwKE/6AqwoOzDam9zmm0a7RqfccpvapEri95cZqyferxBP+QPio+O0VqAoT/0D8GXkVrAoT/sCfChP/QKAK+AP8wRX4ZwoOzDam9zmm0a7ZqNGt91h3Afc/u/flxAP4qPjtFagK/Cf7XRX4Zgr4FfwiFfhnCg7MNaP3KaP3BZ7UqAH3J8H3UcD3C8QD+Kj47RWoCn/82xX4aArEkBX4aQr8evjBFaQKDsw2o/cpo/cFns6m9zmm0a4B917E9xbA9wvEA/io+O0VqAr8CPtHFfhnCvf7/CcV+GgKxJAV+GkKDsw0pfeppdSoEvciwfdbvWi87LpqxRPw+Kj47RWoCkj8DRUT9vhrCutiFfhsChP5+G0KJCkV+G4K/Aj4ghWkCg7MNqX3qaXLqfccpvapEru95cZqyfcKvWi87LpqxRP8APio+O0VqAoT/gD8FngVrAoT/QCfChP+AKAK99L7+BUT/GD4awrrYhX4bAoT/JD4bQokKRX4bgoOzDWl96mlz6b3OabRrhL3W8T3Gb1ovOy6asUT/AD4qPjtFagK/Av7RxX4Zwr3wvtZFRP9gPhrCutiFfhsChP+QPhtCiQpFfhuCg7MNqX3qaX39bESt6CDnZ+t96K9aLzsumrFE+RA+Kj47RWoCvxijxXvBnFeU/sQaPsDCK0GqvTE9w7A5gj7QgYT7AB7hoyPH3kGE/QA+GoK+CP8DxUT5YD4awrrYhX4bAoT5kD4bQokKRX4bgoO+4f30KgB9x/BA/io+O0VqAr8VXYVpAoO+9CJqPiWqAHz0wP3RNUV+DkHi6b/AA0Zmv8ACrM0/wAo5mb/AAZMzAiYjQX/AATmZv8AAMzM/wACGZr/AAEzNIuRCIueio0Fi0GJaGRFjYseiYmLeAWLhf8ABBma///+5mj/AATmZv///xmYCJaJBf8AJjMzhP8AEMzNhIttCPw5B4tv///xZmb///WzM///15ma///5TM0If4kF///7GZr///8zM////OZm///9zM2LhgiLeI2JBYvUja+y0YmLHoyNi54Fi5D///zmZv8AAjMz///7GZr/AADMzQh/jQX//9tmZv8ABhma///umZr/AAfmZouqCA4hi6j4kqgB8dP3ItMD90LVFfiGCvdqFvg5B4um/wANgAD/AAozNP8AKIAA/wAGzMwIl40F/wAE5mb/AADMzP8AAxma/wABMzSLkQiLnomNBYtCiWge+2sGZEaNix+JiYt4BYuF/wAEGZr///6zNP8AA+Zm////TMwIl4kF/wAk5mb///nmaP8AEhma///4GZiLbQj8OQeLb///8YAA///1szP//9eAAP//+UzNCH+JBf//+xma////MzP///zmZv///czNi4YIi3iNiQWL1I2vHvdqBrLQiYsfjY2LngWLkP//++Zm/wACTM3///wZmv8AALMzCH+NBf//2eZm/wAGZmb///AZmv8AB5mai6oIDvcFi6j4kqgB89P3ItP3I9MD90TVFfg5B6aYnLQerQaymn1tH/w5B29+emIeaQZkfJmqH/dqFvg5B6aZnLQerAazmn1tH/w5B299emIeagZjfJmqH/drFvg5B4um/wAOmZj/AApmaP8AJ2Zo/wAGmZgIl40F/wAE5mj/AADMzP8AAxmY/wABMzSLkQiLnomNBYtCiWce/EAGZEWNix+JiYt4BYuF/wAEGZr///7maP8ABOZm////GZgIlokF/wAnZmb///jMzP8AD5ma///5MzSLbQj8OQeLb///8TMz///1szP//9fMzf//+UzNCH+JBf//+xma////MzP///zmZv///czNi4YIi3iNiQWL1I2vHvhBBrLQiYsfjY2LngWLkP//++Zo/wACTM3///wZmP8AALMzCH+NBf//2YAA/wAGZmb///CAAP8AB5mai6oIDvdWlHaVqPiUqBLz0xNw9+L4zBX7VgZkRY2LH4mJi3gFi4X/AAQZmv///uZo/wAE5mb///8ZmAiWiQX/ACczM///+OZo/wAPzM3///kZmIttCPw5B4tv///yZmb///XmZv//1pma///5GZoIf4kF///7GZr///8zM////OZm///9zM2LhgiLeI2JBYvUja+y0YmLHoyNi54Fi5D///zmZv8AAjMz///7GZr/AADMzQh/jQX//9mZmv8ABmZm///wZmb/AAeZmouqCPg5B6aYnLQeqAabi6GIkXkI9z78jwUTsJB8k4OVi5aLj5KRmwj/AK1MzP8B3YAABf8AC+Zo/wAgszT/AAUZmP8ADWZk/wAlszT/AARmaAicjQX/AARmaP8AAIAA/wAFmZj/AAGAAIuQCIueiY4Fi0yJe30tjYseiYiLeAWLh4z///1MzJD///+zNAipiQX/ABuAAP///jM0/wAPgAD///rMzH9pCPsW/AWJi/sN+AUF///3GZqm///9mZr/AAwzNP8AIUzM/wABzMwIsY0FkP8AAEzMjv8AA7M0i5AIi5yJjgWLKoltHg5zlHb4vagB9wX4zBV1QI2LH4mJi3cFi4eM///9gACQ////gAAIn4kF/wAiGZr///yZmP8ABJmZ///7GZz/ABCzM///zkzMCP8AnZma/GoFkHyTg5WLlouTkpGbCP8ArJma/wHbszQF/wANgAD/ACVMzP8ABIAA/wAKszT/ACRmZv8ABEzMCJyNBY//AACAAJL/AAGAAIuQCIufiY0Fi0SJg3wnjYseiYmLdwWLh4z///1MzJD///+zNAipiQX/ABiZmv///mZo/wAYgAD///qZmP//8+ZmaQj7GPwFiYv7D/gFBYOm///8szP/AAwzNP8AIUzN/wABzMwIsY0Fkf8AAEzMjv8AA7M0i5AIi52JjQWLIYl1Hg73WJR2laj4lqgS+PDTE7D3BfjMFXVAjYsfiYmLdwWLh4z///2AAJD///+AAAifiQX/ACIZmv///JmY/wAEmZn///sZnP8AELMz///OTMwI/wCdmZr8agWQfJODlYuWi5OSkZsI/wCsmZr/AduzNAX/AA2AAP8AJUzM/wAD5maasIsIoAaym31tH/w5B4tv///xZmj///WzM///15mY///5TM0IE3B/iQX///sZmP///zMz///85mj///3MzYuGCIt4jYkFi9SNr7LRiYsejI2LngWLkP///OZo/wACMzP///sZmP8AAMzNCH+NBf//22Zo/wAGGZr//+6ZmP8AB+Zmi6oI+DkHi6b/AA0ZmP8ACrM0/wAo5mj/AAZMzAiYjQX/AATmaP8AAMzM/wACGZj/AAEzNIuRCIueio0Fi0GJaB77OQZ8J42LH4mJi3cFi4eM///9TMyQ////szQIqYkF/wAYmZr///5maP8AGIAA///6mZj///PmZmkI+xj8BYmL+w/4BQWDpv///LMz/wAMMzT/ACFMzf8AAczMCLGNBZH/AABMzI7/AAOzNIuQCIudiY0FiyGJdR4O+CCUdpeo+JKoEvju0/ci0xN4+TbVFfiGCvzF+IIVdUCNix+JiYt3BYuHjP///YAAkP///4AACJ+JBf8AIhma///8mZj/AASZmf//+xmc/wAQszP//85MzAj/AJ2ZmvxqBRO4kHyTg5WLlouTkpGbCP8ArJma/wHbszQF/wANgAD/ACVMzP8ABOZmmq+LCJ4Gr559bR/8OQcTeItv///xgAD///WzM///14AA///5TM0If4kF///7GZj///8zM////OZo///9zM2LhgiLeI2JBYvUja8e92oGstCJix+NjYueBYuQ///75mj/AAJMzf///BmY/wAAszMIf40F///Z5mj/AAZmZv//8BmY/wAHmZqLqgj4OQeLpv8ADYAA/wAKMzT/ACiAAP8ABszMCJeNBf8ABOZo/wAAzMz/AAMZmP8AATM0i5EIi56JjQWLQoloHvwNBnwnjYsfiYmLdwWLh4z///1MzJD///+zNAipiQX/ABiZmv///mZo/wAYgAD///qZmP//8+ZmaQj7GPwFiYv7D/gFBYOm///8szP/AAwzNP8AIUzN/wABzMwIsY0Fkf8AAEzMjv8AA7M0i5AIi52JjQWLIYl1Hg75DpR2laj4lqcS+QXT9yPT9yLTE3z5hKYVY3yZqh/4PQemmZy0HqwGs5p9bR/8PQdvfXpiHvdAbhWL7Y2ustGJix6NjYueBZCHjoYegAZjfJmqH/g9B6aZnLQelwaQjo2RH4udiY0Fi0GJaGQxjYuLWYlnZEiNi4tDiWdkSI2LHnuLU4mDi3yLNY2DiwiKiIt5BYeMiJAeqQali6KCf2kI+yH8BfsP+AUFg6aHm62LCLEGkY6PkB+Lm4mOBXyLIYmEi32LPo2EiwiKiIt5BYeMiJAenwabi6CGkXkI9z78jwUTvJB8k4OVi5aLk5KRmwj3RPh5BZarj5itiwi4BrKafW0f/D0HE3xvfnpiHn8GhoiIhh+LeI2JBYvUja+yy4mLi9aNr7K1iYsetqgVaQZkfJmqH/g9B6aYnLQerQaymn1tH/w9B29+emIeDvdziaj4lKgB9NP3t94D99/4zBX7UgZkRY2LH4mJi3gFi4X/AAQZmv///uZo/wAE5mb///8ZmAiWiQX/ACYzM4T/ABDMzYSLbQj8OQeLb///8WZm///1szP//9eZmv//+UzNCH+JBf//+xma////MzP///zmZv///czNi4YIi3iNiQWL1I2vHvc0BpnhiYsfjY2LoAWNi4+GHnqNBWiOkpqaoAj3Cfc1BZGSkJGOi46Lj4iQhAj3Cfs7BaFtjYhoiAh5iQWHioiIH4t2jYkFi/WNkB6Wi8aKo4oIjY2LoAWNiY+GHmSObKVzrgj7HfdOBf//9xmY/wAMGZr///rmaP8ACOZmi5SLk5CTkpUI9wX3LQWjq5+hwYySjIyOi44Ii5+IjQWLOYmHgT2Nix6JiYt3BYuGjoqOigimigWliYd/enQI+wP7KgWGhIeHiIuIi4ePh5EIJPcrBXmkhJWojQiojAWNjY2QH54HioiOi4sliYcf+y78ghX4OQemmJy0Hp8GmommibBXCPcS+0UFkoGQg4uCi4aIg4WECPsN+zsF///sszT//+bmZv//4kzM///gGZpahQiCBmZ6maofDpeJqPiWqAH3ld4Dpfi4FYuHkIqUiZqJpoewVwj3EvtFBZKBkIOLgouGiIOFhAj7Dfs7BXdxbGdXiAiGh4mHH4t2jIkFi9GNj5nhiYsejY2LoAWNi4+GHnqNBWiOkpqaoAj3Cfc1BZGSkJGOi46Lj4iQhAj3Cfs7BaFtjYhoiAh5iQWHioiIH4t2jYkFi/WNkB6Wi8aKo4oIjY2LoAWNiY+GHmSObKVzrgj7HfdOBf//9xma/wAMGZr///rmZv8ACOZmi5SLk5CTkpUI9wX3LQWjq5+hwYySjIyOi44Ii5+IjQWLOYmHgT2Nix6JiYt3BYuGjoqOigimigWliYd/enQI+wP7KgWGhIeHiIuIi4ePh5EIJPcrBXmkhJWojQiojAWNjY2QH54HioiOi4sliYeBOo2LH4iIBQ73bouo+JKoAfeV3vfE0wP4x/ivFaUG/wAmMzSE/wAQzMyEi20I/DkHb316Yh6CBmaPbv8AGIAAdP8AIYAACPsd904F///3GZr/AAwZmv//+uZm/wAI5maLlIuTkJOSlQj3BfctBaOrn5/BjAj8rZQVi4eQipSJmommh7BXCPcS+0UFkoGQg4uCi4aIg4WECPsN+zsFd3FsZ1eICIaHiYcfi3aMiQWL0Y2PmeGJix6NjYugBY2Lj4Yeeo0FaI6SmpqgCPcJ9zUFkZKQkY6LjouPiJCECPcJ+zsFoW2NiGiICHmJBYeKiIgfi3aNiQWL9Y2QHvdMBrLRiYsfjI2LngWLkP///OZo/wACMzP///sZmP8AAMzNCH+NBf//22Zo/wAGGZr//+6ZmP8AB+Zmi6oI+DkHi6b/AA0ZmP8ACrM0/wAo5mj/AAZMzAiYjQX/AATmaP8AAMzM/wACGZj/AAEzNIuRCIueio0Fi0GJaB77WgaBPY2LH4mJi3cFi4aOio6KCKaKBaWJh396dAj7A/sqBYaEh4eIi4iLh4+HkQgk9ysFeaSElaiNCKiMBY2NjZAfngeKiI6LiyWJh4E6jYsfiIgFDvhIi6j4kqgB95Xe98LT9yLTA/jH+K8Vowb/ACTmaP//+eZo/wASGZj///gZmIttCPw5B299emIegwZnkP//4rM0/wAXzM3//+lMzP8AITMzCPsd904F///3GZr/AAwZmv//+uZm/wAI5maLlIuTkJOSlQj3BfctBaOrn5/BjAj3K/xlFfiGCv1E+G4Vi4eQipSJmommh7BXCPcS+0UFkoGQg4uCi4aIg4WECPsN+zsFd3FsZ1eICIaHiYcfi3aMiQWL0Y2PmeGJix6NjYugBY2Lj4Yeeo0FaI6SmpqgCPcJ9zUFkZKQkY6LjouPiJCECPcJ+zsFoW2NiGiICHmJBYeKiIgfi3aNiQWL4o2jHvggBrLQiYsfjY2LngWLkP//++Zo/wACTM3///wZmP8AALMzCH+NBf//2eZo/wAGZmb///AZmP8AB5mai6oI+DkHi6b/AA2AAP8ACjM0/wAogAD/AAbMzAiXjQX/AATmaP8AAMzM/wADGZj/AAEzNIuRCIueiY0Fi0KJaB78LgaBPY2LH4mJi3cFi4aOio6KCKaKBaWJh396dAj7A/sqBYaEh4eIi4iLh4+HkQgk9ysFeaSElaiNCKiMBY2NjZAfngeKiI6LiyWJh4E6jYsfiIgFDvsDiahwsviKqBL20/eUohO49viDFfw/B4tq///6zM3///xMzf//3DMz///9szMIbIkF///75mb///+zM////Rma///+TM2LhggTeIt3BRO4jYkFE3iL/wBLgACN/wAkgAAe91wGE7ipzYmLH5/3PnSOBRN4YfsWYIl7iwj7DAZzgI+oH/g7B4um/wANGZr/AAqzNP8AKOZm/wAGTMwImI0F/wAE5mb/AADMzP8AAhma/wABMzSLkQiLnoqNBYtBiWhkRY2LHomJi3gFi4X/AAQZmv///uZo/wAE5mb///8ZmAiWiQX/ACYzM4T/ABDMzYSLbQgOhIG2+JOtAa3l+BKoA/fegRX4fQoOvomt+IytAenT9/PhA/c6/wHwzMwV/wAjzMz/ABDMzf8AA2Zo/wBQMzP3B/cfVfuCJWT7AvtVJHv/AAeZmv8AIjMzHmf/Ae4zNBVkRY2LH4mJi3gFi4X/AAQZmv///uZo/wAE5mb///8ZmAiWiQX/ACYzM4T/ABDMzYSLbQj8OQeLb///8WZm///1szP//9eZmv//+UzNCH+JBf//+xma////MzP///zmZv///czNi4YIi3iNiQWL1I2vHq+L9wWJr4sI90H3B/cA9zb3Svsk9wz7Px9Yi1WJVosIDvdwlnaTqPiVqRITYPde+MwV+yWNiYmLdgWIjIeSHqeKBf8AGuZmiv8AChmaiItlCGf8PgWIaIWGbYkIbYkFh4eKhR+Ld42JBYvDja+uw4mLHo2Ni58FjomPhR5ujQX//97mZv8AAkzN///7GZr/AAizM46qCKv4DPdg/FAFE6COhY+EkYuSi5COj5MI92f4XLH8GAWLcP///xmY///1TM3//97maP///bMzCBNgbokFhouJiYqGCIt3jYkFi8qNs7jSiYsejY2LnwWLjYn/AASAAIT/AACAAAhujQX//+bmaP8AAbMz///1GZj/AAFMzYewCGH4PwWLqv8AChmYlf8AG+ZojQinjQWOi4+MjJIIi56JjfsRiftn/F6IiwUO+9aJrPgDrMbvEuDvM9oT8OD4shV1ChPo5vt/Ffd0Cg77H4uo+AeoyO8S3+801vcC7zTWE+r3u/f4FfiHCvtaFvuuB4tu///1MzP///NmZv//38zN///8mZoIeIkFhv///4AAiP///YAAi4YIi3iNiQWL0Y2vHvdaBq/QiYsfjY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+DMzP8AA0zN///1MzT/AAyzM4uoCPeuB4un/wALgAD/AAzMzP8AHoAA/wADMzQIno0FkP8AAIAAj/8AAoAAi5AIi56JjQWLRYlnHvtaBmdGjYsfiYmLeAWLho7///2AAJD///+AAAieiQX/ACDmZv///IAA/wAKGZr///OAAItvCBPk9033ThV1ChPw+1oWdQoO0Yuo+AeoyO8S3+801vcC7zTW9wPvM9YT4oD4gff4FfiHChPogPwgFvuuB4tu///1MzP///NmZv//38zN///8mZoIeIkFhv///4AAiP///YAAi4YIi3iNiQWL0Y2vHvggBq/QiYsfjY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+DMzP8AA0zN///1MzT/AAyzM4uoCPeuB4un/wALgAD/AAzMzP8AHoAA/wADMzQIno0FkP8AAIAAj/8AAoAAi5AIi56JjQWLRYlnHvwgBmdGjYsfiYmLeAWLho7///2AAJD///+AAAieiQX/ACDmZv///IAA/wAKGZr///OAAItvCBPqAPdaFviHChPhAPdO904VdQoT8AD8IRZ1ChPkAPdaFnUKDvcKlHaVqPgLqMbvEuDvM9YTdOz3+BX7rgeLbv//9TMz///zZmb//9/Mzf///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNr6/QiYsejY2LngWLkIf/AAKAAIb/AACAAAh4jQX//+DMzf8AA0zN///1MzP/AAyzM4uoCPeuB6eWm6oenQaoh/8AFOZm///5szT/AA4Zmv//3EzMCBO09xz77QWRfJGFmIuVi5KRkpwI9x735wWbsqKVqI6R/wAAmZqQ/wADZmaLkAiLnYmNBYtiiXBmUo2LHoeJi3cFi4iO///8TMyQ////szS+iP8ACGZo///5TMz//+6ZmP//2bM0CDL7b3pgerk1924F///15mb/ABeZmv///YAA/wAQszL/AB+Zmv8AA7M0CJyNBY7/AABmZpH/AAEZmov/AAaAAAiLnoeNBYtOiWQe+0YGZ0aNix+JiYt4BYuGjv///YAAkP///4AACJ6JBf8AIOZm///8gAD/AAoZmv//84AAi28IEzh/904VdQoOKZR2+C6sAffZ+CIViQoO9weUdpWo+AmoyO8S+KDvM9YTdPis9/gV+64Hi27///UzNP//82Zm///fzMz///yZmgh4iQWG////gACI///9gACLhgiLeI2JBYvRja+v0ImLHo2Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx77LAZmUo2LH4eJi3cFi4iO///8TMyQ////szS+iP8ACGZm///5TMz//+6Zmv//2bM0CDL7b3pgerk1924F///15mb/ABeZmv///YAA/wAQszL/AB+Zmv8AA7M0CJyNBY7/AABmZpH/AAEZmov/AAaAAAiLnoeNBYtOiWRpVo2LHoiJi3cFi4aQ///+mZqQ////Zmb/AByAAP///IAA/wAVTM3///dmZv8ADjMz///cGZoIE7T3HPvtBZF8kYWYi5WLkpGSnAj3HvfnBf8AD4AA/wAlszT/ABWAAP8ACEzMp48ImwaslXtvHxM4f/dOFXUKDvfKlHaXqPgHqMjvEvic7zTW9wLvNNYTdflv9/gV+IcK/C25FfiIChO1+IkKE3WLbv//9TM0///zZmb//9/MzP///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNrx73Wgav0ImLH42Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx77+AZmUo2LH4eJi3cFi4iO///8TMyQ////szQIEzj3WvcgFXUKEzL3WhZ1Cg74kJR2l6j4B6jI7xL4nO801vcC7zTW9wPvM9YTdQD5b/f4FfiHChNxQPdaFviHCvzzuRX4iAoTtED4iQoTdECLbv//9TM0///zZmb//9/MzP///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNrx74IAav0ImLH42Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx78vgZmUo2LH4eJi3cFi4iO///8TMyQ////szQIEzIA+CD3IBV1ChM4APtaFnUKEzCA+CEWdQoO7ouo+AeoyO8S4O8z1vd80xPs93uoFXoGbICbqB/3rgenlpuqHp4GrYj/ABLmZnj/ABwZmmII4vsTBY2IjImLiIuIiomKiQg3+wAF///XGZr//8tmZv//6OZm///9mZp0iAj3NPgHFZqNBY//AACAAI//AAKAAIuQCIudiI4FizqJbR77OgZnRo2LH4mJi3gFi4aO///9gACQ////gAAInokF/wAg5mb///yAAP8AChma///zgACLbwj7rgeLbv//9TMz///zZmb//9/Mzf///JmaCHiJBYb///+AAIj///2AAIuGCIt4jYkFi9GNrx73MgasvomLH42Ni54Fi5CJ/wACTM2G/wAAszMIfY0Fb4//AAyZmv8AFBma/wAMZmb/ABHmZgjK5gWPkY6OjYuOi42Jj4YIxTsF/wAW5mht/wANTMz//+xmZv//38zM///6mZoIf4kF///7GZr///8zM////eZm///9zM2LhgiLeI2JBYvKjbStwImLHo2Ni54Fi5GH/wABGZqB/wAA5mb//+CAAI7///BMzP8AAjMz///UMzT/AD3MzQgx9xMFiY6KjouNi42MjY2OCN/2BbC6/wAPgACU/wAkgACOkf8AAIAAkf8AAIAAi5IIi56KjQWLWolrbFyNix6IiIt4BYuGjv///mZmjv///5maCJuJBf8AIWZo///7zMz///LmZP//7eZo///vszT//+tMzAhKMAWHhomJiIuHi4iOiJEITuUF///tzMz/ABwZmv//+jM0/wAJgACs/wAEZmYIE/T7xvciFXUKDjCJrPgDrAH3Svf6FYsKDuyJqPgLqMbvEvdk0/d27zPWE/T3V/gkFZqNBY//AACAAI//AAKAAIuQCIudiI4FizqJbW1ajYseiYiLeAWLh5L///2ZmpL///9mZq2I/wAS5mZ2/wAcGZpiCOL7EwWNiIyJi4iLiIqJiokIN/sABWFV///ogACI///ogACI///3GZr///7mZv//++Zm///9GZqLhQiLeo2JBYu5jaisvomLHo2Ni54Fi5D///3mZv8AAkzN///7GZr/AACzMwh9jQVvj/8ADJma/wAUGZr/AAxmZv8AEeZmCMrmBY+Rjo6Ni46LjYmPhgjFOwX/ABbmZm3/AA1Mzv//7GZm///fzMz///qZmgh/iQX///sZmv///zMz///95mb///3MzYuGCIt4jYkFi8qNtB73Owav0ImLH42Ni54Fi5CH/wACgACG/wAAgAAIeI0F///gzMz/AANMzf//9TM0/wAMszOLqAj3rgeLp/8AC4AA/wAMzMz/AB6AAP8AAzM0CJ6NBZD/AACAAI//AAKAAIuQCIueiY0Fi0WJZx77PQZsXI2LH4iIi3gFi4aO///+ZmaO////mZoIm4kF/wAhZmb///vMzP//8uZm///t5mj//++zNP//60zMCEowBYeGiYmIi4eLiI6IkQhO5QX//+3Mzf8AHBma///6MzP/AAmAAKz/AARmZgj3118V+64HboB7ax58Bm6O///vzMyO///WMzTGCDH3EwWJjoqOi42LjYyNjY4I3/YFsLqakrCOCJ4GrJV7bx8T+H/3ThV1Cg73p4mo+Auoxu8S92TT92HvNNb3Au801hPx91f4JBWajQWP/wAAgACP/wACgACLkAiLnYiOBYs6iW1tWo2LHomIi3gFi4eS///9mZqS////ZmatiP8AEuZmdv8AHBmaYgji+xMFjYiMiYuIi4iKiYqJCDf7AAVhVf//6IAAiP//6IAAiP//9xma///+5mb///vmZv///Rmai4UIi3qNiQWLuY2orL6Jix6NjYueBYuQ///95mb/AAJMzf//+xma/wAAszMIfY0Fb4//AAyZmv8AFBma/wAMZmb/ABHmZgjK5gWPkY6OjYuOi42Jj4YIxTsF/wAW5mZt/wANTM7//+xmZv//38zM///6mZoIf4kF///7GZr///8zM////eZm///9zM2LhgiLeI2JBYvKjbQe9+0Gr9CJix+NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//4MzM/wADTM3///UzNP8ADLMzi6gI964Hi6f/AAuAAP8ADMzM/wAegAD/AAMzNAiejQWQ/wAAgACP/wACgACLkAiLnomNBYtFiWce++8GbFyNix+IiIt4BYuGjv///mZmjv///5maCJuJBf8AIWZm///7zMz///LmZv//7eZo///vszT//+tMzAhKMAWHhomJiIuHi4iOiJEITuUF///tzM3/ABwZmv//+jMz/wAJgACs/wAEZmYIE/T3w18V+64Hi27///UzNP//82Zm///fzMz///yZmgiHBnOO///vGZr/AAmzM///2uZm/wA0TM0IMfcTBYmOio6LjYuNjI2Njgjf9gX/ACGAAP8AKoAA/wAPgAD/AAqAAKmPCJQGrJV7bx8T9fdaFviHChP4+2f3ThV1ChPy91oWdQoO+9+JrPj2qaZ3AeraA+r3DhV5Cg77QIG8+AOsAbDh903iA/gi5hVrCg4ygbqEpvfvrvdeqaZ3ErLh93DaE7737fcQFWwKgP/++EzMFW0KE35uChO+bwoO902JrPf2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//YZmP8AGWZk///3gAD/ABizNP//+ZmYCP/99YAA//31gAD/ACKZmv//3UzN/wIimZz/AiKZmAWo///8gAD/AB2zMIv/AB5maP8ABOZo///8gABu////TMz//+L//v8AA4AAbgj8uPy4/wAiszP//91mZgUO959Y/wAazM0B/wLy5mj/ABwzMAP/Aj6ZmP8AAUzNFf//50zM///5mZr//+aABP//94AA///lzMz///VmZwj/ABrmZP//5TMzBf8AgWZo/wAHzM3/AE/maP//9rMz/wBATMz//+GZmgj/ABBMzP8AEEzNBf//4DM0/wBDMzT///gZmP8AceZm/wAHzMz/AFyZmgj//+PM0P8AHDMzBf//9hmY///lGZv///eAAP//5pmZ///5mZj//+dMzQj//fWAAP8CCoAA///dTMz//91maP8CIpmY//3dZmQF///8gABui///4kzM/wAE5mj//+GZmm7/AAOAAG7/AACzM27///yAAAj8uPi4///dZmb//91MzAUO96P//87mZv8AHDMzAdz/ABrMzQP/AIVMzf8An2ZmFf//+Zma/wAYszP///eAAP8AGYAB///1Zmf/ABozMwj//+UzM///5RmZBf8AB8zN//9+mZr///azM///sBma///hmZr//7+zMwj/ABBMzf//77MzBf8AQzM0/wAfzM3/AHHmZv8AB+Zm/wBcmZr///gzMwj/ABwzMv8AHDMzBf//5Rma/wAJ5mb//+aZmv8ACIAA///nTMz/AAZmZgj/AgqAAP8CCoAA///dZmj/ACKzMP/93WZo//3dZmgFbv8AA4AA///iTMyL///hmZr///sZmv8AA4AAqP8AALMzqP///IAAqAj4uPi4///dTMz/ACKZnAUOIJ529/3L9yd3AfewiRX3WPjQQotc+yf7fItd9ydCi/dY/NAFtNcVKvex91KLBQ77KYHI+GbIAbrQ92HRA/d1gRXpi77NoPAIRQZ+UXJbUYsINHX3A/cO9wyh9wXiH8WLpFqYUAjRBnXxWM4uiwhDIWX7lPuV9WbTHw4ugaz3ybH3Lth6rBKv3PeW2hPc/wFzszT/AT8ZmhX//98zNP8AHoAA///ZTMz/ABRmZv//0szMiwj7FzP7A/sEK9pO5fdktPe28/cTU/UmHxPsWYtggW2Fa4VzfItxi3mXf56LoIuhqKebCBPclZGdlK2LzoulLYsnCIv//+3mZv///xma///nTM7///2Zmv//4+ZmCIf//9ozMhX///GZmv//jUzN///Y//7//3BmZ///obM0iwhHaMXU5Lnk2x//AC3mZov/ACnmaP//6jMy/wAk5mb//+MZmggO+1eLzPdjzPc+zAH3vdAD+AL40BX72Ur3lPs++4pK94r7Y/uaSvffBg77V4vM92PM9z7M13cB973QA/gC+NAV//+/mZqL/wAXZmbMZ5b//+SAAD///yOAAIuLSvdZi///woAA+z7//4KAAIuLSvGL//+1GZr7Y///1OZmi4tK/wATmZqLBf//52ZmR7B//wAczM3b/wEOMzSLBf//qDM0+I8V/wASzMz7Pv//sBmaBv//6JmZShX/AGdMzftj//9OMzMGDrqCtviMtgGlvvh8vgP31fiuFf8AKpmai/8AJ+Zm///0gAD/ACKzNP//7BmaCP//CGZm//5PmZgF//+75mb/AC2ZmP//0oAA/wBPZmeL/wBWzM2L9xv3AvcJ9xqLCP8Ai7M0/wAH5mgV///WZmb/ABZmaP//0IAA/wAMszD//81mZov7N4v7GPsYi/s3i///lTMz/wA4mZr//6KZmv8AVOZm///MMzMI///QgAA4rHn/AC/mZv8AU4AABf8AJLMz///vmZr/ACiZm///9uZm/wAqzMyL9ziL9xf3GYv3Nov/AGLMzP//z4AA/wBXgAD//7VmZv8ANYAACP8AJxma/wBEMzRpnAX//+OZmv//ghmaFf8AOjMy///RMzT/ACUzNP//tuZmi///sMzMi/sa+wD7Cvsci///3WZmi///3uZm/wAHzM3//+IZmv8ADeZmCA6Ai6UB96L4rBX3afyS/DaLBfdX+OIV+4r87QWIhYqIi4kIiJCKlh74qYuXiwWOjIyMi42LjYqOiJEI+5H47QUOgKB2+OKlAffR2xX7afiS+DaLBftX/OIV94r47QWOkYyOi40IjoaMgB78qYt/iwWIioqKi4mLiYyIjoUI95H87QUOMovE913D913EAajRAxTg+GIWxPsvByOLMuJ89wYI9/bD+/YGmPcA2uj3CIsI9y/E+yoG+zH7EvsX+y/7LvcQ+xj3Mx8OMovE913D913E13cBqNED+GIWxPsvB///72Zmi///78zO/wACMzP///BmZv8ABDMzCNH/AMKZmv8A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/wChszT/AL5maP//2pma/wAfszT//2BmZv//Q+ZkBXD/ABbmZv//4czM/wATMzb//99mZ/8ADszMCP//4DMz///YGZgF/wAg5mb///KZmv8AHkzN///tmZr/ABrMzf//6ZmaCP//Jpma//7/5mb35ouLiQWL///cgAD///qAAP//3bMz///1zMz//9/MzQj/AAyZmvcoFf//FoAAi/8AlzM090YF/wArgAD//88zNP8AHYAA///CmZn/AAlMzP//vDMzCA7S/wAUzM12Af8BbZma/wArTMwD/wEpzMyJFf8AK0zO///uMzMF/wAVZmb/ABr//53/AB5Mzf8ADeZm/wAhTM0I/wCtAAJE/wAQszD/ACjMzf//UMzO/wBHzM0F/wAW5mb/AE/Mzv//+5ma/wBSTMxw1Qj/AN3mZv8AcszM///pZmj/ACuZmvtv//+OgAAF///vszT/AB9mZv//62Zm/wAdTM7//+dmZqUI///TZmb//+cZmgX/ABlmZv//5zM0/wAVGZr//+NmZP8AEEzM///hGZoI//7VszT//2WAAP8BOLMy//9/zM3///9Mzv///jM0Bf//8oAA///fGZr//+3mZv//4mZm///qTMz//+YZmgj/AEPMzv8AhBmaFfts/wBYmZn/AM9mZv8Aa0zNBf8AFczM///CZmb/AAPmaP//vAAB///u5mb//72zMwgO/BuUdvjidwHbtwP3EH8V+OJf/OIHDvvnlHb44ncB8LcD92j4MhVI//+8TMyL/wDnszRfi4v//uvmZjj//6wZmqNzxv8AO0zNi//+9rM0t4uL/wE1gADm/wBbgAAFDvuXlHb44ncB27fjtwP3lH8V+OJf/OIHMxb44l/84gcO+4qUdvhMd/c+dwHbt+O3A/fF+EAVWv//zkzMi/8Ax7M0X4uL//8LszQz//+mzMyL/wFNgABfi4v//oXMzE///8MzM6Nzr/8AJGZmi///XJmat4uL/wDPzM3j/wBY//8F//7XMzS3/wFVMzQH1P8ASczMBQ77Bp52+FB3AfeG+BYV9z/8GMCL+1v4UFeL+1z8UMCL90D4GAUO+waWdvhQdwH3g7kV+z/4GFaL91v8UL+L91z4UFaL+0D8GAUOIaB2+CC2Ac6+95G+A/cKFvdoB/H/ABaAAN3/AG+AAO6fOSUe+2i+92gH9xT//+GAAO7//3KAAPspaf//moAA//+CgAAe+2gHDiGBtvggdwHOvveRvgP4B/hBFftoByX//+mAADn//5CAACh33fEe92hY+2gH+xT/AB6AACj/AI2AAPcprf8AZYAA/wB9gAAe92gHDvt6+3G8+cm8Afce2QP3IKIV+JIKDov7cbz5ybwB9x7Z9yzZA/gGohX4kgr7ehb4kgoO96z7cbz5ybwB9x7Z90DZ90rZA/keohX4kgr7mBb4kgr7jhb4kgoOTPtxvP8ApMzN/wAngAD/AWwzNP8AJ+Zm/wDUmZq8AbO39yTZ9yK3A/8A5UzN///4zM0V///8zM7//7XMzv//8WZm//+lZmb//+eAAIt6i32qcIsIeHd6d3Kheasf/wBKszOL/wA25mf/ADTMzf8AFeZm/wCgMzP/AG3mZv8ADszN/wBWmZr/AF2AAIv/AHGzM4v/AG5MzP//rTM0/wBdZmb//5WAAP8AEhma////mZr/AA+AAP///7My/wAOmZqL/wANGZqL9xmfsKCLo4uNaquLCKOfnKGkc51uHzCL///IZmb//61maP//8hma//9M//7//5SAAP//74AAN///obM0i///kGZmi/sD/wBSMzQu/wBrGZn//+7MzQj/AEbMzf8AJ4AAFf8AA+Zm/wApTM6N/wAvTMyL/wA2GZoI9wsHi6z///7mZv8AI2Zmiv8AIYAA/wBTmZr//+4zNP8APIAA//+1gACL//+mZmaL//+lMzNM//+1Zmf//6sZmv//77MzCET/AWwzNBX///9MzXn///+Zmf//7TM0i///7EzMCPsXB4v//7MzM/8AAeZmcP8AABma//+3GZr//6rMzf8AEGZm///DMzP/AEszM4v/AFoZmov/AFnMzP8APGZn/wBLzM7/AFSzM/8AEOZmCA5H1fX3MfUB94D1A/eA+BoVIQr7mwQhCg5H92nGkcYBw5z3+ZwDw/dlFZEKDkf3acaRxvd6dwHDnPf5nAPD92UV/wAFszOI/wAFTM2KkYuit7qorov/ABPMzYv/ABL/////90zO/wATGZr///NmZgj//5wZmv/+1kzMsX//AF+zNP8BHkzMBf8AE2Zm///0MzT/ABSZmv//94AA/wARTMyLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDi3VZWnpvi///8hmai///8bMy/wAFGZr///CZmv8ACOZmCP8AWpma96Nllf//qWZm+5YF///o5mb/ABAzNP//5wAB/wALzMz//+qzM4tOi1VMfkoIDkf3JbzXvLzGkcYB0Jz3+ZwD0PgAFZEK+BxeFTwKPwQ8Cg5H4saRxqHGkcYBwZz3+ZwDwd4V/wAFszOI/wAFTM2KkYuit7qorouki/8AF8zN///yGZr/ABgzM///7eZmo3mofKKLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDiwh1WVp6b4t1i3SYcJ///+eAAP8AEjMz///kgAD/AA3MzXSLTotVTH5KCKD3IhWit7qorouki/8AF8zN///yGZr/ABgzM///7eZmo3mofKKLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDi3VZWnpviwh1i3SYcJ///+eAAP8AEjM0///kgAD/AA3MzHSLTotVTH5K/wAFszOI/wAFTM2KkYsIDkfixpHGocaRxvdmdwHBnPf5nAPB3hX/AAWzM4j/AAVMzYqRi6K3uqiui/8AC7Mzi/8AC2ZmiP8AC0zN///65mYI///BmZr//0cZmrF//wA7GZr/AK/mZv8AA+Zm///9GZoFo3mofKKLo4vMmKr2///8szT/AAQZmv//+kzM/wAB5maDi3VZWnpvi///64AAi///6rM0/wALMzP//+dmZv8AEbMzCP8AF5ma/wBGTM0F/wAO5mb///iZmf8ADuZm///7MzOYi6OLzJiq9v///LM0/wAEGZr///pMzP8AAeZmg4t1WVp6b4v///aZmov///aAAP8AAmZm///2GZr/AAQzNAj/AFbMzP8BAmZmZZX//6xmZv//B+Zm///3mZr/AAYZmgX//+eAAP8AEjM0///kgAD/AA3MzHSLTotVTH5K/wAFszOI/wAFTM2KkYuit7qorov/ABiZmov/ABdmZv//8pma/wAXzM3//+5MzAj//+iAAP//ukzNBf//8AAB/wAIZmV7/wAFZmf///GzM4tOi1VMfkoIDkf3JLzXvAH3pfjEFeQK91D7hhU8Cj8EPAoOR/ckvNe89413Afhh99IV//9pszSL/wBQTMz3g2WVN/uN+1+Li1r/ALqAAIv//+ZmZj///18ZmouLWv8AkGZmi///wZma+02xf/8AQjMz91n/ANDMzYsFvP//P7M0B/8AGYAA1/8ApszMiwUOR/S3yrfLtwH4YfgAFfwfX/gfBksE/B9f+B8GTAT8H1/4HwYOR/S3yrfLt/dfdwH4YfgAFf//eRmai/8AQOZm91Vllf//u5ma+1///yVmZouLX/8Ay7M0i///6mZmS///SeZmi4tf/wCnTM2L///qzM1M//9t5maLi1//AIMzM4sF///OzM37JrF//wA1GZr3Mv8A3eZmi4u3//8w5maL/wAVMzTK/wC55maLi7f//1TMzIv/ABWZmsv/AJWZmosFDkeWugHPlhX4Grr8GgbV91YV99H3BwWYmYypfZEI/Br7IQX///azM///7rM0i///7////wAJTM3///FMzQj4GvsiBZmRiql+mQgOR5a6Ac+WFfgauvwaBvfS91UV+9H7BwV+fYptmYUI+Br3IQX/AAlMzP8AEUzNi/8AD//////2szT/AA6zNAj8GvciBX2FjG2YfQgO91H4N/d/FffR9wcFmJmMqX2RCPwa+yEF///2szT//+6zM4t7/wAJTMz///FMzQj4GvsiBZmRiql+mQj8+vcMFTsKDvdR+AL3WhU9Cvj6+wwVPQoOR/jLdwH/ASsZmve8Ff//3czMJf//hRmauAX/AMyAAP8ASjM0Ff8AcIAA/wAozMwFmJmMqX2RCP//ooAA///eMzT/AD6AAP8AuszMZZX//7gzNP//Khma//8GzMz//6XmZgX///azM///7rMzi3v/AAlMzf//8UzNCP8AtMzN//++MzP//8AzM///QczNsX//AD8Zmv8AvJma/wCr5mb//8FmZgWZkYqpfpkI//9jGZr/ADlmZgUOR/jLdwH/AM8zM/8AqxmaFf//dczN///N5mYFfn2KbZmFCPcLtlf7L7F//wA9mZr/ALgzM/8A32Zm/wBQzM0F/wAJTMz/ABFMzYub///2szT/AA6zMwj//18zNP8AOoAA/wBPzMz/AO6AAGWV//+xMzT7f///P8zM0QV9hYxtmH0I/wCxGZr//78zNAX/AAiZmf//nTMyFf8AHIAB/wBVMzT/AGbMzP//2mZmBQ5HlroBz5YV/wBz5maL///gGZossX//ACPMzfb/AOgzM4uLuv//J4AAi6v/AF+Zmv8AuYAA//+8ZmYFmZGKqX6ZCP//VYAA/wA+Zmb/ACiZmv8AeYAA/wCB5mb/AC8ZmgWYmYypfZEI//+RMzT//9fmZv8ALczM/wCJGZpllf//yOZm//9bzMz//xgZmv//rDM0Bf//9rMz///uszSL///v////AAlMzf//8UzNCP8Ap0zN///DGZr//9tMzf//kuZm//98ZmaLBf8A1bM0/wD0szQV///hmZn//6VMzP//krMzswUOR5a6Ac+WFf8AS+Zmi///4hmaMrF//wAhzM3w/wEQMzSLi7r//v+AAIv/ABzmZv8AVkzN/wDkmZr/AFKzMwX/AAlMzP8AEUzNi/8AD//////2szT/AA6zNAj//1sZmsf/AD3mZvdNZZX//8MZmv//SoAA//9D5mb/AESAAAV9hYxtmH0I/wCtGZr//8CzNP//1+Zm//+If//7Gf//z8zNBX59im2ZhQj/AHHMzf8AKTMz///ozM3//7rMzf//pGZmiwX/ALWAAP8Aj4AAFf8AHZma/wBYmZr/AGrmZv//2OZmBQ5CtrX3obUBsLsD+HfgFftoBiQ4pPcJ8+Si7B/3aLX7aAb7BfsNdPsn+y/3CW/3CR/3aAYOQra196G1AfhJuwOy9/YV92gG8t5y+wkjMnQqH/toYfdoBvcF9w2i9yf3L/sJp/sJH/toBg5CtrX3obUBsLsD+HfgFf//RjM0i/8AW8zM96Hpi4u1//+wTMyL/wAeszTlZZb//92AACb//6WAAIsF+wX7DXT7Jx+L//9yMzP/AGHmZ///3IAA/wBqMzOGCP//3OZm//+ZTM2xf/8AJuZm9wb/AMgZmosF//8cTM3/ACozMxX//6BmaP8AApmY//+1TMz/ABwzNIv3Awjz5KLsHv8ATBmaBg5CtrX3obUB+Em7A7L39hX/AMkZmov//6QZmfuh//+SzM2Li2H/AF7mZov//90ZmiWxf/8AJuZm9wb/AEsZmosF9wX3DaL3Jx+L/wCHGZr//6cZmP8AJpmY//+bszT/AAezNAj/AB8zNP8AW5maZZb//92AACb///yAAIv7aIsF/wDyszT//9UzNBX/AFhMzP//+szMzv//4Rmai///luZmCCMydCoe///DMzMGDmyB/wAoGZr/AKPmZrL/AKXmZv8AKBmaAcO49zS49zG4A/etgRX4kwqk/wGYTMwV/wBUgAD///SzNP8AQEzO//+7szT/AAhMzP//qkzMCP//YuZmBv//NbMzBP8Ao0zN9zEH///3MzT//6rmZv//v0zM//+9GZr//6yAAP//9LMzCF7///9mZxX//6mzM/8ACTMz//+/GZr/AESZmf//9zMz/wBWGZoI9zQG/wDM5mYE//9aGZr//1/mZgf/AAhmZ/8AVrM0zP8ARczM/wBWszP/AAlmZggObIGy9zmy9zuyAcO49/64A/etgRX4kwr/ALYZmveHFf/+lczMBpT/AF0zNP8ASpma/wBJzMz/AGCAAIv/AGCZmov/AExmZkL/AAkZmi0I////5mZkFf//9kzM//+imZo+//+4Zmb//6CzNIv//5/MzYv//7WZmf8ASGZm///2mZr/AFyZmggObIGy+AeyAcO3+AC3A/etgRX4kwr/AJEzNP8BUjM0Ff8AF8zM///ggACZ///YZmaL///U5maL///WszN+Zf//6czM///hZmcI//+OMzT/AHDmZgX/AExMzP8AkjM0Ff//kbM0//+QzMz//5IzM/8AbrM0Bf8AHhmZ/wAXZmb/ACXMzf8ADeZm/wAp5maL/wApzMyL/wAmGZr///JMzv8AHmZm///o5mYI//8BAAH//9uAABX/AG2zM///kkzM//+PmZr//5CAAAX//+qzM/8AHoAA///zszP/ACWAAIv/ACiAAIv/ACozNP8ADUzN/wAnGZqi/wAfZmYI/wAfZmb7lhX/AHFMzf8AcUzN/wBxmZr//45mZgX//+DmZv//50zN///YmZr///FMzf//1OZmi///1GZmi///2OZn/wAOzMz//+FmZv8AGOZnCA5sgbL4B7IBw7f4ALcD962BFfiTCvguBP8ALGZmi/8AKBma///wmZj/AB9MzP//5jM0CP/+/OZo//785mgF///oMzL/AB9/////8hma/wAnszOL/wArGZqL8dnf8osI/wCQszT//7izNBX/ABgZmv//4GZm/wAOMzL//9hMzIv//9SZmoskOjkli///0+Zmi///2IAB/wAPMzP//+EzM/8AGWZnCA7PlXb3pLj3pHcBx74D+RL3xhX8o/ekWPzhvvek+KMGDs+VdvekuPekdwH4vL4DpPeZFfij+6S++OFY+6T8owYOrZZ2+Km4Afe1vgP36IEV+Kn3obj84V73ofypBw6ti7j4qXcB97W+A/e1+NYV+JQKDvtKlnb3pbj3oncBx74D+Bj3yBX7qfeiWPzgvvel96kGDvcv9xf3ZftlwaLBo8ESt8ETWPdc938VbnN2cG90oKmloKOoHqmhc3Af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zM0V+JYK/wJvszQE+JcK//+SgAD//z2AABV+/wALszL///WAAJj/AApmZv8AEjM0mP8AC7M0Hov/AAUzNP///rMy/wACszL///6zNP8ABIAA///+szT/AASZmv///LMy/wAFGZiL/wAFMzQI/wAPmZr/AAnMzv8AFhma/wAs5mb/ABYZmv8AJZma///wgAD//8TMzB6L///YTMz///GzMv//4DM0///bmZpmCP//0oAA///TGZoF///DgAD//8IzM///9kzM///izM2L///bmZkIi/8AH+Zo/wABTM3/ABOAAB7/AGtMzAb/ABOAAP8AHIAA///+szOLH/8AB8zM/wAggAD/AAaAAP8ALszN/wAAszT/ABIzM////Bma/wADMzP///gzMv8AALM0///6MzT///6zM///9Zma///UgAD///TmZnz//+nmZosI//+SzM4Gi/8AHTM0/wAqTMz/ACmzM/8AAzM0/wADMzMI/wA9zMz/ADvMzgWu/wAh5mb/ABqzNP8AGzM0i/8ALszMCP8AQkzO///EMzL/ABtMzP//zeZm//+7zMz//9uZnP//zUzMZh4O9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv//+EzM//+GszQV/wAbTMz/ABizNP//8RmY///ZszQfi///4hma///cMzT//8/mZv//yMzM///3gAAI/wACszT//+yAAAX/AApmZv8AAUzM/wAIZmaL/wAHzMyLCP8AIxma/wAqTM7///TmaP//un////+uGZn//8lmZv//7TM0///qgAAf///gzMyL///6GZr/AA5Mzf//+OZmlv//+hma/wAIgAD///eAAP8ABxmZ///zszSLCH5+///0Zmf///YzM///50zN/wA0GZj//++zM7D/AEmAAMz/ADGAAf8AUTMzH4v/AEMzNP//0GZm/wAZf/7//9uzNP8ABhmaCP///0zO/wABMzQF/wA6gACw/wADTMyni/8AFMzMCKX//+iAAP8AJ7M0TP//pbM0cf//xEzM///rzMz///eAAP8ABczM///zszSa/wARgAD/AAaAAP8AFBmY/wALszT/ACezNP8AKkzM/wAHszT/ABAzNB4O9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv8AZ2Zm//6fMzQV///L5mb/AGoAAQaY////gAD/AAcZmP//94AAHv//9jM0i///9EzM///6MzT///jMzP//+szM///6MzT///zMzP///0zM///6szSL///7gAAI//+Z5mf//4xmaAf/AKPMzP8A78zNBY3/AAMzNP///pmaj////Bmaiwj//+8ZmAb///vMzIv///zmaP///GZm///95mb///0Zmgj//1VMzf//DjMyBf///0zM////TM3///+AAP///2Zni////2Zm/wABmZr///cZmv8ABeZm///u5mb/ABKAAIsI/wB/TMz//83mZgaL///jmZr//+jmaP8AARmZ///lzMz///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wATgAD/AACZmf8AGLM0/wAAszT/ABvmZov/ABgZmov/ABLMzP///0zM/wATgAD///9mZ/8AA+Zm/wAD5maL/wANszT///wZmv8AA+Zm///hzMz/AAIzM///9TM0///+TM2L/wAcszMI/wAyGZr/ACuZmgf/AAiAAP8ACRma/wAMTMz/AAcZmv8ABeZm///9Zmb/AAPmZ///+YAAHw73OP8BejM0///wzM0V+JYK/wJvszQE+JcK/wA2GZj//pTMzBX//8WAAf//4WZo///VMzNmHv//6Jmai///95mY/wAO5mb///bmZv8ADEzN///4TMz/AAqAAP//9WZo/wAJszN+iwj///RMzP//9GZo///1mZr///OzM///5pma/wA0mZj//+szM/8AIxma18H/ADiAAP8ATWZm/wA7zMxi/wA1TM7//7sZmh///+VmZov//+lMzv//+szM///05mb///uAAAj/AAxmZv8AZrM0Bf8AFszM///9Zmb/ABQZmv///UzO/wAdMzSL/wASMzSL/wAUzMz/AACzMv8AGWZm/wACmZoI/wAJszT/ACpMzP///BmY/wAB5mgF///c5mb///wZmv//3jM0///9Zmb//9+AAIv//+kzNIt1/wABTMz//+qAAI0I///rMzL//06AAAX/ACCAAP8ADEzM/wAXZmb/AAKzNP8AFhmaiwj/AChMzP8AHzM0///lTMz//70AAR8O9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv//uDMy//7wmZoV/wAQgAD/ADgZmv8AJxma/wA+MzL/AFIzNP8AHrM0i/8ABzM0if8ABTMy///6zMz/AAMzNP//wZma///tzMxl///mMzL//92Zmv//2Bma///Z5mb//9PMzP//7TMz///IGZyL///PTMwI//+DMzP/AEtmZ///50zN/wAvgAD/AFCZmv8AIGZm2f8ANLMz/wA0szP//+YZmP8AMpma//+sGZoe///t5maLb4X//+0Zmv//9ZmaCP//+jM0///oMzIV+JgKDvc4/wF6MzT///DMzRX4lgr/Am+zNAT4lwr//+CAAP//amZmFf8AazMyBv//z+Zm//+IZmb//89Mzv//iGZn///WZmb//6JmZwj/AASAAP///Bma/wAqMzSNBf8AIxma/wBomZj/ACSAAPH/AETmZv8Ap7M0CP//9jMy/wAHMzQF///1mZr///zMzP//8mZm///8szT//+iZmosI//+BMzQG///rGZqL/wABszL/AAZMzP//9Jma/wACMzT///5mZouK////gACL///+gAD///9mZv//4szM///5gAL//9rmZv//+szM///gGZoI/wATgAD///4ZmgX/AA2Zmv8AMWZm/wAU5mb/AAPmZv8AE4AAiwgO9zj4D/h7FbOga24fi2plbXp/CHmXBWSkgaGLngioo6iwHu5NFbdorE5NYGZbHotpnXKxcgiVhQV8f32BfH1ydYFvi3IITLhpzNuxx7sei657p2ugCGalBaadt6qLsggk+7QVb12kwR+Lnpe2wK4IqXoFsnObbotuCE1bfG8e/wADMzT//2fMzRX4lgr/Am+zNAT4lwoO9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCv8AQszM//66mZoV///vgAD//8fmZv//2OZo///BzM3//63MzP//4UzNi///+OZm/wAB5mT///qzM/8ABTM0///8zM3/AD5mZv8AEjMz/wAmGZz/ABmzM/8AImZm/wAn5mf/ACYZmv8ALDMz/wASzMzDi/8AMLM0CP8AfMzM//+0mZr/ABizNP//0IAA//+vZmb//9+Zmj3//8tMzP//y0zM/wAZ5mb//81maP8AU+ZmHv8AEhmai6eR/wAS5mb/AApmZgj/AAXMzP8AF8zMFf//6bM0///uMzT//+gzNP///xma///0TMyLCP//w4AA///0TMz/AD5mZv8AHoAA/wBDmZr/ABoZmv8AHoAA/wAd5may/wAnmZr//+tMzP//lrM0H4v///KZmv///rMy///wGZj///yzNHoIDvc4/wEzMzT/AM5MzRX4mQrS//8igAAV+JYK/wJvszQE+JcK/wBmzMz//4WAABX/AApmZov/AAnMzP///LM0/wAHGZr///mAAP8AEuZo///vzMz/ABDMzP//0bM0i///rYAAi///x4AA///+GZz//9j/////95mY///gzM3///JMzP//zUzNbf//+YAAgIsI///GzMz///mAAP8Aapma/wA1TM3/AJeAAP8AJbM0/wAbTMynH////WZm//6XzMwV+JoKDvc4/wIBMzT/AM5MzRX/AM3//weLsv8AAOZo/wAnszT/AAEZmP8ACIAAi/8AAxma///+TMz/AAAZmv///bM0i2f//+mzNP//3czM///v5mb//8bMzP//5WZm/wABGZr///iZmv8AAuZo///55mb/AAXMzIf/AB2Zmv8ADEzM/wAOmZr/AAPmZv8ADGZmiwj/AAqzNP8AAkzM///wZmj//+nmZh///z+ZmQeL///KAAH///TmZv///MzM///SgAD///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wAf5mb/AACZmf8AE4AA/wAAszT/ACCAAIv/AB8zNIv/AA+ZmP///0zM/wAggAD///9mZ/8AA+Zo/wAD5maL/wANszT///wZmP8AA+Zm///SgAD/AAHmZv//9OZo/wADMzSLwQj7Whb4mQrK//8igAAV+JYK/wJvszQE+JcKDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wADgAD//zyAABV+/wALszL///WAAJj/AApmZv8AEjM0mP8AC7M0Hov/AAUzNP///rMy/wACszL///6zNP8ABIAA///+szT/AASZmv///LMy/wAFGZiL/wAFMzQI/wAPmZr/AAnMzv8AFhma/wAs5mb/ABYZmv8AJZma///wgAD//8TMzB6L///YTMz///GzNP//4DM0///bmZhmCP//0oAA///TGZoF///DgAD//8IzM///9kzM///izM2L///bmZkIi/8AH+Zo/wABTM3/ABOAAB7/AGtMzAb/ABOAAP8AHIAA///+szOLH/8AB8zM/wAggAD/AAaAAP8ALszN/wAAszT/ABIzM////BmY/wADMzP///gzNP8AALM0///6MzT///6zM///9ZmY///UgAD///TmaHz//+nmaIsI//+SzMwGi/8AHTM0/wAqTMz/ACmzM/8AAzM0/wADMzMI/wA9zMz/ADvMzgWu/wAh5mb/ABqzNP8AGzM0i/8ALszMCP8AQkzO///EMzD/ABtMzP//zeZo//+7zMz//9uZnP//zUzMZh4O9zj/ATgzNP8AzkzNFfiZCs3//yKAABX4lgr/Am+zNAT4lwr/AG5MzP//grM0Ff8AG0zM/wAYszT///EZmP//2bM0H4v//+IZmv//3DM0///P5mb//8jMzP//94AACP8AArM0///sgAAF/wAKZmb/AAFMzP8ACGZmi/8AB8zMiwj/ACMZmP8AKkzQ///05mj//7p/////rhmZ///JZmb//+0zNP//6oAAH///4MzMi///+hma/wAOTM3///jmZpb///oZmv8ACIAA///3gAD/AAcZmf//87M0iwh+fv//9GZn///2MzP//+dMzf8ANBmY///vszOw/wBJgADM/wAxgAD/AFEzMx+L/wBDMzP//9BmaP8AGYAA///bszT/AAYZmgj///9MzP8AATM0Bf8AOoAAsP8AA0zMp4v/ABTMzAil///ogAD/ACezNEz//6WzNHH//8RMzP//68zM///3gAD/AAXMzP//87M0mv8AEYAA/wAGgAD/ABQZmP8AC7M0/wAnszT/ACpMzP8AB7M0/wAQMzQeDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wDQZmT//p8zNBX//8vmaP8AagABBpj///+AAP8ABxmY///3gAAe///2MzSL///0TMz///ozNP//+MzM///6zMz///ozNP///MzM////TMz///qzNIv///uAAAj//5nmZ///jGZoB/8Ao8zM/wDvzM0Fjf8AAzM0///+mZyP///8GZiLCP//7xmYBv//+8zMi////OZo///8Zmb///3mZv///RmaCP//VUzO//8OMzIF////TMz///9Mzf///4AA////ZmeL////Zmb/AAGZmv//9xma/wAF5mb//+7mZv8AEoAAiwj/AH9MzP//zeZmBov//+OZmv//6OZo/wABGZn//+XMzP///hma///8GZr///wZmov///JMzP8AA+Zm///8GZr/ABOAAP8AAJmZ/wAYszL/AACzNP8AG+Zmi/8AGBmYi/8AEszQ////TMz/ABOAAP///2Zn/wAD5mj/AAPmZov/AA2zNP///BmY/wAD5mb//+HMzP8AAjMz///1MzT///5MzYv/AByzMwj/ADIZmv8AK5mYB/8ACIAA/wAJGZz/AAxMzP8ABxma/wAF5mb///1mZP8AA+Zn///5gAAfDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wCeGZj//pTMzBX//8WAAf//4WZo///VMzNmHv//6Jmai///95mY/wAO5mb///bmZv8ADEzN///4TMz/AAqAAP//9WZo/wAJszN+iwj///RMzP//9GZo///1mZr///OzM///5pma/wA0mZj//+szM/8AIxma/wBMAALB/wA4gAD/AE1mZv8AO8zMYv8ANUzO//+7GZgf///lZmaL///pTM7///rMzP//9OZm///7gAAI/wAMZmb/AGazNAX/ABbMzP///WZm/wAUGZr///1Mzv8AHTM0i/8AEjMyi/8AFMzM/wAAszL/ABlmaP8AApmaCP8ACbM0/wAqTMz///wZmP8AAeZoBf//3OZo///8GZr//94zMv///WZm///fgACL///pMzSLdf8AAUzM///qgACNCP//6zMy//9OgAAF/wAggAD/AAxMzP8AF2Zm/wACszT/ABYZmosI/wAoTMz/AB8zNP//5UzM//+9AAEfDvc4/wE4MzT/AM5MzRX4mQrN//8igAAV+JYK/wJvszQE+JcK/wAhMzL//u+ZmhX/ABCAAP8AOBma/wAnGZr/AD4zMv8AUjM0/wAeszSL/wAHMzSJ/wAFMzL///rMzP8AAzM0///BmZr//+3MzGX//+YzMv//3Zma///YGZr//9nmZv//08zM///tMzL//8gZnIv//89MzAj//4MzM/8AS2Zo///nTM3/AC+AAP8AUJmY/wAgZmjZ/wA0szP/ADSzM///5hmY/wAymZr//6wZmh7//+3mZotvhf//7Rma///1mZoI///6MzT//+gzMhX4mAoO9zj/ASwzNP8AzkzNFf8Azf//B4uy/wAA5mb/ACezNP8AARma/wAIgACL/wADGZr///5MzP8AABma///9szSLZ///6bM0///dzMz//+/mZv//xszN///lZmb/AAEZmv//+Jma/wAC5mb///nmZv8ABczNh/8AHZma/wAMTMz/AA6Zmf8AA+Zm/wAMZmaLCP8ACrMz/wACTM3///BmaP//6eZmH///P5mZB//////////KAAH///TmZ////MzM///SgAD///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wAf5mb/AACZmf8AE4AA/wAAszT/ACCAAIv/AB8zNIv/AA+ZmP///0zM/wAggAD///9mZ/8AA+Zm/wAD5maL/wANszT///wZmv8AA+Zm///SgAD/AAHmZv//9OZo/wADMzSLwQjZ//8igAAV+JYK/wJvszQE+JcK/wA6gAD//2pmZhX/AGszNAb//8/mZv//iGZm///PTMz//4hmZ///1mZm//+iZmcI/wAEgAD///wZmv8AKjM0jQX/ACMZmv8AaJmY/wAkf/7x/wBE5mj/AKezNAj///YzNP8ABzM0Bf//9ZmY///8zMz///JmaP///LM0///omZiLCP//gTM0Bv//6xmai/8AAbMy/wAGTMz///SZmv8AAjM0///+ZmaLiv///4AAi////oAA////Zmb//+LMzP//+YAC///a5mb///rMzP//4BmaCP8AE4AA///+GZoF/wANmZr/ADFmZv8AFOZm/wAD5mb/ABOAAIsIDvc4+IP4exW0oGtuH4tqZG16fwh5lwVkpIGhi54IqKOosB7uTRW3aKxPTGBmWx6LaZ5ysHIIlYUFfH9+gXt9cnWBb4tyCEy4aczbsce7Houu///v5mj/ABvmZv//4RmY/wAVGZoIZaUFpp23qouyCCT7tBVvXaTBH4uemLa/rgipegWyc5tui24ITVt8bx7//00zNP8ARUzNFfiZCs3//yKAABX4lgr/Am+zNAT4lwoO9zj/AXozNP//8MzNFfiWCv8Cb7M0BPiXCkn//m3MzBX4mQr/APDMzP8AUMzNFf//74AA///H5mb//9jmaP//wczN//+tzMz//+FMzYv///jmZv8AAeZk///6szP/AAUzNP///MzN/wA+Zmb/ABIzM/8AJhma/wAZszP/ACJmaP8AJ+Zn/wAmGZj/ACwzM/8AEszMw4v/ADCzNAj/AHzMzP//tJmc/wAYszT//9CAAP//r2Zm///fmZo9///LTMz//8tMzP8AGeZm///NZmj/AFPmZh7/ABIZmov/ABv//pH/ABLmaP8ACmZmCP8ABczM/wAXzMwV///pszT//+4zNP//6DM0////GZr///RMzIsI///DgAD///RMzP8APmZm/wAegAD/AEOZmv8AGhma/wAegAD/AB3mZrL/ACeZnP//60zM//+WszQfi///8pma///+szD///AZmP///LM0eggO9zj/AXozNP//8MzNFfiWCv8Cb7M0BP8AomZk/wCDTND//33Mzv//XWZm//9dZmb//3tMzP//fIAA+zUf//+l5maL//+v5mb/ACiAAP//yoAA/wA/5mb/AApmZv8AAGZm/wAUTM3/AACZmpmLCP8Aa0zNBv8AE4AA/wAcgAD///6zM4sf/wAHzMz/ACCAAP8ABoAA/wAuzM3/AACzNP8AEjMz///8GZr/AAMzM///+DMy/wAAszT///ozNP///rMz///1mZr//9SAAP//9OZmfP//6eZmiwj//5LMzQb///////8AHTM0/wAqTM3/ACmzM/8AAzMz/wADMzMI/wA9zM3/ADvMzgWu/wAh5mb/ABqzNP8AGzM0i/8ALszMCP8AQkzO///EMzL/ABtMzP//zeZm//+7zM3//9uZmv//zUzMZn7/AAuzM///9YAAmP8ACmZm/wASMzSY/wALszQei/8ABTM0///+szP/AAKzMv///rMz/wAEgAD///6zM/8ABJma///8szT/AAUZmIv/AAUzNAj/AA+Zmv8ACczN/wAWGZr/ACzmZv8AFhma/wAlmZr///CAAP//xMzMHov//9hMzP//8bMy///gMzT//9uZmmYI///SgAD//9MZmgX//8gzM1L///NmZ///4pmZ///+Zmb//98zM2S9///o5mb/AD8Zm4v/AESzMwj/AKEzNP8AgeZo/wCDmZj/AKJmZh7/AHvMzP//hYAAFf8ACmZoi/8ACczM///8szT/AAcZmP//+YAA/wAS5mj//+/MzP8AEMzM///RszSL//+tgACL///HgAD///4ZnP//2P/////3mZj//+DMzf//8kzM///NTM1t///5gACAiwj//8bMzP//+YAA/wBqmZr/ADVMzf8Al4AA/wAlszT/ABtMzKcf///9Zmb//pfMzBX4mgoO9434b/cOFfibCv/+XbM0/wCVzMwV+JwK/wLNmZiJFfidCg73jfeI+E8V+J4K//8+szP//1TMzBX4nAr/As+ZmIkV+J0KDveN+Cj4tRX4nwr//qazNP/+7szMFficCv8CzpmYiRX4nQoO94348PdaFTv3NwafipZ+HnyLeYKAg4KGioOLhAj7MftG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T7J8rYuoCLewuMQe9y0sFc9Uvi4rSVFCHotWp2XFZQibgAVzend6c3ZkaXxgi2YIKtBW7/cPxujTHovCcbZcqwhQswW1p9C6i8gI+zP8TxVfRrDgH4unnc3cwgi4cAXHZ6Vei14ILEF0YB77vfUV+JsK//5eszT/AJXMzBX4nAr/BEeZoIkV+KIKDvkU+Hf3DhX4mwr//l6zNP8AlczMFficCv8ER5mgiRX4ogr//umzMP//5WZnFf//5pmY//+pzMz//8PmaP//oDMz//+BgAD//9DMzYuAjoOThuun/wA6gAD/ACeZmv8ANOZo/wA9Zmb/ADqZmM+o4YvWCPdU+wixQvsQWf//iBma//+u5mY6sz33FR7/ABvmaIu2/wAJTM3/AB0ZmP8AD+ZmCP8ACOZo/wAkszMV+KAKDvkU+cv4sxX4oQqH/L4VLAr8x/haFfieCv//RLMz//9UzMwV+JwK/wRHmaCJFfiiCg73OP8BH2Zm/wEYMzQVj/8ABzM0l//////+/wAVmZqLCNMG/wAVmZqLk////mZm/wABmZqDCJv//6WZmgX/AAQzNP//5oAA///95mT///pMzf//3rM0///7MzMI///6Zmb///8zNAX///zMzP///zMz///+Zmj///5mZov///2ZmgiL///vMzP/AAGZmv///mZmBYv/ADMzMv8AAZma/wAWZmaj/wA1mZz///5mZose/wABmZj/AAGZmov/ABDMzQWL/wACZmf///2ZnP8AAhma///8zMz/AABMzW//AAJmZv//8zMy/wAEzMz///jMzP8AImZnCP//yZma/wEDMzQF///8zMz/AA8zNP///jM0/wAGGZq4/wADgAD/AAJmZv8AADM0/wABmZr/AAIzMov/AAJmZgiLm////zM0/wABmZoF///VmZr///8zNP//xMzM////MzJni///2zM0i///5zMy/wAAzM7//+ZmZv8AAMzMCP///Zma///+ZmaLewX///zMzP8AAmZo///+Zmj/AATMzB7/ABpmZv///zM0/wAHMzL///zMzIv///DMzIv//+ZmZv//szM0//8vMzR7///XMzP///czM///6Zma///zMzT///mZmf//6mZm///9mZr///zMzf///5mah////GZli////ZmaCIv///DMzf8AAZmZ///+ZmYF//////+L/wAszM3/AAGZmv8AFmZmiwj/ABjMzP8AJzM0///+ZmaLH/8AAZma/wABmZqL/wAQzM0Fi/8AAmZn///9mZr/AAGZmv///MzM/wAAzM0I///2Zmb/AAGZmQVz/wAD//////ozNP8AA5majv8ADTMzi4v/ABVmZv8ATxmalv8AHBmaCP8ASMzO91QV/wARmZqL/wANMzL///kZmJH//+SAAAj/ABMzNP//mZmaBf8AAzM0///vMzT///P//v//+mZm///xmZqLCP//vZmaBv//6Zma///5mZj/AAGZmP8ABzM0H4uL/wAbMzTn/wAKZmar/wAFmZr/ABDMzP8ABMzO/wAJmZz/AA5mZosInf/+GJmYFfiWCv8Cb7M0BPiXCg73OP8BXGZm/wGzZmYV/wAYzMz/AAWZmv8ACAAC/wA3MzT/ACMzNP8AKZmY///3MzL//8pmZlv//+jMzP//6zM0Vx7//8GZmgb//+WZmgT/AD5mZgb/AEjMzP8AEmZo///bTMz//9SzNP//3MzN///zMzT//9JmZv//rmZm///L5mb///jmZv8ACzMz/wAdmZof///gzM7//75mZhWji/8AKZma///+Zmb/ACzMzIv/AGpmZov/ACWZmL+L/wAxmZqLv///5Zmc/wAjMzRT/wAMzMyr/wAOZmb/ABmZmK+L/wAfMzSL/wAszMz//+szNP8AKzM0+wiL///pmZqL///dmZj///5mZv//2zM0iwj//92Zmot3/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj//1MzNAeL//+9mZr///czMv///ZmZ///PMzSH///7MzP///szM4v//+8zM/8ABMzN///7MzP/ACGZmv8AAMzO/wAUzMz/AADMzP8AIzM0iwjI//9zzM0V+JYK/wJvszQE+JcKDvc4/wF9zMz3BhX/AD5mZov/ACZmaP8AFzM0/wAlmZr/ADJmZv///EzM/wAFMzP///uZnJP///gZmP8AAszN///bMzT//9TMzf//4//+///v/////8pmZosI//+wzMz//9GZnP8AVZmb/wBPMzP/AIZmZv8APmZmp8cfy4v/ACWZmP//3MzM/wAJmZpTk////Zmak////7Myk/8ABRma////zMz/ACDmZv///mZo/wAhZmj///gzNP8AJBma///hmZqL///b//7/AAzMzEuL//+WZmaL//+uZmg7i///izM0i///zTMz/wAP5mb//8lmZv8AJ0zN///bzM0I/wAf5mf//+KZmv8ALOZk///vzMz/ADszNIsI///8Zmj//37MzRX4lgr/Am+zNAT4lwoO9zj/AUFmZv8AtszNFf8BAZmYB5+f/wAEzM7/AB8zNP8AhmZm/wASZmj//6JmZP//rMzO+wT//85mZP//4mZnM///wzM0///6Zmb/AA2Zmv8AFmZmHmv/ATMzNBX//92Zmot3/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzf///MzM/wAIzM3///zMzIv//72Zmgj//1MzNAeL//+9mZr///czM////ZmZ///PMzOH///7MzP///szM4v//+8zNP8ABMzN///7MzL/ACGZmv8AAMzO/wAUzM3/AADMzP8AIzMzi6OL/wAczMz///5mZsuLCP8AWMzM/wBjMzT/ACmZmvcg/wBqZmb//75maP8AUzM0//96ZmQf///rMzSL//+5mZr///5mZv//8MzMiwj/AFjMzv/+BszMFfiWCv8Cb7M0BPiXCg73OPgf98IV/wA4zMyL///8zM7///DMzv8AAZma///iZmaPh/8ADmZmi4+P////MzT/ABczNP///zMy/wAMzMyL/wAWZmaL/wAWZmb/AADMzv8ADmZm/wAAzMyfh4////GZmouHh////mZmZ/8AAmZmg1P///8zNAj//9JmZv8AcZmaBv8ADZma/wAKZmb/AAjMzP8ADzM0Hv8APZmaBv8AMZmai/8ACmZm///lmZr/AA5mZv//0mZmk////zM0/wAHMzD/AAGZmP8ABmZo/wADMzT///zMzP8AGzM0///2Zmj/AD5mZP///mZo/wAFmZqL/wABmZr///8zMP8AAMzO///+ZmiL///0zMz///5mZv//+mZo///+ZmZ7iwj//1pmZgaLi///yZma/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj//1MzNAeL//+9mZr///czMv///ZmZ///PMzSH///7MzP///szM4v//+8zNP8ABMzN///7MzL/ACGZmv8AAMzOw/8AAMzMi4sI/wB7MzIGq/8ANMzO///+ZmaLH/8ACZmY/wAgzM3/AAjM0P8ALAAB/wAFmZj/ACGZmf//+MzMj///+ZmY/wABmZn///czNP///Zma///zMzT//9DMzf//6MzMY///zZmaiwj//72Zmgb///GZmv8AAAAB///0zMyfi/8ADzMzCPcMB/8AHMzO//7CzMwV+JYK/wJvszQE+JcKDvc497T/ANuZmhWL//+9mZr///czMv///ZmZ///PMzSH///7MzP///szM4v//+8zNP8ABMzN///7MzL/ACGZmv8AAMzO/wAUzMz/AADMzP8AIzM0i/8AImZmi5////8zNP8AImZm////MzL/AATMzP8ABMzOi/8AEMzM///7MzT/AATMzf//zzM0/wADMzP///czNP8AAzM0i/8AQZmZCP8ARzMz/wAtmZgH/wA4zMyL///8zM7///DMzP8AAZma///iZmePh/8ADmZmi4+P////MzT/ABczM////zMy/wAMzM6L/wAWZmaL/wAWZmb/AADMzv8ADmZm/wAAzMyfh4////GZmouHh////mZmZ/8AAmZmg1P///8zNAj//9JmaP8AfZmaBv8ADZma/wAKZmT/AAjMzP8ADzM0Hv8APZmaBv8AMZmai/8ACmZm///lmZr/AA5mZv//0mZmk////zM0/wAHMzT/AAGZmP8ABmZo/wADMzT///zMzP8AGzM0///2ZmT/AD5mZP///mZo/wAFmZqL/wABmZr///8zMP8AAMzO///+ZmiL///0zMz///5mZv//+mZo///+ZmZ7iwj//1pmaAaLi///yZmY/wAAzM7//92Zmv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj/AFozNP/+aGZmFfiWCv8Cb7M0BPiXCg73OP8B2jM0944V//+wzM0Hd///7AABa///9ZmZb4sIJ///2mZm/wBmZmb/AEGZmv8AYMzO/wAzMzL/AEJmZv8ATMzOH/8ATzMyi/8AIZmaY5f//8zMzP8ACAAC///9gACT////szKT/wAFMzT///8ZmP8AIMzMif8AIUzQ///4gAD/ACRMzHOL///EzMz/AAzMzP//0zM0iwj//42Zmv//omZm//+2Zmb//4GZmv//mmZm/wBOZmb//62Zmv8AcmZmH/8ANmZmi/8APzM0/wAXMzT/ADGZmv8AImZm///6Zmj/AAWZmv//+mZk/wAHMzKL/wAFmZoIxweL/wATzMz/AAmZmP8AA2Zm/wATMzT/AAMzNP8AAzM0/wAAgAD/AAGZnP8AARmai/8AAzM0CIv/ABGZmP///mZk/wAAzM4Fi///2mZo////MzL//+mZmHNL/wAAzM6LHv///zM0////MzKL///uZmgFi////MzM/wACZmb///6Zmv8AAmZm////zMwIm////mZmBaL///2zNP8AC2Zo///7GZqL///uZmYIK//+9szMFfiWCv8Cb7M0BPiXCg73OPiz/wGNZmYVi/8AQmZm/wAIzMz/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///eZmj///8zNP//6zM0////MzL//9zMzIv//92Zmot3/wAAzM7//92Zmv8AAMzM///7MzT///szNIv//+8zMv8ABMzM///7MzT/ADDMzP///MzM/wAIzMz///zMzIv//72Zmgj//7szNP//RzM0/wBEzMwHi/8AQmZm/wAIzM7/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///eZmb///8zNP//6zM0////MzL//9zMzIv//92Zmot3/wAAzM7//92Zmf8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzf///MzM/wAIzM3///zMzIv//72Zmgj//1MzNAf/AAAAAf//vZma///3MzP///2Zmf//zzMzh///+zMz///7MzOL///vMzP/AATMzf//+zMz/wAhmZn/AADMzv8AFMzN/wAAzMz/ACMzM4v/ACJmZov/ABQAAv///zM0/wAiZmb///8zMv8ABMzM/wAEzM2L/wAQzM3///szNP8ABMzN///PMzT/AAMzM///9zMy/wADMzSL/wBCZmYI/wBNmZr/ALjMzP//smZmB4v//72Zmv//9zM0///9mZn//88zNIf///szNP//+zMzi///7zMz/wAEzMz///szM/8AIZma/wAAzM7/ABTMyv8AAMzM/wAjMzSL/wAiZmiL/wAT//z///8zNP8AImZo////MzL/AATMzP8ABMzNi/8AEMzN///7MzT/AATMzf//zzM0/wADMzP///czNP8AAzM0i/8AQmZmCP//WzM0//8QMzMV+JYK/wJvszQE+JcKDvc4/wGbzMz/AYhmZhWL/wBCZmb/AAjMzv8AAmZo/wAwzMyP/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//95mZv///zM0///rMzT///8zMv//3MzMi///3Zmai3f/AADMzv//3Zma/wAAzMz///szNP//+zM0i///7zMy/wAEzMz///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//UzM0B4v//72Zmv//9zMy///9mZn//88zNIf///szNP//+zMzi///7zM0/wAEzMz///szMv8AIZma/wAAzM7/ABTMzP8AAMzM/wAjMzSL/wAiZmaLn////zM0/wAiZmb///8zMv8ABMzM/wAEzM6L/wAQzMz///szNP8ABMzN///PMzT/AAMzM///9zMy/wADMzSL/wBCZmYI///eZmj//xUzMxX4lgr/Am+zNAT4lwoO9zj32eoVeouKk4qSipiBn3iLCH2BgHhvrX+xH6GLopecnKinnLuL2gj3Ywebk5SlHpUGjo2Mjh+LnImNBYtSiXRzS42LHoqJi3oFiI2Kjh6hBqSVhHkf+28H+w12bnEe/wA1MzT//5HMzRX4lgr/Am+zNAT4lwoO9zj/APiZmv8BiGZmFf//UzM0B4v//72Zmv//9zMz///9mZn//88zM4f///szM///+zMzi///7zM0/wAEzM3///szMv8AIZma/wAAzM7/ABTMzf8AAMzM/wAjMzOL/wAdmZqL/wAMzMz///8zNP8AImZm////MzL/AATMzP8ABMzOi/8AEMzM///7MzT/AATMzf//2Zmaj///+MzM/wACZmeL/wBCZmYI/wBKZmYH/wARmZqLn4eXewj/AFjMzv//kZmaBf8ACzM0///zMzP/AADMzP//9zMzi///9ZmaCP//9MzMB/8ACMzM/wAAzM6f/wAAzMz/ABTMzIv/ABZmaIv/ACczNP///zMzi4v/AATMzP8ABMzNi5v///szNP8ABMzN///qZmj/AAJmZv//7MzM/wAImZr///WZmP8ADDMzCP//iZmY/wCLMzQFh/8ABMzM///8zM6Pi/8ABMzMi/8ABmZm/wAEzMz/AAjMzv8ADZma/wAOZmYI/wBEzMz/AE8zNAX/ABgzNP8AG+Zm/wAdZmj/AAQZmqv/AAGZmv8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///qZmj///8zNP//8mZk////MzL//+szNIv//+jMzIv//+GZmP8AAMzO///dmZr/AADMzP//+zM0///7MzSL///vMzL/AATMzP//+zM0s////Zmag///6zMy///CZmb//7pmZgj//93mZv//2WZm///ogAD///NmaP//5Zmaiwj/AEczMgeL/wBCZmb/AAczNP8AAmZo/wAmZmaP/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//92Zmv///zM0///zMzT///8zMv//4mZmi///3MzNi///6zMz/wAAzM7//95mZv8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzYf/AAjMzf///ZmYi///vZmaCP8AgZma//5oZmYV+JYK/wJvszQE+JcKDvc4/wH6MzT3DhWLi/8AEmZo/wBMzMz/AAWZmP8AIZma///4zMyP///5mZj/AAGZmv//9zM0///9mZr///MzNP//0MzN///ozMz//9jMzP//zZmaiwhnBv//7Zma//////////TMzP8ADMzNi/8ADzMzCP8A1zMzB4v/AEJmZv8ACMzO/wACZmj/ADDMzI//AATMzP8ABMzMi/8AEMzO///7MzT/AATMzP//3mZm////MzT//+szNP///zMy///czMyL///dmZqLd/8AAMzO///dmZr/AADMzP//+zMz///7MzSL///vMzL/AATMzf//+zM0/wAwzMz///zMzP8ACMzO///8zMyL//+9mZoI//9TMzQHi///vZma///+Zmb///v//1P///2Zmv//+zMz///7MzOL///vMzT/AATMzf//+zMy/wAnMzT/AADMzv8ANMzM/wAAzMyLiwj/ADMzNP//dszNFfiWCv8Cb7M0BPiXCg73OPh++EAVh5H7koseeIeFeh56BoiJiYgfi3qMiQWLwY2iHv8AFRmYi/8AJTM0///+gAD/AAjMzP///5maVf//wuZm//+xMzb//9mZmv//qOZmi///qDM0i///sZmY/wAmZmb//8qZmv8APRmakv8AAGZm/wAcTMz/AAGAAP8AExmaiwijsYmLH4yNi5wFjoeNiWuFjakeiPeJ9xH7vQWNh4+Jj4uPi46MjZAI/wAFMzT//3PMzRX4lgr/Am+zNAT/AKJmZP8Ag0zQ//99zM7//11mZh+L//+3gAD//+WZmP//vbMy///UgAD//8yzNAj/AA5mZgeOh42IHm+LfIyKqwiE958FnoyQspCNjZAei5mJjSeJ+wH7sfsJ97EjjYmJi3oFiY2Jj6qWiHse+6EHbX+FbIiIiYge///wMzMH///UMzP/ADNmZv//5bMz/wBC5meL/wBJMzMI/wChMzT/AIHmaP8Ag5mY/wCiZmYeDvc496X/ANuZmhX3LAeL/wAnZmb/AAoZmP//+GZm/wASszR0CPdQ//8FmZoFl///8zMz/wAMzMz///szM5eLCP8ACZmY/wAIAAT/AAWZmpsf/wECZmYHi/8AQmZm/wAIzMz/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzMc////zM0///jMzT///8zMnOLc4tv/wAAzM5z/wAAzMz///szNP//+zM0i///7zMy/wAEzMz///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//amZnB4v//+pmZ////ZmY///yZmf//+czNP8AIZmZCP//SMzO/wD4zM3//45mZv8AAZma///+Zmb///2Zmov//+zMzAX///zMzP8ABMzN///+Zmj/AAJmZh7/AB5mZv///Zma/wAIzM3///ZmZJP///GZmgj//yTMzgeL//+9mZr///czNP///MzM///PMzP///zMzf//+zMz///7MzOL///vMzT/AATMzf//+zMyo/8AAMzOp/8AAMzMo4v/ABf//4v/ABzMzv///zM0o////zMy/wAEzMz/AATMzov/ABDMzP//+zM0/wAEzM3//88zNI////czMv8AAmZni/8AQmZmCP8AaTM0//8VMzMV+JYK/wJvszQE+JcKDvc4/wF6MzT/AdyZmhX4owr/AMpmZP//XmZmFf8AcZma//+kzM7/AEpmZiP//5DMzv//qmZm//+vMzT//4pmZv//kzMz/wBSZmb//7MzM/cA/wCDMzT/AEZmZOfzHv//NZmc//61zMwV+JYK/wJvszQE+JcKDvc4/wFoMzT/Aa0zNBX/ABmZmv8ACZma/wAKZmb/ACZmZv8ALzM0/wAZmZj//+dMzP//x+Zm///GTMz//+szNP//4OZoWx57i3f/AAJmZnv/AAZmZgj//6szNAT/ADszMgf/AA5mZv//+Zmam////MzOn4sI/wBrMzL/ACDMzP8ATMzMu/8AKZmac8P//45maB///+JmZov//95maP///mZm///qZmaL///dmZqL///r//7/AADMzv//3Zma/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//UzM0B4v//72Zmv//9zMy///9mZn//88zNIf///szM///+zMzi///7zM0/wAEzM3///szMv8AIZma/wAAzM7/ABTMzP8AAMzM/wAjMzSL/wAiZmaLn////zM0/wAiZmb///8zMv8ABMzM/wAEzM6L/wAQzMz///szNP8ABMzN///PMzT/AAMzM///9zM0/wADMzSL/wBCZmYInf//FTMzFfiWCv8Cb7M0BPiXCg73OP8BejM0/wHcmZoV+KMK//4UMzIE+JYK/wJvszQE+JcK/wAqMzL//hnMzBX/ABCZmv//6rM0/wAbGZpz/wAk5maLnoubkZ6YCIKXBYSHgomCi///4rM0i///9n/+/wAPMzT///SZmv8AE+Zm0/8AH8zN/wAlzMz/AEXMzIv/AExMzQj/AHGZmv//pMzO/wBKZmYj//+QzM7//6pmZv//rzM0//+KZmb//5MzM/8AUmZm//+zMzP3AB7/AA6AAIv/AA3mZv8AARmamP8AAjMzCA73OP8By2Zm/wGPzMwV///BmZr//+JmZv//6Zma///DMzQe///kzMz/AIGZmgb/AA8zNP8ACmZm/wAJmZj/ACmZmv8ALZman///6mZmWx7//4pmZv//TMzOFc//AAZmaAf/ADZmZov/ABCZmP//4Rma/wAKmZr//+h//wj/ABWZmlsF/wAVGZr//9EZmP8AFIAC///nszT/ACZmZouXi/8AF//8/wABmZr/AApmaP8ABZmZjf8ACEzN/wAATMz/AAdmZv//+OZo/wAITM3//+MzNIv///RMzP8AC0zN///wgAD/ACJMzQj//+TMzMcF///2Zmb/ABjMzv//6Zma/wAaZmb//+WZmv8AAmZmCP8AAMzOB/8ANZma/wAEzMz/ACpmaP8AIZmYi/8ANzM0i/8APzM0///jMzL/AB2ZmvsAi3eL///iZmb///5mZv//4MzMi///3Zmai3f/AADMzv//3Zma/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNP8AMMzM///8zMz/AAjMzv///MzMi///vZmaCP//UzM0B4v//72Zmv//9zMy///9mZn//88zNIf///szM///+zMzi///7zM0/wAEzM3///szMv8AIZma/wAAzM7/ABTMzP8AAMzM/wAjMzSL/wAdmZqL/wAMzMz///8zNP8AImZm////MzL/AATMzP8ABMzOi/8AEMzM///7MzT/AATMzf//2Zmaj///+MzM/wACZmeL/wBCZmYI/wAkZmj//xQzMxX4lgr/Am+zNAT4lwoO9zj/AekzNP8B42ZmFXeL///rMzT/ABGZmv//vzMyi1OL///BmZpri///vmZmi///xZma/wA+Zmb//+DMzv8AIMzM///wzMy////n5mb/ACJmZv//7bM0i///0mZmi///0Zma///qZmj//+mZmf//0MzMi///0zM0i///2//+/wAZmZr///GZmv8ARzMzCIH/AAOAAP//+EzO///9MzP///gZmv///bMz/wABzMz//8eZmv8AAWZm///hMzP/AAWZmv//5mZm/wALMzT/AAGZmf8ABZmY/wADMzT/AAmZmov/AA8zNIv/ABczMv//8mZm/wA9mZqL/wBHMzKL/wAtmZy3i/8ARMzNi/8APmZnQ/8AJZma///YzMz/ABDMzAj//+zMzP8ACMzM///FmZr/ABmZmov/ACZmZov/ACJmZv8AFmZm/wAWZmj/ACmZmov/ACczNIv/ACMzMv//5Zmal///zMzM/wAHMzT///2Zmv8ABzMyi/8ABzM0j4uj/wABmZqn///7MzT/ACDMzAj7A//+DWZmFfiWCv8Cb7M0BPiXCg73OP8BljM0/wDbmZoV/wDJmZoH/wASZmb/AAmZmv8AFzMy/wAWZmYe/wAaZmYG/wAiZmaL/wAKZmj///AAApv//8ZmZv8ACDM0///+TMz/AAdMzP8AAGZm/wAGGZj/AAOzNP//+mZo/wAmZmb///8zMK+L/wAjMzT///lMzP8AAkzM///5Zmj///+Zmv//+UzM///+GZr///5maP//+zM0///4zMz///mZmP//8zM0iwj//v8zNAb///MzMov///jMzv8ABmZo///+Zmb/AATMzP//+UzN/wABTMz///lmZv///4AA///5TM3///8zNIv//9zMzP/////////bMzT///mZmv//2mZm/wAHMzP///1mZv8ABzM0////gAD/AAczM/8AALM0m/8AOZma/wAJmZn/AA///q+LCP8AImZmBv8AFzM0k///6MzO///uZmYf//81mZoHi///vZma///3MzL///2Zmf//zzM0h///+zM0///7MzOL///vMzT/AATMzP//+zMy/wAhmZr/AADMzv8AFMzM/wAAzMz/ACMzNIv/ACJmZouf////MzT/ACJmZv///zMy/wAEzMz/AATMzov/ABDMzP//+zM0/wAEzM3//88zNP8AAzMz///3MzT/AAMzNIv/AEJmZghv//8VMzMV+JYK/wJvszQE+JcKDvc4/wH9MzT/AYRmZhX//5pmZgf//7szM4v//65mZ///lmZm//+qZmb///WZmv8ARMzO/wBKZmYe/wBszMwHi/8AQmZm/wAIzM7/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzM///eZmb///8zNP//6zM0////MzL//9zMzIv//92Zmot3/wAAzM7//92Zmf8AAMzM///7MzP///szNIv//+8zMv8ABMzN///7MzT/ADDMzf///MzM/wAIzMz///zMzIv//72Zmgj//4JmZgf7DP8ATZma///fMzTP9xD/ACDMzP8ARmZn/wB0zM0e/wBbMzIHi/8AQmZm/wAIzND/AAJmaP8AMMzMj/8ABMzM/wAEzMyL/wAQzM7///szNP8ABMzMc////zM0///jMzD///8zMnOLc4v//+QAAv8AAMzOc/8AAMzM///7MzT///szNIv//+8zMv8ABMzM///7MzT/ADDMzP///MzM/wAIzM7///zMzIv//72Zmgj7F//+bGZmFfiWCv8Cb7M0BPiXCg73OP8BOkzM/wGVmZoV///xszT/ACZmZv//9YAA/wAK5mj/ADGzNP8ABEzM/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//+JmZv///zM0///pmZj///8zMv//3zM0i2+L///zMzT/AADMzv//4mZm/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNLn///qZmv8AAeZn///zzMr/ABBmZv//1zM0CP8AaUzN//75mZoF/wAFmZr///JmZv8ACMzM///tmZr/AA8zNIv/AA5mZov/AAWZmP8ACZma/wAJmZr/ABZmZgj/AG0ZnP8BBZmaBf8ADuZo/wAjMzT/AAjMzJ//ACzMzI//AATMzP8ABMzMi/8AEMzO///7MzT/AATMzP//7mZo////MzT///GZlP///zMy///rMzSL///iZmaL///szND/AADMzv//4mZm/wAAzMz///szNP//+zM0i///7zMy/wAEzMz///szNP8AKzM0///8zMz/AAPmZv//9mZm///vzMz//9czNAj//6qzMv//KZmZBf///zM0///9mZn///5mZv///ZmZ///9mZqL///+ZmaL////MzT/AAGZmv///mZm/wADMzMI///uMzT//zGZmhX4lgr/Am+zNAT4lwoO9zj4NfgpFYWeiZJ8i3mLhXl/XAhd+01I95IFmYyWnR6TBo2PjI8fi5uKjQWLVolrHv//7IAAi///5TM0/wABgAD///hmZv8AAGZm/wA0mZr/AEvMzv8AV5ma/wAxzMz/AGPmZov/AGRMzIv/AFhmaP//zmZowP//s7My///0szT///+zNP//8LMw////szL///SzNIsIcVyMix+KiYt6BYmNiY4enAacjIB7H0/7kgX//5IzNP//PczNFfiWCv8A/0zM/wHcTMwV/wAYgAD//9VMzP8ADeZo///OTM6LVgj//11mZv//e0zM//98gAD7Nf//XZma//9+GZj/AIOAAP8AopmaHov/ADwZmv8AEhma/wA35mSq/wAumZoI///yszQHiI6JkB6SBp2L/wAM5mZ7/wAEGZp8CNz7ugWNgpR1mougi5Ocj5oIufdRBY6UjZCOi46Lj4WNgQi/+08F/wADGZqA/wAI5mZ2o4ugi5WhjpUI1Pe9BZGhoJCei4uL/wACgACLjf8AARmaCA73OP8BUGZm/wHSzMwV/wANmZr/AAGZmgX/AAMzNP8AAGZm/wADMzKNi48Ii/8ADmZo///9mZr/AAJmZgWL//+4zMz///5mZnNz///UAAH/AAGZmose///+Zmb///2Zmov///DMzAX//////////MzM/wAGZmaJ/wAFmZr///+Zmv8AHhma///9mZr/AA9/////7MzOo///3MzMCP8ASmZo//+TMzIF/wACZmb///zMzP8AAMzM///+ZmiL///9mZqL///9mZr///8zNP///mZm///+Zmb///2ZmghD//+jMzIFZ///0Zma///rszOH///sTM3///2Zmv//+Bmaiv//++Zm///9zM2L///7MzMIi///8mZm/wACZmb///5mZgWL/wAnMzP/AAGZmv8AGMzNp/8ALMzO///+ZmaLHv8AAMzM/wABmZqL/wAPMzMFi/8AA//////+Zmb/AAHmZ4f/AACAAAh//wABmZkF///mGZr/AAN///8ACUzO/wAPTM3/AA1mZv8AE5maCP8ANmZm/wBMzMwFj/8ABZma/wACZmb/AAMzNP8AAZmai/8AAmZmi/8AAmZm///+ZmT/AAMzNP//+zM0CP8AMmZm//+7MzQF/wAVszT//+IzM/8ACbM0///xTM3//+PMzP//+7MzCP//9ZmY///+ZmcFh////2Zm///9mZr///4zM4uHCIv///DMzf8AAZma///+ZmYFi/8ANmZm/wABmZr/ACJmZv8AHZmY/wAuZmj///5mZose/wABmZz/AAGZmov/AA5mZgWL/wAFmZqH/wAA5meD/wAAszNv/wACZmb///PMzP8AAuZm///ZzMz/ADXmZwj//7JmZv8AbZmZBf///mZm/wACZmb///8zNP8AAZmai/8AAmZmi/8AAmZm/wAAzMz/AADMzv8AAZma/wADMzQI0+cF/wAgzM6z/wALgAD/AAjMzP8AIIAA/wACZmb/AAWZmP8AAGZm/wAEzMz/AABmZov/AAWZmgiL/wAPMzT///5maP8AAZmaBYv//9ZmaP///mZm///kzMz//+WZmv//1zMy/wABmZqLHv///MzM///9mZqL///wzMwFi4f/AAMzNP///szM/wADMzT///+Zmgj/AA2ZmP///mZmBf8AGhma///85mb///bmZv//75ma///yMzT//+0ZmghT//+xmZoF///8zMz///zMzP///Zma///9mZr///2Zmov///zMzIv///2ZnP8AAzM0///8zMz/AATMzAj//8zMzP8ATMzOBf//6GZm/wAigAD/AAmzNP8AALMy/wAUTMz/AAJmZgj/ACnMzvx2FfiWCv8Cb7M0BPiXCg73OP8Bxhma/wGbmZoV///J5mb//52Zmv///mZmi///xLM0/wBiZmYF///pszT/ACJmZv//9+Zk/wAO5mj/ADGzNP8ABEzM/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//+JmZv///zM0///pmZr///8zMv//3zM0i2+L///zMzP/AADMzv//4mZm/wAAzMz///szM///+zM0i///7zMy/wAEzM3///szNLn///qZmv8AAGZn///vzMr/ABeAAP//2zM0CP8AThma+xSL///EzM4Fi///vZma///3MzL///2Zmf//zzM0h///+zM0///7MzOL///vMzT/AATMzP//+zMy/wAhmZr/AADMzv8AFMzM/wAAzMz/ACMzNIv/ACJmZouf////MzT/ACJmZv///zMy/wAEzMz/AATMzov/ABDMzP//+zM0/wAEzM3//88zNP8AAzMz///3MzL/AAMzNIv/AEJmZgiL/wA+Zmb/AEXmZvcQBf8AEuZm/wAgzMz/AAZmav8AFmZo/wAszMyP/wAEzMz/AATMzIv/ABDMzv//+zM0/wAEzMz//+5maP///zM0///xmZj///8zMv//6zMyi///4mZmi///7mZm/wAAzM7//+JmZv8AAMzM///7MzT///szNIv//+8zMv8ABMzM///7MzT/ACszNP///MzMk3///+oZmv//2ZmaCP//tBma//5VMzIV+JYK/wJvszQE+JcKDvc4/wEZMzT4fhX//+ZMzf8AABma/wACGZn/AAhMzn3/AALMzP///hmai////rMy////f/6L///+GZr///8zM2eH///eZmj///jMzf//2MzMCP8AFMzN///9mZoF/wAQzMz/ADmZmv8AGzMy/wARmZj/ABczNIsI/wB0zM4G/wAMszSL///4MzD///QzNP///LM0hgj//y2Zmv/+0ZmaBf///MzN///7MzP///2ZmoeL///7MzMI///7MzP/AAMzM////MzN/wAIzM0e/wESZmgG/wADMzT/ABjMzf8ACMzM/wAlmZn/AA2ZmP8ALmZnCP//6mZo/wAFmZn///WZmP//6MzNBf//7Zma///VmZj///JmZv//6mZn///RmZqLCP//oMzOBv//7LM0////////AACZmP8ACMzN/wAHgAD/AAszMwj/AMZmaP8BIZmYBZf/ABDMzP8AAzMw/wAFmZyL/wAGZmaL/wAEzMz///szNP8AAzM0///zMzSL///3MzSL///yZmb///2Zmv//7MzMhwj//6XMzv/+B5mYFfiWCv8Cb7M0BPiXCg73OPg998cVlwq2+yQVnouel5SV/wAAmZiT///8szT/AAVMzf//+LM0/wACszOIiIaJh4sIgoabtB/WB+lSn1phTWpjfJaBmp6SmJMei5CKkIqNio2Kj4uSCJuglqyiqoNAHlF8Bf//wRma///vszT//9fmZv//5EzMi2GLYK5wtYusi52UramOeZl2pIsI//+mMzT//03MzRX4lgr/Am+zNAT4lwoO9zj3vfhKFfikCrxCFfilCv8AIDM0//8EzM0V+JYK/wJvszQE+JcKDvc4+BL4RBX4pgr///wzNP/+QMzMFfiWCv8Cb7M0BPiXCg73OPgs92QV+KcKvPsSFfd0B7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH2IHfJlzknGLCD5mPUs+u1nNH6OLoZiemwiNi4lqm4sF/wAMTMz/AAezM6qV/wAnszT/AAdMzQiJnWyOBX2MiI2LrAj//7EzNP//CszNFfiWCv8Cb7M0BPiXCg73OPgX91YV+HQKsfcwFfh1Cv//0TM0//6SzMwV+JYK/wJvszQE+JcKDvc498n3TBWLef//+szM///5gAD//+szNP///IAACH+JBYj///+AAIn///+AAIuHCIt6jYoFi7SMoaPBiosejIyLnAWLj4j/AADMzYn/AAAzMwh2jQX//+zMzP8AAczN///5MzT/AAgzM4udCPcsxgeRk42RH50HjYmMiB5HlQbqo5afHp2LlYSTd5CAlYOXi5eLlpaLl4uWhJZ+lHyWe5F0iwhXVl4rH2wGgIiEhh99B4mLio4etQb/AEUzNP/+oMzMFfiWCv8Cb7M0BPiXCg73OPiL+FAVl5aVmZd+mHIfdYt5gnt5gpF4lG6LV4tWaYtSi2qceJx7e3x9cot2i3Wbe5qECGx3d3SLcQhVwH242uKnzh6Ln4KaeppzoWKPdYuBi3yJfYqCioSKiIt6i3iQi6WLmI2WkpUImYOdh6KLvovAqYvHi6iAmnqejpGRk5KLlIuRiI6FjYSRhpWLCPtP+30VkYiViJKLkouUjJSLk4ySi5CLqYufhZyCpH+ThYt7CF5Nh1Z2Vo+5HougjZienQj3BPdDFU1vh3Vagreru52aq7CgdFke///OMzT//m7MzBX4lgr/Am+zNAT4lwoO9zj34fhXFbWNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH/uAB4t2///+mZqI///oZmaICIOKBYeLiIkfeQeLsIyjpbOKix6dB4+IjIkegIwF///uGZr/AAGZmv//+OZm/wAEZmaLoAj3HQeeoqChoIsIqZ96WB/7BgeLdv//+czM///7szP//+0zNP///kzNCICKBYeKiIkfeQeLs4yko7GKix6dB4uNio2HjAiFjAX//+wzNP8AA0zN///5zMz/AASzM4ueCPcQB85tpF4eZ4toaH17CP8ALTM0//6BzMwV+JYK/wJvszQE+JcKDvc4+BD4jBV7fn57e5h+m5uYmJubfph7H6b7vxX3HAemjaaLHpCJjYUee4Rcg3GJioOMhI+F/wAgZmb///6AAP8ACpma/wAEszSL///KzMwI+wEHi2J+iGOJhoOMfI+FqYz/AAqzNIv/ACNMzIupi5uLqYqPkouZh5NpjXqOi7QI///jMzT//yPMzRX4lgr/Am+zNAT4lwoO9zj4J/ikFXiAfnt8mH6cnJiYmpmDmnUfdvtSFfsfBy6CaG4ehouHj4qRh5mDmnyLCH+Cgnt3rX6mH5uL/wAT5maS/wAQGZqd/wAa5mb/AB4Zmv8ABRma/wAa5maL4Aj3JgemjaaLHpCJjYUee4Rdg3GJCIx5BYmNio0eoIoFmJGEYR////wzNP/+nszMFfiWCv8Cb7M0BPiXCg73OPeu+D8V+4AHi3b///9MzIj//+ezNIgIg4oFh////4AAi////YAAi4kIeQeL/wAlMzSM/wAXzMz/ABiZmv8AJmZmiosenQeLj4j/AADMzYn/AAAzMwiDjAX//+6zNP8AAjMz///4TMz/AARMzYv/ABSAAAj/AE9mZgf/AAHMzP8AAGZm/wABmZr/AAAzNP8AAZmai5qLkoCUgAi4SwWXeo2Hi4UIi3uNiQWLm4yho7CKix6NjYubBYuOh/8AAZmah/8AAGZm///fgACO///ugACihJUITOgFiY2KjouOi42Ljo2NCLC1BaGj/wAbgACT/wAYgACOjf8AADM0j/8AAczMi44Ii5yJjAWLY4pzdW2Mix6Kiot6BYuJjf///UzMjv///7M0q4h7eoOD///fgAD//9szNP//6zM0///wf/7//+VMzP//9BmaCP8AlDM0B7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH/8AYDM0//5FzMwV+JYK/wJvszQE+JcKDvc49/b4RBX7gAeLdv///0zMiP//57M0iAiDigWH////gACL///9gACLiQh5B4v/ACUzNIz/ABfMzP8AGJma/wAmZmaKix6dB4uPiP8AAMzNif8AADMzCIOMBf//7rM0/wACMzP///hMzP8ABEzNi/8AFIAACPeNB7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH/8AGDM0//5AzMwV+JYK/wJvszQE+JcKDvc49434JhX/ABszNI3/ABDMzIsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH/saB4t2iv///WZmc////JmaCISKBYb///9MzYv///2zM4uJCHkHi/8AJTMzjP8AF8zN/wAZszP/AChMzYqLHp0Hi4+I/wAAzM2J/wAAMzMIgIwF///wgAD/AAFmZv//9oAA/wADmZqLoQj3IweeoqChoIsIqp96WB/7DAeL///pTM3///qZmv///ZmZ///rZmb///4ZmgiAigWI////szOK///9TM2LiQh5B4uyjKT/ABgzNP8AJczMiosenQeLjf///+Zm/wACMzP///sZmv8AAMzNCIWMBXj/AAMzM4T/AAKAAIv/ABVMzQj3FgeLkf///8zM/wAFszT///+AAP8ABUzM/wASGZr/ABWAAP8AE8zO/wATgAD/ABPMzIsIqZ96WB/7DAeLdIX///2zM3j///5MzQiAigWH////mZqK///9ZmaLiQh5B4v/ACeZmIz/ABlmaP8AGDM0/wAlzMyKix6dB4uN///+5mj/AAJMzf///BmY/wAAszMIhYwF///tGZj/AAMZmv//+OZo/wABMzOL/wAWszMI9xYHzm2kXh7//9xMzIv//9xmZv//3Zma///xszT//+7MzP//9hma/wAk5mb//+azNP8ADrM0///czMyLZ4tqaH16CP8AfzM0//5fzMwV+JYK/wJvszQE+JcKDvc4+Ez3iRWLYomIaYmHg4t9j4SpjJKLo4v/ACNMzIv/AAWzNIupio+RjJqGk2ONg46LtAj0B85upF0e///cGZqLaP//3RmafXr/AABmZv8AF7M0/wABgAD/ABUzMouLi5CJjYWLe4Rcg3GJioOMhI+F/wAgZmb///6AAP8ACpma/wAEszSL///KzMwI+wEHi2KDiGOJhoOMfI+FqYz/AAWzNIv/ACNMzIuji5OLqYqPkouZh5NpjYiOi7QI9woHnqKgoaCLCKqfelgf///CMzT//pzMzBX4lgr/Am+zNAT4lwoO9zj4DPhQFfh2CtH7NhX4gAr//7wzNP/+1szMFfiWCv8Cb7M0BPiXCg73OPe++B0V+5gHi3f///2Zmv///DMz///pZmb///zMzQiEigWH////ZmaK///+mZqLiQh4B4uwjKOls4qLHp0Hi4+J/wAAszOI/wAATM0IgIwF///xGZr/AAFmZv//9eZm/wADmZqLoQjvB5l/n4OfiwjMwcfVz2PHUR9ui///44AAb///8IAAeQiJjAX/ABszNI3/ABDMzIsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhH7wyFe0HmP8AEoAApP8AF4AApIsIp6dnQi5iiHR1api/H/8AHzM0//7AzMwV+JYK/wJvszQE+JcKDvc4+C73nRX4qAqpyhX4qQr//8IzNP/+GczMFfiWCv8Cb7M0BPiXCg73OPgJ+A4ViYwF/wAbMzSN/wAXzMyLHpCJjYUee4Rdg3GJCIx5BYmNio0eoIoFmJGEYR/7GweLeP///hma///7TM3//+jmZv///rMzCHmKBYaKiYgfeQeLuIynqLiKix6dB46IjYkeeYwF///s5mb/AAEZmv//+Rma/wAD5maLnwj3EgeLk4+Uj5CbopqXkouPi5CJj4eRhJOHl4sInZaUnJ2BmHAfbItwaXpyCP8ABTM0//52zMwV+JYK/wJvszQE+JcKDvc496r3mxWOa41ri3ORjJWMjoufi6F9qYuti82bi8iLvV2eWKBpmYGUi6MIpqCYpB6ei62BmVEIooyC1gWAkmSVbItai15ri2GLXv8AHxma///wTMz/AC3mZv//7LM0vXaTd4t2i3BzgHOLdIt4l4SRCHubhaaKmQj/AE4zNP/+6czMFfiWCv8Cb7M0BPiXCg73OPgQ+AQVxgaQlI2QH50HjYmNiB5H6gZlfouABVyBc2KJi4qJHnMHiYyLjR6z+0sGX6B6qB6ni6KTpaYIe5wFe3+BhnuLCHqHnbEf///+MzT//xnMzRX4lgr/Am+zNAT4lwoO9zj4cfeGFYv3UoqMBYt9ioL//+ZMzP//17M0jIseioqLegWHjoqOHpUGnJSHdR/7OAd4dXWIdosIbXebvh+L9z6KjAWL///ymZqK///3Zmb//+fMzP//2jM0jIseioqLegWJjIiPHpIGnoqRiotzCPsYB0ipcrgesIuum5mcCI2LiWqbiwX/AAxMzP8AB7MzqpX/ACezNP8AB0zNCImdbI4FfYyIjYusCP//nTM0//7+zMwV+JYK/wJvszQE+JcKDvc49/L3MhX4qgr/AG0zNP/+jczMFfiWCv8Cb7M0BPiXCg73OPe2+BkV934K/wBYMzT//mvMzBX4lgr/Am+zNAT4lwoO9zj/AcYzNPgFFaf/ACPmZv8ABLMy/wAETM7/ABwZmv8AAczMj4+LmYePeYqEinSLc4t8jHmMh4eLfY+HqIr///4zNP//98zM///yzMz//+0zNAhiUmfEBX+fi5KojI+Pi5mHj3mKbopzi3SLgYx5jIeHi32Ph/8AHBma///+MzT/AAEZmP///ZmY/wAamZr//9ozNAj/ADgzNDsFiIj//87MzFGLi///4Zma///cgAD///2zNP//+0zN///j5mb///4zM4eHi32Ph52Mkoyii6OLm4qdio+Pi5mHjwhujIyUmZ0Is72rWQWXeI6DboqHh4t9j4edjKWMo4uii5qKnYqPj4uZh4///+PmZv8AAczN///5mZr/AALmZv//5bM0/wAlTM0I///LzMzVBf//6DM0//7CzMwV+JYK/wJvszQE+JcKDvc49//4RRWLm4qNBYtZiW54b42LHomJi3sFiI6Jjx6mi/8AA8zM///15mb/AAszNP//5hmaCNb7QgWRfpB6i4aLhYmFiIN8ZYR7g4uFi4aQhpGGkIaOgYsIgXiCeXSrgZYft4uUoZ63/wA0GZr/AHiAAP8AGeZm/wBBgACs0ZSdl5+jiwiPjY2OH4ubio0Fi3GJenRijYseiomLewWJjYiOHo4GmpaJgR+LiIqEiYYIRvstSfcwBYqPipGLjgiSko+djo+Njh7/AA8zNP/+P8zMFfiWCv8Cb7M0BPiXCg73OPfI+EMV+KsK///QMzT//kHMzBX4lgr/Am+zNAT4lwoO9zj4Dvh6Ff8ACmZmi/8ACczM///8szT/AAcZmv//+YAA/wAS5mb//+/MzP8AEMzO///RszSL//+tgACL///HgAD///4Zmv//2P/////3mZr//+DMzf//8kzM///NTM1t///5gACAiwj//8bMzP//+YAA/wBqmZr/ADVMzf8Al4AA/wAlszT/ABtMzKcf///9Zmb//pfMzBX4mgr/AALMzvshFfiWCv8Cb7M0BPiXCg73OPgO+RoV+KwK0/t9FX6LbYJ9hAiBpgW6nKWXt6YIm/uZBnWWfJkepwaOjoqHH3YHi1aMamVPioseoAeNj46OHq8Gm5maoR/3LAeriZV/HvtqFvitCg73OPgO+RoV+KwKp/uiFX99lpimp77avcV3TB+LXWppU2NhbXNui20I3Aaqi5uxlqgIo4UFgm2EaIhuCPtiBou7trW7sf8ALLM0/wAjZmb/ABZMzP8AFpmai8EIumiYeWCAfH0ei4OQg4uDCHt5g4Ee+0ewFfiuCg73OPgO+RoV+KwK9yL7fRWqdpR3HneLaYGKcop/iXp0iwh4h5qOnKjA4r+sdWYfi251dG57rIi6cItRCEZJXTtmV5uglZiVlh6Zi5GEkYSTgZWDq4sInsSY0MRVknMfhIuGioOKCImjBbeRqaWLtAj7vxZ+i26CfIQIgaYFupyml7amCJv7mQZ1l3yYHqcGjo6Khx92B4tWjGplT4qLHqAHjY+Ojx6uBpyYmqEf9ywHq4mVfx4O9zj4DvkaFfisCvcs+5EVIsEHiWhXi4taBXiPhZ0emwaPjIiJH3cHi2CMcHNmioseoAeMjI6PHpkGnZCOoB+9+yQHh5f3LvduqYIFXkVQOXRpCObXBouSkJONjpKUl5eSiwiQk4mDH/u6nxX4rQoO9zj4DvkaFfisCvcu/CAVqIjGQx52i3aFfIMIho+g9yL3LYuGaouK+xGLfzoFlJCkkJqLCNivV1VQW1VFaU+Zo5eXlJUfmYuShJODlIKWgaGLCLicsLUf+8X3NxX4rgoO9zj4DvkaFfisCvcw/CYVoYbCUh59i3aFdXoIeAc3snSnt5OusB7DkBVnb0o7WkOo8x6L3cXy9y2XCHcH+wF4aEmAUJmappukiwjslTx6H/v29zgV+K0KDvc4+A75GhX4rArK+2cVcIuDhIBbCHWOBZCnkrOMpgidBoaQipse90IGVjBS+w5sIghpBq73A8P3EKW5CPvBdRX4rQoO9zj4DvkaFfisCvP7UxVudH1uH4t7k3WvdwifgAWblaKmi6kIpnydZx7qXhX4rwolKRV7gmNji2kIX7R7orConLQei6SGpGOfCPug9wgV+K0KDvc4+A75GhX4rArH+50VdY9UxB6Zi6GRoZwIngffZKJuX4RoZh5ThhWvp8zavdVuIx6LOU8k+y5/CJ8H9wKerc2Xxnx8cHtyiwgrgdqcH/sosBV/i22CfIQIgqYFupyll7amCJv7mQZ1l3yZHqcGjY6Khx92B4tXjGllUIqLHqAHjY6Ojx6vBpuZmqEf9ywHq4mVfh4O9zj4DvkaFfisCvcQ+1YVTIotVlOTPcHGkdjYwXzUWx+I+8UVRlja4OjC1M/Fy2L7DfsLSVpQH/vn93kVfn6WmKanvtq9xXdMH4tdaWlUY///1kzN///hmZr//+ezM///42Zmi20I2wari5uxlqgIooUFg22EaIhuCPtiBou7trW7sf8ALLM0/wAjZmb/ABZMzP8AFpmai8EIumiYeWCAfH0ei4OQg4uDCHt4g4IeDvdK/wGhgAD/AOtmZhX/ALlmZgeL/wAjGZr/AACzNP8AI7M0jP8AB5mai/8AAszM///+gAD/AAAZmomL///fmZr//+vmZv//4UzM///xmZr//8yAAHP/AADmZv//+UzM/wACmZj///qAAP8ABTM0///8Zmb/ABqZmv8ACxma/wANMzT/AAOZmv8ACxmaiwj/AAmzNP8AAf/+///x5mb//+wZmh///1LmZgeL///PZmb///YZmv///RmbYv///jMz///8gAD///yAAIv///OzM/8AA4AA///8gAD/AByzNP8AAJma/wARmZj/AACZmf8AHTM0i/8AHBmai/8ADhmY////Zmf/AB0zNP///2Zm/wADgAD/AAOAAIv/AAxMzf///IAA/wADgABi/wABzM3///YZmv8AAuZli/8AMJmaCP//4eZm//8FmZoV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdM/wEg5mb/AaYzNBX///RMzP8ACpma///2mZr/AAuzNP8ACWZm/wAQTMz/AAuzMv8ACoAAHov/AASzNP///uZo/wACTMz///7MzP8ABBma///+zMz/AAQZmv///Rma/wAEszKL/wAEszQImf8ACLM0/wAT5mb/AChmZv8AE+Zm/wAh5mb///HmaP//yszMHov//9xMzP//8zMy///jZmb//98zNP//3rM0CGL//9eZmgX//8mZmv//yGZm///3TM7//+WzNIv//98zMwiL/wAcszL/AAEzM/8AEYAAHv8AYIAABv8AEYAA/wAZzM7///7MzYsfkv8AHTMz/wAF5mb/ACozNP8AAJma/wAQZmb///yAAP8AAuZm///4//7/AACZmf//+rM0///+zM3///aZmv//2MzN///2GZr///KZmv//7Bmaiwj//52zMgaL/wAaTM6x/wAlgAD/AALmZv8AAuZmCP8AN5ma/wA1zMwF/wAfgAD/AB6AAP8AGBma/wAYgACL/wAqGZoI/wA7szT//8oZmv8AGIAAXv//wpma///fMzL//9JmZv//3rM0Hv8AYoAA//5KzMwV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wF8GZr/AeTMzBX/ABiZmv8AFjMy///ymZr//92AAB+L///lGZr//9/Mzv//1Jma///OTMz///hmZgj/AAJMzP//7oAABf8ACWZm/wABMzT/AAeZmouSiwj/AB+ZmrGB///BZmb//7ZMzf//zuZm///vGZn//+yzNB///+PmZov///qzNP8ADOZn///5mZr/AAnmZv//+rM0/wAHmZr///hmZv8ABmZm///05maLCP//9EzM///0TMz///WAAP//9zMz///pzM3/AC7maP//8WZm/wAhTMz/AEIZmv8AOoAA/wAsZmf/AEkZmh+L/wA8gAD//9UzNKL//99MzP8ABYAACP///2Zm/wABGZgF/wA0mZr/ACFMzI7/ABkzNIv/ABKzNAj/ABdmZv//6uZm/wAjszT//8dMzP//rrM0///omZr//8ozNP//7eZm///4Zmb/AAUzMv//9OZm/wANgAD/AA/MzP8ABczO/wASGZr/AAqAAP8AI7M0/wAmGZr/AAb//v8ADpmaHv8AB0zM//4MMzQV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wHgGZr/ARfMzBX//9EzMv8AX2ZoBv8AC7M0////Zmj/AAZmZP//+GZmHv//9zM0i///9X/+///6zM7///mZmv//+0zM///6szT///0Zmv///2Zm///7TM6L///75mYI//+kGZj//5fmZgf/AJNmZv8A1+ZoBf8AAczM/wAC5mb///7Mzv8AA4AA///8gACLCP//8MzOBv///EzMi////Rma///8zMz///4Zmv///WZmCP//ZmZm//8mZmgF////Zmb///9mZv///4AA////ZmaL////Zmb/AAGAAIP/AAUzMv//8Jma/wAQszSLCP8AcpmaXgaL///mZmb//+szNP8AAQAB///oZmb///4zM////IAA///8gACL///zszP/AAOAAP///IAA/wARmZr/AACZmv8AFhmY/wAAmZn/ABkzNIv/ABWZmouc////Zmf/ABGZmv///2Zm/wADgAD/AAOAAIv/AAxMzf///IAA/wADgAD//+TmZo3///YzMv///pmZi/8AGczNCLj/ACczNAf/AAeZmv8ACDMy/wALMzT/AAZmZv8ABUzM///9mZr/AANmZv//+jM0H///o0zM//7ZMzQV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wG2szT/AQ2zNBX//8tmZv//5GZk///ZZmb//96zNB7//+rmZov///iAAv8ADWZm///3zMz/AAsZmv//+Rma/wAJZmb///aAAP8ACMzN///0TMyLCP//9YAA///1Zmb///aZmv//9OZm///pMzP/AC9mZv//7UzN/wAfmZr/AERmZv8AMJma/wAy5mf/AEWZmv8ANczM///bGZq7TR9zi///64AA///7TM7///YZmv//++ZmCP8ACzM0/wBcZmYF/wAUgAD///2zNP8AEhma///9mZj/ABpMzIv/ABBmZov/ABKzNP8AAJma/wAWzMz/AAJMzAj/AAjMzP8AJhma///8gAD/AAGzNAX//+BmZv///IAA///hgAL///2zMv//4szMi///64AAi///7BmY/wABGZz//+yzNP8AAczMCP//7UzO//9gTMwF/wAdMzT/AAsZmv8AFRmY/wACZmb/ABPmZosI/wAkTMz/ABwZnHP//8OzNB///8yzMv/+40zMFfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCg73Sv8Bg2ZmfBX4sAr/ApbmaAT4sQr//asZmAT4sgr/AhRMzAT4swr//8AzNP//GbM0Ff8ADszM/wAyZmb/ACMzNP8AOBma1f8AG5mai/8ABmZm///+MzT/AASzNP//+0zM/wAC5mb//8fMzP//75ma///dzMz//+jmZv//4Rma///cGZr//92zNP//2DM0///vGZr//82zMov//9QZmgj//4+zM/8AQ8zM///pzMz/ACqzNP8ASIAA/wAdTMz/AEYZm/8AL2Zm/wAvZmb//+izNP8ALbMy//+0gAAe///vszSL///mzMz///qAAHr///azNAj///rMzP//6oAAFZ+b/wAVgAD/AADmZv8ACoAAiwj/ADZmZv8ACoAA///H5mb//+SAAP//wzMz///omZr//+SAAf//5Rma///c5mb//9xMzv8AEpmZ/wBezM0fi/8ADBma/wABMzL/AA4zNI7/AA9MzAgO90r/AWszNPhiFf8AYIAABv//1LM0//+UZmb//9QZmP//lEzN///amZr//6vMzQj/AAQZmv///IAAsf8AAbMzBf8AH5ma/wBeMzL/ACDMzP8AW+Zoyf8AluZmCP//9zMy/wAGZmYF///2mZr///0Zmv//88zO///9GZj//+rmZosI//+N5mYG///tMzSL/wABgAD/AAWZmv//9czMjf///pmai////xma////mZqL///+mZr///9mZv//5bM0///6MzT//96zMv//+0zM///jTMwI/wARgAD///4zNAX/AAxMzP8ALIAA/wASzM7/AAOAAP8AEYAAiwj/ABgzMvxxFfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCg73SvgY+H4Vr55ucR+LbWhxfIAIepUFaKKDn4ucCKWgpa0e5FQVs2uoVVJlaWEei2ubdq10CJSFY2sFdXeCcot1CFKzbMbTrcG2HourfaRunghqogWjm7Oni68ILvuYFXFjob0fi5uWsrqrCKV7Ba92mnGLcQhTX31yHv8AA2Zm+1IV+LAK/wKW5mgE+LEK//2rGZgE+LIK/wIUTMwE+LMKDvdK/wGDZmZ8FfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCv8AQxma+6YV///xMzT//82Zmv//3MzM///H5mdB///kZmaL///5mZr/AAGzMv//+0zM/wAEszT///0Zmv8AODM0/wAQZmb/ACJMzP8AFxmb/wAe5mb/ACPmZv8AIkzM/wAnzMz/ABDmaP8AMkzOi/8AK+ZmCP8AcEzO//+8GZr/ABYzMv//1UzM//+3gAD//+KzNP//uczM///QmZr//9CZmv8AF2Zm///SZmb/AEuAAB7/ABBMzIv/ABkzNP8ABYAAnP8ACUzMCP8ABTM0/wAVZmgVd3v//+qAAP///xmY///1gACLCP//yZma///1f/7/ADgzNP8AG4AA/wA8zMz/ABdmaP8AG4AA/wAa5mb/ACMZmv8AI7My///tTMz//6EzNB+L///z5mb///7Mzv//8czOiP//8LM0CA73VP8BSoAA/wDrZmYV/wC5ZmYHi/8AIxma/wAAszT/ACOzNIz/AAeZmov/AALMzP///oAA/wAAGZqJi///35ma///r5mb//+FMzP//8Zma///MgABz/wAA5mb///lMzP8AApma///6gAD/AAUzM////GZm/wAamZr/AAsZmv8ADTMz/wADmZr/AAsZmosI/wAJszT/AAH//v//8eZm///sGZof//9S5mYHi///z2Zm///2GZr///0Zm2L///4zM////IAA///8gACL///zszP/AAOAAP///IAA/wAcszT/AACZmv8AEZmY/wAAmZn/AB0zNIv/ABwZmov/AA4ZmP///2Zn/wAdMzT///9mZv8AA4AA/wADgACL/wAMTM3///yAAP8AA4AAYv8AAczN///2GZr/AALmZYv/ADCZmgj/AJwzNP8A+0zOFf8ACWZmi/8ACMzM///9GZj/AAZmZv//+hmanP//8WZm/wAPGZz//9ZmaIv//7WzMov//80Zmv///kzI///c5mb///hmaP//4+Zn///zszT//9JmZ3D///ozMv//9hmaiwj//8yAAP//+jM0/wBf5ma7/wCITMz/ACHmZv8AGJmc/wAZMzQf///9szL//rvmZhX/ACqzMv8AQEzQ/wAsZmb/AIHmZh+Lwv//8zMw/wAsZmb//+dmaP8AIDM0ev8AFszM///m5mj/AA/Mzv//5szMiwhU///L5mb//73mZv//kpma//+mgAD/ACozMv//sIAA/wA+mZofKv//TmZmFfiwCv8CluZoBPixCv/9qxmYBPiyCv8CFEzMBPizCg73OPgO+RoV+KwK+1YETIktVlOUPcHGkdjYwXzUWx+I+8YVRVna4OnB09DFy2P7DfsLSVlQHw541PhCFfxC+EL4QgcOePcE+CAV9/T7/vv0BmT4IBX8QvhC+EIHDlX4hq8V+3j4Hvt2/B4FDlX4WckV/ACL90r3zwX3d/voFft3+B37d/wdBQ421IIV+B73ePwe93YFDjburxWL+AD3z/tKBfvo+3cV+B33d/wd93cFDlW3+EEV93j8Hvd2+B4FDlXk+CkV+ACL+0r7zwX7d/foFfd3/B33d/gdBQ42+Er4UxX8Hvt4+B77dgUONvgw+CYVi/wA+8/3SgX36Pd3Ffwd+3f4Hft3BQ7S/wAcmZr/ANazMxX4tAoO0v8AUDMz/wDaMzMV/wD45mf/APjmZ/8A///++5T//wcZnP//BxmZBf/+zGZm/wD8f/8V+LQKDmz3RvdwFVO5XcPEubnDxF25UlNdXVIe8/t/Ffi1CvhNBPi2Cg7T9xH3ZBX3XPee91v7nvtb+50F+5f3nRX3l/vt95b37fuW9+4FDmx8pfgzpQG8pfgzpQP3rnwV+LUK+E0E+LYKDmz3rnwV+LUK+FgE9w3sKvsN+w0pKvsM+w0q7fcM9wzs7fcNH/wrBPTh4PX0M9okJDQ8IiLgNfQf9/8E69o9Kyo8PSsqPtrr69nZ6x8ObPeufBX4tQoObPeufBX4tQqlBPgzB/cH6C/7B/sHLS77Bh8ObPeu+FkV+xUiIvsV+xX0I/cV9xXz8/cV9xUj9PsVH3EE/DMH+wcu5/cH9wfp6PcGHw5su/d2FfsV9CL3FfcV8/T3FfcVI/P7FfsVIiP7FR6lFvgzBvsHLy77B/sHLun3Bh4ObPiY92gV9xUi9PsV+xUjIvsV+xXzI/cV9xX08/cVHnEW/DMG9wfn6PcH9wfoLfsGHg5s9658Ffi1CvhNBPtj92QH+wctLvsG+wcv6PcH9wbn6PcHHg5s9658Ffi1CqUE+wcv6PcHH8z3IoqLH/dkB/cH6C/7B/sHLS77Bh8O+4T3rnwV+GcH+xUjI/sV+xXzIvcVHw77hNT4WRX8Zwf3FfPz9xX3FSP0+xUfDvuI9Kr3VakBvKn3VakDvPd+FUPEUtDZvMvJ00/DSEpOU0YeqRa/ura8vrlgVFxlW1BXX7bCHg6a91b3VhVD+1z3RvcQ9z77D0r3WPc79wj7YYtM91VF+1X7V4sFDuzNvfcO7fcOvQH3Eb33Du33Dr0DFPz3EfezFfsG5CD3GvcJ8ez3EPcAOPcF+x37FC0l+wse93H3PxX4twpa+z8VcKF1pqahoaamdaFwcHV1cB4O+JP50vcPFYt+iX+GgW9c///bszT///VMzf//9EzM///8szP///hMzP8AErMz///4szT/ABVMzYuei7S2oIusi6h7jYGLgouBiYOICP8ADLM0opKN/wAgTMyLlHO6hos7CPvq9wgVyF+xcMGLnYubj5eQhIGFgIt7i1alWZV6//+45miL///oGZj/AFGAAIv/ACWAAIuQjJGMjwh7e1dqbouEi4KRgZOTiZSKlIsIn5GTmKJ4kX8faIv//+rmZv8ACUzN///ZGZr/AB2zM3qY///ygACX///5gACRmI6jpZyfCIu6tquanZGil4WVdh5/i36HgYiQk56bqoubi6h+qHiKkIuQi5EIyrGbth6ViQV8cHVgi1yLe5J+k4F6k3iNgotXi2VyTlwI96/GFYusYKCLs4uekp+Snv8AHrM0///2mZr/ADYZmP//5IAAi///w5mai///xkzM///QGZz//+OAAP//+xmY///ygAD//92AAIv///yAAP8AAIAAfP8AEYAAkomTiZKLCJebjagf/M9SFZqZnZKii6CLnYOefXp7doB0i3mLeJZ7nAj31fuMFZlor0qbdLRRtm+2cY3Boa2np5iY/wApszT/ABezM/8AI0zM/wANTM3Z/wAdTM3G/wAWszOL9wOLy12+YKkIs4X3H16Lr1Khw6CLrvseY2KGiosFnZiXlJKTnZyx/wAlgACL/wA+gACL/wBWmZr//7qzNP8AKQAC///ImZj/ABDMzP//4kzMlP//3GZo/wAPzMxz/wAOzMxnoF7Sh7VDUk8/ZDYIdf8ACYAAZP8ADYAAYYsyi///o2Zm//+5szT//+CZmv//4UzMCPtN+0n3UPtGBf8AKBma///aGZr/AFnmZv//zuZm4ouui7SYm5II9wn3rBWyoXGFgnVwZh9ni3KXcaGmn56ZsosIv/d3FZadkaQfkgeSg46Bi4KLgYmFg37///dMzP8AAUzM///1szT/AACzNIKLPIt7WYd0epVyjnmLeIt2gn1/CG+KBYyRi4+LkAidf4+BgHOEbh6Lf5GDkoePiJaLmYsIoQb///SAAP//5zM0///ugAD//93MzIOAenBvcX2LhYt6kn6RipGLkYuXCJ6PjpCSjoh4HouHi4iKhv8AA8zM////gAD/AAQzNP///4AAjouPi6CRi6CLqF6Pi6OLlP8AAoAA/wAOgAD/AAOAAP8ADYAA///HgABt////gAD//9YzNIv//9XMzAh/jn2OgItfi///6DMzdP//5szNcaVyq26wi5yLkY2XkYv//9szM/8AAszM///JmZr/ADczNP//5jMz///8gAD/AA6AAP///IAA/wAQgACLlQiLo7iOi6qLnXmShov///szNIv///2ZmP///4AA///7MzT///6AAP8AATM0h/8AAMzMiIuHCP///5maif//64AA///2gAD///gZmv///2Zm/wABZmb/ABSAAB6Llf8AADM0/wAHzM3/AADMzP8ABjMzmI6ZjpGLn4v/ABfMzP//4DMz/wAtMzT//8TMzQh7BnR3iHJvp4KS/wANMzT/AAizMv8ACZma/wAOMzMfi/8ABLMz////5mb/AASzM////zM0/wAEzM0IpYoFln+ZgpuLqYuml6SbCIUHi3L/AA8ZmGr/AA3maHv/AAWzNP//+YAA/wAeTMz//9+AAMGLj4v/AAGzNIv/AAVMzIyPgJCEi4CLgoeBhYMIkQeleJGBeIN9fR6LiIuGjIcIcY0F/wAJszT///FMzf8ADEzM///wszOni7+LmKyLrouTipOKk/8ADUzMj/8AMmZo/wARszP/AB9MzP8ANkzNl36qfZSLCKGYn6aZf590H3uL/wAFszR6///yTMyLh4uHjImLiIuIioqKCJYHi5mLvVa8CKEGwXbbX4s7i2iDaHZ3c///6Zmaav//8RmZ///dTMz///PmZ///2eZo///yszJm///vAAH//+bMzP//5LMzcW55aYV2aaH//9qzNLH///JMzKEIav8ANTMz///gszT/ADXMzf//9kzMs2aAjXpIiz6L//+4Zmb/ACBmZv//zZma/wAvmZoI+zP3Kvcv9y4F/wBMszT/AExMzP8AQkzM/wARszS/i7yLqYaxc6DCyvLEupz//9uAAJ7//9+AAKd0pf//64AA/wA0mZz//+nmaP8AJRmY///xmZj/AENMzHGq///TzMyL///RMzQIi///x5ma///SzMz//8xMzP//rTM0///eGZoIdwaPjrm1i8mLkYuQipH/AB6AAIv///FmaHv/ABIZmIsIoZicnKZ+n3Ufg4tvfn5/fJ9rp1mXjpWMk4uUi8BllnCLb4v///JMzP//77M0///3szT///JMzAiljQX///6zNP//+0zM////TMz///yzNIuHCH6TfJ4eDvgm190Vg5OElpWUkpOTgpKBgIOEgx740vdvFfcZnvdSbYvFi7T7Kf8AA2ZmJ/8ABZmaMpD7H51zi3yLPXNIaG18WYh3iwiCBm5pfFqLT4tXlWOgbZiI5ISahNdewYOki8CLzZPBo6GTlpqLngiLoXqFhZakk5eYi5+LoXGfi4uqm5mci5+LnH2dZp8I/JUrFamc9xm6Ho+LkIeRiAiNjQWGmIKSfYuJi4mLiYoI+y6Ai4L3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pJMIdq4VsZuL90RaiAX3H/fdFY2NjY2OjYmJiImJiImJjY4eDvtQ92D4RBWspHVjZGt0cW1vqKyspqiqH4D7uBV12mPTK4yHi4eIiIWLXrdtlYDFSMOcjPsm/wAAGZp8/wAG5maGj4uSi46Ri5kIjvcpt3jQyqupoKaLq4eTho2Ki0KKVEVsOQj3Hge3kLOti8EIw12xW1ViYFgei1ewZbqICA73hl659wK69+q9AcW99yPBob3UvZ/B9yW9A/eN9wMVjfsCIYuLXfaLjfsOuouO9w72i4u5IYuO9wIF/wAomZr/AAWAAP8AI4AA/wAPgAD/AB0Zmv8AFhma/wAcMzT//+pmZv8AIv/+///wZmb/ACmZmv//+hmaCI37AiGLi132i437DrqLjvcO9ouLuSGLjvcCBfcJm9bti/SL9wA49wT7HYv//8vMzIv//9GZmv//74AA///bZmb//+RmZv//3LM0/wAbGZr//9LmZpz//8qZmov7FYsuJov7C4sszCH3EnkIqfgZFf8AJOZmi/8AIWZm///0zMz/ABszNP//7TM0///gmZr//9mZmv//7eZmWov//8tmZov//89MzP8AERma///MZmj/ACGZmv//1uZm///kszT//+zMzf//3jMy///0mZn//9pmZosIKEPa6OjW2Osf/wCqMzT//sizNBX/ACCAAP8AJ2Zm/wASTMz/ADIZmov/ADPMzIv/ADGAAP//7pma/wAyZmb//9/mZrP/ABuAAJ7/ACFmZv8ACxma/wAkmZqLCO3UPDAuQzwoH///2kzMi///3kzO/wALZmb//+SZmv8AE0zNCP//3EzM/wD2gAEV/wAXGZr//+KzNP8ADWZm///bGZiLZIv//9fmZv//8pma///amZr//+jmZv//4kzN///o5mb/AB2zM///8pma/wAlZmaL/wAoGZqL/wAngAD/AA2Zmv8AJJma/wAW5mb/AB0ZmggO9937OLnrufddvOi89yOt83cBxb33Pr33Dr33Pr0D+WTAFYvlYc9Hrgj3AfdsBZROlGanTwi3hwVp6X6/f+4IdpUF///DmZj//9rMzP//1bM0///qszRZ///tszT//+czNP8ASMzM///05mj/ADJmaP//9ZmY/wBVmZgIdpUFMFNZdypvCKlpBc+asJzDqwj7CvtrBXKTeot1iwj7FS4o+w77Du4s9wwf/wAEszSL/wAEszL/AAAZmv8ABLM0/wAATMz/AB6zNDf/AFEZmP//xZma/wBeGZqL9w2L8e2L9wsI/E33zhX/AEezNIv/ADpmZv//1Rma/wAaGZpQ//+hzMz//+UZmkz//6szMov//5uZmov///YZmv8AAJma///2Zmb/AAFMzP//9oAACP///xmaBihD2ufp1tnrH/8AqYAA//9qgAAVjP//+Jma/wAAgAD///iAAIv///hmZov//7SAAP//z4AA//+9MzP//7fmZv//6oAA////GZr/AAczM////4AA/wAHMzSL/wAHZmaL/wBMszP/ADHmZv8AQhma/wBGmZr/ABWzMwj/ADHmZv8AB4AAFf8AAJmaBu3UOy8vQzwoH///tczMi1D/ACxMzf//5xmayOb/ABsZmf8ARBma/wBTTM2L/wBhTM2L/wAKTM3///+AAJX///7mZv8ACbMzCP//9WZm/wAwszQV///u5mb/ADMZmv//3bM0/wAnTMz//9GZmv8AF+ZmCPcB92wFk///yZmY/wAIGZj//9yzNP8AFYAA///OZmj///HmaP//+4AA///w5mb///uAAP//75ma///7TMwIqWkFz5qwnMOrCPsK+2sFcpN6i3WL///75maL///75mb////maIf////MzAgO92P7bXb3Drn3A7n36r33I60Sxb33Er1qwfclvfcSvRP9wPk495YVi+Vhz0euCPcB92wFlE6UZqdPCLeHBWnpfr9/7gh2lQUwU1l3Km8IqWkFz5qwnMOrCPsK+2sFcpN6i3WLa4v//+IzNP//+eZm///lTMyA///mGZr/AArmZv//4rMy/wAGMzT//9+zNIv7FYsuJov7C4sszCH3EnkIjfsCIYuLXfaLjfsOuouO9w72i4u5IYuO9wIFoY7/ABSZmv8ABeZm/wASzMz/AAhMzf8AGczM///1gAD/ABxMzv//+kzN/wAdgACLCPcN8e33Cx/8Ifc/Ff8ACoAAi/8ACjM0////GZr/AAnmZv///kzMCBP+wP//0MzM///XgAD//+OZmv//w4AAi///vJmai///u5ma/wAfGZr//8QZmv8AMGZm///YmZn///TmZv///czN///0gAD///7mZv//9BmaiwgoQ9ro6NbY6x//AI7mZv/+rRmaFf8AMYAA/wApzMz/AByZmv8APjM0i/8AQOZmi8n//+SZmP8AP2Zm///OszT/ACqzNP8ACjM0/wAB5mb/AAqZmoz/AArmZosI7dQ7Ly9DPCgf///0mZqL///05mb/AAEZmv//9WZmjQj//8iZmv8BO0zMFf8AMuZm///h5mb/ACCZmv//yIAAi///wzM0i///weZm///f5mZT///NGZr//+HMzf//zTM0/wAeMzP//9/MzP8AN5mai/8APYAAi8n/ACCzNP8ANxma/wAxzMz/AB5MzAgO0/ttduO657v37L33Iq4ByL73JMD3Jb4D95GAFY0vIYuLXPaLjjO6i47j9ouLuiGLjeYF9wCZ4O2L9wKL5F/PR64I9wD3bQWUTpVmpk8IuIcFaOl+v4DtCHWWBTBSWngqbwioaAXPm7Cbw6sI+wr7awVyk3qMdYv7FIsuKIv7Dov7A+Es9XwIqfgcFe3UPS8vQzkoKEPd5+nX1+ofDkCBvffwvQGvvffwvQPh92oV+LsKWRb7D/Am9w/3D/Dw9w/3Dybw+w/7DyYm+w8eDvc3gb338L0Br733UL33Ar33UL0D4fdqFera2uoe/wAbmZqL/wAaTMz///lMzP8AF2Zm///0MzT//9jmZv//15ma///nzM7//8kZmov//8PMzIv//8PMzf8AGDMy///JGZn/ACcZmv//15ma///omZr///QzM///5bM0///5TM3//+RmZosILDza6h9ZFvsP8Cb3Dx7/ACuZmov/ACjMzP8ADLMz/wAimZr/ABXmZ/8AIpma///qGZn/ACjMzP//80zN/wArmZqLCPcP8PD3D/cPJvD7Dx///9RmZov//9czNP//80zM///dZmb//+oZmv//3WZm/wAV5mb//9czNP8ADLM0///UZmaLCPsPJib7Dx/36/8AfhmaFf8AIbM0///gGZr/ABVMzP//0xmYi///zrM0i///zrMz///qszT//9MZmv//3kzM///gGZn//95MzP8AH+Zn///qszT/ACzmZov/ADFMzYv/ADFMzP8AFUzM/wAs5mj/ACGzNP8AH+ZmCP8AKbM0//7mZmYV/wAnGZr/AChmZv8AGDMy/wA25meL/wA8MzOL/wA8MzT//+fMzv8ANuZm///Y5mb/AChmZv8AF2Zm/wALzMz/ABpMzP8ABrM0/wAbmZqLCOraPCwsPDwsH///5GZmi///5bM0/wAGszP//+iZmv8AC8zNCA7394G99/C9qncSr7338N1IvfgBvRP2+FX4aRX//3izNAf//9gZmv8APoAARf8AKczM//+w5maLCPsPJib7D/sP8Cb3Dx//AE8ZmovR/wApzM3/ACfmZv8APoAACP//b7Mzvf8Ak4AAB/8AJ4AA//+/szP/AEcZmP//1MzN/wBQZmiLCPcP8PD3D/cPJvD7Dx///6+ZmIv//7jmaP//1MzM///YgAD//7+zNAj/AIqAAAf8MfuTFera2uoeE/rq2jwsLDw8LCw82uof+EIW+LsKDvjlgb33JL33Lr0Br7338Lv3dLv38L0D4fdqFfi7ClkW+w/wJvcPHv8AcMzMi/8AXmZo4P8ADszM9wEI93QG/wAOzMz7Af8AXmZoNv8AcMzMiwj3D/Dw9w/3Dybw+w8f//+LszSL//+fZmj//6XMzP//9czM//+OMzQI//8iMzIG///1zMz/AHHMzP//n2Zm/wBaMzT//4uzNIsI+w8mJvsPH/liFvi7Cg6Hgfcb+FR3Afcb93IVg4uEeIN+gZKCl4SLCIF7cHmL/wARMzP7Qv8AUMzNH6CLmZCSl/8Azhma/wFhMzT/AHzmZv8AtjM0i/8AE5mYi/8ABpmY///8TMz/AARmaP//67M0i2KLaf//9zM0ff//5MzMOfsz//9xMzP7kf//8MzNi///8GZmi///9Jma7HuLCA6mnHYB93H4tBWDi4R4g35+lIWVhIuBi3twi3mLYbT7E6VMdXb7HSGLdYuCkoSPgQiGgoF+i4WLhJhtmouPi5GNj42Lh5FslYuYi5q09w/3DbIqmVehiwiWi5OXl5KUhpODkouai5aoj5asi46li5aLoG6ZSPcg9z33T7d+i68Ii5eAmXiNi4uLu3KLgIv7B/sEOz099yWbvG+LCA4zlnb4Hcb3jHcB93naA/fIlxWLq4DniveQ84u/hpyLCJuQkJ+ghZh7H3WLXIckiov3GpfVi6IIm4mRdx5oBnqGhHwfi3GWQoz7GCOMWI96iwh7hX13dZGInB+gi7qQ84uJ+3qA+waLawh5joeeHq4GnJCPnR8O+JP3qPfyFYuYjZeQlae6/wAkTMz/AAqzNP8AC7M0/wADTMz/AAezNP//7UzM/wAHTMz//+qzNIt4i2Jgdotqi26biZWLlIuVjZOOCP//80zMdISJ///fszSLgqNckIvbCPfq+wgVTrdlplWLeYt7h3+GkpWRloubi8BxvYGc/wBHGZqL/wAX5mb//66AAIv//9qAAIuGioWKhwibm7+sqIuSi5SFlYODjYKMgosId4WDfnSehZcfrov/ABUZmP//9rM0/wAm5mj//+JMzJx+/wANgAB//wAGgACFfohzcXp3CItcYGt8eYV0f5GBoB6Xi5iPlY6Gg3h7bIt7i26Ybp6MhouGi4UITGV7YB6BjQWapqG2i7qLm4SYg5Wcg56JlIu/i7GkyLoI+69QFYtqtnaLY4t4hHeEeP//4UzM/wAJZmb//8nmaP8AG4AAi/8APGZni/8AObMz/wAv5mb/AByAAP8ABOZm/wANgAD/ACKAAIv/AAOAAP///4AAmv//7oAAhI2DjYSLCH97iW4f+M/EFXx9eYR0i3aLeZN4mZyboJaii52LnoCbegj71feMFX2uZ8x7omLFYKdgpYlVdWlvb35+///WTMz//+hMzP//3LM0///yszQ9///iszRQ///pTMyL+wOLS7lYtm0IY5H7H7iLZ8R1U3aLaPces7SQjIsFeX5/goSDeXpl///agACL///BgACL//+pZmb/AEVMzGL/ADdmZ///7zM0/wAdszOC/wAjmZr///AzM6P///EzM692uESPYdPEx9ey4Aih///2gACy///ygAC1i+SL/wBcmZj/AEZMzf8AH2Zo/wAeszMI9033SftQ90YF///X5mj/ACXmZv//phmY/wAxGZo0i2iLYn57hAj7CfusFWR1pZGUoaawH6+LpH+ldXB3eH1kiwhX+3cVgHmFch+EB4STiJWLlIuVjZGTmP8ACLM0///+szP/AApMzP///0zNlIvai5u9j6KcgaSInYuei6CUmZcIp4wFioWLh4uGCHmXh5WWo5KoHouXhZOEj4eOgIt9iwh1Bv8AC4AA/wAYzM3/ABGAAP8AIjMzk5acpqelmYuRi5yEmIWMhYuFi38IeIeIhoSIjp4ei4+LjoyQ///8MzT/AACAAP//+8zM/wAAgACIi4eLdoWLdotuuIeLc4uC///9gAD///GAAP///IAA///ygAD/ADiAAKn/AACAAP8AKczNi/8AKjMzCJeImYiWi7eL/wAXzMyi/wAZMzSlcaRrqGaLeouFiX+Fi/8AJMzM///9MzT/ADZmaP//yMzM/wAZzMz/AAOAAP//8YAA/wADgAD//++AAIuBCItzXoiLbIt5nYSQi/8ABMzMi/8AAmZo/wAAgAD/AATMzP8AAYAA///+zMyP////MzSOi48I/wAAZmaN/wAUgAD/AAmAAP8AB+Zo/wAAmZj///6Zmv//64AAHouB////zMz///gzNP///zM0///5zMx+iH2IhYt3i///6DM0/wAfzMz//9LMzP8AOzM0CJsGop+OpKdvlIT///LMzP//90zM///2Zmj///HMzB+L///7TMz/AAAZnP//+0zM/wAAzMz///szNAhxjAWAl32Ue4tti3B/cnsIkQeLpP//8OZmrP//8hmam///+kzM/wAGgAD//+GzNP8AIIAAVYuHi////kzMi///+rM0ioeWhpKLlouUj5WRkwiFB3GehZWek5mZHouOi5CKjwiliQX///ZMzP8ADrM0///zszT/AA9MzG+LV4t+aotoi4OMg4yD///yszSH///NmZj//+5MzP//4LM0///JszR/mGyZgosIdX53cH2Xd6Ifm4v///pMzZz/AA2zM4uPi4+KjYuOi46MjIwIgAeLfYtZwFoIdQZVoDu3i9uLrpOuoJ+j/wAWZmb/ACEAAf8ADuZq/wAiszP/AAwZmP8AJhma/wANTMz/ACT//pz/ABkzNP8AG0zMpaidrZGgrXX/ACVMzGX/AA2zNHUIrP//yszM/wAfTMz//8ozNP8ACbM0Y7CWiZzOi9iL/wBHmZj//9+Zmv8AMmZo///QZmYI9zP7Kvsv+y4F//+zTMz//7OzM///vbM0///uTM1Xi1qLbZBlo3ZUTCRSXHr/ACSAAHj/ACCAAG+icf8AFIAA///LZmb/ABYZmv//2uZn/wAOZmb//7yzM6Vs/wAsMzOL/wAuzM0Ii/8AOGZm/wAtMzP/ADOzNP8AUszN/wAh5mYInwaHiF1hi02LhYuGjIX//+GAAIv/AA6Zmpv//+3mZosIdX56enCYd6Efk4unmJiXmnerb71/iIGKg4uCi1axgKaLp4v/AA2zNP8AEEzN/wAITMz/AA2zMwhxiQX/AAFMzP8ABLMz/wAAszT/AANMzYuPCJiDmngeDvc4+A75GhX4rAps+4EVfottgX2GCIGlBbqdpZW2pwic+5kGdJZ9mR6nBo6OiocfdgeLVoxqZU+Kix6gB42Pjo4erwabmZmiH/crB6yJlX8eDvc4+A75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s5CSgpWHH///+jM0i///+8zMe3aLCGSKsrkf9ykHi/8AKZma///5TMz/AB+zMv//9LM0/wAYGZoIyf8AbJmaYov//9TmZv//tDM0Bf//4rM0/wAeszT//9ZmZv8ACBmYY4sIOThSVXOXgKKomp+YH4uSipKJj4qOipGLlouquJaxi/8AHBmai7D///RMzJf//7xMzgj//9bmZv//t+ZmXP//9IAABRPoK3NGVotHi///yUzN/wAazM3//+EzM/8AJ8zN///yTM0I///dZmb//8MzM7OL/wAeZmb/ADUzMwX/AAezM////zMy/wAHzM3///+Zmv8ACBmai7mLnpO3rQifmwX//2QzM/8ACBmaFf//9P///wANszL///rMzf8AETM0i5qLuP8AFTMz/wAtZmb/AEnMzf8AE5maCP8AC5ma/wADGZoF///CGZn//0yAABX/AG2zM/8AwDM0/wATmZr/AAUzM4v7GQWLfoWEg4Vxdml1b4v///WzM4uC/wABszOD/wAC5mcIDvuVgcL37bIB5NoDtvhBFX2Hf4MffgeGjIqPHsb//wfmZgb7CP//NBmatIv/AEuzM/8AhRmaBf8ABOZm///GGZn/AB2AAP//6MzN/wAp5maLuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR+L/wBHzM3/AGcZmv8AtTMz/wAA5maLBZWZj5QfnweL/wACgAD///7mZv8AAbM0///95mb/AADmZgj/ABszNP8AL+ZmYov//+VMzVz//6uzM4uLsgXMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRmaCNr//2uzMhX/AG0zNP8APhmaBw7viqj3wbL3jqcB8dv329u9pgP4jBbYi7dFmUQIpouF9ykFipSHlnKLCHJ7o6Qf+IUHp5mbtB6lBpCOjpAfi56JjAWLLopnZDSMix6Jiot4BYaPiJAepQazmn1tH/ti+9v3YgenmZu0HqUGkI6OkB+LnomMBYsuimdkNIyLHomKi3gFho+IkB6lBrKbfW0f/IoHb317Yh5xBoaIiIYfi3iNiQWL6I2vsuKJix6MjYueBZCIjoYecQZjfJiqH/eV99v7lQdvfXtiHnEGhoiIhh+LeI2KBQ4+iqj4A7r3XKmldwHj1vda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EqbW9yPVE7Dx+xkV919A+78H+MP3EX3X+5FSBRNw4EElBw5L+36s91Ot+AW5oXb3XammdwH3Btr3bOED91P3tBXR/wBKgACu/wAhgAAepIudgpp8tmCUUYtPizRyKiGL///xzMyL///kgAH/AAEzM///47Mz/wAYZmd//wAKZmaG/wAGMzOL/wAfzM0IPvhhFYv//+SAAEf//9+AAAX///wZmon///xMzP///zM0///8ZmeL///v5maL///zZmf/ABBmZIGL///55maLh///+bM2i///+UzMi///9szM/wAGGZr///VmZv8AAuZm///6MzQImmkFm5X/ABLMzf8ACkzM/wASMzP/AAizNAi+/wAYTMyL//2kszQFiziAhk6IhYWLdpGFtYyljLeLuouqiraKkZGLoIWRRI+Aj4veCO8Hi6eT///1ZmaW///7mZr/ABTMzf//95ma/wAWzM3///tmZv8AG2Zmi8CLu56ysri4psiL3Iv0Qu4qi///zIAAi///2eZm///kMzL//+aZmv//5hmaCHz///CzNImLi6EIi/8AiuZo3f8AJxmYBf8AA8zM/wABzMz/AAOzNP8AALM0/wADgACL/wAPszSL/wAMZmb///FMzP8ACYAAi/8ABYAAi/8ABRma/wAGGZiL/wAHZmiL/wAIzMz///pmZv8ACoAA///8Zmb/AAZmaAh7rAV8gXn///UZmHj///bmaAhL///hZmiL/wANmZgFzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwgO9zn4A/iBFZKBkImKi4qJgZSJi46MjoseWacVhQaJlYuKiJCJjIiMioqKjYqOi4yNi4yMjIuXi414jIgI75oViQaMiZCLHo2LjIyMi5eLjXqMhgiFBomUiZGGiwgwYBWIjIqNHoyLjouMjI+QjZCLjAiMi4yKiIGIhB5wFoiJh4mIiYGYhpeLlQigkqWfo5FwgHiIi4seiouKiomKi42MjYuNCJ2Bm39/g357HouDjn6YhAj3+PwoFYaLka9Fi3OLfG6Hi4qLiYyLjo6QmJ+ckZm2jJmLmoupe71plQiNkY2Ki4yehq9vi06Ldod1gW+eiYSMl4m1hpVyi4OLiYmJiYsI+5r4MxWKjISOiouFlombi5MInZiaoZ2efWgei3+JfYZ7fZGMiYOPlo6TlIuZCJiBn3t+gIB0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zf8AHZma/wBQZmb/AMDmZv8AK5ma/wBnGZrA9wSZqKSrsI6Ojv8AAYAA/wAGszSL/wAGzMyL/wAGzMz///6AAP8ABrM0iI5yin6Kb4sIaIt4jGaMiIj///6AAP//+UzMi///+TM0i///+TM0/wABgAD///lMzI6I/wAfmZqI/wAgGZr///ozNP//8EzM///bzMwI//+czMz7eQWE///v5mb///eZmv///UzN///3gAD/ABPMzQj//6dMzfdkBf//7f///wAqMzT///WAAJ3/AD1Mzf8ABMzMjo7/AAGAAP8ABrM0i/8ABszMi/8ABszM///+gAD/AAazNIiOZopjimeLaYtwjHeMiIj///6AAP//+UzMi///+TM0CIv///kzNP8AAYAA///5TMyOiP8AK5mah/8AB+Zm///4szT/ABtmZv//wEzMCP8AcRma+5sF/wAIszP//+vmZv8AD0zN///SGZqBb///9Bma///emZr///PmZv//5GZmfGyAd32Ccot9i4eOgIsIbH5ze3afeKYfoIuzk6/LCA77JIG7W7T4DqkSr9pN1fc41cCkE3b3t/d9FfsZB4t+hYSDhXF2aXVvi1mLc7iLqou4/wAXMzP/AChmZv8ASczN/wATmZoIE673I/tyFb6Lqp+R1AhykAWKdYVvdYsIdIqlyB/3JQf3IkGmQjk4UlVzl4CiqJqfmB6LkoqSiY+KjoqRi5YIqriZsa26d/sFHouEiIeIigg1dgUTditzSFuLR4tAwWXRi7mLnpO3rQifm42LBY9yoWqxiwgOPoHH993HX6cS/wCGszP/AEwZmv8ApjMz/wBM5mYT2P8BxeZm9xAV/wABTM73MwX////mZq7///+zNKL///vMzJ3///IZmsf//+CAAJ9ki1eL///ZzMx2//+85mb7AAj///7MzYz/AAAzM/8ACTM0Bf8AAJma/wAmzMz/AAOZmf8AJszM///8GZr/ABEZmv///MzN/wANszT///cZmf8AB2Zm///yzM2LCBO4a4v//9KZmoT//9JmZoX///szNIP/AAQZmoD/AAgZmYII/wAoszOIBf8ADDMziv8ACBmagv8AAkzNgf8AAhma///25mb/AAAzMv//8hma/wAAgABvCP8AAUzN+40F/wAAGZl5///9mZlw/wACTM3///YzM/8AA+Zm///vTM3/AA1mZ///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///2Zmb/AAqAAIuoCPfO91P7zgeLbv//9WZm///1Zmb//9+Zmv///JmaCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LPiYsejY2LogWLkIj/AAKAAIb/AACAAAh4jQX//9yZmv8AA7Mz///4Zmb/AApMzYuoCPfO6QeVmY+UH58Hj4iNhh77AsMGi5+MuJGtCBPLwJnUrZahi6OLpXuVd5V2lHWniwiRgAb8igeLbv//+WZo///4mZr//9uZmP//+WZmCICJBf//+xmY////GZr///3maP///eZmi4YIi3SMiQWLx42vss+Jix6NjYuiBYuQh/8AApmah/8AAGZmCHiNBf//4YAA/wADMzP///OAAP8ACszNi6gI94UHxsO2nKiLCLmgaDof+1oHi27///XMzP//9UzN///fMzT///yzMwh3iQWH////mZqI///9ZmaLhgiLdI2JBYvPja6y0ImLHo2Ni6IFi5CH/wACgACG/wAAgAAIeI0F///fszT/AANmZv//9UzM/wAKmZqLqAj3Ygfycr9DHmSLRntISAj3fgfMjq6LHhOHwJKHjoMee4D//94zNP//87M0fogIDvdb+3Gv90us9/uymHf3fqd6rBLn1vdT1vdA703WE+sA+AT4yxX40QoT00D39fxcFffhewcT54B+i2t+aIsI+1HHBvcuzqOsHqyLqn+TYZdUm3Ori5+Ln52LoIuwabJmo3KccJVmi0mLUWNwaAgT60B+pGCtO4twi3SEdn9GY3FBi/sOCFgGeYZ/gx9+B4aMio8e0PvPBotu///3Zmb///aZmv//3Zma///8ZmYIeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42vss+Jix6NjYuiBYuQh/8AApmah/8AAGZmCHiNBf//3pma/wADgAD///ZmZv8ACYAAi6gI98/3U/vPB4tu///1Zmb///ZmZv//35ma///8mZoIeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42vstyJix6NjYuiBYuQh/8AAszNh/8AADMzCGuNBf//4jM0/wAB5mb///LMzP8ACxmai6gI98/3SQeljn9jH/ubB/sAi/ssXx6Ai4WShZSDlYGXcYsIgHh/eW2tfZ0fn4uti7CqCLqxpe+L9zUIDvg7iaz3+7Jwpvd0p3muEufW91PW91LVE9f4BPjLFYJni2SKdwhg+1OWB4vPkK+RnqDbtZWai5aLk4mbga51gFW9iwj34P/+neZmFf8AA4AA/wAAszP/AANMzP8AAGZn/wADMzSLoouXepl4CNQoBZ9ujn6LfwiLdo6HBYulja+yvYmLHo2Oi6EFkIWOhR6IBnGLbZ54pgj7Cvc9BYiPiZCLj4uPjY+OjgjX3wUTr6OluKGmiwiSBo+SjpAfi56HjQWLVYlkZ1yNix6IiYt4BYeOh5AejwajkIODH4uBhn58e///yoAA///FTMz//96ZmP//4bM0///T5mj//+qZmgj/AcpmZnUHd4J9h3iHd5dtk2uLUotNd3BUCBPXfqNgrTuLcIt0hHZ/RmJxRYv7DghYBnmGf4MffgeGjIqPHtD7zgaLbv//+WZm///1zM3//9uZmv///DMzCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//9yZmv8AA7Mz///4Zmb/AApMzYuoCPfO91P7zgeLbv//92Zm///1mZr//92Zmv///GZmCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//96Zmv8AA4AA///2Zmb/AAqAAIuoCPfO6QeVmY+UH58Hj4iNhh77AsMGi5+MtZGtCBOvmdS5lKGLo4uhfZV3lXeUdqWJCIuAi/yHBYtu///2Zmj///WAAP//3pmY///8gAAIeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42ustCJix6NjYuiBYuQh/8AAoAAhv8AAIAACHiNBf//4JmY/wADTM3///RmaP8ACrMzi6gIDvecgcJcrPf7svdvrHyrEuXa90/a9tyU2hM3gPgE+MgVjIoFgGyJZYt6CFv7T5cHi8+Oq5GeoNu1k5qL/wArzMyL/wAPTM7//9kzNP8AAuZm///4zMyUdpR4pIsIjouOjIyMCPuq/E4VE2eAiziAh1WHhYWLdpGFtYyhjLSLsYuciraKkZGLoIWRXY9+j4veCPeg90/7oAeLOICHX4eFhYt2kYW1jJuMsIu5i6iKtoqRkYughZFHj4CPi94I96D3WfvBBxOvgESqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmiJ/wAAmZiE/wACGZj//+kzNP///+Zo///2zMyL//+tGZoI+1n////mZou4BfcMm9PAHqOLlXaPd5BwmX2mi6WLlKCLnIucgJt8mHedcpdii///2Bmai///0WZm///pszT//+DMzP//zJmYCBN3gP//8jM0/wAX5mj//9UZmv8AIMzM//+xZmaLcIt0hHZ/RmNvRIv7DghaBnmGf4MffgeGjIqPHs4GDvdXiaz3+7Jmuvd1rRLn1vdW1vdZ1hPe+Ej3+BX353UHfYJ9hX2GdZpxk2iLCDf7BUX7MB9gWAd5hn+DH34HhoyKjx7Q+84Gi27///dmZv//9Zma///dmZr///xmZgh4iQWG////gACI///9gACLhgiLdI2JBYvPja+yzomLHo2Ni6IFi5CH/wACmZqH/wAAZmYIeY0F///cszP/AAPmZv//+EzN/wAKGZqLqAj3zuoHlJmPlB+fB4+IjYYe+wLHBvcu0aCsHqmLnnuYapF+lYGXh4yHi4eLhwj8iAeLbv//9mZm///1gAD//96Zmv///IAACHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+NrrPPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//9+Zmv8AA2Zm///1Zmb/AAqZmouoCPeHBxO+xsO2nKeLCLqfaDof+1wHi27///hmaP//9bMz///cmZj///xMzQh4iQWG////gACI///9gACLhgiLdI2JBYvPja+yz4mLHo2Ni6IFi5CH/wACmZqH/wAAZmYIeI0F///dmZj/AAOZmv//92Zo/wAKZmaLqAj3ZAfycr9DHmSLRXtJSAgOSftxr/dLrPf7sveArBLn1vdB7k3WE/r4WPUV9+Z8B32La3xoiwj7UccG9y7PoaweE/yri6p/lGD/AAtMzP//yhmY/wAQszT//+fmaKqLn4ufnYufi7Bq/wAm5mhm/wAZGZhynHGVZYsINyNV+1kfeVgHeYZ/gx9+B4aMio8e0PvOBotu///zgAD///UzM///4YAA///8zM0IeIkFhv///4AAiP///YAAi4YIi3SNiQWLz42vst2Jix6NjYuiBYuQh/8AAszNh/8AADMzCGqNBf//2kzN/wACTM3///qzM/8AC7Mzi6gI9873SQcT+qWOgGMf+5wH+wCL+yxfHoCLhZKFlIOVgZdxiwiAeH95ba19nR+fi62LsKoIurGl64v3NggO9zqJrPf7snCm93+tEufW91bWE7z4SPdmFY+MkIyPi6KLl3qZeAjUKAWfbo5+i38Ii3SOiQWajKOMoouui6eLpYkIjY2LogWQhY6EHogGcotsnnmmCPsK9z0FiI+JkIuQi4+Njo2OCNjfBaOluKGliwiTBo+RjpAfi56IjQWLVIlkaFuNix6IiYt4BYePh5AejwaikYODH4uBhn58e///x+Zo///EGZr//98ZmP//4eZmXnUI+GB1B3qEgIN9hnWacZNoiwg3+wVC+zEfE9xkWAd5hn+DH34HhoyKjx7Q+84Gi27///VmZv//9WZm///fmZr///yZmgh4iQWG////gACI///9gACLhgiLdI2JBYvPja+yzomLHo2Ni6IFi5CH/wACmZqH/wAAZmYIeY0F///aszP/AAQZmv//+kzN/wAJ5maLqAj3zuoHlJmPlB+fB4+IjYYe+wLEBvcu0aOsHqmLnnuYapF+lYGXh4yHi4eLhwj8iAeLbv//+mZm///15mb//9qZmv///BmaCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+NrrPPiYsejY2LogWLkIf/AAKZmof/AABmZgh4jQX//9+Zmv8AA2Zm///1Zmb/AAqZmouoCA6MgcJcrPf7svd/rRLr2vdW2hO890P4GhX3VvvBBkSqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoI+1b////mZovEBYvO///8gAD/ADJmaP8AB4AA/wAWmZiTo/8AFYAAmf8AD4AAi6eLmXqXbv8ABzM0///umZj/AAvMzP//9WZon4uei5mai6CLm4Kcd5oId5ptlGWLbotde3NrbWODVoszCGNYB3mGf4MffgeGjIqPHtD7oAYTfIs4gIdVh4WFi3aRhbWMoYy0i7mLqIq2ipGRi6CFkUePgI+L3ggO95SBuGas+AOsca33XqmmdxKw4fdB3traE5+A+BLmFf///TM0/wAJMzP///XMzP8ABczNgoxsXmpwYIsISEzd9wT3ALHPzR/Gi5JjjmqOcpWAoYsIn6eaqMBYuSsgMzH7IfsWyzP3Fh/Gi7ukt9cI16oVE2+Aizh/iGiGhYWLdpGFrIyfjK2LrouYiraKkZGLoIWRYo+Aj4veCOUH/wAXzMz///+Zmv8ADbM0///4mZn/ABOAAP//48zNCNQkBZ9ujn+Lfgh7B4iMiY4en4yejKmLqougiqmKkZGLoIWRaY///+LMzP8ABDMz///pMzT/ACHMzQj7CfdBBYiPiZCLkIuPjI6OjgjX3wX/AB2zNP8AHrM0/wAeTMz/AAtMzL2NkZGLoIWRZop9imeLZYt6jGaMhYWLdpGF/wA8gACIa///2oAA///1gAD///WAAAj//8tmaP//xoAA///OMzD//9OzM///5WZo///4TM0I/wFZgAAHzI+zix6Sh46CHnKBQH1jiImDjXuRhb+Il5CLNwgO97N/uGio+AG6aa33l3cSsOD33tb3WtYTH/gS5hX///0zNP8ACTMz///1zMz/AATMzYKMbF5qcWCLCEhM3fcE9wCxz80fxouSY45qjnKVgKGLCJ+nmqjAWLkrIDMx+yH7Fssz9xYfxou7pLfXCPck/wDC5mYVi/8AFRmalP8ADEzMk/8ACLM0sf8AJUzM/wAmmZj/ABWzNP8AJ2Zoi/8AFGZoi6D///LmZv8AC5mY///pGZqV///sMzSN///kzMyLbQj7LAeLOYGHV4YIE1+GhYt2kIW1jJ+Ms4u0i6GKtoqQkYughpFTkICPi90I9ykHi8L///xMzP8AMIAA///oszT/AB6AAAgTb///7zM0of//4MzMl2iL///O5miL///QGZh+Tkf///yZmP///EzM///5mZz///WzNIuZCP8AAMzM93UF/wAAMzTM/wADzMyzi4uLkoeOgotygUB9Y4iJg417kYW/iJeQizcI/EkHizh/hv//2jM0iIWFi3aRhf8AKTM0jP8ABZmYjLaLsov/ABGzNIr/ACoZmIqRkYughZH//80zNI+Cj4veCA6egcL37bL3JHcB5dr3Z9oD5fgaFfvBB0Spb7oevYu5qKWy///9TMz/AAmZmv//+7M0/wAEZmaCjHx+b3xviwhwhanJH/eR92f7wQdEqm+5HrmLvaGyt4n/AApMzYX/AAWzM4GMcXdtg3GLCHCFqckf95HzB5WZj5QfnwePiI2GHvsMsgbMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRma///VzMz////MzP//wLM0/wAAGZr//5aAAIsIqAfMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv8AAMzMi///rRmaCF3////mZgV9h3+DH34HhoyKjx4O9wx/uGDC9+2yc633e6cSsODRrNLe9w/VE5+A+BLmFXmZBWxeZnBgiwhIS9/3BPcAss/NH8aLkmOOao5yn4Chi5+LnZqLqIv/ACWZmv//5kzM/wAiMzL//86zNP8AEJma///D5mb/ACRMzP//7Rma/wAwMzaL/wAyGZgIw8u+3vK8UjIeE2+AY3ZUSIiKiogebAeIjYqOHsz7wQZEpm+5HriLtKGxt4j/AAYzM///++Zokf//9RmY/wAEzM1xd3iDcYsIcISpyR/3keoHlZmPlB+fB4+IjYYe+wOLhuoF///6TMz3Af//xbM0zPsRi/sMi0VHi0MIE5+Ai///05mY/wAJzMz//9nMzv8AIxma///bmZoI///7GZoGIDMx+yH7Fssx9xYfxou7prfXCA5Piaz39qd5rZh394esEufW9znuUdoTruj4cRWKcIF2bIsIeYZ/gx+CB4eMio8etwaZjId/H/vDB4tu///7ZmaB///ZmZqHCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LViYsejY2LogWLkIf/AAKzM4f/AABMzQhyjQX//95mZv8AArMz///2mZr/AAtMzYuoCPguB/cuy6SsHquLpn+UYP8AC0zM///KGZj/ABCzNP//5+Zoq4uei5+di5+LsGr/ACbmaGb/ABkZmHKcdZVliwg8iy1Zgfs/CBPd9/v79xV2Cg5niaj4BK33f60B59b3StYD+BX5AxVtrmKiTotxi3WFdn5QZv//5+Zm///I5mj///kZmv//oxmYiXCBdmyLCHmGf4MfggeHjIqPHrcGmYyHfx/7wweLbv//84AA///1MzP//+GAAP///MzNCHiJBYb///+AAIj///2AAIuGCIt0jYkFi8+Nr7LKiYsejY2LogWLkP///OZm/wACTM3///sZmv8AALMzCH2NBf//4OZm/wAEZmb///QZmv8ACZma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o4WbhpuFm4edjZWTj42Lj4uSg5eLCJmgmKMfi51/l4KThGFriHx8ipeJmIuZi6GNn4+gjpCQkZSLkYuOeaCLCKKZm58fi5aIkoiTcmZvmneAlKuYqp2mjo2PjZCLmYuDb6yLnoubm4ujCIuQio+LjoWGgoJ1i3yLg4+BiwiIBpyhn6ChnY6MjYyPi6GLdnekfZGHkYqQi5qLnJSQqYOIh4qCiwh2i32XfY+jm6SYppUIjwaUkYWIH4uIh4SLhIuAmHmei6GLlZ6PkAiHBmyLgaV8lqaTp46qi5eIjIOLi4uHgYOLgYt7mHuei5eLlJCVlAhplYulgZmkip6HmYiagoaCl4SQiJGIkouRi4+NkYuOi42Kj4oIgpyRk4KSiI6BkYOLhIuHh4OLiouJjXqPmZaQpa+OiI+AnHeLCHd/eX8fi4ORhYuIi4mHg3+LCPuJ/OMViY6IjR6Pi4mRkYuNi46Ji4eLem+UgX8IoXuSkomOBYiJioqKi4qLiouKjAiCkgWQkqmEi5wIkYKThIeGiIkexWwVgoB2g4qJjI6TmKGRHowGjYuKiB97aRWZlJ2Wk4aQhICAfX2AkYiQH8mYFfjSCn5pFZeTm5eXhI+FgIJ7f4KRhJIfx6MVhYSIhh6IjgeOkImFhIaFhh+Gi42RhYsIiYqKioiRh5OVkZKTH4uRh4+HjI2Mko6LkQiQho+DgYiEiomNio0ekIuHk5SLCI6MiIgfsnIVi5CLkI6JjoiKh4qGiI2Jjh/3ffjaFY0G8iqPL4tPCPsTREx5iouLjIyLjIwetJm33ovli/dLIcCLlouMi4yMiwjpuhWKiouJH4uGjoOLioqLhpuHi4uLiouLiYuHjoOLiIuLi4qKi4iLh5iHiwiLioqKH4uGkn+LiQiKB4qLhZWIi4qLi4qLiYuHj4OUg5eCi4aPgIh+g46Ef3qZco6IoAiJlIeUhpB6m1eahouBi4iEi4WLg5KBkICSfpVvoISig5h5kX0IeomKd36LiYuAk4SchpmFkYiLi4uKi4uKi4iPhIuJCIoHiYyBmYeLiouKiouKi4eThIuICIoGiYuCk4iLiouLi4uKi4eWgYuKiouDk4eLiouKi4uKi4ebgouKCImLg5CIi4qLi4qLiouIlIKgh5tsjIuNi4uLoI2inotkmHGWcgh9lomQhouAi4Rri4sIi4yRjpGIjImHi4CLi4qXh4qJi4eIjYaLH4uHlYeJioqJh5CFix6LhY+JioqLiYiSgosei4aPiYqKiomJmWyfm46YlR6OB5WEmnachouGjIaLhotWbSxaeImKi4qLi4uKi4uMi8WLxdOS3AiMmo2ZjJiPjZGPkJIIorAFi413nKKTrpCNi42JiIeFix6LkJSOjYqNiB+Ki4qJiosIk4iLiYaLhYuLipCIiIqHiB6KjYqNiIuKi4iKi4iLiI6GjIaIkYSffouDi5CIdnUImQeLu4Cnc6iTlpOUjZeMj4+Ri42Lj4mPiowIfpwFjI+Lj4uPCJaHlomKiomJHouHjIeLiYqLiJ6Hiwj8uPyrFYuQjI+OiY6JiYeJh4mNiI4fDj2JqPgErfd/rQHn1vdM1gP3O/h6FfcuyKOrHqmLnnuYapJ+lIGYhwiLf4v8jAWLbv//9kzM///0szP//96zNP///EzNCIKKBYb///9mZon///2ZmouGCIt4jIkFi8WNr7LUiYsejI2LngWLkIj/AAKZmob/AABmZgh0jQX//+BmZv8AArMz///0mZr/AAtMzYuoCP8CA7M0B8yO/wAjTMyLHpL///uzNI7///hMzB57gP//5bM0gv//80zMiHWacZNoizmLJkWH+yoIcIF1bHmGf4MeggeHjIqPHrcGmYyHfx/7xweLbv//97Mz///1szP//91Mzf///EzNCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Pr7LOh4sejY2LngWLkIf/AAKZmof/AABmZgh5jQX//90zM/8AA+Zm///3zM3/AAoZmouoCA73WImo+ASthJ/3Z6d7rBLn1vdK1fdf1hOP+Kj5ThVIi2F1ZVYIE9dtrmKiTotxi3WFdn5QZv//5+Zm///I5mj///kZmv//oxmYiXCBdmyLCHmGf4MfggeHjIqPHrcGmYyHfx/7xweLbv//+WZm///1zM3//9uZmv///DMzCHiJBYb///+AAIj///2AAIuGCIt4jYkFi8+Nr7LKiYsejY2LngWLkP///OZm/wACTM3///sZmv8AALMzCH2NBWr/AASzM4H/AAlMzYuoCPf5B/dRvq6tHrCLmmyQd5B2mHili42LjYyNjINsiWmLdQhwgHZseoV/gx6CB4eMipAetgaajId/H/vHB4tu///2Zmb///WAAP//3pma///8gAAIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ust2Jix6NjYueBYuQh/8AAszNh/8AADMzCGqNBf//4DM0/wAB5mb///TMzP8ADBmai6gI+DIHE4/3LsukrB6si6Z/k2CXVZtzq4uei6Cdi5+LsGn/ACbmaGb/ABkZmAhynHWVZYsI90T81BX/AMdMzAf/ADGzNI/Lix4Tp4+GjoMe///jgACA///YgACCRoKJhY17jYX/ADaAAP//+uZm/wAKgAD///oZmotSCPtXB4s4gIhOhoWFi3aRhbWMpYy3i7aLpIq2ipGRi6CFkU6PgI+L3ggOhX+neaj4BK16qfdzrBLn1vcGyU2mmebUzmKmE2yA6PhxFYpwgXZsiwh5hn+DH4IHh4yKjx63BpmMh38f+8cHi27///VmZv//9WZm///fmZr///yZmgh4iQWG////gACI///9gACLhgiLeI2JBYvPja+y1YmLHo2Ni54Fi5CH/wACszOH/wAATM0Ico0F///aZmaO///6mZqWi6gI+DIH9y7BpKwerIulgJRzlmucZquLCJ6XmKC6UMMzHzyLN1mB+z8IE01A91D75RWPWo5Yi2GVjZOMkYuRi5GKkooIE55ApISfh66LuIvsrIvqi9tOsDqpVZ99nouzi7ytoLGLCBOeIKCLwnugOQimjAWJr4ithatsm2qUWos8i1RXi0yLQKx11GsIE41A22meb4tgi11ebGqLZot6nYGWdqN/uoikCA7ygrRkvPdVsvcgqRKy007U9z7Z92fbE3f4kLUVQE3S9h+LlIuIjJQI97YG62j3BfsdHlKLXXJkXmbOPo5ziwg5PV1Rd5RyqqSZnJsfi6KFgIuli6q4nLKLoIuhgZp8p2+LUYtyCDB0BRO7//+YGZr//+WzM///xOZm///TTM2LO4tHvV7Zi6+LspOnnwgTd6uiBaKej4yQkJt0uVjxi+OLucWlrgh6lQVoZV97VYsI1fd8FftjBpLErtrTiwiww24gH/u1cRX7PgcTu2Vsbnxziz6LfbuLqIvDpLj3MbEIDvdNiaj4BLpcrfd/rRLn1vdM1vda1RO+9/75NxV1m3GSaIs5iyZFh/sqCHCBdWx5hn+DHoIHh4yKjx63BpmMh38f+8cHi27///dmZv//9Zma///dmZr///xmZgh4iQWG////gACI///9gACLhgiLeI2JBYvPja+yzomLHo2Ni54Fi5CH/wACmZqH/wAAZmYIeY0F///aszP/AAQZmv//+kzN/wAJ5maLqAj4Mgf3Lsijqx6pi557mGqSfpSBmIcIi3+L/IwFi26A///5GZpr///45mYIgokF///7GZr///7mZv///eZm///+GZqLhgiLeIyJBYvFja+y1ImLHoyNi54Fi5CI/wACmZqG/wAAZmYIdI0F///hZmb/AAKzM///85ma/wALTM2LqAj3jgcT3ru6tqWoiwjDoXg6H/tzB4tu///3Zmj///WZmv//3ZmY///8ZmYIeIkFhv///4AAiP///YAAi4YIi3iNiQWLz42ustCJix6NjYueBYuQh/8AAoAAhv8AAIAACHiNBf//35mY/wADZmb///VmaP8ACpmai6gI92gH8mjCQh5ki1F7SEgI93kHzI6uix6Sh46DHnuAcYJ+iAgO+ST7dsLFtcata7j4A6j3Va0SsOb4Tuf3LNb3UtYTz8D40PsOFf//f+Zm/wAxzM3//5IZmv8AATMzbYv///UzNIv///WzMv///zM0///2Zmb///6zMgj/AAmzNP8ABxmaBf8AKYAA/wAdTM3/ACyzMv8AFRmZ/wAiGZr/AAlmZ/8AoJmc/wAXgAD/AGYZmPcXi/8AtLMzCPda+yf3F/tD+0f7FPss+1gei///TGZm/wB1MzT//4nmZ/cr///sgAD//+4zNP//9rMz///uszL///VMzf//7+Zm///0MzP//9EZmv//3czN///X5mb//9gzM25jCLN3BZ+5uJmai9CLxXj3Clv/AEszNP//4WZm/wBHzMz///CZmt+L84vwsMrGCHqdBUlmO3VZiwg/i1iZMa4I+4X5fhVYChPfwPj4/Q4Vsou0n7z/AChMzf8ABMzQ/wAD5mb/AAczMP8AAczNi4SL///oszOW///cTM2Li/8AB5mY///9GZr/AAOzOP8AAIAA/wAHszD/AAJmZqGdsZrIkpGRi5qFkQhLkIKei7wI91QHqY//AEjmZose/wADGZqIjoYehop8inyLa4tqjGaMhYWLdpGFvIiYf4tJCPtVB4t4///+GZj///gzM///8eZo///zzM1ma2t7cosIbVmZ5B/3Sgepj/8ASOZmix7/AAMZmoiOhh6GinyKfItri2qMZoyFhYt2kYW7h5mAi0oI+1QHRqlI7h4O+D6JrPf4v/c6s8B3AfeT4PeH2vda2gP5KvjgFf8AADM0zP8AAszMrouLi5KHjoOLOv//0oAA///zgAD///iAAP//q4AAiwj8IgZ2i5yRH3CPBYdahVd/VgiphgWf25iXwosI3wavlXlsH/xGB4s4eoY7iIWFi3aRhbyMr4zCi8GLroq9ipGRi6CFkTuOepCL3gj4QwetlZ2vHvcTBtGLdHQf/EkHizj///QzNIdRh4WFi3aRhf8AKTM0jP8AGZmYjLaLsov/ABGzNIr/ACoZmIqRkYughZH//80zNI+Cj4veCP8Ao+ZmB4v/ABUZmpT/AAxMzJP/AAizNLH/ACVMzP8AJpmY/wAVszT/ACdmaIv/ABRmaIug///y5mb/AAuZmP//6Rmalf//7DM0jf//5MzMi20I+ywHizmBh1eGhoWLdpCFtYyfjLOLtIuhiraKkJGLoIaRU5CAj4vdCPcpB4vC///8TMz/ADCAAP//6LM0/wAegAD//+8zNKH//+DMzJdoi///zuZoi///0BmYfk5H///8mZj///xMzP//+Zmc///1szSLmQgOTPt8rvdPqnie9wSt93OyEuTWUcWJ2PdM2xPcgPc49x0Vi/eR93+M+yr7kZx7BZ2PqZKWiwjMrEUrJElOYB8T2YBii3CuhKGDo32VdIsIdoB5eWvGUd/3Cdzx9wXvQN8xH/cb93AFnKWQl4uPi4+FjYSLiItohW6LCBPagPuP9y8GUXeLeAU/e2NIiYqKiB5sB4iMio4eE9yAzPvBBhPZgESlb7oeE7yAlouhlJOOCBPcgIuV///8gAD/AAMzM///+oAA/wAFzM0IhQZ8gpnxHw5C+21294Cs+AO3912opXcB9wHW92jZA/cB1xWLbv//9jMz///0zM3//97Mzf///TMzCHOJBYb///+Zmon///1mZouGCIt0jIkFvYyfjLKLtIufir2KCI2Ni6IFi5CH/wACszOH/wAATM0Ic40F///eszP/AALMzf//90zN/wALMzOLqAj3lQe/wayWpYu4i8NXi/sZi/uORyQiQf8AAEzN///1TM3/AAOzM4OS///6szP3DcD3C/cUi/eli/dEO70+iwhdi2d4WF0I92IHzI6zix6Sh46CHv//5uZmgf//upmafv//14AAiAiNcwWLiP8AAszN///+MzT/AAMzM////8zMCKuJBZ+VfkofDmF/qnas9/uy94WnEp33KUDW3MVcy8XKmcgTdMDn+HEVcIB2Yx4TeMB5hn+DH34HhoyKjx4TdMDQ+84Gi27///ezM///9OZm///dTM3///0ZmghziQUTeMCH////szOI///9TM2LhgiLdI2JBYvTja6zz4mLHo2Ni6IFi5CH/wACmZqH/wAAZmYId40FE7XA///hTM3/AAMZmv//9LMz/wAK5maLqAj4QAeLrJCqmqqiua2kvIu5i7Vmi1WLZXt1XWRka3Zmi2GLVv8AJxma///bGZr/AD3mZv//1eZmCL1pu2mLRotJWXxsi3OLdJV6nQgTssCHkIiSi5UIn4Kcd3t+gHxmtVTe58HQ0h6L4lSwXKsIE3XAPL98pIupi7Ghn6ajqqW0sou9i7tgySKLbItrhm17CPsB///F5miJ//+cGZiLYQgO6X+n+CCpErumesn3Hc64yU2m90bOE8v4BfcgFY9ajliLYZWNk4yQi5KLkYqRiqWEn4eui7eL7ayL6ovbTrA6qQgTzVWffZ6Ls4u8raCxi6CLwnugOQiljAWKr4ithatrm2uUWYs9i1RXi0yLQKx11GvbaZ5vi2CLXV5saosIZot6nYGWCBPLdqN/uoikCBPp+/CKFY9ajliLYZSNlIyQi5KLkIqSiqWEo4eui7qL66yL6ovbU7A6qQj//8kZmv8AFEzM///x5mb/ABKzNIuzi8Gtm7GLoIu+e585CKaMBYqvh62Fq2ybcJRZiwgT2UFQV0wfi0CsddRr/wBOzM3//92AAP8ADjMz///kgACLYItcYW1oi2aLdZ2BlggT6XSigbuIpAgO9/SBr/jqrRKm/wAggAD///eAAP8AR2Zm/wDtmZrfS/8AIIAA/wBWgAD/ACCAAP//94AA/wBHZmj/AO2ZmN9L/wAggAATwYD/A2KzNPkLFf//xjM0k/8AAhmYnv//nkzMi///pLM0iyhIiyGL//+i5mb/AELmaP//z8zO/wBNgAD//95MzMr//+SZmv8AZZmY///tMzKL//+NMzSLOv//0szMYf//sDM0iwgTwoD//6KAAItP/wAqgAB1/wBjgAD///OzNI////VmZv///hma///2Zmb///rmZo8+j3GXWsqLp3T/AFizNIv/AHjMzIv/AGCAAOeL8Yv/AF8zNEq7//+35mj/AB7MzAgTwUD//88ZmP8AFMzM//94Zmj/ACMzNIvti8j/AC2ZmL7/AD/maIv/AGEZmIuqTZ9J/wALgAD/AAAzNJf///7MzJSSCP///IAAu4en///1szTACPxsFvciChPYAPcjChPoAPckChPUAPclCg5G+0yz9y92+CSyAeTa94jbA/c8+EEVsgfMj7OLHpKHjoIeUf//5bM0BYX///xMzP//92Zmif8AAJmahP8AAhma///pMzT////mZv//9szMi///rRmaCF3////mZgV9h3+DH34HhoyKjx7G+9IGi3mJcI2Bj3qagauLCLGBt7Ef99L3YAf7JftokoIFm46cjJiLCNrASUAvSTdZdF2DrB+LmJWVi54IoYGWdXp6dnlMrGXe5/cF2vcqHovYZN77EJMI9wz3QQWYpJKYi4+LkIOMhouIi2qGbosIDvcTf9L3tbqDvnKy9xx2zrASssD3UKK+tn6z92i+E68g9xH3FxVysoO5i5+L0L3dzouhi5t/lH0I+237ShUh4DbyHvcyi/cv9yKZ93kIE9+gmoKeiZ2LCKPEqNeleZd5en1+ch+LgY+AkIGPhI6Ei4aLhoiIg4uAi32TeZVtnWSgXIsIPGpaU2OhgJ6dnZ+gH4udgpKDkoKRg5GLmouYmI+ci7aLqXejeIX7GEf7S/tVi1aLZqFxpwj3lvhZBROvYJafmaqLlwijd6FoVWhsVx6LhYyDjIQIoY0Fi4+KkIuPCKmboaefnHx6Hot7gnuBeAhH+woFhI6DjYOLCC37IUj7VB8OcIms9yCt9593AfH0FfjVCub7hRX41goOM4ms912s9zisEvcB2vdA11PiE/j3UPgYFaqSldC3v4BIT25xSh49BmoE2QYT9Oai///SGZr//8nmZl97UiX//77mZv//9xmambAfZDkVqYu/icOL9xmLusyLyYvMardFmwgT+LOdq7iLsovDccH7JYtvi2CJXYtgi3KMYIyFhYt2kYXIh5aHizgI+2wHiziAiE6GhYWLdpGFtYyljLeLCA4kgbH4LawBsOL3uKkD96iBFfjXCg5tiaz4IqwB9wHa95PiA/dQ1xX42Apj+BQV+NkKDvsXi6r3Vqv3PqwS9wHa9xKnu6aFpxP894n3dRX42goT+vjbCg77HYms90er902sAfcC2vcSp7umA/cC9w4ViziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo+Aj4vd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kJGRi6CFkXWKeYpxi2aLc4xmjIWFi3aRhcGHkH///+uzNFgI//+VTMz7oAWKiImIiIuJi4qNiY8IDvddlHb4TawB/wKMmZj3/RX//5ZmaPu2//+agAD3vQX//++Zmrv////mZpTAj5GRi6CFkWaKb4poi2iLe4xmjIWFi3aRhb6H/wAHszT//+LMzP8AEeZm///TMzQI/wACMzT///iAAP///P/+///yzMz///szNP//8bM0CDf7e///nOZm96kF///vGZq8ipq7jpGRi6CFkWaKbIpni2WL///oMzOM///lzM2MhYWLdpGF/wAvGZr///szNP8ADIAA///2mZj/ABOAAP//yzM0CP8Ae+Zm++MFj4GXbp2LpIv/AAfmZp//AAcZmp8I3/eBBf8ACWZm/wAZ5mb/AAIzNIj/AAlmZv//5hmaCN/7fgWQfZVxqouli5alkJkI/wB1gAD33QX/AA6ZmP8AKOZm/wAS5mj/ABwZmr6OkZGLoIWRcoqCimeLZYtujGaMhYWLdpGF1od/bv//85mYaAgOYYmo+CqoAfdu+EMVnI0Fj/8AAIAAj/8AAoAAi5AIi52IjgWLMoltbVSNix6JiIt4BYuHk////Zmakv///2Zm/wAlszOI/wATMzNz/wAeGZpfCOj7HAWOh4yJi4iLiIqJiYgIMfsIBV5R///mszOG///nTM2I///2GZr///7Mzf//+uZm///9MzOLhQiLeo6JBYu8jaquw4mLHoyNi54Fi5CJ/wACTM2G/wAAszMIfI0F///fszP/AARMzf8AC5ma/wATMzP/ABCzM/8AGIAACM/rBZCSjo+Ni46LjomPhQjKNQX/ABsZmv//2szN/wAMMzL//+2Zmf//3LM0///6mZoIfokF///7GZr///8zM////OZm///9zM2LhgiLeI2JBYvPjbawxYmLHo2Ni50Fi5KG/wABGZqB/wAA5mZojv//8LM0/wADmZr//9BMzP8AQ2ZmCCr3HQWJjoqNi46LjoyMjY8I5fcHBbS9/wAOTMyW/wAoszSOkv8AAIAAkf8AAIAAi5IIi56JjQWLV4lpaliNix6HiIt4BYuGj////oAAj////4AACJyJBf8AILM0///8MzT///SZmP//62Zm///uszT//+hmZghFKQWHh4iIiIuHi4iPh5EIS+sF///igAD/ACsZmv8ADDMz/wAA5mb/ABlMzY4IDvsAiaz4IqwB92XaA/8BUbM09/4V+O0KDvsii634HK0BtKUD9wb4YBX//9/mZv8AABma/wACmZr/AAqAAP//7oAA/wADZmb///2Zmov///5mZv///2Zmi////Zmail6GYYJaCKWIBaDTraGoiwj3Jgb/AA/mZov///YzNP//8TM0///75mb///nMzAj7m/wOBYeFiIaLhQiFj4eWHvfrBo+qlrqcxQhwkn5uBXRWenBRiwj7Cwb//+fmZov/AACzNJb/AAlmZpkI94z3/gWaoI+Si5OLkYWPe4uAi3qIc4YIDjwO+5X3YMcBs/eWA/ej92AVKgoOcIms9yCt9593AfH0FfjVCub7hRX41gqb968VZAoOcIms9yCt9593AfH0FfjVCub7hRX41gqn96kV2woOcIms9yCt9593AfH0FfjVCub7hRX41gqn96gV9yoKDnCJrPcgrfefd9DAicIS+CamE+Tx9BX41Qrm+4UV+NYKE/Ta900VsgoT7LMKE/S0Cg5wiaz3IK33n3fV6gH3MenW6QPx9BX41Qrm+4UV+NYK+wv3TBWUCvc9FpQKDnCJrPcgrfefd7er9asB91uz67MD8fQV+NUK5vuFFfjWCpb3iRW2CjNWFdMKDs6JqHCt90qq90etcKgS9+DU9KXJpHilE3cA+I2tFUQGen+Rnh/3MMgHpYuTgZB2CI91BYyJjYiPiwidi42NBYijiJ+LpIujj6eNogiNioyJHnoGiIuJiYqHCIZ2BYZ3hH9wiwhO9zAGnJWRnh7RBsuLnlaWZgikjwWEsYSyirYIEy6AiY0FEzaAi0SJbR77HQYTLoA/M42LHxM2gImJi3QFE66Ai4qL///9szSR////TMz/ABqAAIj/AAaAAIWLf4tvUvsGe2tsT102d2uDff//7YAAev//3oAAiIf///+Zmon///1mZouICBNmgIt2BROmgIyJBRNmgIu0jZ4eE6aAnt2Jix8TZoCMjYugBROmgIuOiI2IjAiBjQVtlH+OlJ0I0/ckBY+TkZCeiwj3BPsvBot3///2mZr///ezM///4GZm///8TM0IeokFh////4AAiv///YAAi4kIE2aAi3UFE6aAjIkFE3aAi8eNsh73hAaMq5Ozl7wIcY4FfFl0Y06LCPt59/sVEy4AlqOYm5WLCJiUgGwf+yQqB32F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XYNclP///MzMlP///0zOlP8AAOZmn9OXn7iLCLYGqJVudR/7kQeLOICIToaFhYt2kYX/ACPmZv8AAOZm/wAYTM3/AADMzf8AIczN/wAAMzMIY///oBmakYUFm5CVjJ6LCA4hiaz3X7L3La0Bo6b3M9r3KaYD+An3pRU38Aail6inHqwGtouYd59D/wAKMzT///3mZv8ACTMy/wAAZmb/AAeZmv8ABLM0hLuKuIu3///3szT/AALmZv//95mY////gAD///ezNP///ZmaiYWCg3uLCPvVBnuLgpOJkf//97Mz/wABmZr///eZmv///2Zm///3szOKi1+LXYNclP///MzMlP///0zOlP8AAOZmn9OXn7iLCLYGqJVudR8lMWTl+wQHiziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRTo+Aj4veCPcE3wcOgIGs+CqsuKv1qwH3ANqYs+uzyroD97T5GRW2CjNWFdMK94P7khX47AoOgIGs+CqsAfcA2veQugP4cPkXFfcdCvsYkRX3Hgrq+8sV+OwKDvsii634HK2SdxK7pROQ95H5NhXPChPQ+x/7ahX49goTsPj3Cg77Iout+Bytknfv7xK7pfcF7xOc90/46xV1ChPcQvsfFfj2ChO8+PcKDvsii634HK2Sd/dldxK7pROY92f4lRX1ChPYKlYV+PYKE7j49woO+ziLrfflnLSsm9MB9wTa9zi3A/fn+LoV9gqz/LoV+OEKDiGJrPgfrfdTdwGjpvcz2vcppgP3d/iQFfUKyfwWFfjrCg4h+3aj2t2yrPgfrRKjpvcz2nqy9xOmE/v3jWIV9xEKE/2z9zcV95AHopeopx6sBraLmHefQ/8ACjM0///95mb/AAkzMv8AAGZm/wAHmZr/AASzNIS7iriLt///97M0/wAC5mb///eZmP///4AA///3szT///2ZmomFgoN7iwj71QZ7i4KTiZH///ezM/8AAZma///3mZr///9mZv//97Mziotfi12DXJT///zMzJT///9MzpT/AADmZp/Tl5+4iwi2BqiVbnUf+5EHiziAiE6GhYWLdpGFtYyljLeLtoukiraKkZGLoIWRCE6PgI+L3ggO+1/7dqPa3aisinb4SqwSsqt10O+yntlbphPrgPfd+FQV+OcKE92A+OgKE+uA+OkKE+tA+OoK+xr8fRX3EQoO+7iJrPgirODvEuPvP9oT8OP46xV1ChPo8vuZFfjfCg6Vf8H3rLbkdvCyAbXRksL3ZKbAswP4PPfWFaGbfHNDSvs9+xn7F3b0yr+3x7sf9gaamJuZkoeRfx8tBmZ5qL2pocfUH8mLsVmYWAimkAWFrYS/i6dyi2ygYYv7CYtNPItKi2+ScqJtVmNVRotCi/sA3Ef3D4sI9xWL9wTcmveRCMoGmpibmZKHkX8f+yEGfH57foOPhZcfDjKJqPc/q/dbqgH3N/dRFZCUmoumiwjlBqaLlYmNgQif+wUF/wAFTMz//+AzM////WZo///4zM3//9ZMzIUIhIoFh4qJiYuICIt2jYkFi8uNp6nOiYsejY2LoAWLjoj/AAKzM4f/AABMzWiOe5GCtghH99gFh57///3MzP8AB7M0/wA4MzT/AARMzI7/AAAzNI3/AALMzIuOCIufio0FVopBil6LXYtsjGuMCIiJi3cFh46JkR6sipSHi3iLayv7mXdYgG97g3CIh////5mahv//+2Zmi4gIi3iNiQWLw42nqryJix6NjYugBYuOiI2HjAh/jQVtkP//+LMz/wAEgAD/AAPMzf8AEIAAi4v/ABrMzf8AYuZm/wANszP/ACMZmgjm94QVoYv/ABCAAP//92Zm/wAHgAD//92Zmgij+xQF/wAD5mZ2///xGZqEeYsIOAZvg42UH4uLrfcHmLOSoJGXnYsIDvu09/qr93KkAaq/9wHBA/dU+IoVlwq2+yQVmAoO+773+qX3bKrRoAG+vPcLwQO++R8V+KQKvEIV+KUKDvvN9/qrtnf3WaYBpsH3CsED9zH5ERX4pgoO+7P3/qSHnfdgpdGgEqjB9xG8E7z3ZPg2FfinCrz7EhX4+AoTfPj5Cg77tPf7qrZ39KfNpAGmwfcGxAP3MfgaFfh0CrH3MBX4dQoO++r4AKL3Sqj3CKQB07wD0/g1FYt5///6zM3///mAAP//6zMz///8gAAIf4kFiP///4AAif///4AAi4cIi3qNigWLtIyho8GKix6MjIucBYuPiP8AAMzMif8AADM0CHaNBf//7MzN/wABzMz///kzM/8ACDM0i50I9yzGB5GTjZEfnQeNiYyIHkeVBuqjlp8enYuVhJN3kICVg5eLl4uWlouXi5aEln6UfJZ7kXSLCFdWXisfbAaAiISGH30HiYuKjh61Bg77rPd/qe22u6H3H6ESnLRyvV2w9wm+kK0T9YD3nvjsFZeWlZmXfphyH3WLeYJ7eYKReJRui1eLVmmLUotqnHicewgT84D4+goT+YD4+woT84B6eJClHxP1gPj8CvtP+30V+P0KE/mA+P4K9wT3QxVNb4d1HhP1gPj/Cg77qfgAovdxotGgAcK8A8L5HxX7gAeLdv///0zNiP//57MziAiDigWH////gACL///9gACLiQh5B4v/ACUzM4z/ABfMzf8AGJma/wAmZmaKix6dB4uPiP8AAMzMif8AADM0CIOMBf//7rMz/wACMzT///hMzf8ABEzMi/8AFIAACP8AT2ZmB/8AAczN/wAAZmb/AAGZmf8AADM0/wABmZqLmouSgJSACLhLBZd6jYeLhQiLe42JBYubjKGjsIqLHo2Ni5sFi46H/wABmZqH/wAAZmb//9+AAI7//+6AAKKElQhM6AWJjYqOi46LjYuOjY0IsLUFoaP/ABuAAJP/ABiAAI6N/wAAMzSP/wABzMyLjgiLnImMBYtjinN1bYyLHoqKi3oFi4mN///9TMyO////szSriHt6g4P//9+AAP//2zM0///rMzP///CAAP//5UzN///0GZgI/wCUMzQHtY2lix6QiY2FHnuEXYNxiQiMeQWJjYqNHqCKBZiRhGEfDvsC+ACi92igeq0Szbz3BLuGkPa8E7r3B/jeFf8AGzM0jf8AEMzMix6QiY2FHhPae4Rdg3GJCIx5BYmNio0eoIoFmJGEYR/7GgeLdor///1mZnP///yZmgiEigWG////TMyL///9szSLiQh5B4v/ACUzM4z/ABfMzf8AGbMz/wAoTM2Kix6dB4uPiP8AAMzMif8AADM0CICMBf//8IAA/wABZmb///aAAP8AA5mai6EI9yMHE7qeoqChoIsIqp96WB/7DAeL///pTMz///qZmv///Zma///rZmb///4ZmgiAigWI////szSK///9TMyLiQh5B4uyjKT/ABgzNP8AJczMiosenQeLjf///+Zm/wACMzT///sZmv8AAMzMCIWMBXj/AAMzNIT/AAKAAIv/ABVMzAj3FgeLkf///8zM/wAFszT///+AAP8ABUzM/wASGZr/ABWAAP8AE8zO/wATgAD/ABPMzIsIqZ96WB/7DAeLdIX///2zNHj///5MzAiAigWH////mZqK///9ZmaLiQh5B4v/ACeZmoz/ABlmZv8AGDM0/wAlzMyKix6dB4uN///+5mb/AAJMzP///Bma/wAAszQIhYwF///tGZr/AAMZmv//+OZm/wABMzKL/wAWszQI9xYHzm2kXh7//9xMzIv//9xmZv//3Zmc///xszT//+7MzP//9hma/wAk5mj//+azM/8ADrMw///czM2LZ4tqaH16CA77tPf7pPd4pAGixvcgxgP3LPkRFTJjQERLukfc/wBTGZr/AC7mZtHM/wBIGZhm/wBG5mgvH9H7NhX4dwoO+7b3gqL3AKX3YKB3qhLDvPcLwRPcw/i5FfuYB4t3///9mZr///wzNP//6WZm///8zMwIhIoFh////2Zmiv///pmai4kIeAeLsIyjpbOKix6dB4uPif8AALM0iP8AAEzMCICMBf//8Rma/wABZmb///XmZv8AA5mai6EI7weZf5+Dn4sIzMHH1c9jx1Efbov//+OAAG////CAAHkIiYwF/wAbMzSN/wAQzMyLHpCJjYUeE+z5AAq8MhXtBxPc+QEKDvuz94Ki9wCl92alAajB9xG8A/dk+DsV+KgKqcoVcnMFfJxxlG6LCD5mP0s+v17NH6KLnpaemwggB4t1///1Zmb///xMzP//8Zma///+szQIgIoFiP///7M0if///0zMi4cIeQeLs4ylo7CKix6eB4uNiv8AAWZmh/8AAJmaCISMBf//5+Zm/wADgAD///8Zmv8AA4AAi58I9+cHkYmOiB6Hi4WGh4gIDvwZ9/qu92WoEsW7ZbET4PX47hX5AgoT0PkDChPg+QQKDvuo9/qugZ33Y6ISwbz3BLwTuPec+EwVi/dSiowFi32Kgv//5kzN///XszOMix6Kiot6BYeOio4elQaclId1H/s4B3h1dYh2iwhtd5u+H4v3PoqMBYv///KZmor///dmZv//58zN///aMzOMix6Kiot6BYmMiI8ekgaeipGKi3MI+xgHSKlyuB6wi66bmZwIjYuJapuLBRN4+PkKDvut+PSiAZf3tgP3HfgHFY6EkIWQi5KLlY6Plgjh91wFmauWj5iLCI+PjI8fi5yKjAWLdYp4dmiMix6Kiot6BYmNiI2glYiAHouGiYWHgghJ+ypK9y0FiJKJkIuQCJWSj5MelgaNjo2OH4uciYwFi2eKeHhkjIseioqLegWHjYqOHp+L/wAE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hF2DcYkIjHkFiY2KjR6gigWYkYRhH/uAB4t2///+mZqI///oZmaICIOKBYeLiIkfeQeLsIyjpbOKix6dB4+IjIkegIwF///uGZr/AAGZmv//+OZm/wAEZmaLoAj3HQeeoqChoIsIqZ96WB/7BgeLdv//+czN///7szP//+0zM////kzNCICKBYeKiIkfeQeLs4yko7GKix6dB4uNio2HjAiFjAX//+wzNP8AA0zN///5zMz/AASzM4ueCPcQB85tpF4eZ4toaH17CA78JfsDqPdhoMjFEtPFWbsT8PD3mxX4ZAoT6Kb7vxX3HAcT8PhlChPo/wAgZmb///6AAP8ACpma/wAEszOL///KzM0I+wEHi2J+iGOJhoOMfI+FqYz/AAqzM4v/ACNMzYupi5uLqYqPkouZh5MIaY16jou0CA78GPtpnvfRoMnEEou7ssdYvBP49wn3mxX3fwoT9Hb7UhX3gAoT+PeBCg77qfsEovdxotGgAcK8A8L3QxX7gAeLdv///0zNiP//57MziAiDigWH////gACL///9gACLiQh5B4v/ACUzM4z/ABfMzf8AGJma/wAmZmaKix6dB4uPiP8AAMzNif8AADMzCIOMBf//7rMz/wACMzP///hMzf8ABEzNi/8AFIAACP8AT2ZmB/8AAczN/wAAZmf/AAGZmf8AADMz/wABmZqLmouSgJSACLhLBZd6jYeLhQiLe42JBYubjKGjsIqLHo2Ni5sFi46H/wABmZqH/wAAZmb//9+AAI7//+6AAKKElQhM6AWJjYqOi46LjYuOjY0IsLUFoaP/ABuAAJP/ABiAAI6N/wAAMzOP/wABzM2LjgiLnImMBYtjinN1bYyLHoqKi3oFi4mN///9TM2O////szOriHt6g4P//9+AAP//2zMz///rMzP///CAAP//5UzN///0GZoI/wCUMzMHtY2lix6QiY2FHnuEXYNxiQiMeQWJjYqNHqCKBZiRhGEfDvxG+wSi986gAcK8A8L3QxX7gAeLdv///0zNiP//57MziAiDigWH////gACL///9gACLiQh5B4v/ACUzM4z/ABfMzf8AGJma/wAmZmaKix6dB4uPiP8AAMzNif8AADMzCIOMBf//7rMz/wACMzP///hMzf8ABEzNi/8AFIAACPeNB7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhHw77AvsEovdooHqtEqHoWrz3BLv2vBOu9wf3AhX/ABszM43/ABDMzYsekImNhR4T1vkHChOumJGEYR/7GgeLdor///1mZnP///yZmgiEigWG////TM2L///9szOLiQh5B4v/ACUzM4z/ABfMzf8AGbMz/wAoTM2Kix6dB4uPiP8AAMzNif8AADMzCICMBf//8IAA/wABZmb///aAAP8AA5mai6EI9yMHnqKgoaCLCKqfelgf+wwHi///6UzN///6mZr///2Zmf//62Zm///+GZoIgIoFiP///7Mziv///UzNi4kIeQeLsoyk/wAYMzT/ACXMzIqLHp0Hi43////mZv8AAjMz///7GZr/AADMzQiFjAV4/wADMzOE/wACgACL/wAVTM0I9xYHi5H////MzP8ABbMz////gAD/AAVMzf8AEhma/wAVgAD/ABPMzv8AE4AA/wATzMyLCKmfelgf+wwHi3SF///9szN4///+TM0IgIoFh////5maiv///WZmi4kIeQeL/wAnmZqM/wAZZmb/ABgzNP8AJczMiosenQeLjf///uZm/wACTM3///wZmv8AALMzCIWMBf//7Rma/wADGZr///jmZv8AATMzi/8AFrMzCPcWB85tpF4e///cTMyL///cZmb//92Zmv//8bM0///uzMz///YZmv8AJOZn///mszP/AA6zM///3MzNi2eLamh9eggO+5H7A6j3YaB6rRLOu/cEuxO493dnFYtiiYhpiYeDi32PhKmMkouji/8AI0zMi/8ABbM0i6mKj5GMmoaTY42Djou0CPQHzm6kXR7//9wZmoto///dGZp9ev8AAGZm/wAXszP/AAGAAP8AFTMzi4uLkImNhYsIE9h7hFyDcYmKg4yEj4X/ACBmZv///oAA/wAKmZr/AASzM4v//8rMzQj7AQeLYoOIY4mGg4x8j4WpjP8ABbMzi/8AI0zNi6OLk4upio+Si5mHk2mNiI6LtAj3CgcTuPhzCg77tvuCovcApfdgoHeqEsO89wvBE9zD1BX7mAeLd////Zma///8MzP//+lmZv///MzNCISKBYf///9mZor///6ZmouJCHgHi7CMo6WziosenQeLj4n/AACzM4j/AABMzQiAjAX///EZmv8AAWZm///15mb/AAOZmouhCO8HmX+fg5+LCMzBx9XPY8dRH26L///jgABv///wgAB5CImMBf8AGzMzjf8AEMzNix6QiY2FHhPs+QAKvDIV7QcT3PkBCg77s/uCovcApfdmpQGowfcRvAP3ZFYV+KgKqcoV+KkKDvvx+wOi92WzZaASqehavBPI9xHxFYmMBf8AGzMzjf8AF8zNix6QiY2FHhOw+QcKE8iYkYRhH/sbB4t4///+GZr///tMzf//6OZm///+szMIeYoFhoqJiB95B4u4jKeouIqLHp0HjoiNiR55jAX//+zmZv8AARma///5GZr/AAPmZoufCPcSB4uTj5SPkJuimpeSi4+LkImPh5GEk4eXiwidlpScnYGYcB9si3BpenIIDvvq+wqk93mkEqehfLviwW+iE+ineRX3jAoT1GmZgZSLo4umoJiki56LrYGZUQiijILWBYCSZJVsi1qLXmuLYYte/wAfGZr///BMzf8ALeZm///sszMIE+j3jQoO/Bn7Cq73ZagSxbtlsRPg9fcSFfkCChPQ+QMKE+D5BAoO+6j7Cq6BnfdjohLBvNHmWrwTtPecZxUTuIv3UoqMBYt9ioL//+ZMzf//17MzjIseioqLegWHjoqOHpUGE7SclId1H/s4B3h1dYh2iwhtd5u+H4v3PoqMBYv///KZmor///dmZv//58zN///aMzOMix6Kiot6BYmMiI8ekgaeipGKi3MI+xgHSKlyuB6wi66bmZwIjYuJapuLBRN0+QYKDvut9xiiAZf3tgP3HSIV+KoKDvsq9xiiAfcT9x0V934KDvuV+4K0992jAZz3ygP3JvceFYubio0Fi2GJbnhnjYseiYmLegWJjoiOHqaL/wADmZr///ZmZv8AC2Zm///mmZoI1/s9BZB+kHuLhIuFioaIg3tleGuCi4WLhpCFkYeQhY6CiwiBeIJ5dKqBlx+3i6Kxnre99w2mx63Rk52XnqOLCJCNjY8fi5uJjQWLcYl6dWGNix6KiYt6BYmOiI4ejgaZlomCH4uIioSJhwhH+ylJ9ysF///+MzP/AAQZmv///szN/wAF5maLjQiTk46djo+Njx4O+9X7BKn3ZKgBoqED0fcvFfirCg74z/cMAfu592gD+235RxX//93Mzf//9GZo///of/////BMzP//7bM0///uTMwI9y5MBaCCmYiTi5OLkpKLk4uSh5GAkwgO+M/3DgH7vPddA/sx+UkV9xcKDvuR94cD+wX5FhX///CZmv8AB7M0///2Zmb/AACzNH3///eZmGxpamhmb42CjoWUhbGcq5ywpqxyrXmyef8ACRma/wADzMz/AAQZmf8ACBmc/wACzM3/AAkZmAhnpmatba8IDvig9wcB+8b3iAP7YfigFfQKDvi0v8h3Afu9p/dspwNy+SUV7woO+Oz3JwH79veRAyb5VBX/ABAzNH//ABXMzG4egIuEh4aDCP//xLMz+wEF///9f/////tmaP///szN///8mZiLiIuDk4aQi46LjoyNjQju3wWPj46Si5QI+xeQFf8AF0zM///pszP/AA6zNP//8EzNHnyLhIeGgwj//8mAAPsCBf///hma///8MzT///9mZv//+szMi4mLhJGGkov/AAWZmouP/wADgAD/AARmZo8I4/8AUIAABZCPjZKLkwgO+On3KgH79v8A+oAAA/v2+VQV914K9xeQFfdfCg748b8B+76n92ynA/u++LQV91oKDvlOqgH7z9H3A9AD+1L5bRX3yAoO+IuqAfvh1OvUAzD44hX36AoO+VLrAfwR6+jrA/tU+YIVtQr7URa1Cg75ZHbFowH7i7ihpZu/AzX5aRX4HQoO+8T44PMB6fMD6fkUFfIKDr3K+dkVi3SLfIt6i3ydi7GLi5pli4ucsYuLmmWLi6Kxi4uaBWWLeYsF2xY2nf8AOrM0B/8AFxmaeP8AAxmZ///8MzT/AADMzf8AAJmY/wAAzM3///9maP8AAxmZ/wADzMz/ABUZmv8AEUzMi1Kdi4vgeYuL///3Zmhy///rgABw/wAWMzCL/wAG5mgFLfsOFfdG/IsGi3SL+1T7RouLc/dGi4v7ZvtGi4tz90aLi5Oii/dpi4ui+2mLi/dfBfdSl6J/9zij+zj4NXSX+1L3VPgNo/wNBqj3Z6NNB/sp5QaLoou692eLi6P7Z4t8i4OLi/sg+0aLBfgb/XoV+1L3VAaLoov3UvdSiwUO+zF/rPiergGx2Pdl1wP3cfizFfjDCv8AUIAA//+wZmYV+MQK/wCbgAD/AdIZmhX//+gZmv8AEjM0///kgAD/AAsZmP//5GZmiy2LMvsFi/tPi///q4AA/wAV5mb//7CAAP8AJbM0///JmZoI///dZmb//6xmZqyA/wAamZr/AECZmgX/ABqZmf//5czMq///8Jma/wAjzM2L1Iv3AtiL93KL6XXXYcKI/wAEGZj///yzMv8ABAAE///8szT/AAPMzAj/AB6Zmv8AShmYa5YFDvu9t94Dt/8BRLM0FYv//9lMzI///zlmZvdk//9lMzSV/wABszKT/wAGAAGO/wAG5mZq/wAgszP7Cf8Adpmbi/8A4jMzi/8A4jM09wr/AHaZmKuq///8mZr/AAjMzP//+czMkf//9Jma/wAAszT7C///qEzMLv//cGZoi/s0CA77vfc/3gP3kv8BRLM0FYv/ACazNIf/AMazNPtk/wCazMyB///+TMyDhYj///kZmKz//99MzPcJ//+JTNCL//8dzMyL//8dzM37Cv//iWZla2z/AANmZv//9zM0/wAGMzSF/wALZmb///9MzPcL/wBXszTo/wCPmZqL9zQIDvuDUP8AGczN+WP/ABnMzAH3AM4D9wBQFfdoBpH/AAUzM4v/AA9mZ4X/AAUzM/se/wAJgACE/wAM5maL/wBKzM0I/wINgAAHi/8ASszMk/8ADOZo9x3/AAiZmJH/AAUzNIv/AA9mZIX/AAUzNAj7aAYO+4P//8XmZv8AGczN/wLO5mT/ABnM0AH3Sc4D94z/AshmaBX7aAaF///6zMyL///wmZiR///6zMz3Hv//9oAAkv//8zM0i///tTM0CP/98oAAB4v//7UzM4P///MZmvsd///3ZmaF///6zM2L///wmZqR///6zMwI92gGDvvS//+0szP/ABSZmv8BbzM0/wAM5mb/AXEAAv8AFJmYAfXTA/dG/wJOTMwVi/8ATkzMq/8AEEzQsf8ACYAAkf8ABTM0i/8ACjMwhf8ABTM0Jv///WZoYv//4eZoi///nRmYCP//YczMB4tge///1P/+U///8jM0CP//8xmaB8H///TMzJ3//9pMzov//8uAAAj//23MzAeL//+QMzSz///lTMzx///+TM2R/wAFMzOL/wAKMzSF/wAFMzMIX3H/ACzMzf8APeZmH/8AiLMzB4v/AEkZmIL/ACQZmlH/ABWAALz/ABIZmp3/ABczNIv/AE5MzAgO+9L//7PMzf8AFLMz/wFw5mb/AAzmZv8BbzM0/wAUmZgB6tMD6v8AMIAAFYv//7GzM2v//+/MzWX///aAAIX///rMzYv///WzM5H///rMzfD/AAKZmbT/AB4Zmov/AGLmZgj/AJ4zNAeLtpu2w/8ADczMCP8ADOZmB1X/AAszNHn/ACXMzIv/ADSAAAj/AJIzNAeL/wBvzMxj/wAamZgl/wABszSF///6zMyL///1zNCR///6zMwIt6X//9NM0P//whmYH///dzMyB4v//7bmZpT//9vmZsX//+qAAFr//+3mZnn//+jmaIv//7GzMggO+8eTdvjG9QHm9QP3JH4VkgrA+PsVkwoO+zR+rPhYd+31Ernew/VFrM7PE/b31dUVrQoT+m34pRWuCg77F/hBdwH3D/eBFZkK9zgWmQoO+xf4QXcB9+n3gRWlCvs4FqUKDvu7+EF3Abn3ZAP3D/eBFZkKDvu7+EF3Abn3ZAP3RfeBFaUKDvuV96/HAbP3lgP3o/evFSoKDvvX+3Gv+Qd3AfcH1gP3BffRFfcWCg5+iaz3+7L3dKd5rhLl2vdb2hPc+FP3DhX3oOcHlZmPlB+fB4+IjYYe+wDABoufjLiRrZnUpZShi6OLoH2Ud5V2lXimiwifmpqftF2sQR9mi1J1aVYIE+x+o16tO4twi3GEdn9GY2pEi/sOCFoGeYZ/gx9+B4aMio8ezvugBos4gIdVh4WFi3aRhbWMoYy0i7GLnIq2ipGRi6CFkV2Pfo+L3gj3oPdb+6AHiziAh1+HhYWLdpGFtYybjLCLuYuoiraKkZGLoIWRCEePgI+L3ghG+E4VgmeLZIp3CGP7W5QHi8+TrpGeoNu4mJqLlouViZuBmYKSe5F9lHeUd6WLjouMjI2MCA5oiaz3+7L3gKwS6dr3TfVC2hP0+Gr3DhX3Zweyj8uLHhP4j4WNhx5tf26KaIsI+1nEBou6/wAGzM3/AC3maP8ADzMz/wAbGZj/ABkzM/8ALMzM/wAiMzP/AA0zNP8AFJmai6+L/wAq5mb///IzNP8ABhma///ZzMyTWaJ8qouhi5+fi6CL/wAYGZh9/wAb5mhhpQhunVWZZYv//9IzM4v//8nMzf//7czMYv//0DM0YVqBTos9CHxaB3mGf4MffgeGjIqPHs77oAaLOICHVYeFhYt2kYW1jKGMtIu3i6WKtoqRkYughZFLj4GPi94I96D3RwcT9KqTd1gf+1kHizh/h1SHhYWLdpGFtYyijLWLtoukiraKkZGLoIWRCE6PgI+L3ggOVIms9/uy93+tAena91zaA/hY9w4V+GEHzIyzix6Sh46CHv//9DM0///7TMz//+2AAP//8mZo///oTMz///tMzHWaXZNoiwg3JEL7Oh9tWAd5hn+DH34HhoyKjx7O+6AGiziAh1WHhYWLdpGFtYyhjLSLtYuiiraKkZGLoIWRU5B+joveCPeg6AeUmY+UH58Hj4iNhh77AroG9y7KraweqYuve5hqkX6VgZeHjIeJeouHCPxNB4s4goZZiIWFi3aRhbWMnYyyi7aLooq2ipGRi6CFkVOPfY+L3ggO936JrPf7sph393une6wS5dr3XNr3RvBI2hPWAPgQ+MkVgmeKZIp2CGP7XpcHi8+QrJGeoNvBl5qLpIuke5dok3aUeaWLCI2LjouNjQgTpoD3rPxPFYs4goZZiIWFi3aRhbWMnYyyi7aLooq2ipGRi6CFkVOPfY+L3gj3eAepjcaLHv8AAeZmiv8AARmaiB4TzwBtf22KaIsI+1bEBvcuy6SsHqyL/wAozMz///QZmP8ABzM0///U5miUVZ1yq4ugi6Cdi6CLsGj/ACbmaGb/ABkZmHKcZ5Vmi0mLUWNwaAgT1oB+pGCsO4twi2iFdn5GY3FEi/sOCFgGeYZ/gx9+B4aMio8ezvugBos4gIdVh4WFi3aRhbWMoYy0i7GLnIq2ipGRi6CFkV2Pfo+L3gj3oPdc+6AHiziAh1+HhYWLdpGFtYybjLCLs4ufiraKkZGLoIWRVI+Cj4veCPeg908HpYqAYx8O93CJrPf7svdtrnqtEuXa91za91zaFA4T7vgQ+MYVg2eJZop3CGP7XJQHi8+OrpGem8erpaqLs4v/ABzmZv//4uZo/wALGZr//+YZmJF9lXykiwj38fxMFfhhB8yMs4seE96Sh46CHv//9DM0///7TMz//+2AAP//8mZo///oTMz///tMzHWaTJNoi1OLSmR6bAgT7n6eWa08i0iL///KZmb//89MzP//55ma///RszR4Z4RkizkIWgZ5hn+DH34HhoyKjx7O+6AGiziAh1WHhYWLdpGFtYyhjLSLsYuciraKkZGLoIWRXY9+j4veCPeg91z7oAeLOICHX4eFhYt2kYW1jJuMsIuzi5+KtoqRkYughZFUj4KPi94I96DnB5WZj5QfnwePiI2GHvsAwAaLn424ka0IE96Vw7mmpYupi7N7mGqRfpWBl4eMh4l6i4cI/E0HiziChlmIhYWLdpGFtYydjLKLtouiiraKkZGLoIWRU499j4veCA5pgcJcrPf7sveArBLl2vdH1lHFE7r3PfcOFfgAB/cizLCs0KhiPCaGfHAeXQaIioqIH2wHiI2Kjh4TvMf7wQZEpm+5HriLtKGxt4n/AApMzYX/AAWzM4GMcXd4g3GLCHCFqckf95HpB5WZj5QfnwePiI2GHhN6+wL3DQbrXr8iHkGLKVmB+z+KcIN2bIsIeYZ/gx+CB4eMio8etwaZiod/H/uVB4s4gIZOiIWFi3aRhbWMpYy3i7aLpIq2ipGRi6CFkQhOjoCQi94IDuB/wlasiXb4GrJ0rPd7pxK7qnrSo6vg11Wr9x/WE03Q9zH4whWL///RTMz/AArMzf//27M0/wAnzM1nCP//+2ZmBkFIW0sfi0KsbNhr/wBSzM3//92Zmv8AEzMz///rZmaLYItaW3Zmi2SLdZiBlggTJtBzooK3haSFkXiKhYWPWo5ci2GVjZWMkIuSi5GLkokIE03QhQoTlbChi8WDmDaRhZ+MkZGLr5CwjKx7/wACmZr//+uAAP8ABP/+///oszT/AAQzNP//v+Zm/wAkGZr//+rmZv8AK2Zmi/8AM7M0CMPMvt7xvVIyY3ZUSIiKiogebAeIjYqOHsz7wwZEpW+6HriLs6Gytwh5nAVxd3iDcYsIcIWpyR/3k+kHlZiPlB+fB4+IjYYe+wGLhuoF///6TMz3Af//xLM0zPsRiwj7DEVHQx8O+Bmh97kV+Gr8avhq+Gr8avhqBTP7lxWLfI6Fj4aPhY6Fi34IdHZ9dXpxlq7GydP3B/TKTDEei0heU0Zf///qMzT///IZmv//1szM///h5maLQwhfB4SEh4OEhY+SHrkHi7b/AAGZmv8AOmZm/wBAZmb/ADuZmrOwn6uLuwjGYstSVGJwbh6r/KgVpaGhpqahdXFwdXVwcHWhph4OixT45xV/l/hBmJ2X65XOmKmVBvuClgd/l/hBmJ2X65XOmKmVCPuClgkeCgOWJf8MCZEMCqgKqJCQkJAMDNoLvKmRDA0cAEgTAt8CAAEAQgBUAGsAfQCQANsA7QFWAWoBnAGyAeACAgIZAl4CfQNAA7AEJgRjBM4E6QVfBZwFrwXEBeMGGAYfBlQGgAdyB4IHkgfRB/oIhgihCOgJLglSCV0JlwnWCfEKmgrrC2YMpQysDNsNFg0rDicOiA6+DtkO+w+tD8IP4RBXEH0RBBHOEw8VCBUbFUMVcBWmFdUV7BYfFsgXERdPF3MXwhfVF/IYMxirGL4YzBjnGVAZoBq9GwMb8xxlHH8clBzqHRIdjh2bHgoeHx4zHmsekR7CH0ogPiGMIxEkSiSFJNok4CUGJX0lviXQJeImBCYkJjomvCbtJv8nESdaJ3AnnCf3KCYobiiAKL0pMylkKXAp0CncKfIqOypQKnwq7Cr/KzYrcSvKK9Ir8iwNLB8sMSxBLL8tJi2HLZAuii7MLvMvLC8/L2gvvS/lMB8wVDCLMUwxkTHLMl4ycDODM5QzsTP6NEs0XjRxNIM1CDWdNaU14zX4NmI2sTb5NwI3FzclN1o3wjfWOBw4bji/OMc42zj2OZ854zogOm46yjsNOyM7QjtkO6A7sjvMO/A8FDw4PFA8dzyPPK88wj1APVo9vz3ZPec97z4TPhk+Jj46PmE+mj7EPxBAQUCTQQ5BXUGYQctB30HtQjdCmULRQxBDQ0OBQ5VDqUPyRFBEoETiRO1FE0VuRb9GAEY8Rk1GhEaqRsFG00cHR09HeUeaR9VH50gDSB9InEjFSPdJNUl1SdpKLEsHS3BLjEuwS89L2kwMTENMfkykTL9M3E0dTUNNo043TtVPZU96UA9QSlCVUPhRSFGfUb5R4FIqUkpSlVL4U09Tq1P8VCxUiFVnVbtV0VY8VoZWmlbTVu9Xb1fWWBJYL1hxWK9ZB1lVWZFZnFoFWhlaKlo4WlNawVx2XUldXF2jXcVd6V46XltecV6rXtdfCl89X15fjl+uX8hgFGBAYGxgsGDCYONg9WEKYShhPmFUYYRhp2HIYf5iKGJBYnxijmLbYwpjTGNzZIJkqWTxZRxlOmV5Zadlx2XPZg5mR2ZcZmxmdGagZs1nHGcuZ05naGfiaCNogmiaaNRo72mDab9p3Gpraq9q7msGa09soGzSbYtt0m4UblNulm6zbsFu1m8zb0pvmG+hb8NwwHECcUVxYXGicc5zVHOTc9hz5nQQdB91jHWfdmB2d3atdsV3A3e1eGd4eniweN55Hnk8eVt5s3nWehd6ZHqQex17S3uYe9Z78nwOfDt8kny0fL980XzkfTF9mX21fdZ+TX6Lfqt+1X8Bfyx/SH9sf6F/53/zgA6AKIB5gMqBQ4FWgWGBboHqghWD5IT4hTyFgYX+hoSGoIcUh3uHwIhZiI2Iq4jOiOaJqopfioSKsIr4ixCLO4tmi5SL/YyHjLOM34z2jQWNGI0kjTKNUI1ijd2Og46LjrOPG49Fj2+Pf4+Hj62Ql5DJkS2RQpGKkdKR7JH+kkGSg5KNkqmSupLYkv2TEJPwlEiUmpTMlRqVLZU/lYCVkZXxlgOWF5YqlkKWopbrlweXLpdAl1yXcJeSl62XxZfsmA6YMJg9mHWYhZinmMGY05jlmO+ZG5ldmd+aG5pJmmOaoprOmymbWJuEm6ObwpxanIOcu5zYnPWdEp0vnVGdaZ2Cnc6d6J32ngieYZ6wnxygUqDDoV+h/aKboxmjkaPOo/ykmqTdpSulSKWKpaKluqZFps+nP6dhp6Sn56gcqGiotKj3qUmpY6l9qZepqam7qc2p36nxqhmqRKpWqneqiKqwqsOrFqtcq6SrsavPrHWsuq0frUmti62nrdKt/q50rpqurK7Aru2vcq+asD6wV7CcsSCxPrFUsaOyDrJcsrKzC7Mhsz2zW7PitAi0MLRytJq0r7V6tee2rLbKtxK3NreQt7a3yrfdt/64q7i4uP25JbkzuV25irmvuby5yrniuf+6Dronuke6Tbp1uohzbnhVH4tFmWiUM5M9kTGNdoyFjoSVi5WLjpSMlo2Z/wAAMzPH/wAMzM33AP8ACjMz4f8ADczNtYvMCMFunnMeC26jc6ioo6OoqHOjbm5zc24eC6aPBYus9zmbm4KccW12b3WCpfszix8LxbTfvJmngldTajJUeHKXvx4LVqtSyN639wLO1F2dY0FPPzkeC3mLaItVpIGXbphviwhDTv//uRma//+n5mZYqVHJ37f3Bcsfi5SKlImSnoCxgaKLqYuyj7GaCPv7/IitfPgu+M9rmwVsYT5/YYsIC8W037ydpIBZUWk0VHlxl78eC2pmWIOLYIt8l36ci7GLksakuKRkkkqyi5mLmpaLnYuzWpVpsAidjp2MnosIra6SqZWEn3Afaot7a113jamcs4umCKN8lnl5f3l2HotxnnCPZF+deaxpiwhzgnt9bauEvB+ai5mKmIgIC/dCWPtC+0Ba90D7Qr73QvdAvAcLbHV2bx+L///ggACl///2gACdiJ6JnIWLdIt2Z11XfouBjYSShMeWxbuL0QjHcbJjHguYmaeXlYeVgR/7bwZ/fnR5gZGClB8Lm4uahpaBqHKlRIv7E4s0iE9+W///6uZmPf//0hmagXqLCDOB9zjd933FtbYfC9T3Atf3ch+L6XXXYcJusmCmYIsILTL7BftP+y3T+xz2Hwu1sXRQH4tdVEE2fgiPbQWbjZiLl4sIC8HMeiD7Ejduah9bi4KhgJyCmH6WeIsId3d5fGXbcsT3Be/X9xEfi/8AZ2Zm//+25mb/ACdMzv//yBma/wAJTMwIio0FC+XEkLaLqwizZ8gq+x9jL2x+lHiippWqnR7IzJekHgs79zcGn4qWfh58i3mCgIOChoqDi4QI+zH7Rgf3kPgFBY6QiZGFiwhxBv//+Zmai///+xma///6gAD///zMzP//+4AACP/++YAA/AgFioqKiouK/wACgAD///IzM5T//+XMzf8AHIAAiwj3WD4Gi///1EzN///cZmb/AAGzM///15maiIWFi3aRhamMsYy2i7CLqIqpipGRi6CFkf//0Zma/wADZmb//+9mZv///WZni/8ALDMzCNjOB5iZnpaUh5GBHwsxXElSHmeLfqJ9nv//9Bma/wAQGZr//+/mZv8ADuZmd4sIeXl7eGTca8H3Cd7i9wvnTN0hH2KLaIN6hAie9zIFroeqh7iLp4urjLKPCJrMhY4FVYVXh1mLaItpjWqOCGv7pQW9nq+PrYsIybtiJB8L/wAZZmb/AFYzNP8APBma/wBfzMz/AH6AAP8ALzM0i5aIk4OQK2///8WAAP//2GZm///LGZr//8KZmv//xWZmR241i0AI+1T3CGXU9xC9/wB35mb/AFEZmtxj2fsVHv//5Bmai2D///azMv//4uZm///wGZoIC/8AIjMz/wAbZmb/ACSzM/8AAYAAnYsI6J0rXCNjXF1PTqv3Nh+L/wAUmZqN/wAYZmb/AAUZmv8AGhmaCAv3OQZB+0xA+0xL+yQIkoXMjgXB9zXD9zH195YIfJYFe4Z2hmeLCPtXBv//3+Zmi/8AApma/wAJmZj//+6AAP8AA2Zo///9mZqL///+Zmb///9maIv///2ZmIpegVKDWgipiAWg16uRqYsIC89Xvi4qTFFCHotWpWTFZwicgQVzeXZ5c3YIC///5pma//+pzMz//8PmZv//oDMz//+BgAD//9DMzYuAjoOThuun/wA6gAD/ACeZmv8ANOZm/wA9Zmb/ADqZms+o4YvWCPdU+wixQvsQWf//iBma//+u5mY6sz33FR7/ABvmZou2/wAJTM3/AB0Zmv8AD+ZmCAv//93MzP//5Jma///bTM7///6AAHmLCC5567rzs7q5x8hr+zYfi///62Zmif//55ma///65mb//+XmZggLbqNzqKijo6ioc6NuHm5zc24fC2x1dm8fi///4IAApf//9oAAnYgIC56JnIWLdIt2Z11XfouBjYSShMeWxbuL0QjHcbJjHgv30fcHBZiZjKl9kQj8GvshBf//9rMz///uszOLe/8ACUzN///xTM0I+Br7IgWZkYqpfpkIC/wfWvgfBgv70fsHBX59im2ZhQj4GvchBf8ACUzM/wARTM2Lm///9rM0/wAOszMI/Br3IgV9hYxtmH0IC///6czNi///+MzN/wACgAD/AAQzM/8ACszMCP8AZDMz/wD9szSNi+z7nwULwvclBZCYkY+jiwj3ZIvI+z0F/wAO5mj//9bMzf//1rMy/wADmZn//9BmZv///JmahYWLdpGFsIzCjLKLtIuvirCKkZGLoIWR///ZMzT/AAOAAP//30zMi///7YAA/wAzgAAI+2H4sgX///izNP8AE0zM///6TMz/AAqzNH2L///xTMyL///4Zmb///cZmP//9Jma///lMzQI//8hszT//fezNAX//+WZmv//wjMz///h5mb///nMzf//1IAAiIWFi3aRhbCMmIyyi7SLvYqwipGRi6CFkf//2mZm/wACmZpc/wAETMz/AA+Zmv8AKRmaCAusi5Xiw9RtJTZQbTgeQQYL9x3EPjFCb077LEV+rawfC1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou2i5mJ5Iv3W4vA74vhi+tIwjSkCI0HC/8AMhma/wAZZmb/ACzmZv8AM0zOi/8ANkzMi85u4vtOi2iLXIlgiwgL7Ivkuc/khpSEkYCLRD1HbC6L+y+LQvcxi/cmi/8AVkzM/wAW5mb/AELMzv8AJIAA/wAs5mb/ADGZmsjFp7+LCPcei8I5pTWXh/8ACbM0jv8AC0zMkYa/g7uCwliQXrP7D4s2i0RsUFX//72Zmv//wzM0///YZmb//6MZmIv//5ezNAj7NfT7OPdrHgv4dQeurpm892zS+0P7Lvte+w1Z+yEpgJ6rHgtZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LsIu1ifKLCPch907L94r3Tvst9y37VB9Li02JZIsICzD3XAajl5+jHvQG1oubY6FG/wAMZmb///4zNP8ACszO/wACGZj/AAnMzP8ABLM0hrR864mTi42KjIiLeoiDinOLCPuTBguLizyMWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFCAu8jNyMi4sI92sGC3dDaFA/iwj7HAZ1fZumH/eF5gfgi450jl6RhaCLkZGKroqei62LrYyhjKmFkXaLhYUIiFSIfjaLCAuLizyMWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPddBwv3JYu8OaU1CK2RBYK1hbOE0whPi2e4+w6LCAv4JQeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI+zT76vc0B4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I91v36vtbB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggL+CUHi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLi96ckMeOkZGLoIWRWopzilyLVYtojFmMhYWLdpGF24ichos4CPxOB/tIV29qHn2L///yTM2T///4szOV///2TM3/AA0zM///+7Mz/wAUzM1siwh9bXZ1Z8B5oR+4i6qTtK7/ACuzM/8AJUzN/wA6TM3/ADOzM4v3IwgL/wC65mYH/wAhmZqK/wAaZmb///TMzp///+ZMzAj3N/taBf8AE+Zm///nzM3/AAAZmv//5WZmi///7czNi4iMiI+Ln4ycjKmLsouairqKkZGLoIWR///uGZj/AAKZmv//24AA///9zMz//95maP8AKZmaCPtv95gFgpWIkouTi5L/AARMzP8ABrM0/wAgszT/ACNMzAj3IPcrBbm8t42zkJGRi6CFkVyKg4pji2OLcYxcjIWFi3aRhf8AJBma///8mZiz/wAEzND//8/mZv//ypmYCPs8+0QF///r5mZ2///rGZr///FMzGiICP8Ar7M0B4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IC/8A1LM0Bgv/ABtMzOeJix+VvZXMkb////YzNP8ABLMz///1MzL/AAIZmv//85ma///+MzMIC3dDcFA/iwj7BQZueZ6qH/hGB4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj8JQcLizh6hkWIhYWLdpGFCLyM3IyLiwgLkDr///xMzIpKiIWFi3aRhbqMqYypi6mL/wAtzMyK/wAhMzSKkZGLoIWRR46I/wAEMzP///oZmP8AUszNCP//4jM0+DkF///8MzTB/wAEgACZz4+RkYughZEI+xeJ+2j8jwWHgYiHiYuIi4qPh5QI+2H4kPsljQWFhYt2kYXQh5GJhEAI///X5mb8MAX///oZmv//xBmaf///5uZmUoaFhYt2kYWpjKuMo4uji7OKqYqRkYughZFJkP//+rMz/wAeszP/AAVMzf8AOEzNCLH4JY2L92P8mwX/AALMzP//+OZm/wAGMzT///wZmpGLkYuPjo+TCPd1+KWNiwUL++IHeIuAhB6Di4CdbrAI++v4TvsbjQWFhYt2kYW2iKlokXEI/DUHizJ6hUWEhYWLdpGFvIyejLeLtoudir2KkZGLoIWRRZJ6j4vmCPfGB62LmpMekYuWgJx1CPfx/E0FC5Z8mIKbiwiZlJeeH/h/B4vknJHRkpGRi6CFkVqKeIpfi2CLeYxZjIWFi3aRhQjRhJyHizAIC/cc8iH7ZPtHNSD7BvsM+wn3A/dU92b24uYfC/da+yf3F/tD+0f7FPss+1j7Wfch+w/3QPdT9xH3H/dcHguydwWfubGYmovoi8os9xaLyou1pbLDCHqXBXVwZ4FuizOLOt37AouFi///+UzO////gAD///jMzIr/ADEzNP8AJBma/wAwszL/ABSzM/8AIJma/wAJTM3/AJ2Zmv8AGZmZ/wBjzMz3Fov/ALLMzQj3Wvsn9xf7Q/tH+xT7LPtYHov//0rmZv8AdzMz//+JgAD/AJjMzXlD///aMzT//79Mzf//xLMz///eszP//8+zMwgLyNN1+wr7EURvKh9b93kGqJeu0h4L9z0H34v/ABKzNP//8UzM/wAOTMz//+izNAj2+0IFC/8AHLM0///RZmb/ACtMzP//1Zmax4uai5yNlZD/AAOAAP8ABuZm////gAD/AAkZmoeTXoty/wAhmZpx/wArZmYI+xL3ZgW2meW/i/SLvXq0Z61buE2OTItyi02EZYtZi26MWYyFhYt2kYUI0Yichos4CPwlBwuLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IC4vempDYjpGRi6CFkVqKaopWi12LdIxZjIWFi3aRhceInIaLOAj7swf7YPckYeX3Ybz3E/dGHvd4B4venIzHkpGRi6CFkVqKfopji16LdoxZjIWFi3aRhdaEnIqLOAj7igf7BHz7Gvs9HluL///XGZr/ABUZmv//4eZm/wAc5mZauonXi8wIC9WG/wAAZmj//+VmaP//6pmY///JmZgI//9iGZr8Jf//+2Zmi///YOZm+CsF///ozM3/ADuAAP8ABczN/wANgADPkpGRi6CFkVyKaIpki2OLeoxcjIWFjHaRhcSGj37/AByAAEII/wDFgAD8lAWR///wZmaS///4mZqVi5aL/wAHMzT/AAizM/8ABczM/wAOTM0I/wDOszT4kgX/ABMzNP8AL0zM/wANGZj/ACWzNM2TkZGLoIWRY4pyinSLdItkjFyMhYWLdpGFCAv7M/xciYv7JPhRBf//7pma/wA15mj/ACNmZv8AAxmYrY6RkYughZFcimiKY4tki3aMY4yFhYt2kYXAiP8AGZma///g5mj/AAhmZv//5hmYCJpdBf8AA+Zmf/8AARmahIuCi37///3MzP//87M0///7MzT///NMzAj7EvvfiYv7KvhhBf//9Jma/wAjMzT/ABpmZv8ABMzMro2RkYughZFqimKKZItji36MY4yFhYt2kYW4iJb///6zNJ3//8pMzAj3Svy0BZB7loOai5mLlJWQmQj3H/f6BY+XkJiQi4+L/wAFZmb///HMzP8ABJma///yMzQI9wn79wWRepeEmIuZi5OTkJoI91n4sgWXrp6iwo6RkYughZFminOKcYtxi1+MY4yFhYt2kYW0iP8AJ+Zo///8szT///EZmP//1UzMCAuLh/8ABhma///+szT/AAnmZv///kzM/wARgACI/wAegACDtFEI9yT7YQWUgJCCi4GLhYeChYMI+x37TwV1bWhfUYiF////szOG///+TM2LhgiLd4yJBamMo4yp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hYCIkIuQi6uQu4uLi4+GjoOLCAtvgGOCRoKJhYt7j4UIwYaWg4tUCAuPWo5ci2GVjZWMkIuSi5GLkokIC6aEpoewi8OL8qaL7ov/AERMzf//zszM/wAnMzP//7wzNP8AGbMzT/8AFszNY5qLwou0r6KtiwgLoYvFg5g2kYWfjJGRi6+QsIysbJBbmVeLQYtIW4tLi0KsbNhrCAv/AFLMzf//3Zma/wATMzP//+tmZotgi1pbdmaLZIt1mIGWc6KCt4WkCIWReIqFhQgLfYd/gx9+B4aMio8exvvBBkSqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoIC8GH/wAFmZr///PMzP//6xma///NMzQI//+vTMz7WAX//+/MzP//2IAA///6zM7/AACzM///8GZm/wApzM0I//+35mb3VQX//+4Zmrv///LMzf8ADZma/wA+MzP/AAVmZpGRi6CFkWaKb4pii2iLe4xmjIWFi3aRhf8AOYAA///5MzT/AAKAAP//8GZm/wAUZmb//81mZgj/AH+ZmvvQBZF8kYWYi5WL/wAG5mb/AAZmZv8ABxma/wAQmZoI/wCFZmb3zQX/ABKzNP8AK+Zm/wAK5mb/ABkZmsOQkZGLoIWRdYp5inGLZot1jGaMhYWLdpGFCAuRkYughZFmimyKZ4tli///6DMzjP//5czNjIWFi3aRhf8ALxma///7MzT/AArmZv//9czM/wAVGZpXCP8AguZm+9cFkX2ThZWLlIuTkZKbCPD3ivL7jAWRfZOFlYuUi5ORkZoI/wCCgAD30QX/ABDMzP8AKLM0/wAQszT/ABxMzL6OkZGLoIWRcoqCimeLZYtujGaMhYWLdpGF1of///WzMP//4xma///x5mj//9zmZgj//6xmaPtkBYFy////MzT///gZmv//9JmY/wAc5mYI//+pszT3bwX//+2AALqNlcCPkZGLoIWRZopvimiLaIt7jGaMhYWLdpGFvof/AAezNP//4szM/wAR5mb//9MzNAj/AAZmZntF+0UFfmr///3MzP///oAA///zGZr/ACCAAAg792IF///tTM3/ADAZmv8AAMzN/wAP5ma7jggL///nTM3/ACYzNP8ACmZmh/8AK0zN/wAFzMyRkYughZFmimmKbYtti3iMZoyFhYt2kYWtiP8AG+Zmev8AHBmaYgji+xMF/wAC5mb///uzM/8AAxma///7TM2GhQg3+wAFYVV3i2iJhYWLdpGFsIyKjK+LsYuUirCKkZGLoIWR///lZmb/AAPMzf//70zN/wAFZmb/ABVMzf8AHszNCMrmBZL/AAqAAP8AAszN/wABzM3/AAgzM///9bMzCMU7BbBYef8AA0zNa///+rMzhYWLdpGFsIyqjK+LsYuUirCKkZGLoIWR///ggACO///nTMz///4zM///1DM0/wA9zM0IMfcTBf//+oAA/wAITM3/AANmZv8AA5mZ/wACGZr/AAMZmgjf9gWwuv8AF4AAkP8AJIAAjpGRi6CFkXKKe4pri2yLe4xmjIWFi3aRhf8AIWZm///7zMz/ABAZmv///uZo///mgAD//9xMzAhKMAX///wZmv//+zM0///65mb///jMzIGZCAv/AA+Zmv8AG8zN/wANGZn/AByZmf8ADEzN/wAdmZr/AFBmZv8AwOZm/wArmZr/AGcZmsD3BJmoqauwjpGRi6CFkXKKeYpvi2iLeIxmjAiFhYt2kYX/AB+Zmoj/ACAZmv//+jM0///wTMz//9vMzAj//5zMzPt5BYT//+/mZv//95ma///9TM3///eAAP8AE8zNCP//p0zN92QF///t////ACozNP//9YAAnf8APUzN/wAEzMyRkYughZFmimOKZ4tpi3CMd4yFhYt2kYX/ACuZmof/AAfmZv//+LM0/wAbZmb//8BMzAj/AHEZmvubBf8ACLMz///r5mb/AA9Mzf//0hmagW////QZmv//3pma///z5mb//+RmZnxsgHd9gnKLfYuHjoCLCG58bX52n3umH6CLs5OvywgL///9mZr///xmZv///GZm///9mZofil6FZYNa/wAIzM3///xMzP8ADJmZ///+GZr/AAuZmv8AApmaCAuf1KqgqYsI9x6L+4r7/wWDf4qIi4YIhJOGmh73zAaQqpW6nMX///mAAP8AA7Mz///0gAD/AANMzX+LCH5uBXNWenBRiwj7GYv3hPf1BZylkJeLjwgLj4aOhB4LhotrhG6LCPtfBv//3+Zmi/8AAJma/wAJmZr//+6AAP8AA2ZmCAv/AAWzM4j/AAVMzYqRi6K3uqiui6SL/wAXzM3///IZmv8AGDMz///t5majeah8oouji8yYqvb///yzNP8ABBma///6TMz/AAHmZoOLCHVZWnpvi3WLdJhwn///54AA/wASMzT//+SAAP8ADczMdItOi1VMfkoIC6OonsEfi9F9roLjg9mF5YmgipGIkoGLgYuIgoqAiX3////MzU////MzM/sA///1zM01///yMzNhi0oIVah4ox4LqHOjbm5zc25uo3OoqKOjqB4LcaB2paWgoKWldqFxcXZ1cR4L9zD3F/cT9zD3MPsX9xL7MPsw+xf7Evsw+y/3FvsU9zEfC/cf9wD7A/sf+x/7AfsE+x77ICD3Bfce9x/29wP3IB8LPAdxdHqBdotpi4Cfi6CLqqOd4KEIC56LnpeUlf8AAJmak////LMy/wAFTMz///izNP8AArM0iIiGiYeLCIKGm7Qf1gfpUp9aYU1qY3yWgZqekpiTHouQipCKjYqNio+LkgiboJasoqqDQB5RfAX//8EZmv//77M0///X5mb//+RMzIthi2CucLWLrIudlK2pjnmZdqSLCAu1tLC7v9oIcqMFTD9kYE5ai4t+gISGCHsHkoaYgIuLyFqyYMo/CKSjBVfaZrthtAgLaXNoYmFzra6voq+2uJ9kah4LVLhewsK3uMLDX7hUVF5eUx4L/wAIgAD/ABqzNP8ABjM0/wAfmZj/AARMzP8AI7M0///6szT/AAOzNIP/AAGZmP//9UzM////szSAb31kbIsIOAaUrJqmtakIC8OzrKyLuQjLUZ5ZPG9YcR5+mYCXHguLYnBxX4X///1Mzf//9uZo////TM3///SZmP8ABWZm///5gACTjJCMkosIC6O+h1JLX35uH2uL///3szP/AAaAAP//+kzN/wALgACFl4GQfYsI///zszP///OAAP//9xmY///yszT//+CAAP8ARpma///0szT/ABozM9vGudAfi8VcpmqOCAuom6Gii6gIsGqhVzRwW3qIj3yeHqKL////MzOd/wAEzM2Wkpunk5yLCJuhg3EfC///tGZm+wsF///35mf///MzNP///LMzh4v///TMzIuEkoWSi5KLk4+amgj3B/cBiJYFdKH//+ZmZoz///mZmouGi4WKiIoIC6elpaencaVvb3Fxb2+lcacfC6KVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kIpM5pi2MrkYUFm5CVjJ6LCAuXjYJrH/sWB4tYbIhjiYaDjHyPhamM/wAeszOL/wAjTM2LrIugi6mKj5KLmYeTaY12jou+CPeDB///+rMzkP//+Jma///95mj///qzM////RmYX3Bxf1x6i3//AAIZmv//9xmY/wAH5mb///nmaKSUnpGYiwgLYWJmW1c8CKRzBcrXsrbIvIuLmJaSkAibB4SQfpaLi068ZLZM1whycwW/PLBbtWIIC/xf/SO1g/he+SMFC4tifohjiYaDjHyPhamM/wAKszSL/wAjTMyLqYubi6mKj5KLmYeTaY16jou0CKO9B5GtU4uL4AWUg4yFHoSLf4CEgomIhYKLhQhSLwehrcreuNAIbJX7Lvtuj3/3I4sFC/xe/SO0g/hf+SMFC52rhFwfi1VzdF5nW2ZlYYtbCPdiBgv/AAiAAP8AGrMz/wAGMzT/AB+Zmv8ABEzM/wAjszP///qzNP8AA7Mzg/8AAZma///1TMz///+zM4BvfWRsiwg4BpSsmqa1qQgLw7OsrIu5CMtRnlk8b1hxfpmAlx4Li2JwcV+F///9TM3///bmZv///0zN///0mZr/AAVmZv//+YAAk4yQjJKLCAttY3NSUmXEzB6Lupqos7D/AEBmZv8AO5ma/wAFmZr/ADpmZou2CLkHkoOOg4OCiIQeXweLc4pzfnKCend7dHpcaU1fizyLMM1P8YvAi7WZqKSpo6Cni7EIrnKTe3h3f3Qei36NhY+GCI+GjYWLfAgLqHOjbm5zc25uo3OoHqijo6gfC///3czN///0Zmj//+iAAP//8EzM///tszP//+5MzAj3LkwFoIKZiJOLk4uSkouTi5KHkYCTCAv7EDUFfoKJhouEi4ORhJSLlIuXjqCUCPckxQX///NMzP8AFUzM///rTM7/ABFmaP//42Zm/wANTMwIC///8Jma/wAHszT///ZmZv8AALM0ff//95mYbGlqaGZvjYKOhZSFsZyrnLCmrHKtebJ5/wAJGZr/AAPMzP8ABBma/wAIGZz/AALMzP8ACRmYCGemZq1trwgLeIt6knuXCAt3mXWfbYtgi3RkfVCRhZWKlo2VrJWapYuci56DnYAIC6B9oHmhi7mLqLKXx4WPgY6Aigh9YYCBdYsIC3GhdaWloaGlpXWhcXF1dXEeC6mddWxvenJsbHqkp6mcoqofC/ct97kFj4mMgot/CPuiBwv35gaPw5bGlr8IbZAFd0NtTj+LCPsXBnV9k6Yf95PxB62LlnuRbwiQbAWMh42IkYsIoouNjgWJnIW4i62LrJCwjqQIjYqNiR51BoeLiIeKhwiFbQWEb4J7aIsIJfdaBqKXoKMe7wbXi5xZoUYIqJAFhLSCxobBCPtyiz6LBQuLh43///1maJH///+ZmAiqiQX/ABOAAP///rM0/wAUmZr///JmZP//8+Zm///n5mgI//795mb8gAX//+iAAP//00zN///5TM2D///aTM3///yzMwh0iQWF////gACH///9gACLhggLi42J/wADszOH/wAATM0Ibo0FZ/8AAoAA///+MzP/AABmZv8AEszN/wAkGZoI8vda90aLi/tUBYtv///yzMz///IzM///1jM0///8zM0IcYkFhv///5maiP///GZmi4YIC42JBYvoja8eC6KVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kI/wAVzMz/ADqAAAX/AFVmZv8ACIAA/wBNzM7/AC0zM8j/AE/MzYaUhJGAi0Q9R2wui/svi0L3MYv3Jov/AFZMzP8AFuZm/wBCzM7/ACSAAP8ALOZm/wAxmZrIxae/iwj3HovCOaU1l4f/AAmzNI7/AAtMzJGGv4O7gsJYkF6z+w+LNotEbFBV//+9mZr//8MzNP//2GZm//+jGZiL//+XszQIi///YEzN/wBnTMz//11Mzf8A04AA///9ZmYI///cMzQ1kYUFm5CVjJ6LCAujl5+jHvQG1oubY6FG/wAMZmb///4zNP8ACszO/wACGZj/AAnMzP8ABLM0hrR864mTi42KjIiLeoiDinOLCPuTBgu724mLH5m9ms2Tvv//9Zmakf//9IAA/wACMzP///LmZv///MzNCAt3Q2hQP4sI+xwGdX2bph/3heYH4IuOdI5ekYWgi5GRiq6Knouti62MoYyphZF2i4WFiFSIfjaLCAtxoXWlpaGhpaV1oXEecXV1cR8L92DjB5eUmpaQiJOCHyr3ggaurpm892zS+0P7Lvte+w1Z+yEpgJ6rHgtZi26MWYyFhYt2kYXRiJyGizgI+1k8B4KBfIGFjoOTH+L7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AHCAAP//9kzMCP//28zN//+pGZqRhQWbkJWMnosIC///tGZm+wsF///35mb///MzNP///LM0h4v///TMzIuEkoWSi5KLk4+amgj3B/cBiJYFdKH//+ZmZoz///mZmouGi4WKiIoIC573BdGUo4sIC7G4djcfi4KH///7MzSA////zMwIC2ZlbntRi2eLYaBsvggLd6x/uYvFCPeeiQWXkpGW323l+x80+wU4+ywfi1OZVaxlrWO6c9OL14vBrrO/iJWFkH+MCAv/AMdMzAf/ADGzNI/Lix6Pho6DHv//44AAgP//2IAAgkaCiYWNe42F/wA2gAD///rmZv8ACoAA///6GZqLUgj7VweLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94IC4iHhIGLmYupkLmLi4uQh46DiwgLb4BigkaCiYWNe42FwYaWhotRCPtXB4s5gYdPhoWFi3aRhbSMpYy2i7KLnYq1ipGRi6CFkViQgo+L3Qj3OAeLoJSXk5QIC7GwsqGyi5+LoH6XdJV3jXCLbQj7LAeLOYGHV4aGhYt2kIW1jJ+Ms4u0i6GKtoqQkYughpFTkICPi90I9ykHi8KHu3SqeqFsl2iLWotbfk5HCAv///VMzI7///VmZ////0zM///1TM3///2zNG5dXVVnY5GCkoWUibKhrKirq6lsrm+xc/8ACWZm/wAB5mb/AAiZmv8ACBmakJIIZ7NfwG66CAsl0PsF9yEeC/cpyvcQ7/NU9w37L/sbPiD7Ex8LJdD7Bfch9ynK9xDv81T3DfsvHvsbPiD7Ex8L///X5mb//89mZgX//+EzNP8AFMzM///YTMz/AAzMzv//zZmai/sbiz4gi/sTi///zhma/wAQgAD//8uAAP8AIUzN///XZmYI///LMzNLBY18l4Cbiwj/ADLmZskF/wAhMzT//+UZmrf//+7mZv8ANuZmi/cpi8r3EIvvi/8AOjM0///uszL/AD9//v//1bM0/wAsszQI/wApmZr/ADKZmgWHmIGVeosIC/8AJzM0i/8AH3/+e/8AFrM0///gszQI//9BmZr//xkZmQX///OAAP8AIjM0///6gAD/ACSzM4v/AB1MzYviqubfiwgL/wAOMzT//9xmZv8AB4AA///RMzSL///GmZqL+xhOcFyL///PgACL///dzM3/ABvmZv//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gZV/m3WLCIB2d3lur32eH6CLv46wqrqxp9OL91EI92cHvY/Lix6Pho6DHm+AY4JGgomFjXuNhcGGloWLUggL+xA1BX6CiYaLhIuDkYSUi5SLl46glAj3JMUF///zTM3/ABVMzP//60zN/wARZmj//+NmZv8ADUzMCAuLOICGToiFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOjoCQi94I+GEHzI+zix6Sh46CHgtygUB9Y4iJg417kYW/iJeQizcIC7yM3IyLiwj/ANSzNAYL/wAQMzR//wAVzMxuHoCLhIeGgwj//8SzNPsBBf///YAA///7Zmj///7MzP///JmYi4iLg5OGkIuOi46MjY0I7t8Fj4+OkouUCAv/ABdMzP//6bM0/wAOszT///BMzB58i4SHhoMI///JgAD7AgX///4Zmv///DM0////Zmb///rMzIuJi4SRhpKL/wAFmZqLj/8AA4AA/wAEZmaPCOP/AFCAAAWQj42Si5MIC/8AEpmYev8AEmZodh5/i4SIhoIIPfsfBYqKi4mLiouDlIaQi42LjYuNjQj3BvcCBZGRjJKLkQgL/wAUgAD//+7mZv8AD4AA///rGZoeh4t7ioV+CEv7JgWKiouKi4qLg5OGkYuOi46MjY0I8fcNBY+QjJGLkAgL+1cHizh/h02HhYWLdpGFtYyrjLOLtIuwiraKkZGLoIWRRZB/joveCPcfB4ull6KXnQgLlpuirJeLkouTipGFlYGVeKCLCKOipKT/ABMZmnn/ABzmZmEfXItiX3RkhYCIkIuQi6uQu4uLi4+GjoOLCAtvgGOCRoKJhYt7j4XBhpaDi1QIC///xjM0k/8AAhmYnv//nkzNiwgL//+kszMoSCEfi///ouZm/wBC5mb//8/Mzv8ATYAA///eTMzK///kmZr/AGWZmv//7TMyi///jTM0izr//9LMzGH//7AzNIsIC///ooAAi0//ACqAAHX/AGOAAP//87Mzj///9WZn///+GZr///ZmZv//+uZmjz6PcZdayoundP8AWLMzi/8AeMzNi/8AYIAA54vxi/8AXzM0Srv//7fmZv8AHszMCAv//88Zmv8AFMzM//94Zmb/ACMzNIvti8j/AC2Zmr7/AD/mZov/AGEZmouqTZ9J/wALgAD/AAAzNJf///7MzJSS///8gAC7h6f///WzNMAIC4O+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mZqL/wAFgAD/AAAzM/8ABWZm/wAATM3//86AAGZp///ZTM2L///XMzOLVbF3vYu0i7OfqLgIC4pehV+DWgiliAWf1K2gqYsI9yUGC///w5ma//+U5mQF///5gAD///SAAP///UzN///8ZmiL///15miL///5szT/AAWZmf//+pmY/wAFmZqL/wAFmZqL/wAGZmb/AAOZmJf/AA2AAAjn/wBiGZz///2Zmv8ACeZkBf//7Zma/wATzMz//+uAAP8AAOZo///65maLh4v///szMv///xmc///9mZr///8ZmAgL+xA1BX6CiYaLhIuDkYSUi5SLl46glAj3JMUF///zTMz/ABVMzP//60zM/wARZmj//+NmaP8ADUzMCAuLgo6Ej4cI7jcFjYmOio6LkIuTkIuTi47///7MzP8AA2Zo///9gAD/AASZmAj//8SzNPcBBYaThI+Ai26Lf///6jM0i///78zMCAuLg42EkIcI4///r4AABf8ABGZmh4////yAAP8ABZmai5KLkZCLkouN////Zmb/AAUzNP///hma/wADzMwI///JgAD3AgWGk4SPfIv///BMzIv//+mzNP//8UzMi///6LM0CAv//+iZmv//8WZm///t5mj//+4ZmB+LhY2EkIUI9wb7AgWNiY2Kjov/AAKZmov/AApmZv8ABEzMi/8ACbM0i4yLjYqMCD33HwWGlISNf4sIC///4IAA///1gAD//+nMzP//8jM0H4uGjIWQhgjx+w0FjYmNio6L/wALMzSL/wACzMz/AApmZov/AAKZmouMi43///6zNI4I///BTMz3IwWHlIOQgIsIC6cGkrK/obyLwIu6dZNkCKcGhtFRtkKLSYtLYYVECAumlwV94Fi9RYtQi0tafzUIpn8FlcW5q7+LCMGLtmaWVggLi4KOhI+HCO43BY2JjoqOi5CLk5CLk4uO///+zMz/AANmaP///YAA/wAEmZgI///EszT3AQWGk4SPgIsIbn///+ozNP//78zMHwunBpKyv6G8i8CLunWTZAinBobRUbZCiwhJi0thhUQIC4uCjoSPhwjuNwWNiY6KjouQi5OQi5OLjv///szN/wADZmj///2AAP8ABJmYCP//xLMz9wEFhpOEj4CLbot////qMzSL///vzMwIC4uDjYSQhwjj//+vgAAF/wAEZmaHj////IAA/wAFmZqLkouRkIuSi43///9mZv8ABTM0///+GZr/AAPMzAj//8mAAPcCBYaThI98i///8EzNi///6bMz///xTMyL///oszQIC///4IAA///1gAD//+nMzP//8jM0H4uGjIWQhgjx+w0FjYmNio6L/wALMzOL/wACzM3/AApmaIv/AAKZmIuMi43///6zM44I///BTM33IwWHlIOQgIsIC///xjM0k/8AAhmYnv//nkzNi///pLMziyhIiyGL//+i5mb/AELmZv//z8zO/wBNgAD//95MzMr//+SZmv8AZZma///tMzKL//+NMzSLOv//0szMYf//sDM0iwgL///PGZr/ABTMzP//eGZm/wAjMzSL7YvI/wAtmZq+/wA/5maL/wBhGZqLqk2fSf8AC4AA/wAAMzSX///+zMyUkgj///yAALuHp///9bM0wAgL+DoHrZ+nrx7JBsKLknucPv8AC0zM/wAATMz/AAtMzP///xmc/wALZmj/AAWZmAgLh1qFV39W/wAJ5mb///vmaP8AC5ma///+5mT/AAyAAP8AADM0n9uYmMKLCNoGsJ9vbB/8PQeLOHqGO4iFhYt2kYW8jK+MwovBi66KvYqRkYughZEIO456kIveCAuL/wAVGZqU/wAMTMyT/wAIszSx/wAlTMz/ACyZmv8AFbM0/wAnZmaL/wAUZmaLoP//8uZm/wALmZr//+kZmpX//+wzNI3//+TMzIttCPssB4s5gYdXhoaFi3aQhbWMn4yzi7SLoYq2ipCRi6CGkVOQgI+L3Qj3KQeLwv///EzM/wAwgAD//+izNP8AHoAA///vMzSh///gzMyXaIv//87mZov//8oZmn5OR////Jma///8MzT///mZmf//9czMi5kI/wAAzM33dQX/AAAzM8z/AAPMzbOLi4uSh46CiwgLcoFAfWOIiYONe5GFv4iXkIs3CPxJB4s4///0MzOHUYeFhYt2kYX/ACkzM4z/ABmZmoy2i7KL/wARszSK/wAqGZmKkZGLoIWR///NMzOPgo+L3ggLvIzcjIuLCPSLYyuRhQWbkJWMnosIC6KVfXZxdn1tH3eLgI9wlYSEiISLf6SAnIWriwjIuaq2sWyjYx+Ci4KKg4kI/wAVZmb/ADlMzQX/AEYZmv8AA0zO/wAygACtsf8AMWZmiJWFkH+MZmVue1GLZ4thoGy+d6x/uYvFCPeeiQULl5KRlt9t5fsfNPsFOPssH4tTmVWsZf8AHkzN///cZmb/ACiZmf//6Rma/wA7TM3///tmZgj//9vMzf//qRmakYUFm5CVjJ6LCAtxoXWlpaGhpR6ldaFxHnF1dXEfC/8ACxma/wAJZmagl5H///yAAJb///eAAB///0DMzgb///azM///9pmZd3+E/wADZmeA/wAHszMfC///78zMi///8Zma/wAHszT///JmZv8ADTM0CAt6/wAPZmj//+0zNKH//+aAAIv//9uAAIv//+xmZf//1RmY///0GZr//78ZmP8ABRma///5Zmj/AAiAAP///uZk/wAJZmb/AAIzNP8ACIAB/wAkTMz/AAh//v8AEIAE/wAWGZqL/wAOgACL/wAQGZz///czMP8AD0zM///z5mgIC/8AEczM///wmZj/ABHmZv//7DM0/wASszSL/wAnGZqL/wAYmZj/ACrmaP8ACjM0zf//+uZm/wAEZmj///eZmv8AA0zI///2mZr///7maAj///QZmv//0czM///2szSA///tTMyLCAtbQGFiHn2L///wGZr/AAMZmv//9eZm/wAE5mb/AAMZmv8ACUzN/wBCGZr/AGuzM/8ANszMiwicmoFyHwvDrKzDHpSLrYWTiwiikpaXl4GUeB+Gi16GiosIC2BnodDNuJGqH7KLnHaWdZV6lXuhiwiYnpOor1GvPvsKaENjH4v//8+zNP8AGjMz///jmZn/AC3Mzf//7LMzCIkHC0NyeFaLZYtRrEr3GIvKi8GorKr///+Zmv8ACszN///6GZr/AAdmZv//90zM/wACzM1kcGV7XIsIVGGzwB8L+48HWKZswx62i7a3oLD///1mZv8ACeZm///4MzT/AATmZ///9WZm/wACMzN4c3d4b4sId4iaqR/3kgericuLHnyFe4d4i3+LcoyFjAiJiQWcaIxfi28IC4velo7IkJGRi6CFkWGKcYpfi2CLcoxgjIWFi3aRhciHloeLOAj7TQeLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94IC2OLcLGDoYOjfpV0iwh1gXl5a8VO4PcP4On3C/U6wCsf9yv3jgWbppGWi4+Lj4WNhIuJi2eFbosI+18GC52LtY2xiwj3RAYL/wAxszSPy4sej4aOgx7//+OAAID//9iAAIJGgomFjXuNhf8ANoAA///65mb/AAqAAP//+hmai1II+xYH+wqiPPca7e7g90L3DGTUTHp6fnoei3SZfZ+AqHurfIsrCClU+wIvOoXU8B4La2l1Vh5KBpenpMnKiwi1lXV9Hwv3Cgepl5G4wbJ8TWNtZlEeC8SsYVdIX25PWoOUrx8Li9GNsR6ui6mJyovGi92ui+eLw16uXpgIjQcLpo+8sIu+i8hiuvsOi2WLeYlniwhgSY2LH4mJi3UFi4mO///9MzSO////zMwIrYkFov///pmalf//82Zmi3cI+7kHi2j///PMzf//+DMz///tMzP///7MzQhriQWE////mZqJ///9ZmaLhQh5BwuLZf//+5ma///4zM3//9tmZv///TMzCHGJBYj////MzYn///4zM4uICIt1jIkFqYy1jK+LsIuviqmKCI2Ni6AFi4+J/wABmZqH/wAAZmYId40F///egAD/AANMzf//+IAA/wAEszOLswj3qAeLtP8AB4AA/wACszT/ACGAAP8AA0zMCJ+NBY//AABmZo3/AAGZmouPCIugio0FbYpmimaLZ4tijG2MCImJi3UFi4eN////MzSO////zMwIpYkF/wAgszT///2AAP8ACEzM///5gACLZQgg+2H2B4u0/wAHgAD/AAKzNP8AIYAA/wADTMwIn40Fj/8AAGZmjf8AAZmai48Ii6CKjQVtimWKZotni2OMbYwIiYmLdQWLh43///8zNI7////MzAiliQX/ACCzM////YAA/wAITM3///mAAItlCPuoB4tl///7mZr///jMzf//22Zm///9MzMIcYkFiP///8zNif///jMzi4gIi3WMiQWpjLSMr4uwi7CKqYoIjY2LoAWLj4n/AAGZmof/AABmZgh3jQX//96AAP8AA0zN///4gAD/AASzM4uzCPcb92EHC4uciowFi2eKcXNwjIseioqLegWIj4mOHpuLk4iWbgjX+2EFjoOQhpCLk4v/AAjmZo7/AAQZmpYIwvcnw/soBY6DkIaQi5KLlI6Qlgja91wFlqiYkpmLCI6PjI8fi5yKjAWLdYp4dmOMix6Kiot6BYmNiI0elAadlIeAH4uGiYWIgwhQ+ypS9y0FiJSJkouPCJWTjJ2OjY2OHouciYxUigV4ZYyLH4qKi3oFh42Kjh6di5KGlXAIlHRc+xVR9y0Fh5WJkouQCJKRjZYelAaNjY2OHwt4gH57fJh+nJyYmJofmYOadR4L+x8HLoJobh6Gi4ePipGHmYOafIsIf4KCe3etfqYfm4v/ABPmZpL/ABAZmp3/ABrmZv8AHhma/wAFGZr/ABrmZovgCPcmBwumjaaLHpCJjYUee4Rdg3GJCIx5BYmNio0eoIoFmJGEYR8LZXVlaB+LcZo/5ocIj5wFYZN5sIuiCJaPkpK0kKScm4CdZx4L///1TM2O///1Zmb///9MzP//9UzN///9szRuXV1VZ2ORgpKFlImyoayoq6upbK5vsXP/AAlmZv8AAeZo/wAImZr/AAgZmJCSCGezX8BuuggL9zcHf4+CjYKLhIuEiYGHCPs5B5eHk4mTi5KLk42WkQgLmJWdl5KHkoIf+2EGf4F6f4SPg5MfC4uB9x49Bf8AD7Mz///3MzP/AAhMzf///MzNkYuSi5KTi5GLkoiRg5QIKfIFioyGjIeLbot0dIB5CAuQi5KMk48I9xfDBY6OjpiLk4ungZ6DlQiBj/sMJAV/gICCi4KLiIyAmIsIC/c8Bo6QjZGLkouSiZSGlQhN9wAGhZKDjoOLhIuDiIWHCPsDSgeIhImFi4SLhI6DkYIIC/s8BoiGiYWLhIuEjYKQgQjJ+wAGkYSTiJOLkouTjpGPCPcDzAeOko2Ri5KLkoiThZQIC3B/BZk2vlnRi8aLy7yX4QhwlwWBUV1rV4tVi2CwgMAIC4eShY+Ci3V1e3tui2aLfqCLpYu5ravJvgh9nAU7WktXi1OLVbF3vYu0i7OfqLgIC45rjWuLc5GMlYyOi5+LoX2pi62LzZuLyIu9XZ5YoAgLvXaTd4t2i3BzgHOLdIt4l4SRe5uFpoqZCAtoe3J7epVzs/8AGDMz/wAEzM3/AAaZmP//7GZoH4t0d2tSf4uEjIKPh7GQ/wAcGZr/ABDmZv8AEOZm/wAVGZqbn5Khi6MIr3SwZB4L/wCjTM3/ADxMzYv/ACVMzPt8//+sMzSL///kZmb3fP//rDMzi/8AJUzNBQv//1yzM///w7Mzi///2rMz93z/AFPMzYv/ABqAAPt8/wBU5maL///aszQFC5x7tFRhamh1f5N8npSYlZYei5OIkYqOio2KjYuPCJCQkZ6gk4F0Hot/hn+Df4B6fnWKaQinBo2llZycm5ubmpuLnwgLcp93pKSfn6Skd6Bycnd2ch4LppcFfeBYvUWLUItLWn81CKZ/BZXFuau/i8GLtmaWVggLbKJ0qqqioqqqdKJsbHR0bB4LzPcsRweShZKIkYuSi5KPlZMI4gcLmYeTdx77TQZ7fH6AHzMHkoiSh5OLCJKLko6TkggLmJWdl5KHkoIf++0Gf4F6f4SPg5MfC5iVnZeSh5KCH/t1Bn+Ben+Ej4OTHwt+i4CFh4AIV/sjBYqIioeLiIuEkYWTi4+LkI+Ojwjn9w4Fj5CNk4uQi591mneLCAs5B1Gyc7sepIu5mZrQCHKTBYRwe3N5iwh3f6LCH4u/dZIFC/c3B3+Pi42Ci4SLiYmBhwj7OQeXh46Jk4uSi4qNlpEIC71htFgegouDioSJCJNsBZCNkIuRiwitonFqbHVvaB+Ci4SMhI4If20FloaWiZiLCL61tL4fC/cci/ccsOv3Bwh6nQU+Tj1T+1iL+1SLMcNGyAh6eQXl+wX3FGT3KosIC/lzBpiYn5eUiJOAH/1zBn99d3+DjoKWHwtHi2qaY70IcX0FslbIbc6LCO/3DLr3TfcSQeb7LR9Hi1ZtZFYIpX0Fsr2lms2LCPOuNPsL+x5UYkEfC6ykpqmsbqVua3FvbG6ib64fC4vVjr6xs56gtqOvi82LpHyzWQilmQVkwFWpSItEi1BwZGNoaXRHi1yLNKFYtGOyY8F3y4vNi8mpssAIcZkFYlhqekiLV4s+pov3MAgLfouAhYeACFf7IwWKiIqHi4iLhJGFk4uPi5CPjo8I5/cOBY+QjZOLkAifdZp3Hgujl5+jHvQG1oubY6FG/wAMZmj///4zNP8ACszM/wACGZj/AAnMzP8ABLM0hrR864mTi42KjIiLeoiDinOLCPuTBgu724mLH5m9ms2Tvv//9ZmYkf//9IAA/wACMzP///LmaP///MzNCAv/AJGzNAeL/wAnzMz///1MzIH/ABQzNP8AJIAACP8Af7M093sF/wAcGZj/ADKzNJmF/wAsszT/AARMzJGRi5+FkW2KbYt0i3SLb4tjjIWFi3eRhf8ALEzMiKT/AAcZmP//6bM0///V5mgI+wv7dAWCeoeO///3MzSbCP//gczM93IF///nzMz/ACqZmP8ADjM0///4ZmjDjpGRi6CFkWOKaYpji2SLaoxtjIWFjHaRhbWI/wALGZr/AARmaP8AKJmZ//+7mZgI/wCDTM37cQX/ABGAAP//4oAA/wADgAD///+AAItmCPsdB4s4eoY7iIWFi3aRhbyMr4zCi8GLroq9ipGRi6CFkTuOepCL3ggL9wOw3/KL9wwI9ygl9xn7W/tZI/sp+xgei/sU4iz3AGYIj1EkiwULVot4kobA///3szP/AAOZmv//95ma/wAAszP///ezM///+7Mzi2L/AAJMzf//2DMz/wAEszP//9nMzQj3aQaWkZGUH4P3FAULL8lkyIv3BAj3FNH3Cvcf9xbbIfshHov7AGNCL1YIg/sVBYKQhpce92QGC4+tjriLs///+LM0j///90zMi4GHhVJ2iFqLCCoGC4uLPIxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I+FUHC6OXlaMe9w8G1ouYWaBG/wAJszT///7MzP8ACZmY/wAA5mj/AAmzNP8ABEzMCAv///vmZv8AVEzM///6mZr/ACbmaP//+oAA/wAhzMwIC2SKOoqLiwgLdItTjFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3gj4LQcLyaGXox73WQajoX9NH/wtB4s4eoZFiIWFi3aRhb2MqIy9i76LqYq8ipGRi6CFkUWOepCL3gj4JQcLi96ckNGOkZGLoIWRCFmKV4pwiwgLqJqu09DQdPsT+wBXXyoeC3KLY42AjggL/CUHizh6hkWIhYWLdpGFvIypjL6Lw4uxir2KkZGLoIWRPY9zj4veCPc+BwuhhKOIrosI90rC9wvgxmT2+00fcYtEhGOLWYtujFmMhYWLdpGF0Yichos4CAv3EfeHBX6LdoZ8i3yLeZB8iwj//9CAAPsUBf///TM0///4gAD///5mZP//+4AA///9szSV///sMzTi///YgAC7//+2gACLCDD7EVD7TB8L+xDBOfcUHs+LubS97giUZAULm0elarCLt4uko6HKhZKEj3+Lem1+hHKLdIt3qH7ACAtpLGFNXYsIQW7i9wD3B8fSzh/Hi6VJoisIC/8AHszN/wAvGZr/ACLMzf8AHWZm/wA3ZmaLCMiWVkof+6cHi/sGikl+aQiWedutBY+bjJ+Lo4uyiLuLvgj3swf3B122Rx7//6PMzYv//88Zmf//wczO///vgAD//+dMzIz/ACnMzP8AApma/wApGZqLi4uPho6DiwgL///jgACA///YgACCRoKJhY17jYX/ADaAAP//+uZm/wAKgAD///oZmotSCPuJB4t5iXCNgY96mYGriwixgrexHwv3EfeHBX6LdoZ8i3yLeZB8iwj//9CAAPsUBf///TM0///4gAD///5mZP//+4AA///9szSV///sMzTi///YgAC7//+2gACLCDD7EVD7TPsQwTn3FB/Pi7m0ve4IlGQFC5pSkGSLcAhxhnl9fIOnsx6LopOumbQIC5Ozi7uLxQjZB6d6pYG2iwj3Gu3j9y33BjHp+wwfXItafmFgcHBraYv7Hgj7VgeL+xCAV35pCJZ5BQsgWlA4Hl6LaKFsqQj3LQf3JsOmttvLVfsyHguL9wgt5y24///y5mb///0Zmv///xmaf4r///fmZvM8nC6LQov7Am5mQ4tji2iubdCasJTCi6MIo4iYcHGAaGwei3eNZphqbER0bWaLQYtw0Yv3BIv3Dry6zLSK/wAJTMz///uZmv8ACbM0///4ZmaP+wVbRTmL+woI+xfbQuUexIusqqbToUOzbL6L9w6Lz+qL8wgL+48HWKZswx62i7a3oLD///1mZv8ACeZm///4MzT/AATmZ///9WZm/wACMzN4c3d4b4sId4iaqR/3kgcLq4nLix58hXuHeIt/i3KMhYwIiYkFnGiMX4tvCAv3ZQf3JM/3I8YenYuVfZJ4kXichpiLCKCZnZ+ua6NaH/sMi1r7SIJQCIgGgPcSUPcFIYthi2N4dG7/AAKzM///+IAA/wAGTM3///sZmJP///xmaKGdm4+yi6iLq3qpUqRami6LJwj7RgeLOHqGO4iFhYt2kYW8jK+MwovBi66KvYqRkYughZE7jnqQi94IC3mcBXBjP0sgiwj7HkH3Fvct95P3FLrZH/GL1FKUdQioowWJkEnk+x6LCPs1+yH7HvtZ+0f3C/su91Af9wSL1s+uyggLi7fg9yDZ9xNX+5P7A1n7P/s3HiCLPs5xswh7egWuTNND9wSLCPdK9xT3JfdP91n7Ivcf+zQf+wWLOEaBcQgLxYuoa86LCMbKqKSTho+HH4OLe3tliwgLpY0FkI6OkB+LnomNBVqKbopZi1mLbYxZjAiJiYt4BYaPiI8epYkFsoiagottCPyLB4tvf///9RmaYf///OZmCHCJBYeIiIYfC/glB4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhcH///2zNP8AFoAA///8ZmT/AAdmZv//2GZoCP//+jM0///vzMz///azMv//7eZo///0szT///HMzAj//u0zNPvqBf//+LMy///4szP///ozNP///Jma///7Zmb///+zMwj3+AeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWR///JMzP/AAJMzf//6bM0/wADszP///jmZv8AKUzNCP8ABuZm/wAXszOV/wAIGZr/AAuzM/8ADuZmCP8BERma9+gF/wAE5maR/wAFGZr/AASAAP8AB4AA/wACgAAI+/gHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCAtqdJycH4uQjJGLjQiagZp0cIF9eFfGdM3NxqK/noGZcHSBfHwei4mMhYuGCHp0emoeC/8AsoAA/BcFbEBydmuLfYt8mISUgZd1kn2LCG14d29ru3S1H+WLwtW29wEI/wCNszT3/AX/ABLMzP8AL8zM/wAPgAD/ACUzNM2TkZGLoIWRY4pyinSLdItkjFyMhYWLdpGF1YaIcndTCPsB+7+Ji///dWZm98UFcf8AOTM0///+mZr/AA/MzM+SkZGLoIWRXIpoimSLY4t6jFyMhYWMdpGFxIb/AAnMzf//8OZo/wAgszP//7kZmAgLpY0FkI6OkB+LnomNBVqKbIpZi1mLb4xZjAiJiYt4BYaPiI8epYkFsoiagottCPtkB2mLYYx1mVSr///yGZrL///35mbDCAuCyXHDQIsIWXpudG6ggJ8fl4uYkJSVlZaTkJeLp4uRapBulU2gNdNvCIYHSYtmYHFFW/sbXEdriAh8igWGiYiGHwuLav8AExma///tGZr/ABrmZv//5+Zm/wAeGZr//+UZmv8AQ+Zm///n5mbvi/cTi/cOxYv3F4vgStAtmgiRBwvRn8i8i9+L3UnS+x+LQItJckSECHP7NKmJBaXjxdP3BosI4bJTRUZwRiEfcItnkXCLCH96h3d3nIaXH6aLqJGsiwgL9w2wQUIwUE4oHz2LWKtyun6lfKVviwh3fntzHwuL3pyQ0Y6RkYughZEIC1uCrawf93/WB/cUsDFPTWwx+ywfC4s4eoZFiIWFi3aRhbyMqYy+i6iLq4mviwj/AL+AAP8AVoAA/wAz5mb/AIUZmuRx8PtvHzP3KgaL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgIC0yLYGVQi2WLe5uDiwiHhoeDcspuxh8Li96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPwlB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLi0CJbR77CAYLi4iN///+TMyP////szQIqYkFrv///bM0kf//+EzMi2UIC46JzI0FuP8AAWZmpv8ARpmambT/ABRmZv8AO+Zm/wASmZr/ACUZmt+LCPsdB4tugIBrhgiEigWGioiJi4YIi3iNiQWLw42vssWJix6NjYueBYuQh42GjAiDjAVq/wAEGZqB/wAL5maLqAj3HQffi/8AEpma///a5mb/ABRmZv//xBmamWKm//+5Zma4///+mZoIzImOjYudBYuShYyGjAiEjAVqkGfgfLJ4vmegW4sIjQevlaOumbWUqpahlYuTi5CIj4eRhZeHlIsInJyen6OCoGYfYItxV3xa///u5mZT///jGZpmTosIevcHBouolf8ACOZmrP8ABBmaCAuTjAWQjI+Ni5AIi56JjQWLUYlkZ1ONix6JiYt4BYuGjomQigiSigWshpWDi24I+wd6B06L///jGZqw///u5mbDCAt8vHG/YIsIZoJ2c3eceJwflIuXj5GRj4+QjpOLlYuWdZRsmWGjaK+BCIkHW4tndnhYfGRnNmqGCISKBYaKhYqLhAgLi3WZe597onm9dtWL6YvntYvii8dXtECVCJAHC8KYvKyLw4vFWbcmi1SLXHVYhQh1+wukhwWdxbXJ2osIwaloX191YEofeYtykHmLCIOAhnt7l4eTH52Ln5CiiwgL3qJYX1BmZ0YfVov//+BMzf8AGzMz///sszP/ACDMzYGcgZpziwh6fH17HwtgSY2LH4iJi3UFi4eN////TMyP////szQIqYkF/wAlszP///2AAP8AAkzN///3gACLYQj7ogeLaP///bMz///1Zmb//9pMzf///ZmaCGyJBYj////MzYn///4zM4uICIt1jIkFs4ynjLaLq4uUirOKCIyNi6AFi4+J/wABmZqH/wAAZmZpjoiWi6MIi433YveMi/uABYto///8zMz///NmZv//2jM0///9mZoIbIkFiP///8zNif///jMzi4gIi3WNiQWzjKaMtou4i6mKs4oIjI2LoAWLj4n/AAGzM4f/AABMzQhtjQX//90zNP8AAkzN///6zMz/AAqzM4uwCPehB4u1/wADGZr/AAeAAP8AJOZm/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CKjQWLRYleb16Nix6JiYt1BYuHjf///0zMjv///7M0rYiMeotzCPti+4yL94IFi7SO/wAIgACx/wACgAAIqY0Fj/8AAEzMjf8AAbM0i48Ii6CJjQWLRYlfHguefZlzeXp9eh6LiIuJjImMiIuIi4gIdXZ3bm13oKEei42LjoyOjI6LjYuOCJt/mXV0e3x5VcJqzB7LxavCHwuLr6CQqI4Ij4+QkB+LnImNBYtTiWRoR42LHomJi3gFi4aOiZCKCJ6JBauIlX6Lbwj7sQeLb4SBaIcIeIkFhoqIiYuGCAv//9UZmv//vOZmjYsfC4uHjf///zM0jv///8zMCKmJBf8AI7Mz///9mZr/AAVMzf//+2Zmi2EIC/VL7Soea4tVgV1FCIgGC/sUB2trZH9aiwhNhK3ZH80Hi6v/AAczM/8AB8zM/wAgzM3/AAIzNAiajAWP/wAATMyN/wABszSLjwiLoIqNBYtOiWT//92zM///ykzNjYseiomLdQWLh43///9mZo7///+ZmgiTigX/ACJMzf//+7M0/wAGszP///tMzItlCFIHIa5e7R7Hi6uZsqgI+wMHi2T///szNP//+oAA///bzMz///uAAAh7iQWH////gACJ///+gACLhwiLdo2JBYvGjbSwxomLHo2Ni6EFi46J/wABmZqI/wAAZmYIeo0F///bZmb/AARMzf///Jma/wAGszOLsQj3pweLtP8ACRma/wAFzMz/AB7mZv8AATM0CKWMBY7/AAAZmo3/AAHmZouOCIuhio0Fi///u7M0if//1EzM///bszT//8dMzI2LHomJi3UFi4eN////TMyP////szQImooF/wAizMz///2zNP8ABjM0///5TMyLZAgLOVx8WV16la4e9yrOB9KhXlYfC4tu///5Zmb///PMzf//25ma///8MzMIeIkFhv///4AAiP///YAAi4YIi3iNiQWL/wA/ZmaN/wAomZoe/wAnZmaL/wAWMzSJ/wAnZmaLCPcDycHf6TmlKx9S7gaLqP8ACkzN/wALmZr/ACCzM/8AA2ZmCJ6NBY//AABmZo//AAKZmouRCIudiY0Fi0eKZGdHjIseiYmLeQWLhY7///2AAJD///+AAAieiQX/ACOZmv///EzM/wAHZmb///SzNItuCAtgi3BvaIt+i3+RhIsIhYmBh325ebYfC7iLnaGxi5iLmIeXhov7C15QN4tji3Cjf6b///HMzf8AH+Zm///0MzP/AAUZmnqLCHmAfnsfC7GLnXW4iwi2uZ2Zj4mVhR+Ei3+FfosIC559mXN5en16HouIi4mMiYyIi4iLiAh1dndubXegoR6LjYuOjI6MjouNi44Im3+ZdXR7fHlVwmrMy8Wrwh4LVwdgckUn+wlY9y/3K/dEzvcK3p+dfX4ei3yFhItzCHGfca+ykqyovV67PPsg+wT7KvtJ+yy/+0/3XB7yi7CzqrwIkQaqWrBj8osI91zA90/3LPdJ+wX3KvsgPF5bWW6SarKvoKWlH4ujhJKLmgiYnZmf3s/7CvtE+ytX+y/7CSdx0bYevwenmZu0HqUGkI6OkB+LnomNBYsuiWdkNI2LHomJi3gFho+Ijx6mBrKaf2sfC2wHZoRLRS579xfU9wCn4diZj4aDHouGioaJiIiIioWLhAh4mX2en5qboKl0r0/7AUQu+xYmyfsW9wce2YupspuyCI4Gm2SpZNmLCPcIyPcW8PcWROj7AU90Z212mnufn5mZnh+LkomRiY6JjomQi5AIk4+QmdmmNfsAQnv7Fy5FhMuwHqoHqJWarB6eBo+PjpAfi56JjQWLR4lkZ0eNix6JiYt4BYaOiJAengatlHtvHwtDZWZaf2+BpmO+Ra4I9w33cgUL/wB9MzSL/wBhMzD//6YzMP8ADrM0//9PmZz//9+ZmP//6UzM///SgAT///PmaP//4MzMiwgLTIttuimL///bszOL///EmZr///JmZv//2LMz///iZmYI/wAAMzQH92b24uYeC///+rM0B/tHNSD7Bh77A4v//5OAAP8AXxmZ///wZmb/AKZMzf8AIszN/wAVzMz/ADOZmv8ABMzO/wAcszOLCAvWi6Nd54v/ACWZmov/ADGZmv8AC0zM/wApzMyxCAs6i3FGSvtPi4tP+zpo+wAIbuP7Eff4BYmTiZGLkQgLm5eVrx6mBpCOjpAfi56JjAWLMopoZD2Mix6Jiot4BYaPiI8ekQayi/8AEczN///u5mj/AAozM///4xmYCPdZ/MUFkHyUg5aLlYuWk5GazPdoyvc8i4sIC9f3cZuVo4uii5CAi4KLfHiAi3sIdZl7pKafr6Mes2KvYh4LmY+Hgh+LfICKi3oIdZ59o6eXpKOzaqxjHkeL///emZr//9rMzP//32Zm//+RMzQIUftZf7Q1924FhZmHk4uSCAuLlZSRn4wInAaOkYySH4ueh40Fi06JZGlWjYseiImLdwWHkIiQHpYGqYuVfZhpCPcc++0FkH+SgpiLlYuTlJGZCOD3qwWezKi6qYsIC6iVmKwekwaQj46QH4ueiY0Fi1GJZGdTjYseiYmLeAWGjoiQHpIGrZR+bh8L//9qTMyL//+bGZv//6lmaP//2jMz//9+MzII///yMzMG//+95mj//8kzMpX/ACqZmqf/ABrmZv8AFUzM/wAWZmf/ABQzM/8ADoAAnv8AD7M0/wAR5mj///GAAP8AC0zM///xZmf//9IZmf//zrM0///FszD//8AzNP//upmaxHn/AEwzMx//AB+zMwYL/wALmZr//+yZmAf/ABVmZv8AX3/+/wBHZmj/AFbmaP8AZeZmi+2L3Uqq+xUIC///uzM0izb//8wZmv//32Zm//+fGZr//8szM/8AAWZm///WMzP/AApMzIv/ACMZmgiko56fnZicmZt+lX5iX1dSTb57zx7/AAHMzQYL/wAUZmb/AGtMzP8AQ+Zm/wAIszT/ABeZmouxi7h2izeLgof///szNID////MzAj7Gv///czMi/8ABTM0BQv/AEozNIv/AC6zMv//xrM0/wALZmb//5HmZggL///ygAD///rMzf//75ma///7mZn//++ZmosIC2WLdZ9ei///4MzNi///1JmZ///05mf//+qZmv//9DMzCP8AAeZmB+Kq5t8eC/8AAGZm///25mf/AAAzNP//9oAAi///9kzNi/sYTnBci///o5mai///15mZ/wBlGZr///gzM/8ATJmZ/wALzM3/AAHMzf8AFhma/wAEgAD/AAmzM4sIC66LrW+2i/8AITM0i/8AJGZm/wARszP/ABbMzP8ADZmaCAuldqFxHnF2dXEfC3ibe56em5uennuaeHh7fHgeC3ibe56em5uennuaeB54e3x4HwvM///SszMG///1TM3///ozMv//+LMzgIv///MZmgh4m3uenpubnh6L/wAMgAD///kZmv8ACrM0///15mb/AAXmZgj/AC3mZsu1+zgHC4u3ZZdxkjelsJd2m4uLaoOLRotko3K7f///4kzM///aZmb//+4Zmv//05ma///15mb//9GZmgj///6zNP8AAWZm+073YgV8nIKiiqgIfgZ0coBwi3CLbJhtpG4I/wAegAD//95mZgUL///E5mb//9kZmv//7Jma//+xZmaL///OGZoIC4tgsEuLbYt7eX18iYeKiIeLh4uJjImMiQjwBqOkqasfC4vIKMiLx4v/ABozNP8ACMzN/wAwMzT/AB6zM/8AFMzMCP8BAoAA//7izMwFmnqUdo1yq4uatouqi6p+qXKoCP//vpma/wBGgAAF///3szT/AA9Mzf//+7My/wAQmZmL/wAQmZqLrZu1sb2jiZJllosIj5q+qh8LIAZwi3yhhqIIi1qCQ2KobLwf9y4G3KF++zAfi02AV4JhCPvGi3Mn+CiLou85iwWyw4/mi8II9ymJ3fs8HguLsZPYi7CLyGGWYYtyi2qLhK2Li1+Bi0eLVsaBnogIC76Eq4GLKov7HVxjIXh1hoN1hnGKhYuGi4aLfY6Ai4UI9w6P1fcukosFC6laifsHuYuRlI2Zi5iLl4mYiZUI///vmZr/AFPmZv//yWZm/wBEGZqL2ggLi/cA4HOL3gi3cp1eHvtyBnCLe5aFogiLYYVBYqR3vR/3jAZSXm9EizEIC4tbj1yLTIt2h3qDfwiWBqO3ktofi9GAzovQCAuF9/cFi+1skVSUdo9nkYapi4tYgotTi2Kua7yDwIOkf4tSCAvNrpXmi7WL5nmeRYtsi2iLhrGLi2GGi0iLX6r//+YzNMH///3MzLyJqXiLagiLXYFkaHEIC2yLcW2AU31KgmiLeYt6l4eQi5OL/wAJ5mb/AA4Zmv8ALBma/wBD5mb/AB/mZv8AMRma/wAXGZr/ACXmZouji6VskX+LCAvD1G0lNlBtOB9BBgtxo3Gjp6P/ABrmZv8AFRmao3ancB5zb3NzHwtxo3Gjp6P/ABrmZv8AFRmao3ancHNvc3MeC///9UzMjv//9WZo////TM3///VMzP///bMzbl1dVWdjkYKShZSJsqGsqKurqWyub7Fz/wAJZmb/AAHmZv8ACJma/wAIGZqQkghns1/AbroIC///9UzNjv//9WZm////TM3///VMzf///bMzbl1dVWdjkYKShZSJsqGsqKurqWyub7Fz/wAJZmb/AAHmZv8ACJma/wAIGZqQkghns1/AbroIC///oIAC//+0TMwFgf//+BmY///+gAD///uZnIv///nMzIuE/wAEmZr///nMzP8ABuZmi/8ABuZmi/8ACUzM/wACmZj/ABAzNP8AB+ZoCP8AbuZo/wAzGZgF///2MzT/ABLMzP//8BmU/wAPTND//+nmaP8AC7M0CAtyoHakpKCgpKR2oHIecnZ2ch8LqJqu09DQdPsTHgt9h3+DH34HhoyKjx4LxvvBBkSqb7keuYu9obK3if8ACkzNhf8ABbMzgYxxd22DcYsIcIWpyR/3kfMHlZmPlB+fB4+IjYYe+wyyBsyPs4sekoeOgh5R///lszQFhf///EzM///3ZmaJ/wAAmZqE/wACGZr//+kzNP///+Zm///2zMyL//+tGZoIC4uH/wAGGZr///6zNP8ACeZm///+TMz/ABGAAIj/AB6AAIO0UQj3JPthBQuUgJCCi4GLhYeChYMI+x37TwV1bWhfUYiF////szOG///+TM2LhgiLd4yJBamMo4ypi7KLpYq6igiOjYufBYuO////GZr/AAOAAP//+uZm/wAAgAAIeI0F///Y5mb/AAQZmv8AB4AA/wAT5mb/ABCZmqMI9xj3SQWRk5GRjouPi4+IkYMI9xj7UAX/ABjmZmn/AAIzNIX//9fmZocId4kFh////5maif///WZmi4cIi3eOiQW6jMKMoouii7WKs4oIjY2LnwWLjon/AAOzM4b/AABMzf//04AAjv//3YAArHCyCPsu92YFgZiFlYuVi5T/AAQZmv8ACOZm/wAI5mb/AAwZmgj3F/dFBaav/wAWgACn/wA8gACNk/8AAEzMjP8AA7M0i44Ii5+IjQVjimmKdIt0i2eMY4wIiYmLdwWLho7///5MzI////+zNAipiQX/AB1mZon///rmZv//75mY///tszT//+ZmaAj7FftDBYWDh4eIi4iLh4+Gkgj7C/dEBf//7Jma/wAbGZj///fmZv8ADuZo/wAggACNCKuNBf8AArMz/wAAMzT/AAJMzf8AAczMi5AIngeKio6LH1yKWIpzi3OLZIxjjAiIiAUL/wCRszQHi/8AJ8zM///9TMyB/wAUMzT/ACSAAAj/AH+zNPd7Bf8AHBma/wAyszT/AA3//oX/ACyzNP8ABEzMkZGLn4WRbYpti3SLdItvi2OMhYWLd5GF/wAsTMyIpP8ABxmY///pszT//9XmaAj7C/t0BYJ6h47///czNJsI//+BzMz3cgX//+fMzf8AKpmY/wAOMzP///hmaMOOkZGLoIWRY4ppimOLZItqjG2MhYWMdpGFtYj/AAsZmv8ABGZo/wAomZn//7uZmAj/AINMzftxBf8AEYAA///igAD/AAOAAP///4AAi2YI+x0Hizh6hjuIhYWLdpGFvIyvjMKLwYuuir2KkZGLoIWRCDuOepCL3ggLm3yzS1VvaXZ/knyfm5aUlx6LkoeQiY6JjYqOi44IkJSUnqGZf3Qei32Dg4KCf39+fYtqCKUGjaSal52XnJablouhCAuce7RUYWpodX+TfJ6UmJWWHouTiJGKjoqNio2LjwiQkJGeoJOBdB6Lf4Z/g3+Aen51imkIpwaNpZWcnJsIm5uam4ufCAv//6kzNP//uzMwBf//9uZm///4zMz///6ZmoeL///6ZmiL///5mZj/AAQzNP//+mZo/wAGTMyL/wAGTMyL/wAIZmj/AAJmaP8ADrM0/wAHMzQI/wBkzMz/AC5mZAX///cZmP8AERmY///xmZj/AA3M0P//6+Zo/wAKszQIC////TM0/wAAzMz///vMzf8AAMzM///8gACL///oMzOL///v5mb///JmZP//+mZn///7MzQI///+mZr///czNP8AT8zM//+ozMwF/wALMzJ//wAE5meH/wAEMzOL/wAFmZqL/wAE5mb/AATM0IuPi/8ABZmY////TM3/AAWZmP///IAAkwgL///rGZqL///tTM7/AAaZmP//7mZm/wALZmgIC3X/AA1MzP//58zMnmqL///QszOL///mszP//9rmaP//8JmaU/8ABpma///6TMz/AAr//////xmY/wAMGZr/AAHmaJb/AB9MzP8ACv///wAOMzT/AByZmov/ABKzNIv/ABTmaP//+IAA/wATzMz///WAAAgL/wAXGZr///KzNP8AFxmY///u5mT/ABgzNIv/ADKZmov/AB/mZP8AJRmc/wANMzTE///5Zmb/AAPMzP//9QAC/wACzMz///PmZooI///wmZr//9gZmP//8+Zm///2mZz//+fMzIsIC5t8s0tVb2l2f5J8n5uWlJcei5KHkImOiY2KjouOCJCUlJ6hmX90Hot9g4OCgn9/fn2LagilBo2kmpedlwiclpuWi6EIC///yxma//+gzMwF///6TMz///WzNP///bM0///85mSLgov///pmaP8ABOZm///7MzT/AATmZov/AATmZov/AAWZmv8AAzMw/wAKgACXCP8AUIAA/wBXMzT///3mZv8ACMzMBf//7+Zm/wARmZj//+4Zmv8AAMzQ///7gACL///8gACL///7zM7///8zNP///eZm////MzQIC///9UzMjv//9WZn////TMz///VMzf///bM0bl1dVWdjkYKShZSJsqGsqKurqWyub7FzCAv/AAlmZv8AAeZm/wAImZr/AAgZmpCSZ7NfwG66CAv3Kcr3EO8fi/8APJma///tTMz/AEKAAP//0bM0/wAszMwIC/8AKszM/wAEZmj/ABwzNP8AFJmYi7YIC7pvsGVud3xzd5d2rp6Whn12e4Y4HmSLc4xcjAiJiYt4BYaPiI8epokF/wApGZiI/wAM5mh+i2wI+7oH+wR8+xj7PR5bi2KgbahWwIvPi8wI98EHi6f/AA0zM/8AEMzM/wApzM3/AAMzNAiljQWQjo6QH4ueiY0FXIphimWLZIthjFyMCImJi3gFho+Ijx6miQX/ACbmZv///RmY/wAPGZr///HmaItsCPviB/tg9yJj5fdhufcR90Ye96gHi6eZnaiOCAuhnbGayJKRkYuahZFLkIKei7wI91QHi/8AE4AA/wABszL/ACXMzv8AATM0/wAX5mb/AC7MzP8AB5ma/wATTM7/ACL//ov/ABszNAi6crRlbnp8cx6Ld5l1rYqeipOCi4CLgHV9eIkI////szQH///5szT///8Zmv//8pmY////MzL///KzNItri2qMZoyFhYt2kYW8iJh/i0kI+1UHi3j///4Zmv//+DMz///x5mb///PMzQgLZXVlaB+LcZo/5ocIj5wFYZN5sIuiCJaPkpK0kKScHpuAnWceC937GwWNiIyJkIsIlZCSkIyKjosfZPcsBYiWgZJ5i3SLfXqLe4uHjIaNhwgL9xH3hwV+i3aGfIt8i3mQfIsI///QgAD7FAX///0zNP//+IAA///+ZmT///uAAP///bM0lf//7DM04v//2IAAu///toAAiwgLMPsRUPtM+xDBOfcUH8+LubS97giUZAULgYt6h4d7CGr7L4uKBYiNgZcejouPjIyPCNf3HwWNj4yPi4+LloOhbosIC4CLeoeHewhq+y+LigWIjYGXHo6Lj4yNjwjW9x8FjY+Mj4uPi5aDoW+LCAtji3a6VItii3ZqflQIoYYFlqmZm6CLsYuqXbWLtoulqZfDCHWSBX5pfX53iwgLwvclBZCYkY+jiwj3ZIvI+z0F/wAO5mj//9bMzf//1rMy/wADmZn//9BmZv///JmahYWLdpGFsIzCjLKLtIuvirCKkZGLoIWR///ZMzT/AAOAAP//30zMi///7YAA/wAzgAAI+2H4sgUL///4szT/ABNMzP//+kzM/wAKszR9i///8UzMi///+GZm///3GZj///SZmv//5TM0CP//IbM0//33szQF///lmZr//8IzM///4eZm///5zM3//9SAAIiFhYt2kYWwjJiMsou0i72KsIqRkYughZH//9pmZv8AApmaXP8ABEzM/wAPmZr/ACkZmggL///pzMyL///4zMz/AAKAAP8ABDM0/wAKzMwI/wBkMzT/AP2zNI2L7PufBQv//+nMzIv///jMzf8AAoAA/wAEMzP/AArMzAj/AGQzNP8A/bM0jYvs+58FC2V1ZWgfi3GaP+aHCI+cBWGTebCLoggLlo+SkrSQpJwem4CdZx4LgYt6h4d7CGr7L4uKBYiNgZceC46Lj4yMjwjX9x8FC42PjI+Lj4uWg6FuiwgLY4t2ulSLYot2an5UCKGGBZapmZugi7GLql21iwgLtoulqZfDCHWSBX5pfX53iwgL/wAezM3/AC8Zmv8AIszN/wAdZmb/ADdmZosIyJZWSh/7pweL+waKSX5pCJZ5260Fj5uMn4ujCIuyiLuLvgj3swf3B122Rx7//6PMzYv//88Zmf//wczO///vgAD//+dMzIz/ACnMzP8AApma/wApGZqLi4uPho6DiwgLi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPs0++r3NAeL3pyQ0Y6RkYughZFaim2KWItZi26MWYyFhYt2kYXRiJyGizgI/CUHizh6hkWIhYWLdpGFvIypjL6LvYuoir2KkZGLoIWRRY56kIveCPdb9+r7WweLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94IC1qKbYpYiwgLWYtujFmMhYWLdpGF0Yichos4CPs0++r3NAeL3pyQ0Y6RkYughZEIC1mLboxZjIWFi3aRhdGInIaLOAj8JQeLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I91v36vtbB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLgYt6h4d7CGr7L4uKBYiNgZcejouPjIyPCNf3HwWNj4yPi48IloOhbh4LgIt6h4d7CGr7L4uKBYiNgZcejouPjI2PCNb3HwWNj4yPi48IloOhbx4LZXVlaB+LcZo/5ocIj5wFC2GTebCLoggL/wCRszQHi/8AJ8zM///9TMyB/wAUMzT/ACSAAAj/AH+zNPd7BQv/ABwZmP8AMrM0mYX/ACyzNP8ABEzMkZGLn4WRbYpti3SLdItvi2OMhYWLd5GF/wAsTMyIpP8ABxmY///pszT//9XmaAj7C/t0BYJ6h47///czNJsI//+BzMz3cgX//+fMzP8AKpmY/wAOMzT///hmaMOOkZGLoIWRY4ppimOLZItqjG2MhYWMdpGFtYj/AAsZmv8ABGZo/wAomZr//7uZmAj/AINMzPtxBf8AEYAA///igAD/AAOAAP///4AAi2YI+x0Hizh6hjuIhYWLdpGFvIyvjMKLwYuuir2KkZGLoIWRO456kIveCAuL9wgt5y24///y5mb///0Zmv///xmaf4r///fmZvM8nC6LQov7Am5mQ4tji2iubdAIC5qwlMKLowijiJhwcYBobB6Ld41mmGpsRHRtZotBi3DRi/cEi/cOvLrMtIr/AAlMzP//+5ma/wAJszT///hmZo/7BVtFOYv7Cgj7F9tC5R7Ei6yqptOhQ7Nsvov3DovP6ovzCAvEi6yqptOhQ7Nsvov3DovP6ovzCAtWi3iShsD///ezNP8AA5ma///3mZj/AACzM///97M0///7szOLYv8AAkzM///YMzP/AASzNP//2czNCPdpBpaRkZQfg/cUBQtWi3iShsD///ezNP8AA5ma///3mZj/AACzM///97M0///7szOLYv8AAkzN///YMzP/AASzM///2czNCPdpBpaRkZQfg/cUBQuBi3qHh3sIavsvi4oFiI2Blx6Oi4+MjI8IC9f3HwWNj4yPi4+LloOhbosIC36ChICLfouGjYeOhwjw+w8FjYmOio6LjouPjI6OjY2NjouOi4yKjIuMCE33JgWJkIePhY+GjYaMhosIhIuFioaHCAt+goSAi36Lho2HjocI8PsPBY2JjoqOi46Lj4yOjo2NjY6LjouMioyLjAhN9yYFiZCHj4WPho2GjIaLhIuFioaHCAttfXl7e5B1tB8Lk5GDfh+LdHZmYYIIkHoF0ZOryYuvCK91sGUeC2OLdrpUi2KLdmp+VAihhgULlqmZm6CLsYuqXbWLtoulqZfDCHWSBX5pfX53iwgL+3kHUa1xuB62i6qamNAIc5AFhmiCe3KLCHaCn8kfi/dhgJwFC8L3JQWQmJGPo4sI92SLyPs9BQv/AA7maP//1szN///WszL/AAOZmf//0GZm///8mZqFhYt2kYWwjMKMsou0i6+KsIqRkYughZH//9kzNP8AA4AA///fTMyL///tgAD/ADOAAAj7YfiyBf//+LM0/wATTMz///pMzP8ACrM0fYv///FMzIv///hmZv//9xmY///0mZr//+UzNAj//yGzNP/997M0Bf//5Zma///CMzP//+HmZv//+czN///UgACIhYWLdpGFsIyYjLKLtIu9irCKkZGLoIWR///aZmb/AAKZmlz/AARMzP8AD5ma/wApGZoIC/glB4venJDRjpGRi6CFkVqKbYpYi1mLboxZjIWFi3aRhdGInIaLOAj7NPvq9zQHi96ckNGOkZGLoIWRWoptiliLWYtujFmMhYWLdpGF0Yichos4CPwlBwuLOHqGRYiFhYt2kYW8jKmMvou9i6iKvYqRkYughZFFjnqQi94I91v36vtbB4s4eoZFiIWFi3aRhbyMqYy+i72LqIq9ipGRi6CFkUWOepCL3ggLqqGgpx+L/wAfgABx/wAJgAB5jniNepGLoougr7m/mIuViZKEkk+AUVuLRQhPpWSzHgv//9gAAXFkTx+LRcdbx4D/AAbMzf8ABeZm/wABmZn/AAkzNP///Jma/wAJ5mZXmGm4i6CLopyRno2djqX/AAmAAIv/AB+AAAindaBsHgvVW51lP1M3P02vXcHft/cEyx4LcXmls8u62bidpnxcV2gtUR8Lc254VR+LRZlolDOTPZExjXaMhY6ElYuVi46UjJaNmf8AADM0x/8ADMzM9wD/AAozNOH/AA3MzLWLzAjBbp5zHgups6PExLFSSh6LXHxuY2YIC///v5ma///EZmb///pmZv//xZmai2AIXQeEk4iTk5SOkh63B4ujjKOYpJScn5uinLqtybeL2ovmSccli1aLYX1ucm1zdm+LZQhopIObnp+Xoh6LmImRh5CHkImRi5oIC7uaQlU+hT5QVYPZw8CN6ckfC8bNvPcL9w1Ls1FGVUMtNr490B8Le35+e3uYfpubmJibH5t+mHseC6aNposekImNhR57hFyDcYmKg4yEj4UIC4tifohjiYaDjHyPhamM/wAKszOL/wAjTM2LqYubi6mKj5KLmYeTaY16jou0CKO9B5GtU4uL4AWUg4yFHoSLf4CEgomIhYKLhQhSLwehrcreuNAIbJX7Lvtuj3/3I4sFC2J6aF4edYuAkoKUg5ODkn6LCIF/g35zx36t0LzAx8Fnvz0ffYtyhoKFCJfc9xuLi4yQrfs3i3X7I5GIBZmSoJKhiwjTjlBtHwtlhGlfb2Oi3x6LkYuTjJCgnKGRmYsIxI9UdR8LnIHaKh5yi3B6fX2Wxa7O9wGeCJ4H+y2AUSSLOQgj0m692qjMrx4LinGEY4ZvCKCIBZe7kpGniwgLpKN9cB+LbnZve4IId5UFZp+IoouaCKmjlKMeC7Ncpl5WW25eHotum3GzeAiXhQULZXdeZotnCEnPe7flqsSrHouqeaRsnAhkoAXGrY+pi5oIC6h9BbN3jHGLcghicX9nc2SWuB6LrbKym5QIC7GSrbens3Q4HncHdXp1hn2LCFOGwaEfC3qUPOwepIumnJqZf1FpSPsBeAh4B/ctl8fyi90I80GnWTxvSmceC4tDqkvlUQialQVH03ywi9aL1Z64y84IfJYFPlpfPotECAuL0l/YPrwIfIAFykieXotBi0B9ZkdDCJqBBeXFqsuL0wgLnqKgoaCLCKqfelgfC3aLc5t8oX+eh6SLpIuNi5qMjwj3PgaIyXrENosIQ1tEQUKzT+AfuYupoqWuCHebBXh1d3ZliwgL+wIGkKiksKqLCKOkflYfCzJjQERLukfc/wBTGZr/AC7mZtHM/wBIGZpm/wBG5mYvHwtObG1uYmS02dr/AB3Mzan/ACIzM7WtUTweC9fIyNfYyE4/P05NPj9OydceCy/WQebn1dXn5kHWLzBAQDAeC1WS/JX9fcCDBQv//+rmZlb//9kZmlp4iwhqi7Kuzb3vv56Xc3Efi4L///jmZl////IZmmgIC4CNd6werYuqnrO0CHecBX16foGEi4iLiY6LkouRjZSOmAi892Vbi3NpBYSefZppiwhAIyUmZp9Szx+hi6uYqKcIC+yLyLjH44f/AAeZmoL/AAWZmX//AAHMzUk4XnU2iwj7FED3Cvcd92j3CbfaH/cAi79KpS6Wif8AChmY/wAAgAD/AAfmaP8ABYAA///9Zmj/ADDmZv//++Zk/wAxTM7///KzNP8AM8zMbpFtq/seiwj7M/sR+wP7Vfsl9wL7H/dOHwvGi66pq6oIcKEFcW5kdnyLCHtsmNXqvsS2kJqHdx+LeImNi34IgJF/p5Wqk6Src7BEOjA5+wBitknMHguCZoZ1i3WLbaF8oYuwi7SkxtEIdpwFaWN3eHuLhIuIk4uVi5WNnJSvCLX3NQULTmxtbmJktNna/wAdzMyp/wAiMzS1rVE8HguLYf//8uZm///dGZr//+wZmv//4+Zm///n5mb//94Zmv//0Rma///u5mZAiwhY97wGo5Cnjq6LCMjdbfsKHwuLYnBxX4X///1MzP//9uZm////TM7///SZmv8ABWZm///5gACTjJCMkosIC6O+h1JLX35uH2uL///3szT/AAaAAP//+kzM/wALgACFl4GQfYsI///zszT///OAAP//9xma///yszP//+CAAP8ARpmY///0szP/ABozNNvGudAfi8VcpmqOCAuom6Gii6gIsGqhVzRwW3qIj3yeHqKL////MzSd/wAEzMyWkpunk5yLCJuhg3EfC5WLmY6Onf8AAUzN/wAH5mj///0zM/8ADMzM/wADgAD/AAhMzJCXl5SqiwgL+DkHppictB6sBrOafW0f/DkHb316Yh5qBmN9maofC/uuB26Ae2seZQZsgJuoH/euB6eWm6oesQaslXtvHwu+iP8ACGZm///5TMz//+6Zmv//2bM0CDL7b3pgerk1924F///15mb/ABeZmv///YAA/wAQszL/AB+Zmv8AA7M0CJyNBY7/AABmZpH/AAEZmov/AAaAAAiLnoeNBYtOiWRpVo2LHoiJi3cFi4aQ///+mZqQ////Zmb/AByAAP///IAA/wAVTM3///dmZv8ADjMz///cGZoIC/cc++0FkXyRhZiLlYuSkZKcCPce9+cFm7Kik6iOCJ4GrJV7bx/7rgcLbYtiiW2LbYthjW2LCPukPvtN+w/7RfcGNPdEH6mL9I2ki6mL8Impiwj3RPcI7PdF82n3VvvRHwv6XL/9xgausK3Aq88IZAZfWmVma3JrcWp2ansIC2cHrHutdqpxq3KxZrdaCLMGas9qwGiwCPnFvwYLrwdqm2mgbKVrpGWwX7wIYwasR6xWrmYI/cVXBgv+XFf5xgZoZmlWa0cIsga3vLGwq6SrpaygrJsIC9my+wWGBvs5/UD7DvdnBWlxYXFmeAiYb8ul9yD7hbGfBQtyYkFKWIsIRGbdzcqru8sfyIvWJaVYCAtizT3OPIsIIkkkLPsC0lnUH9WL4Nm0xQgLPnz7Cm8eeot9qnCLCHh3endyoXmr7cvm98Uf9wsHi8qH04u9i/cZn7Cgi6OLjWqriwijn5yhpHOdbiFR+wT7ih/7FweLO41xizsIC/cQ8u/3EPcPJPH7EPsPJSX7D/sP8Cb3EB8L/Kn7oV744bj7ofipBwtuc3NubqNzqKijo6ioc6NuHwv/ALYzNP8AAAAB/wCUTMz/AJSAAYv/ALZmZgj/ALZmZv//a7M0/wCTGZr//0nMzP//SczN//9tMzL//2zmZv//SZma//9JmZr/AJLMzv//a3///wC2MzMeC/8AomZk/wCDTND//33Mzv//XWZm//9dZmb//3tMzP//fIAA+zX//12Zmv//fhmY/wCDgAD/AKKZmv8AoTM0/wCB5mj/AIOZmP8AomZmHwv/ABZMzP8AEczM/wAXzMz/AADmaP8AC7M0iwj/ADxmZv8AC7M0///BszT//+FmZv//vGZm///mGZr//+GAAP//4hmaZP//2EzM/wAUszP/AGlMzR+L/wANZmb/AAFMzv8AD+Zm/wADTMycCAv/AM3//weLsv8AAOZm/wAnszT/AAEZmv8ACIAAi/8AAxma///+TMz/AAAZmv///bM0i2f//+mzNP//3czM///v5mb//8bMzf//5WZm/wABGZr///iZmv8AAuZm///55mb/AAXMzYf/AB2Zmv8ADEzM/wAOmZn/AAPmZv8ADGZmiwj/AAqzM/8AAkzO///wZmj//+nmZh///z+ZmQeL///KAAH///TmZv///MzM///SgAD///4Zmv///Bma///8GZqL///yTMz/AAPmZv///Bma/wAf5mb/AACZmf8AE4AA/wAAszT/ACCAAIv/AB8zNIv/AA+ZmP///0zM/wAggAD///9mZ/8AA+Zm/wAD5maL/wANszT///wZmv8AA+Zm///SgAD/AAHmZv//9OZo/wADMzSLwQgL/wAvZmb/AAAAAf8AR4AA/wAxZmaL/wCQTM2L/wA9GZr///HMzP8AMWZm///kszT/ACPMzP//7TM0/wAZZmZv/wARgAJviwj//8LmZv//xhma//+2gAD//4aAAP//nIAA/wAuzMz//6eZmf8ARZmaHwv30QeLx/8AAUzMyP8AAbM0mIv/AATMzP///YAA/wAAMzT///yAAIv//8izNP//3bM0///LTMz//+dMzDNi/wABmZr///SZmv8ABGZm///2gACU///55mb/AC2AAJ7/ABaAAJGeiwj/ABCAAP8AA4AAc2kf+7wHizh6hkWIhYWLdpGFvIypjL2Lu4ujir2KkZGLoIWRRY56kIveCAv/////////3Zmajv//TzM0/wCfGZr//3ZMzP8AB7Mz/wABgAD/AAYZmf8ABWZn/wACTM3/AAYZmf//5szN/wAdGZr//6aAAP8AaZmZi/8AyTMzi/8AyTM0/wBaMzP/AGmZmP8AGIAA/wAbgAD///1mZv8AB8zM///7MzT/AAVmbP//90zN/wAAmZgwPf//uOZm//+AMzCL//9xszQIC4v/ACJmZv///OZk/wCwszL//2DmaP8AibM0///4Zmj///6AAP//+eZk///6mZj///2zNP//+eZo/wAZMzT//+LmaP8AWYAA//+WgACL//82zMyL//82zM3//6XMzP//lmZn///ngAD//+SAAP8AApmY///4MzP/AASzNP//+pmZ/wAIszT///9mZ+bZ/wBHMzT/AH/MzIv/AI5MzQgLd517n5unn50ei5OJj4mSiZKGk4uTCKOardCtxXMwHotOdVpTUghFRgUuLHxei1MIi7yNqR73OQapt4mLH5e9ldOMp4WQf4yCiXtIenRpiwj7PAaLuMzLkJAI6ucF/wA15mj/ADQzNP8AKRmY/wApzMyL0wjxL7U+IlM9Uh4LtbF0UB+LXVRBNn4Ij20Fm42Yi5eLCMHMeiD7Ejduah9bi4KhgJyCmH6WeIsId3d5fGXbcsT3Be/X9xEfi/8AZ2Zm//+25mj/ACdMzv//yBmY/wAJTMwIio0F5cSQtourCLNnyCr7H2MvbH6UeKKmlaqdyMyXpB4L///dzMz//+SZmv//20zM///+gAB5iwgueeu687O6ucfIa/s2H4v//+tmZon//+eZmv//+uZo///l5mYIC5uLmoaWgahypUSL+xOLNIhPflv//+rmaD3//9IZmIF6iwgzgfc43fd9xbW2HwuL/wAiZmb///zmYP8AsLMy//9g5mj/AImzNP//+GZo///+gAD///nmZP//+pmY///9szT///nmaP8AGTM0///i5mj/AFmABP//loAAi///NszMi///NszN//+lzMj//5ZmZ///54AA///kgAD/AAKZmP//+DMz/wAEszT///qZmf8ACLM0////Zmfm2f8ARzM4/wB/zMyL/wCOTM0IC/8ARzM0/wA9mZj//75mZv//lMzM//+dmZr//88zNE///7jMzP//smZm///IzM7/AEZmaP8AYmZm9wDH/wA2ZmbHHwv7gQeLcYuAiXwImYcFkZKTlJGTm32kgamLCMzB0NXPZslNH3GLdIJyewjFB7WNpYsekImNhR57hF2DcYkIjHkFiY2KjR6gigWYkYRhHwugm5eRpYsIqallQi7//9eAAH///+iAAHVqmL8fCzVfQ0JCs07gH7iLqqOkrgh4mwV3dXh2ZYt1i3OafaJ/noeji6SL3LWsqouxi5BzjXWNe5iEmYsImZaUn61qrEwfC3d2eoF1iwhpa6bl1aemrR+ki6F3m3gIC3d2foR1iwhpZ6Dl1aekrR+ki6F3m3gIC3JzBXyccZRuiwg+Zj9LPr9ezR+ii56WnpsIIAeLdf//9WZm///8TM3///GZmv///rMzCICKBYj///+zM4n///9MzYuHCHkHi7OMpaOwiosengeLjYr/AAFmZof/AACZmgiEjAX//+fMzP8AA4AA////MzT/AAOAAIufCPfnB5GJjogeh4uFhoeICAuOhJCFkIuSi5WOj5YI4fdcBZmrlo+YiwiPj4yPH4uciowFi3WKeHZojIseioqLegWJjYiNoJWIgB6LhomFh4IISfsqSvctBYiSiZCLkAiVko+THpYGjY6Njh+LnImMBYtninh4ZIyLHoqKi3oFh42Kjh6fi/8ABLMz///65mb/AA5Mzf//3RmaCAuBi4WPio4IdgaLb4dwhm0IoYoFl7egkZ6LCNeL+yb7bgWGg4uKi4cIh4+IlR73WQaOnpGolq8IdY+EegV8aoGDZ4sIQYv3IvdmBf8ADOZm/wATGZr/AAAZmv8AA+Zmi40IjAeOh4uHHomLb4l5iwgL+0r7J/sn+0z7Svcn+yj3SvdK9yf3KPdK90r7Jvcp+0sfC3+LbYJ8hAiCpgW6nKWXtqYIm/uZBnWXfJkepgaOjoqHH3YHi1eMaWVQioseoAeNjo6PHq8Gm5maoR/3LAeriZV+Hgt+i22CfIQIgqYFupyll7amCJv7mQZ1l3yZHqcGjo6Khx92B4tWjGplT4qLHqAHjY6Ojx6vBpuZmqEf9ywHq4mVfx4Li3yIbVBpCLJ2Bap6nXKLbAhrbFExX0iczB6LsLevsaAIf5EFY558pYuoCLi7qL+4uW9kHgv/AL6AAvcv/wCaAAH/AL0zM/8AvTM0+y//AJiAAP//QX/+//9BgAD//2aAAP//Z4AA//9CzMz//0LMzf8AmYAA//9l////AL6AAB8L/wCyszL/AI8zNP//cczM//9OgAD//06AAP//b0zM//9xzMz//07Mzv//TUzN//9wzM3/AI+zNPdE90T/AI8zM/8Aj7M0/wCyszMfC/8AmwAC/wB/GZj/AHyZmv8Am4AA9y77Fv8Ac8zO//9n5mb//2fmZv//f5ma//+MMzL7Lvsu/wB9gAD//4HmZvcvHwv/AI3Mzv8AdJmY//+NszT//3MzNP//cbMz//+LZmj//42Zmf//cjMy//9wzM3//45Mzf8Ac+Zn/wCMzM3/AIzMzP8AcxmZ/wByTMz/AI3MzR8L98T//s/mZv8BMBma/wEwGZr//s/mZvfEBQv3FfT09xX3FSLz+xX7FSMj+xX7FfMi9xUfC/cH6C/7B/sHLS77BvsHL+j3B/cG5+j3Bx8L7dQ7MC9DPCgoQ9rn6dbY6x8L9uE1ICA0NSEgNeL19eHi9h8LfZaAmZmWlpmZgJZ9fYCAfR4LfZaAmZiXlpmZf5Z+fYCAfR4L6tra6uraPCwsPDwsLDza6h4LkYGVh5CLkouQjJWTCIv3OfckywWQlIuOi5GLkIWcfZAI+z5AiYcFC4v3UomP+z7WBX2GhXqLhouFi4iQggj3JEuL+zkFlYOQipKLkIuVj5GVCAt0nniiop6eoqJ4nnR0eHh0HguLZqZZi2qLeIJ+c4tri3uofosIfIGDfXitcbu7rKi5HwuVy7WOmIsIoKZ/XIWIiYYfC3d1d4FsiwhrWq3gH/cqBpGPj5G7eb5AVVBZNEquVdkftIutoKGpCAt8l3+ampiXmpp+l3wefH9/fB8Lm4uahpaB/wAGTMz///qZmP8ABoAA///4Zmj/AAYzNP//9hmaCP//ZmZm//6MzMwF///1gAD/AC7Mzf///Rma/wAzgACL/wAjzM2L933KtbaLCAv/AA0zNP//2oAA/wAJTMz//8uzNIv//7tmZos0hE9+W///6uZmPf//0BmagHqL///dZmaL///oszT/ABmZmv//8GZmrwgLMVxJUh5ni36ifZ7///QZmv8AEBma///v5mb/AA7mZneLCHl5e3hk3GvB9wne4vcL50zdIR9ii2iDeoQInvcyBa6Hqoe4iwgLp4urjLKPCJrMhY4FC1WFV4dZi2iLaY1qjghr+6UFvZ6vj62LCMm7YiQfC/sdi/cc9xkF/wA6MzT/ADjmZv8AGMzM/wAoGZqLuYvIYromiyyLTlh6V/8ABuZm///4GZr/AAxMzf//+5ma/wAOzM3///1MzKDAvKC8i7mLpm+LVgiLUf//7WZm///kgAD//5OZmv//mYAACPsDIpZ0BZWMwYykiwj3KAazi62KnIqQqpW8ncWC/wAGMzOC/wAAGZqC/wAAszMIfm4Fc1aFhVKLCAvBzHog+xI3bmofW4uCoYCcgph+lniLCHd3eXxl23LE9wXv1/cRH4v/AGdmZv//tuZm/wAnTM3//8gZmv8ACUzNCIqNBQt3jICYHpqLnZSWk5SQjJOLkgj3Bs4HmJmelpSHkYEfO/c3Bp+Kln4efIt5goCDgoaKg4uECPsx+0YH95r4EwWOkImRhYsIcQaFi4aGh4YI+6T8FgWKioqKi4qOfZNxqIsI91gGC/c5BkH7TED7TEv7JAiShcyOBcH3NcP3MfX3lgh8lgV7hnaGZ4sI+1cGC///3+Zmi/8AApma/wAJmZr//+6AAP8AA2Zm///9mZqL///+Zmb///9mZov///2ZmopegVKDWgipiAWg16uRqYsIC8mlXl8fi1hUXXF4CG6dBU+yha6LqAi3qrPEHgtkaXtgi2YIKtBY7/cQxubTHovCcv8AK+ZmWv8AIBmaCFGxBbWnzbuLyAgLYEmt4B+Lp5rO3MEIt3AF/wA65mb//9vmZv8AGRma///TGZqLXggsQ3dgHgv//+aZmv//qczM///D5mb//6AzM///gYAA///QzM2LgI6Dk4brp/8AOoAA/wAnmZr/ADTmZv8APWZm/wA6mZrPqOGL1gj3VPsIsUL7EFn//4gZmv//ruZmOrM99xUe/wAb5maLtv8ACUzM/wAdGZr/AA/mZwgLgmeLZIp3CGD7U5YHi8+Qr5GeoNu1mJqLlouTiZuBrnWAUr2LCAuBg3aEiomNkJOToZGOjIiIHgt2hIVyHngGiImJiB+LgI2J2Y0FC7uK9IuL+ycFZpZzrB6mi6WYo6cIgJUFfIB9hXyLCHuGnbEf9wrFB5KTjZEfC3dfgXJThoWFi3aRhaGMnYyli7CLoYqwipGRi6CFkVWP///4TM3/AAzMzf8AFrMz/wAyMzMIp8kFjpKRj5iLCPc/i6hCBZ5al35NhoWFi3aRhbCMp4y0i66Lm4qwipGRi6CFkVGS////GZqa///q5ma+CPsi9+sFhJx/k3aLgot9hoF2CAv7GgZ3i5SQH9b3PQX/AAJMzI7/AAJmaP///xma/wACTMz///7mZggL2Yu7qLrK///7Zmb/AAaZmv//+oAAlf//9hma/wADZmZdVWh3SIsIKFH27vc82a7WH9uLul+XRZWIlf///5malf8ABmZm////szT/ACkZmv///hmY/wApzMz///YzNP8ALRmaZYtemzuL+xiLJSeL+yaL///AgAD/ABPmZv//u7Mz/wAxGZr//9LMzQj/ACfmZv//20zN/wA4GZr//+uzM9WLCAv31gekpJGy9zyi+wkj+yBNZvsCP4Scpx4LYItyjGCMhYWLdpGFyIeWh4s4CPtsB4s4gIhOhoWFi3aRhbWMpYy3i6mLr4nbiwj3A/cQv/dD9xk58/s7H3GLM4l4iwgL0ouHeI1mkIadi5CQiqiKm4uni6eMnYykhpB5i4aGiV6OgUWKCFL3IgacmJaeHtgGyYuYap1SlYqUjZOPh61/2YmSi42KjImLfYmEiXeLCPtjBouLR4xgjIWFi3aRhciHloeLOAj7bAeLOICIToaFhYt2kYW1jNGMi4sI9y4Gs82Jix8Ll7SWwpK1gpCDjYCIe1BuWUyLCDgGeX2knh/3KgcLKAdycmN+aIsI+xFc9xTd9w3L3usfC+6LtVmaS5X///zmZpX///+ZmpX/AAaAAP///uZmtP///YAA/wApszT///aZmv8ALUzMbYtBm1OLCPsj+wkv+zL7E+0k9yMfz4vaqMm2CAuEkoSUi5II1geL/wAYzM2X/wAEMzOjj/8AA+Zm/wAAszP/AAIZmv8AAUzNi48Ii6GJjAWLXIpvbTuMix6Kiot1BYuHjv///kzNjv///7MzCJ+JBf8AHLM0///9GZr/AA5MzP//+eZmi3UIC4velo7IkJGRi6CFkWGKcYpfi2CLcoxgjIWFi3aRhciHloeLOAj7bAeLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94IC/ubB/tIaW9sHn6LhZKElYKXgJhviwh+dH52arJ6oB+ii7SMta7Btq3Ni/cSCPeGB4velo7IkJGRi6CFkWGKcYpfi16Lb4xgjIWFi3aRhciHm4eLOAgLi4ui65K1gpCDjYCIe1BuWkyLCF4GdH2bnh/3oQeL3paOyJCRkYughZFhinGKX4tgi3KMYIyFhYt2kYXIh5aHizgI+2wHiziJhkWIhYWLdpGFvIzNjIuLCAvk2Dn7GvsPTkAyKkbj9w/3G9bP1h8L9yL7Buj7FvsfICb7J/sc8iv3G/c44/cH9xYeC+CTB8+L/wAUzMz//9lmZv8ADTM0///imZoIpk8FC/8AGmZm///FTM3/ABmZmv//4bMzu4uai6mNmJL/AAKAAP8ACkzN/wAATMz/AAlmZv//9zM0/wAKTM1ni///8WZm/wAOMzP//+yZmv8AKszNCGnWBX+qb6xqjgiMB86RwLWL0IvaZ7D7G4tyi2aJZItgi3KMYIyFhYt2kYXIh5aHizgI+2wHC4s4gIhOhoWFi3aRhbWMpYy3i7CLm4q2ipGRi6CFkVuQgo6L3ggLcotxoTqLRYs9Y4s5i0LZZLR4zP//4eZmtv//6Rmai1KLUXBvUIsIC1OLXqt55P//84AA/wAEZmb///ZmZv///GZn///2GZr///0zM/8AAkzN//+5gAD/AAGzM///2YAAkmuZjZKPl4sIC56LqHrYi+SLxP8ANuZmi/8AVhmai9kxulqgc5ZCq4u7i7anp7+LCAu8i7dqmkuUiJSLlJAIi6mNroW0CAv3kAeil6inHqwGtouYd59D/wAKMzT///3mZv8ACTMy/wAAZmb/AAeZmv8ABLM0hLuKuIu3///3szT/AALmZv//95mY////gAD///ezNP///ZmaiYWCg3uLCPvVBnuLgpOJkf//97Mz/wABmZr///eZmv///2Zm///3szOKi1+LXYNclP///MzMlP///0zOlP8AAOZmn9OXn7iLCLYGqJVudR/7kQeLOICIToaFhYt2kYW1jKWMt4u2i6SKtoqRkYughZFOj4CPi94IC/sTBzWLJfsYIH7h6B73HAeL3paOyJCRkYughZFhinGKX4tgi3KMYIyFhYt2kYXIh5aHizgI+zEH+yrsYuD3L7Tj9yYe9wYHi96WjsiQkZGLoIWRbYpnim2LbYtojG2MhYWLdpGFyIeWh4s4CAv//7xMzPsPiYv//7XmZvcPBf//5Bmatv//9czN/wASmZr/AD4zM/8ABWZmkZGLoIWRZopvimKLaIt7jGaMhYWLdpGF/wA5gAD///kzNP8AAIAA///rzMz/AB1mZl0I/wBhmZr7NItBBYs4gIhOhoWFi3aRhbWMpYy3i7aLpIq2ipGRi6CFkU6PgI+L3giL2f8AV2Zm9y8F/wAXmZq0k6fDkJGRi6CFkXWKeYpxi2aLdYxmjIWFi3aRhcGHlXz//+SzNFsIC1j3KwakpJGy9zyi+wkj+yBNZvsCP4Scpx73GL4HC2CLcoxgjIWFi3aRhciHloeLOAgwPGTaNQeLOICIToaFhYt2kYW1jKWMt4upi6+J24sI9wP3EL/3Q/cZOfP7Ox9xizOJeIsIC/dSB4v/ADEzNP8ADLMz///2gAD/ABdMzf//40zMCPd/+80FC5p7m4WaiwiXlZKfH/fXB4velo7IkJGRi6CFkW2KZ4pti22LaIxtjIWFi3aRhciHloeLOAj7TweLcIh6bLUI+3n3y/sijYmIi3MFh5GJjh6xiJZ/lXkI+6YHC4s4gIdOh4WFi3aRhamMroypi6mLr4qpipGRi6CFkU6QgI6L3ggLvIu3appLlIiUi5SQi6mNroW0CAs9Zm8/Hmn3NgaemJe/xKRwTx4LRT1jOR+LQtlktHjM///h5ma2///pGZqLUotRcG9QiwgL///f5mb/AAAZmv8AApma/wAKgAD//+6AAP8AA2Zm///9mZqL///+Zmb///9mZov///2ZmopehmGCWgiliAWg062hqIsI9yYG/wAP5maL///2MzT///EzNP//++Zm///5zMwI+5v8DgWHhYiGi4UIhY+Hlh736waPqpa6nMUIcJJ+bgV0VnpwUYsI+wsG///n5maL/wAAszSW/wAJZmaZCPeM9/4FmqCPkouTCAuRhY97HoCLeohzhggL93QHtY2lix6QiY2FHnuEXYNxiQiMeQWJjYqNHqCKBZiRhGEfYgd8mXOScYsIPmY9Sz67Wc0fo4uhmJ6bCI2LiWqbiwUL/wAMTM3/AAezNP8AHv//lf8AJ7M0/wAHTMwIiZ1sjgV9jIiNi6wIC3t8fXKLdot1m3uahAgLbHd3dItxCFXAfbja4qfOHoufgpp6mnOhYo91i4GLfIl9ioKKhIqIiwgLi5iNlpKVmYOdh6KLvovAqYvHi6iAmnqejpGRk5KLlIuRiI6FCI2EkYaViwgLkYiViJKLkouUjJSLk4ySi5CLqYufhZyCpH+ThYt7CF5Nh1YeC3ZWj7kfi6CNmJ6dCAtagreru52aq7CgdFkfC3uEXYNxiQiMeQWJjYqNHqCKBZiRhGEfC5j/ABKAAKT/ABeAAKSLCKenZ0IuYoh0dWqYvx8LxgaQlI2QH50HjYmNiB4LR+oGZX6LgAVcgXNiiYuKiR5zB4mMi40eC7P7SwZfoHqoHqeLopOlpgh7nAV7f4GGe4sIeoedsR8LcPcfpgcL/wAMTM3/AAezM/8AHv//lf8AJ7M0/wAHTM0IiZ1sjgV9jIiNi6wIC3uEXYNxiQiMeQWJjYqNHqCKBQsAAAABAAAADgAAAVwEFAAAAAIANwABAA8AAQAQABAAAgARAHcAAQB4AHgAAwB5AHsAAQB8AH4AAgB/AiwAAQItAi0AAwIuAqIAAQKjAqUAAwKmArEAAQKyAvUAAwL2AvYAAQL3AwwAAwMNAxIAAQMTAyAAAwMhBHQAAQR1BH4AAwR/BH8AAQSABIIAAwSDBIMAAQSEBIQAAwSFBIUAAQSGBIcAAwSIBrUAAQa2BrYAAga3BsMAAQbEBsQAAgbFBsgAAQbJBssAAgbMBv4AAQb/Bv8AAgcABwEAAQcCBwIAAgcDBxoAAQcbBycAAgcoCO4AAQjvCP0AAgj+CQAAAQkBCQMAAgkECQQAAQkFCQgAAgkJCU0AAQlOCU4AAglPCYEAAQmCCYIAAgmDCccAAQnICdAAAwnRCdEAAQnSCdIAAwnTCdMAAQnUCdQAAwnVCeQAAQnlCesAAgnsCewAAQJUADEAZgB0AIIAkACYAKAAqAC2AL4AxgDOANYA3gDsAPQA/AEKAR4BJgEuATwBSgFSAWABbgF8AYoBkgGaAaIBqgGyAboBwgHKAdIB2gHiAfAB+AIAAggCEAIYAiACKAI2AkQCTAACAAYACgABANcAAQGoAAIABgAKAAEA0AABAZ4AAgAGAAoAAQEEAAEBvwABAAQAAQK8AAEABAAB//4AAQAEAAEATgACAAYACgABAPAAAQH+AAEABAABAOwAAQAEAAEBlAABAAQAAQGsAAEABAABAOQAAQAEAAEA9AACAAYACgABAPcAAQHNAAEABAABAQAAAQAEAAECDwACAAYACgABAhkAAQLqAAMACAAMABAAAQIeAAEDCAABA9AAAQAEAAEA8gABAAQAAQI0AAIABgAKAAECPwABAxAAAgAGAAoAAQDsAAEBsgABAAQAAQEtAAIABgAKAAEBBAABAikAAgAGAAoAAQEKAAECJAACAAYACgABAQgAAQIpAAIABgAKAAEBAgABAiQAAQAEAAEBHwABAAQAAQEoAAEABAABARcAAQAEAAEBKgABAAQAAQGWAAEABAABAZcAAQAEAAEBMgABAAQAAQGXAAEABAABARcAAQAEAAEA+wABAAQAAQEMAAIABgAKAAEA/gABAhgAAQAEAAEBCgABAAQAAQLEAAEABAABAdgAAQAEAAEBCgABAAQAAQEKAAEABAABARUAAQAEAAEBIAACAAYACgABAQoAAQImAAIABgAKAAEBDAABAhsAAQAEAAEBCQABAAQAAQFlAAIAEAB8AH4AAAGxAbEAAwHPAc8ABAMuAy4ABQa2BrYABgbEBsQABwbJBssACAcpBysACwctBzAADgcyBzMAEgc6BzoAFAjvCP0AFQkBCQMAJAkGCQcAJwmCCYIAKQnlCesAKgACAAEASgBLAAEAAAABAAAACgG4AxIABURGTFQAIGN5cmwAWmdyZWsAlGhlYnIAzGxhdG4A4gAEAAAAAP//ABgAAAABAAIAAwAEAAUABgAIAAkACwANAA4ADwAQABEAEgAUABUAFgAXABgAGQAaABsABAAAAAD//wAYAAAAAQACAAMABAAFAAYACAAJAAsADQAOAA8AEAARABIAFAAVABYAFwAYABkAGgAbAAQAAAAA//8AFwAAAAEAAgADAAQABgAIAAkACwANAA4ADwAQABEAEgAUABUAFgAXABgAGQAaABsABAAAAAD//wAGAAMABwALAA0AFwAYACgABkFaRSAAXkNSVCAAXkRFVSAAKE1PTCAAlFJPTSAAlFRSSyAAXgAA//8AGAAAAAEAAgADAAQABQAGAAgACQALAA0ADgAPABAAEQASABQAFQAWABcAGAAZABoAGwAA//8AGAAAAAEAAgADAAQABQAGAAgACgALAA0ADgAPABAAEQATABQAFQAWABcAGAAZABoAGwAA//8AGQAAAAEAAgADAAQABQAGAAgACQALAAwADQAOAA8AEAARABIAFAAVABYAFwAYABkAGgAbABxhYWx0AKpjMnNjALBjYXNlALZjY21wALxkbGlnAMJmaW5hAMhmcmFjAM5mcmFjANZobGlnANxsaWdhAOJsaWdhAOpsbnVtAPBsb2NsAPZuYWx0APxvbnVtAQJwbnVtAQhzYWx0AQ5zaW5mARRzbWNwARpzbWNwASJzczAxASpzczAyATBzczAzATZzczA0ATxzczA1AUJzdXBzAUh0bnVtAU56ZXJvAVQAAAABAAAAAAABAAoAAAABABsAAAABABUAAAABAA4AAAABAAUAAAACAAYABwAAAAEABgAAAAEADQAAAAIACwAMAAAAAQAMAAAAAQAPAAAAAQABAAAAAQAcAAAAAQASAAAAAQARAAAAAQAUAAAAAQAJAAAAAgACAAMAAAACAAMABAAAAAEAFgAAAAEAFwAAAAEAGAAAAAEAGQAAAAEAGgAAAAEACAAAAAEAEAAAAAEAEwAgAEIASgBSAFoAYgBqAHIAfACEAIwAlACcAKQArAC0ALwAxADMANQA3ADkAOwA9AD8AQQBDAEUARwBJAEsATQBPAADAAAAAQECAAEAAAABB1gAAQAAAAEHcgABAAAAAQd2AAEAAAABCPQAAQAAAAEI+AAGAAAAAgj8CToABAAAAAEJgAABAAAAAQrQAAEAAAABC5IAAQAAAAEMGgAEAAAAAQ3MAAQAAAABDf4ABAAAAAEPWAAEAAAAAQ92AAEAAAABD5wAAQAAAAEP0gABAAAAARAOAAEAAAABEGgAAQAAAAEQogABAAAAARCsAAYAAAABEM4AAQAAAAESrgABAAAAARK8AAEAAAABEsoAAQAAAAES2AABAAAAARLcAAEAAAABEuAAAQAAAAEThgABAAAAAROOAAEAAAABE5gAAQAAAAETqgABBOQAuwF8AYABhAGIAZABlAGYAaQBrAG0AbwBxAHMAdQB3AHkAewB8AH2AfwCAAIE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AjMALgJHAkcALweAB4AAMAjpCOkAMQnWCdYAMgACAFwAKwbqBusG5wboBt0G3gbfBuAG4QbiBuMG5AblBuYG6QbsCbIJswm0Bu0JtQm2CbcJuAm5CboJuwm8Cb0G7gm+Cb8JwAnBCcIJwwnECcUG7wnGCccG6AbdAAIACAAJAAoAAAAMAAwAAgAOAA4AAwARABoABAAeAB4ADgBCAFsADweAB4AAKQnWCdYAKgACAN4AbAkOCdcJ2AkqCQ8JEAkRCRIJEwkUCRUJFgkXCRgJGQkaCRsJHAkdCR4JHwkgCSEJIgkjCSQJJQkmCScJKAnZCdoJ2wncCd0J3wngCd4JKwksCS0JLgkvCTAJMQkyCTMJNAk1CTYJNwk4CTkJOgk7CTwJPQk+CT8JQAlBCUMJRAlFCUYJRwlICUkJUAlRCVIJUwlUCU8JVQlWCVcJbglLCVgJaglZCVoJWwlcCV0JXglfCWAJYQliCWMJawlkCWUJZglKCWcJaAlpCW0JbAlNCeEJ4gkvCUEJRwABAGwABwAJAAoADgAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA+AFwAXgBhAGsAewB/AIAAgQCCAIMAhACFAIYAhwCIAIkAigCLAIwAjQCOAI8AkACRAJIAkwCUAJUAlgCYAJkAmgCbAJwAnQCeAMIAxADGAMwAzgDQANgA2gDeAPAA8gD5AP0BAQEDAQcBCgEQARQBGAEaAR4BIAEiASQBJgEuATABOAE5ATsBPQHYAdoFSQbBBsII6wjsCO0AAQAyAAIACgAeAAIABgAOCegAAwBHAEoJ5gACAEoAAgAGAA4JAgADAT8ASgj8AAIASgABAAIARwE/AAEBSgAKABoALAA4AEoAXABmANoA5AD2ASAAAgAGAAwGywACACAGxAACAAIAAQAEBrYAAwAPAA8AAgAGAAwGygACAAIGyQACACAAAgAGAAwJTgACCSMJBgACAFYAAQAECQcAAgBJAA0AHAAkACwANAA8AEQASgBQAFYAXABiAGgAbgjzAAMARwBVCPIAAwBHAEwI8QADAEcASwjwAAMARwBJCekAAwBHAE0I9wACAFUI9gACAEwI9QACAEsI7wACAEMI9AACAEkJggACCYEJ5wACAE0J5QACAEcAAQAECPoAAgBVAAIABgAMBwIAAgAnBv8AAgAkAAUADAASABgAHgAkCQEAAgBNCP0AAgE/CQUAAgBJCQMAAgBUCeoAAgBVAAUADAASABgAHgAkCPMAAgBVCPIAAgBMCPEAAgBLCPAAAgBJCekAAgBNAAEACgACAA8AIAAyADUARwBVAHABPwnlAAEAHgACAAoAFAABAAQI+wACAFUAAQAECesAAgBVAAEAAgBEAFQAAQAmAAIACgAcAAIABgAMCPkAAgBJCPgAAgBMAAEABAkIAAIAWwABAAIARABVAAIALgAUCNEI0gjTCNQI1QjWCNcI2AjZCNoAEQASABMAFAAVABYAFwAYABkAGgACAAII4QjqAAAJpAmtAAoAAgA0ABcJ1gARABIAEwAUABUAFgAXABgAGQAaBvkAZQmkCaUJpgmnCagJqQmqCasJrAmtAAIAAgjQCNwAAAjhCOoADQACADQAFwjRCNII0wjUCNUI1gjXCNgI2QjaCNwI2wjZCOEI4gjjCOQI5QjmCOcI6AjqCNAAAgAHABEAGgAAAGUAZQAKBvkG+QALCOkI6QAMCaQJqwANCa0JrQAVCdYJ1gAWAAIAMgAWCaQJpQmmCacJqAmpCaoJqwmsCa0I4QjhCOII4wjkCOUI5gjnCOgI6QjqBvkAAgACABEAGgAACNAI2wAKAAIACgACCdYI0AABAAIAEQjRAAIAFgAICQ4JCQNwA3EDggN1AEkJcAABAAgABwBJA1MDWQNbA2cJCQkPAAIAGABMAEwATAAGAAABsgHEAdYAAAAAAAIACABHAEcAAABKAEsAAQKyAscAAwLMAswAGQMCAwIAGgMIAwkAGwnICdQAHQnlCeUAKgACADsACgAKAAQAIAAgAAQAIgA0AAUANQA1AAQANgA2AAUANwA4AAQAOQA5AAUAOgA6AAQAOwA7AAUAPgA+AAQARwBHAAMASgBLAAEAXQBeAAQAZgBmAAQAagBqAAQAcgBzAAQAdgB2AAQAeQB5AAQAggCCAAUAhgCHAAUAlACUAAUAnQCdAAQAngCeAAUAoACgAAQAowCkAAQAqACoAAQAqwCsAAQArwCvAAQAsgCyAAQAtQC2AAQAuQC5AAQAvAC8AAQAvwC/AAQAwQDBAAQAwwDDAAQA0wDTAAQA1QDVAAQA2wDbAAQA6QDpAAQA6wDrAAQA7QDtAAQA8wDzAAQBDQEN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A9oD4APmA+wD8gP4A/4EBAQKBBAEFgQcBCIEKAQuBDQEOgRABEYETARSBFgEXgRkBGoEcAR2BHwEggSIBI4ElASaBKAEpgSsBLIEuAS+BMQEygTQBNYE3ATiBOgE7gT0BPoFAAUGBQwFEgUYBR4FJAUqBTAFNgU8BUIFSAVOBVQFWgVgBWYFbAVyBXgFfgWEBYoFkAWWBZwFogWoBa4FtAW6BcAFxgXMBdIF2AXeBeQF6gXwBfYF/AYCBggGDgYUBhoGIAYmBiwGMgY4Bj4GRAZKBlAGVgZcBmIGaAZuBnQGegaABoYGjAaSBpgGngakBqoGsAa2BrwGwgbIBs4G1AABAWIDUgABAQsDUgABAVQDUgABATIDUgABAREDUgABARQDUgABAW0DUgABAWkDUgABAJYDUgABALYDUgABAVADUgABAJUDUgABAa8DUgABAVoDUgABAU8DUgABARUDUgABAVwDUgABAQ0DUgABAOcDUgABATMDUgABAVoDUgABAVADUgABAcIDUgABAUwDUgABAScDUgABAUADUgABANEChQABAPIChQABANoChQABAPIChQABAOcChQABASsChQABAIkDGwABARMChgABAH0DQwABAYgChQABAQgChgABAO4ChQABAQ8ChgABAO4ChQABAL8ChgABAM4ChQABAP8ChQABAQAChgABAVkChgABAQAChgABAQoChQABANwChgABAWoDfgABAWwDfgABAWoDfgABAWwDfgABAikDJQABAXMDUgABASgDfgABAJADfgABAJQDfgABAVUDUgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAV8DUgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABAVgDfgABARkDUgABAP8DQgABAP8DQgABANYDQgABAP8DQgABAP8DQgABAP8DQgABAUwChAABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAIkDGwABAP8DQgABAP8DQgABAP8DQgABAP8DQQABAP8DQgABAP8DQgABAP8DQgABAP8DQgABAPcDQgABAP8DQgABAP8DQgABARYChgABAP8DQgABANECywABAW0DUgABANEChQABAOMDGwABAOMDGwABAOMDGwABAOMDGwABAOYDGwABAOcChQABAIsDGwABAJIDUgABAIQDBwABAIQChQABAPAChAABAVoDJAABAQgChgABAiICugABAMIDGwABAPcDGwABAUcDJQABAQsDJQABATIDJQABANECigABAUsDJQABASsChQABAa8DIQABAQgChgABAWMDJAABAVAChgABAQ4ChAABANYChQABAREDUgABAOAChQABAQUChgABAIwChQABAXkChgABANoChQABANoChQABAMwChQABAMoChQABANEChQABAMIChQABAQkChQABAQIChQABASsCNQABASsCNQABAHsChQABAIAChQABAZcChQABAX8ChQABAQgChgABAQcChQABAN4CvwABAQMChQABANoChgABAP8ChgABAO4ChQABARb/KgABARb/KgABAQMChQABASwDIgABAOAChQABAQwChgABAVUChQABANMChQABAOwChQABAOICPQABAOICPQABAK4CPQABAOICPQABAOwCPQABAPMCPQABAPICPQABAOUCPQABAOICPQABAOICPQABAQICPQABAQkCPQABAQQCPQABAPACPQABAPICPQABAOICPQABAOICPQABAOICPQABAPQCPQABAOICPQABARYCPQABAQYCPQABAPMCPQABAPICPQABAPQCPQABAOcChQABAOcChQABAJIDUgABAVoDUgABAP8ChQABAOcChQABAJIDUgABAIQDBwABAOcChQABARQDJAABAQ4ChAABALQChQABASsChQABAVADHgABARMChgABAUADIwABANoChgABAPwChgABANEChQABAiMChgABAjIChQABAVkChgABASECtQABAVEChgABAVEChgABAa4DJQABAP8ChgABAIwChQABANsAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7AEIARABFAEYASABJAEoATABNAE4ATwBQAFEAUgBTAFQAVgBXAFgAWQBaAFsAggCDAIQAhQCGAIcAigCOAI8AkACRAJIAkwCUAJUAlgCYAJkAmgCbAJwAnQCeAKAAoQCiAKMApAClAKYApwCoAKkAqgCrAKwArQCuAK8AsQCyALMAtAC1ALYAuQC6ALsAvAC9AL4AvwDBAMQAxQDJAMsAzQDVANcA2QDpAO4A7wDxAPgBCgELARIBIQErAUEBRAFKAUwBVAFVAVwBXgFiAWMBdAGdAegB6QH1AfcB+QIIAgkCCgILAg0CDgIUAhcCGAIZAhsCHAIhAiMCJAIlAi4CPQJEAlACUgJgAmEDZgOaBAIEBARQBFQEZASKBIsEjASNBI4EkQSSBJQElQSWBJcEmASbBJwEnQSeBJ8EoAShBKIEowSkBKUEpgSnBMQExgTXBR0FHgVkBXUFdgV4BaUFqgdMCKwIrQiuCK8IsAixCN4I9gkFCQgJJgmLCYwJjQmRCeQAAgAQANMA0wAAAi0CLQABArICxgACAu8C9QAXAvgC+AAeAvwC/gAfAwEDAwAiAwgDCAAlAwwDDAAmAxQDIAAnBH4EfgA0BIQEhAA1BIYEhwA2CcgJ0AA4CdIJ0gBBCdQJ1ABCAEMAAAEOAAABFAAAARoAAAEgAAABJgAAASwAAAEyAAABOAAAAT4AAAFEAAABSgAAAVAAAAFWAAABXAAAAWIAAAFoAAABbgAAAXQAAAF6AAABgAAAAYYAAAGMAAABkgAAAZgAAAGeAAABpAAAAaoAAAGwAAABtgAAAbwAAAHCAAAByAAAAc4AAAHUAAAB2gAAAeAAAAHmAAAB7AAAAfIAAAH4AAAB/gAAAgQAAAIKAAACEAAAAhYAAAIcAAACIgAAAigAAAIuAAACNAAAAjoAAAJAAAACRgAAAkwAAAJSAAACWAAAAl4AAAJkAAACagAAAnAAAAJ2AAACfAAAAoIAAAKIAAACjgAAApQAAAKaAAEA4wK6AAEAvwAaAAH/cgKrAAH/QQKqAAH/dQK5AAH/dQK5AAH/LwKFAAH/MwKFAAH/XwKpAAH/TAKbAAH/LgKFAAH/YAL9AAH/SALEAAH/JQLKAAH/MwKkAAH/ZQKwAAH/CwLPAAH/dAL2AAH/BQKjAAH/MwKFAAH/kgJdAAH/oAJdAAH/tAJdAAH+9wJdAAH+9wJdAAH/FQJjAAH/cgKrAAH/QQKqAAH/GwJpAAH/oAJdAAH/BQJtAAH/KQKFAAH/MwKFAAH/FQKFAAH/NwKFAAH/VQKFAAH/BQKFAAH/VQKFAAH/XAKFAAH/VQKFAAH/DAKFAAH/HwKFAAH/XwKFAAH/ZwKFAAH/YAKFAAH/QQKFAAH/IwKFAAH/PgKFAAH/NwKFAAH/OwKFAAH/FQKFAAH/HAKEAAEAqgI/AAEA0gI/AAEApAI/AAEApAI/AAH/UQKzAAH/LgK1AAH/ewKsAAH/TAJ/AAH/XwKSAAH/HgLrAAH/JALpAAH/YAKSAAH/QQMlAAH/EwMgAAEAkgKuAAECWgH2AAECagAMAD0AfACCAIgAjgCUAJoAoACmAKwAsgC4AL4AxADKANAA1gDcAOIA6ADuAPQA+gEAAQYBDAESARgBHgEkASoBMAE2ATwBQgFIAU4BVAFaAWABZgFsAXIBeAF+AYQBigGQAZYBnAGiAagBrgG0AboBwAHGAcwB0gHYAd4B5AABAJIAuQABAVoBOwABAVoBOwABATQBTwABAWQB5QABAJQBRQABALoBOwABAR4BOwABAaoBvQABAWQBQAABAVoBQgABAR4B0AABAVABRAABARYB1AABAOwBWQABATMBHQABAVABQQABAU4B2gABAUYBRQABATEBQQABAOwA1wABAOwA1wABAOwA1wABAOwA1wABAIgA1wABAOMBHQABAQgA1wABAI4A1wABAJoA1wABAIgA1wABAQoA1wABAQgA1wABAOwA1wABAPYA1wABAOwA1wABAIgAuQABAH8A1wABAPYA1wABAPcBCwABAO0A1wABAM8A1wABAMEBEgABAGMBEgABAKABEgABAOkBEgABAF0BEgABAOgBEgABAP0A/wABAMEBEgABAMEBEgABAMEBEgABAQwBEgABARsBEgABAHMBEgABAPQBEgABARQBEgABAQIBEgABAQcBEgABAOABEgABAMEBEgABAQ0BEgACABAAIwAlAAAAKAArAAMALQA3AAcAOQA5ABIAOwA7ABMAQwBLABQATQBTAB0AVQBXACQAWQBZACcAWwBbACgEiwSPACkEkQSSAC4ElASYADAEmgSeADUEoQSiADoEpASkADwAAQAGAuYC5wLoAukC6gSBAAYAAAAaAAAAIAAAACYAAAAsAAAAMgAAADgAAf84ANcAAf84ANcAAf8QANcAAf8NANcAAf6FASkAAQClAPsAAQGEATYAAQGOAAwAJQBMAFIAWABeAGQAagBwAHYAfACCAIgAjgCUAJoAoACmAKwAsgC4AL4AxADKANAA1gDcAOIA6ADuAPQA+gEAAQYBDAESARgBHgEkAAEBmgAQAAEBaQAqAAEBOAAUAAEBgAApAAEBoQAKAAEA0QAKAAEBdAAsAAEBIgAN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Ad//kgABATP/kgABASf/kgABAR//kgABAMT/kgABAOr/kgABAOz/kgABAN3/kgABAOr/kgABAIT/kgABAPn/kgABAQP/kgABAIj/kgABAQf/kgABAIf/kgABAZL/kgABAQn/kgABAPP/kgABASr/kgABAJT/kgABAIf/kgABAMT/kgABAKP/kgABAO//kgABAPH/kgABAWD/kgABAOD/kgABATz/kgABAM//kgABAiX/lQABARf/lQABARf/lQABARf/lQABARf/lQABAUf/kwABAMT/lAABAJL/lAABAOz/kgABAOz/kgABAOz/kgABAOz/kgABAOz/kgABAOz/kgABAEb/lAABAIj/kgABAIv/lAABAIT/lAABAWz/kwABAQn/kQABALf/kgABAO//kgABAUj/lAABAOb/kwABAQz/lAABAO7/lAABAXH/lQABANT/lQABAQP/kQABAQf/lQABAcL/lAABAQn/kQABAV7/jwABAKP/lQABAQb/kQABAKP/kwABAVz/kwABAOX/jgABANT/jgABAPP/jgABANT/jgABAKz/jgABANT/jgABANT/jgABANT/jgABANT/jgABANT/jgABANT/jgABANT/jgABALj/jgABANT/jgABAQD/jgABAPj/kgABALH/jgABANv/fwABAPD/jgABAPD/jgABAIb/jgABAJn/jgABAIv/jgABAJL/jgABANr/iAABAZr/jgABASb/jgABAX//lwABAQn/kQABAQb/kAABAPf/jgABAVX/jgABAL7/jgABAMv/jgABAH/+zwABAQL/jgABAPv/jgABAO//lQABANH/zgABAMr/lQABAOb/lQABALf/lQABAT4CHgABAT4CHgABARP/jgABAbT/kQABAOr/lQABAPb/jwABAPb/lQABAPAAAAABAO4AAQABAK3//gABANMAAAABAOQAAAABAIIAAAABAJL//QABAOD//gABAPAAAAABAIsAAAABALIAAQABANUAAAABAOYAAAABAPwAAAABAPAAAAABAET//gABAKcAAAABAP0AAAABAPAAAAABAJgAAAABAN4AAAABAPAAAAABAPAAAAABAPAAAAABANQAAAABAQoAAAABAPAAAAABAQcAAAABAPAAAAABAPAAAAABAYP/kgABAIj/lQABALr/jwABAQP/kQABAVb/kwAB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AAQFnwWfAAQFoQWhAAQFowWjAAQFswW6AA4FzwXWABQF3wXmABQF+wX+AAQGVAZXAA4GZQZmABQGcQZ0ABQGgAaDAAQGlAacAA8GoAalABEGpwanAA8GqAapABYGqgaqAA8GqwatABYGrgauAA8GrwavABYGtAa2AA8GuAa4AA8GwQbCABEG3QbpABAG7AbwABAIrQitAAYI0AjRAAcI2AjYAAQI2gjaAAcI6wjrAA4I7AjsAAcI7gjuAAUI7wjvAAoI8gjyAAkI9gj2AAkI+Aj4AAkJDwkPAA0JEgkSAAsJFAkUABcJGQkZAAkJGgkaAAwJHQkdAAsJHgkeABgJHwkfAAsJIgkiAAgJIwkjABcJJAklAAgJJgkmAAkJJwknAAgJKgkqABEJKwkwAA0JPQlBAAsJQwlDAAsJRAlHABcJSAlIAAgJSglKAAgJUAlRAA0JZQlmABcJgQmCAAIJhAmFAAUJhgmGAAYJ1wnXABIJ2QnZABIJ2wnbABIJ3wnjABEJ5QnlAAEAAgHsAAIAAgAQAAMAAwAHAAgACAAHAAoACgANAAsACwAHAAwADAAPAA0ADQAJAA4ADgAPAA8ADwAJAB0AHwAPACAAIAAQACIAIgAIACMAIwATACQAJAAEACUAJwATACgAKAAEACkAKgATACsAKwAOACwALQATAC8ALwATADAAMAAEADEAMQATADIAMgAEADMAMwATADUANQABADYANgASADcAOAADADoAOgACAD4APgANAEIAQgALAEMAQwARAEQARAAKAEUARQALAEYARgAKAEgASAAMAEkASQARAEsASwAOAEwATQARAE4ATwAMAFAAUAAKAFEAUQAMAFIAUgAKAFMAVAAMAFYAVgAXAFcAWAAFAFkAWgAGAFsAWwAMAF4AXgANAF8AXwAPAGsAawAPAG0AbQAPAHAAcAAVAHIAcwAVAHcAdwAPAHkAeQAVAHsAewAPAIAAhgAIAIcAhwAEAIgAkQATAJIAlgAEAJgAmAAEAJkAnAASAJ0AnQACAKEAoQALAKYApgALAKcApwAKAKkAqQALALMAswALALcAtwAPALgAuAALAL0AvQAGAL4AvgARAL8AvwAGAMAAwAAIAMIAwgAIAMQAxAAIAMUAxQALAMYAxgAEAMcAxwALAMgAyAAEAMoAygAEAMwAzAAEAM4AzgATANAA0AATANIA0gATANQA1AATANYA1gATANcA1wALANgA2AATANkA2QAKANoA2gATANwA3AAEAN4A3gAEAOAA4AAEAOIA4gAEAOQA5AATAOUA5QARAOYA5gATAOcA5wARAOgA6AATAOoA6gATAOwA7AATAO4A7gATAPAA8AATAPIA8gATAPQA9QAOAPYA9gATAPcA9wARAPkA+QATAPoA+gARAPsA+wATAPwA/AARAP0A/QATAP4A/gARAP8A/wATAQABAAARAQEBAQATAQIBAgARAQMBAwATAQUBBQATAQcBBwATAQoBCgATAQwBDAAEAQ0BDQALAQ4BDgAEARABEAAEARIBEgAEARMBEwAKARQBFAATARYBFgATARgBGAATASIBIgABASQBJAABASgBKAASASoBKgASASwBLAASAS4BLgASATABMAASATIBMgASATQBNAADATUBNQAFATgBOAACAUABQAARAUIBQgATAUcBRwAEAUgBSAAKAUkBSQATAU0BTQAKAVMBUwAEAV8BYAAEAWEBYQAKAYQBhQATAYoBiwATAY0BjQAIAZMBkwASAZUBlQASAZcBlwASAZkBmQASAZsBmwASAZ0BnQAKAZ4BngAIAaABoAAIAaIBogAIAaYBpgAEAagBqAATAaoBqgAEAawBrAAEAbQBtAAEAbYBtgATAboBugAIAbwBvAAIAb4BvgAEAcABwAAIAcIBwgAIAcQBxAATAcYBxgATAcoBygATAcwBzAAEAc4BzgAEAdAB0AATAdIB0gATAdQB1AASAdYB1gASAdoB2gABAd4B3gATAeYB5gAIAeoB6gAEAewB7AAEAe4B7gAEAe8B7wALAfAB8AAEAkoCSgAEAzMDMwAIAzQDNQATAzYDNgAIAzcDNwATAzkDOQATAzoDOgAEAzsDPAATAz0DPQAIAz8DPwATA0EDQQAEA0IDQwATA0UDRQABA0YDRgACA0cDRwAEA0sDSwATA0wDTAACA00DTQALA1IDUgAKA1QDVAAFA1gDWAAXA1oDWwAXA10DXQAMA14DXgAFA2ADYAAKA2IDYgALA2MDZAAKA2YDZgAXA2cDZwAKA2gDaAAGA2oDagAKA20DbQALA28DbwAKA3UDdQALA3gDeAAEA4IDggAMA4MDgwALA4QDhAAKA4YDhgAEA4cDhwAKA4oDigAEA48DkAATA5EDkQABA5IDkgATA5MDkwAEA5UDlgATA5kDmQATA5oDmgABA5sDnAATA54DngATA58DnwAIA6ADogATA6QDpAATA6cDqQATA6wDrAATA60DrQAEA64DrwATA7ADsAAEA7EDsQABA7MDswAEA7UDtQATA7YDtgADA7cDuAATA7kDuQABA7oDuwATA70DvQATA78DvwALA8EDwgAMA8QDxAAKA8UDxQAGA8YDxgALA8cDxwAMA8kDyQAMA8sDzAAMA80DzQAKA84DzwAMA9AD0AAKA9ID0gAGA9MD0wALA9QD1QAMA9cD2AAMA9wD3AALA94D3gALA+MD4wAKA+cD5wAOA+kD6QAMA+0D7QAGA+4D7gAMBAEEAQAEBAMEAwADBAUEBQADBBQEFAATBBoEGgATBCIEIgATBCQEJAATBCYEJgATBCgEKAAEBCoEKgAEBCwELAABBDMEMwAGBDYENgADBE0ETQAIBFAEUAALBFQEVAAKBFgEWAAGBF0EXQATBF8EXwATBGEEYQAEBGMEYwAEBGQEZAAKBGUEZQAEBHEEcQATBHMEcwATBKsEqwAIBK0ErQATBK4ErgARBK8ErwATBLAEsAARBLEEsQATBLIEsgARBLMEswAEBLUEtQATBLcEtwATBLkEuQATBLoEugALBLsEuwATBL0EvQATBL8EvwATBMEEwQATBMMEwwATBMQExAAKBMUExQATBMYExgAKBMcExwATBMkEyQATBMsEywAEBM0EzQATBM4EzgARBM8EzwATBNAE0AARBNEE0QATBNIE0gARBNME0wATBNQE1AARBNUE1QATBNYE1gARBNcE1wATBNkE2QATBNsE2wATBNwE3AARBN0E3QATBN4E3gARBN8E3wATBOAE4AARBOEE4QATBOIE4gARBOME4wATBOQE5AARBOUE5QATBOYE5gARBOcE5wATBOgE6AARBO8E7wATBPEE8QATBPME8wATBPUE9QATBPcE9wAEBPkE+QAEBPsE+wAEBP0E/QAEBP8E/wATBQEFAQATBQMFAwATBQUFBQATBQcFBwATBQkFCQATBRUFFQABBRcFFwABBRkFGQABBRsFGwABBR0FHQASBR8FHwASBSEFIQASBSMFIwASBSUFJQASBScFJwADBSgFKAAFBSkFKQADBSoFKgAFBSsFKwADBSwFLAAFBS0FLQADBS4FLgAFBS8FLwADBTAFMAAFBTEFMQADBTIFMgAFBTMFMwADBTQFNAAFBUMFQwAFBUsFSwAIBUwFTAALBU0FTQAIBU8FTwAIBVEFUQAIBVMFUwAIBVUFVQAIBVcFVwAIBVkFWQAIBVsFWwAIBV0FXQAIBV8FXwAIBWEFYQAIBWMFYwATBWQFZAAKBWUFZQATBWcFZwATBWkFaQATBWsFawATBW0FbQATBW8FbwATBXEFcQATBXMFcwATBXUFdQATBXcFdwAEBXgFeAAKBXkFeQAEBXsFewAEBX0FfQAEBX8FfwAEBYEFgQAEBYMFgwAEBYUFhQAEBYcFhwAEBYkFiQAEBYsFiwAEBY0FjQAEBY8FjwASBZAFkAAXBZEFkQASBZMFkwASBZUFlQASBZcFlwASBZkFmQASBZsFmwASBhAGEAALBhIGEgALBhgGGAALBlQGVQAIBlgGWAAIBqAGpQAPBqgGqQAHBqoGqgAJBqsGrQAHBq8GrwAHBrQGtgAJBsEGwgAPBsQGxQAQBskGywAQBs8G3AAVBvEG8gAVCNAI0QAECNcI1wAECOsI6wAICPgI+QAKCQoJCgAMCQ8JDwAUCRAJEAAYCREJEQAKCRIJEgAYCRQJFAAYCRUJFQAKCRYJFwAYCRgJGAAOCRkJGgAYCRwJHAAYCR0JHQAKCR4JHgAYCR8JHwAKCSAJIAAYCSIJIgAFCSMJIwAWCSQJJQAFCSYJJgAGCScJJwAFCSoJKgAPCSsJMAAUCTIJMgAKCUQJRwAWCUgJSAAFCUoJSgAFCVAJUQAUCWUJZgAWCXEJgAAVCYQJhQADCdgJ2AANCdoJ2gANCdwJ3AANCd0J3QAQCd8J4wAPCeQJ5AAXAAECCgADAAgACQALAAwADQAOAA8AHQAeAB8AIQAiACUAJwApACoALAAtAC8AMAAxADIANQA2ADcAOAA5ADoAPABAAEMARgBHAEgATABQAFEAUwBXAFgAWQBaAFwAXwBrAG0AdwB7AIAAgQCCAIMAhACFAIwAjQCOAI8AkQCSAJMAlACVAJYAmACZAJoAmwCcAJ0AngCgAKgAqQCqAKsAsgCzALQAtQC2ALcAvQC+AL8AwADCAMQAzgDQAN0A3wDhAOMA5ADmAOoA7ADuAPAA8gD0APYA9wD4APkA+wD/AQEBAwEFAQcBCgEMAQ4BEAEVARcBGQEiASQBKAEqASwBLgEwATIBNAE1ATYBNwE4AT8BRgFJAUoBTgFPAWQBbAGNAZMBlQGXAZkBmwGeAaABpwGpAaoBrAG6AcABwgHMAc4B1AHWAdoB3gHmAeoB7AHuAfADKgMvAzADMwM1AzYDOQM6AzsDPAM9Az8DQQNCA0MDRQNGA0cDSANMA1QDVwNbA2ADYgNnA20DcgNzA3QDdQN4A3sDhgOMA44DkgOVA5YDlwObA5wDnQOeA58DogOjA6UDpwOoA6kDqgOsA60DrgOvA7EDsgO0A7UDtwO4A7kDugO7A70DvgPEA8UDyQPNA88D0gPTA98D4APrA+0EAQQDBAUEEAQSBBYEGgQcBB4EHwQgBCEEIgQsBDIEMwRBBE0EVQRXBFgEXQRfBGEEYgRjBGQEZQRnBGkEagRrBGwEbQRxBHMEqwS1BLcEuQS7BL0EyQTKBM0EzwTRBNME1QTXBNkE2wTcBN0E3gTfBOAE4QTjBOUE5wTvBPEE8wT1BPcE+QT7BP0E/wUBBRUFFwUZBRsFHQUfBSEFIwUlBScFKAUpBSoFKwUsBS0FLgUvBTAFMQUyBTMFNAU1BTcFOQU6BUMFSwVNBU8FUQVTBVUFVwVZBVsFXQVfBWEFcwV1BY8FkQWTBZUFlwWZBZsFnQWfBaEFowWzBbQFtQW2BbcFuAW5BboFzwXQBdEF0gXTBdQF1QXWBd8F4AXhBeIF4wXkBeUF5gX7BfwF/QX+BlQGVQZWBlcGZQZmBnEGcgZzBnQGgAaBBoIGgwaUBpUGlgaXBpgGmQaaBpsGnAagBqEGogajBqQGpQanBqgGqQaqBqsGrAatBq4Grwa0BrUGtga4BsEGwgbdBt4G3wbgBuEG4gbjBuQG5QbmBucG6AbpBuwG7QbuBu8G8AitCNAI0QjYCNoI6wjsCO4I7wjyCPYI+AkPCRIJFAkZCRoJHQkeCR8JIgkjCSQJJQkmCScJKgkrCSwJLQkuCS8JMAk9CT4JPwlACUEJQwlECUUJRglHCUgJSglQCVEJZQlmCYEJggmECYUJhgnXCdkJ2wnfCeAJ4QniCeMJ5QAAAAEAAAAAxtQumQAAAADBE842AAAAAMgHiBgB9AAAAPoAAAEgAFsBUAA/AbgAGQG4ACoCfQA5AsEAKwC+ADUBKgAsASoAFQFxAC0CDwBCANwAKwFSACgA3AA5AUMADwG4ACUBuABZ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Ag0AFQKVAAUCDQAVAeUAGwF/ADACSwAHATwAGQHfAEsBfwAiAtoADgIUAA0CWwAVAnwAIgIqAC8B1AApAmoAKAHIACICtwACAckAJAIlAAUBvwAlAr4AJQH4ACkCvgAlAfgAKQK+ACUB+AApAr4AJQH4ACkCPwAAAgcADwF8ABcClgAVAXYAFwEQ/9AC7QAiAuwAJAK2AAIChgAlAacADAIO//QCSwAHAX8AMAHJAAoCTP/bAckABwIEACwCBAAaAe0ASgGnAA0BqAAlAfcAJwIcACcBqwAiAb8AGwJPABgBjQAsAYwAJgG+ACYB6AAiATf/0gIcACQB8gAkAgkAIgILAAoBgAAPAggAEgIIABMCCAATASAAFAEZAEIBEQAUAR8ABQFmABIA9QAYAgQAEgMMABUC+AAOAw4AIAIL/9gCCwAVAjIAHgH4ACkCpwAdAskAIgI5ACABdAAJAWMAFQGRAAoBYwAcAW4AEAFcABMBXAAPAbkAHwG5ABABfwAwATD/wQEw/8EBMP/BAST/0wE8AAwBLgAUAg0AFQISAAoB6gAYAfEAAQLrAAACB//8AdgAEwGoACUBrQAgAaAAKAGzACsBrQAcAa0AJgGtABkCJAAxAr4AKgHFAB0B3AAeAf0AIgIsAB8BBf/uAd8AEgGzABcB8gAkAa0AHAGtACYDIgAlAvMAJwMxACcCVwAUAc4AGQJ+ABkDNQAWAg4AEgJPABIBvQAMAY0AMQI6ABECUAAhATMACgEzAAoAzwAAAPYAGQD2AA0BAAANARQAFgG9AAwBUgARAL4AEAFeADYAqAAdAK8AIACoABsA8wAxAPMALgEvADoBLwA6AgYAawIGAGsCBgBwAgYAbwFdADMBXQAwAIIAKAGpAEoBEgAsARIATwDNAEUBhgBKAQEAJAENAC0A0QAkAMwAJADAACAAwAAiAQMAJwEDACcBEgAoARIAIgE9ABUBIwBgAWkAXQFOAEABJAAFAV4ANgE+ACcBZwAxATEADwChAAoA/QAcATMAEgD3ABoBtQAaAbUAGgG1ABoBtQAaAbUAGgFtADIBdAAyATgADQHmAAUBegAzANcACgDXAAoBGgAUARAAFADqAB0AvQAeAUEAHgFBAB4BPgAUAO0AQADYAB4A2AAeANgAHgDYAB4BXgAeAUAAHgGqABQAAP8SAAD/EQAA/vYAAP7g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ArcAAgHJACQCtwACAckAJAK3AAIByQAkArcAAgHJACQCtwACAckAJAIlAAUBvwAlAiUABQG/ACUCJQAFAb8AJQIlAAUBvwAlAiUABQG/ABsCJQAFAb8AJQIlAAUBvwAlAiUABQG/ACUBKQAOAQ8AGQEpAA4BDwAZAr4AJQH4ACkCvgAlAfgAKQK+ACUB+AApAr4AJQH4ABsCvgAlAfgAKQK+ACUB+AApAr4AJQH4ACkCvgAlAfUAKQK+ACUB9QApAr4AJQH1ACkCvgAlAfUAKQK+ACUB9QApApUABQINABUClQAFAg0AFQKyAAACEwAVArIAAAITABUCsgAAAhMAFQKyAAACEwAVArIAAAITABUCPwAAAgcADwI/AAACBwAPAj8AAAIHAA8CPwAAAgcADwMMABECFgAcAiIALQHoACoCRAAAAf0ACwI2ACICNgAiAjYAIgI2ACICNgAiAjYAIgI2ACICNgAiArcAAgK3AAIC4P/jAsX/zQK+/+oCvv/tAsv/ywLN/+MBjQAsAY0ALAGNACwBjQAsAY0ALAGNACwCoP/jAob/ywNA/+ADL//NAzH/3wMn/8cCEAAbAhAAGwIQABsCEAAbAhAAGwIQABsCEAAbAhAAGwM0/+QDNP/UA9v/4gPR/88D1P/ZA8r/zQO6/9wDxP/UARkAQgEZAEIBGf/+ARn/9gEZ//wBGf/3ARkAAAEZAAEBf//eAW3/zwIn/94CC//GAhX/1AIU/8wB+//JAhL/0gH4ACkB+AApAfgAKQH4ACkB+AApAfgAKQLe/+IC6//MA37/1wOG/8kDbf/gA1v/zAHqABgB6gAYAeoAGAHqABgB6gAYAeoAGAHqABgB6gAYAsL/1ANh/88DYf/OAyj/1gKSACICkgAiApIAIgKSACICkgAiApIAIgKSACICkgAiAv4AAwMYAAADlP/YA4L/xgNb/94DX//QA1L/0QNs/94CNgAiAjYAIgGNACwBjQAsAhAAGwIQABsBGQAuARkAQgH4ACkB+AApAeoAGAHqABgCkgAiApIAIgI2ACICNgAiAjYAIgI2ACICNgAiAjYAIgI2ACICNgAiA3IAAgNoAAIDoP/jA4n/zQOH/+oDgP/tA47/ywOW/+MCEAAbAhAAGwIQABsCEAAbAhAAGwIQABsCEAAbAhAAGwPf/+QD4v/UBID/4gR3/88Ehf/ZBHj/zQRv/9wEd//UApIAIgKSACICkgAiApIAIgKSACICkgAiApIAIgKSACIDq//OA7L/sAQ+/9gEOP/GBCn/3gQ4/9AEHv+/BDH/zAI2ACICNgAiAjYAIgI2ACICNgAiAjYAIgI2ACICtwACArcAAgK3AAICtwACA4cAAgC1ACABSwCBALYAIAGlAFUBcAA0AhAAGwIQABsCEAAbAhAAGwIQABsCsv/mAqH/6gNC/+EDOf/ZA5IADgFSACMBUgAjAUAAKAEZ//QBGf/7ARn//gEZ//sBGf/2ARn/9gEwABEBKQAOAYv/3wGC/+cBTwAdAUsAHAFkADIB6gAYAeoAGAHqABgB6gAYAgwANgIMADYB6gAYAeoAGAI/AAACPwAAAsL/3QKx/94CVf/hAXcAMgFwADIA7wA1ApIAIgKSACICkgAiApIAIgKSACIC///gAr7/4AMC/9YCy//oA3YALADHACcAqAAdAfMAAAPnAAACBgAAAvQAAAFMAAAA+QAAAKYAAAG2AAAA2wAAAH0AAAAaAAAAAAAAAVIAKAFSACgBtgAhAiQANALmACMDmgAjARYAPAHmAAUBDABJAQwARAEMAEQBDABIAXcAMAF3ACwBdwAsAXUAMQJMAFICTABSAV8APgF3AEkA3AA5AagAOQLtADkA3AA5AH0AAAOPADkEsQA5APkASQF9AEkB/QBJAPQANwFuAC4B9AA3ASwALgEsAC4CPgAPAdgAWwG+AC4BpwAkAlz/+wAs/xYDKwAuAqMALgJ9AFsBtgA7AloADwDbACoBMwAfAMIAFwEzACEBMwAwATMALQEzACsBMwAvATMAKAEzABwBMwAjATMAJwDFACQAxQAaAVYADwEzAB8BMwBEATMALQEzACYBMwAhATMAMAEzACYBMwArATMAKQEzACEBMwAcATMAIwEzACcAxQAkAMUAGgEzAB8BMwAiATMAFwEzABABMwAqAYQAHAGEABwBtgAYAbYAFAG2ABEDegAQAxEAEAH6AB4BtgAABCYACQG2ABUCwQAiAsEAIgKGACUDGgAsAvMANwLzADcDIgAsAkIAGALwABECGwApAhsAKQIfAAgBQQAKAt0ACwOdAAQCkAARAsgAJQLEABcCkAARAu4AFgMbAA0CbwAPArkALAK5ACwCAQAeAeEAHgHUABQBTwAVAbYAIQEeACMEIwAMApQANgKUAC0ClAA9ApQALgKUACUClAAYApQAQgKUAC8ClAA9ApQAKAKUACwClAAsAWAAOgEXAB0B6QAbAsQAHQMVAB0COwAOAxcADgPfAA4EzQAOAzIAHgJfAA8DLQAPBAcADwHkABwCTAAiAoYAEwMvAA8BEQAUAcgAGwKZABsCyQAbAfEABgLGAA8DiQAGBE8ABgK2ABsB+AAQArQAFANmABQBCAASAacAJQH6ACcDDAAVA+8ANAJ9AA8D7wA0AkwAFgGlABIEagA7AbkAJwRqADsBzgAxBEoAMQHPADEDRgAxA0kAMQNGADEDSQAxBGoAOwRqADsEagBrAc8AJARKADEEPwA7BD8APQQ/ADsEPwA9BD8AOwQ/ADsEMgA7BNsAOwQyACQEMgA7Ac4AMwQyACQBzgAwBOAAOwHPADMDXgAxA2IANwNeADMDYgAxAegACQG+AC8B9gAkAZAAIwGQAB4CggAaAkgACgJIAAwB+gAdAfoAHQF3AB0B+gAsAfUAJQF3AB0CuAAdApsADAJQABgCDwBCAg8AQgIPAEICDwARAg8AEQFVAAIBVQBHAP0ASQI1ADUCNQAmAjUAGAKeACUDEQAlAh0APgKaAB4CmgAeApoAJwDMAFABAAASAVAAUAFdABQB4QAPAeEADwHpAEMB6QBDAW0AAAJTAAADawAAAhQAKAIPAOwCDwA4Ag8AOAIPAEICDwA2Ag8ANgIPAEICDwBCAg8AQgIPAEICDwA+Ag8AOgMQACoDEAAmAg8APgIPADoCDwA+Ag8AOgIKACUCCgAnAgoAJQIKACcCNAA4AjQAOAI0ADgCNAA4ApcAPAKXABkCdQAUAnUAFAGdADwC7gAsAu4ALAD9AEcAzAAzApEARwI2ADgDYQBJAqcAcAIwABgBewBoAXsACgNqAEkC0wBJAcQApgHEACIDagAdAPr/mAI5ACwCDwA5APr/7wL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxA0wAOANMADIDTAA6A0wAQgNMADoDTAA5A0wALQNMAEEDTAA7BNMAQATTAEYE0wBGBNMARgTTAEYE0wBGBNMARgTTADwE0wBGBNMAQQTTAEQC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEDCQArAwsAKwMJACsDCQArAwkAKwMJACsDCQArAwkAKwMJACsDEwArAvcAMQJAAEkCQABJAh0ALAIdACwB/gBJAf4ASgIdACwCHQAsAf4ALAH+ACwCmgAcApoAHAI0ADECmwBCAjQAMQI0ADECNAAxAjQAMQI0ADACNAAwAjQAMQI0ADECNAAxAWMAMQFjAEkBXwAxAmIAJwK0AH0EUgAYA+UAGAN+ABgCSgAiAoMAHQI0AD0CNAA9AjQAPQK1ACgB+wAUAfsAHQItADoCLQA6Ai0AOAKbADoChQAxAf4AJwJpACcDKgAdAe8AMQN8ACcDFAAxAs4AMQNEADEC1QAnAvwAMQLhADMCpgAsAoYAIgM1ADsDPgBCAoUAQgLSACUDCQA3AtUAJwKFACIBYgAnAhYAJwLTACcC0wAnAfQAfwG4AHkBuABCAdMAKQGXABgDRQA6A5wAOgMiADoCmwA9AggAJAL2ACQDtgAkBKQAJAJPADwCbgAyAfsALwRSABcC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAvcAMQL3ADEC9wAxAnUAFAGpAGIBqQAHAg4ADAEZAA8CDv/bAhMADAI5ABoByQAkAVL/5QK3AAwCBgATAo4AEQHoABMCagApAZsAIAHkACcB0QAMAaMAHQJqACUBEgAuARIAJAESAC4BEgAiAVkAFAEmABQBJgAUAXUAGwG3ACoAoQApAn8AGwJ0ABsCE//yAvgADgSFADcEhQBGBIUANwMiAFsDIgAmBCkAGAgiABgYgAA7AmgAEQV7ADIBlwAfAoIAIgP2ACgB0QA0AdEANAFrAC8BrAArAbIAKAGvAA4BpgAvAb8AJwGMACQBvwAwAbYAJwJnAAUB+QACAgQADwHDACQCBgA5AQ8ADwIOACwBUgArAc4AMgHAAC8B2gArAb0APQGwACgBxAA3AbwALgG4ACoCtwACAr4AJQKVAAUD+QAAAwoAFgQcABIDGgASA/oAEgNbABIDFgASAhEAEgL5ABICVAAWA1MAJQNyACUCZgAaAssAJQIXABYCLwAWBJsASQSbAEkAAPvGAgUAFgMXABYCTQAWAroAJwMMABYE4wAlA/0ABwIUABQCCgAjAikAEgKxADADswAbAg4AGQLSACcCOAALAfsAIAHsACUCNQAgAdAAIAHKACECHgAjAmMAIgEvACMBN//SAioAIwGvACMCkQAXAloAHwIzACUBzQAhAjMAJQH6ACMBiAAnAekAGAJIAB8CJAAPAxwADwIpAB4B5wATAcUAJAIEAAABUgAoAjgACwI4AAsCOAALAjgACwI4AAsCOAALApYABQHsACUB0AAgAdAAIAHQACAB0AAgAS8AHgEvACMBLwAOAS8AEAI1AB4CWgAfAjMAJQIzACUCMwAlAjMAJQIzACUCpwAdAjMAJQJIAB8CSAAfAkgAHwJIAB8B5wATAdYAIQHnABMCSgAjAwEAJwIyABAFCQAlAjUAHgI4AAsCOAALAewAJQHsACUCNQAgAdAAIAHQACACHgAjAa8AIwGvABECWgAfAloAHwJWAB0CMwAlAfoAIwH6ACMBiAAnAYgAJwGIACcB6QAYAekAGAJIAB8CSAAfAcUAJAHFACQBxQAkAa8AIwHpABgB6QAYAYgAJwEvACMCXQAqAfoABwEzAB8BKQAGARoAGwE0AB0BMwAbAP0AGwE7ABEBPgAKAeUAFQEzABcBMQALATQAHQDOAA8BPwARAToADAESABYBSAAWAjgAEgI/AAwDff/vAlz//AJxABECPgARAZ4AKwImABUCJgAfArgACAK4AAgDegAAAfQALQHuABACJgALAgIAGQJvAEgCgABEAoIAIgL3ADICYwBJA0MASQLaACUC2gAlAgoAOgGOADUB5QAwAewALQHrABAB3gA1Ae8ALAHSACgB+AA2Ae8ALAG4AB0BuABxAbgAIwG4AC8BuAAZAbgAPQG4ACgBuAA0AbgAMAG4ACgAtABpALQAaQC0AGkApgAoASkABgEaABsBNAAdAP0AGwE7ABEBMwAKAMIAFwDPAAABPgAKAKEACgHlABUBVgAPATEACwE0AB0A9gAZAP0AHADOAA8BPwARAToADAG9AAwBUgARARIAFgAA/tsAAP7YAAD/AwAA/s4AAP7XAAD+ngAA/p4AAP7WAAD+xQAA/rMAAP6DAAD/CQEjAF4ChQA/AbYAJgEqACwBKgAVAWQAbAFkAB8BFQAiARUAFAEgAFsBswAuAdAALgHQAC4BLAAuASwALgFSACgBEP/QAkYAEgIwABYCHAAWAz0AEgMvABICMQANAqgAMAPYABY=') format('opentype');
font-weight: normal;
font-style: normal;
}
Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */
.image-carousel {
overflow: hidden;
width: 100%;
height: 210px;
min-width: 280px;
}
.image-carousel ul {
width: 100%;
margin: 0;
padding: 0;
display: table;
table-layout: fixed;
height: 100%;
}
.image-carousel ul li {
display: table-cell;
vertical-align: top;
position: relative;
height: 100%;
min-height: 210px;
width: 33.33333%;
transition: all 1000ms ease;
}
.carousel-image {
width: 100%;
height: 100%;
display: block;
position: relative;
overflow: hidden;
}
.carousel-image-wrapper {
position: absolute;
display: block;
width: 100%;
height: 100%;
z-index: 1;
}
.carousel-image-wrapper img {
width: 100%;
height: 100%;
min-height: 170px;
object-fit: cover;
position: absolute;
top: 0;
left: 0;
}
.carousel-slide-content-wrapper {
overflow: hidden;
width: 100%;
height: calc(100% - 40px);
position: absolute;
top: 40px;
}
.carousel-slide-content {
display: flex;
flex-direction: column;
justify-content: flex-end;
height: 100%;
width: 100%;
position: relative;
padding: 15px 20px;
box-sizing: border-box;
color: #fff;
z-index: 3;
}
.carousel-slide-content .carousel-slide-title,
.carousel-slide-content .carousel-slide-description {
opacity: 0;
width: 100%;
position: relative;
}
.carousel-slide-title {
font-size: 135%;
font-weight: bold;
text-align: right;
}
.carousel-slide-description {
text-align: left;
}
@media (min-width: 800px) {
.image-carousel ul:hover li {
width: 10%;
}
.image-carousel ul:hover li:hover {
width: 60%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.7);
}
.image-carousel ul:hover li:hover .carousel-slide-title,
.image-carousel ul:hover li:hover .carousel-slide-description {
opacity: 1;
}
}
.carousel-slide-title a {
font-weight: bold;
}
.carousel-slide-title a,
.carousel-slide-description a {
color: white;
}
.carousel-slide-title a:link,
.carousel-slide-title a:visited,
.carousel-slide-title a:hover,
.carousel-slide-title a:active,
.carousel-slide-description a:link,
.carousel-slide-description a:visited,
.carousel-slide-description a:hover,
.carousel-slide-description a:active {
color: white;
}
@media (max-width: 800px) {
.image-carousel {
height: auto;
min-height: unset;
}
.image-carousel ul {
display: block;
height: auto;
}
.image-carousel ul li {
display: block;
width: 100%;
height: auto;
min-height: unset;
transition: none;
}
.carousel-image {
height: auto;
}
.carousel-image-wrapper {
position: relative;
height: auto;
}
.carousel-image-wrapper img {
position: relative;
width: 100%;
height: auto;
min-height: unset;
object-fit: cover;
}
.carousel-slide-content-wrapper {
position: relative;
height: auto;
top: auto;
}
.carousel-slide-content {
position: relative;
background: rgba(0, 0, 0, 0.6);
padding: 10px;
color: white;
}
/* Override opacity on mobile */
.carousel-slide-content-wrapper .carousel-slide-title,
.carousel-slide-content-wrapper .carousel-slide-description {
opacity: 1;
}
/* Disable hover effect for mobile */
.image-carousel ul:hover li {
width: 100%;
}
.image-carousel ul:hover li:hover {
width: 100%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.6);
}
}
.mobile-only {
display: none;
}
/* Display on mobile views (Minerva Neue skin / MobileFrontend) */
@media screen and (max-width: 640px) {
.mobile-only {
display: block;
}
}
c4ivlnaszgx1uyowbsc86j1v11077un
11027
11026
2026-08-26T11:57:49Z
RAPTOR7762
18
Replaced content with "/* Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */ .image-carousel { overflow: hidden; width: 100%; height: 210px; min-width: 280px; } .image-carousel ul { width: 100%; margin: 0; padding: 0; display: table; table-layout: fixed; height: 100%; } .image-carousel ul li { display: table-cell; vertical-align: top; position: relative; height: 100%; min-height: 210px; width: 33.33333%; transition: a..."
11027
css
text/css
/* Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */
.image-carousel {
overflow: hidden;
width: 100%;
height: 210px;
min-width: 280px;
}
.image-carousel ul {
width: 100%;
margin: 0;
padding: 0;
display: table;
table-layout: fixed;
height: 100%;
}
.image-carousel ul li {
display: table-cell;
vertical-align: top;
position: relative;
height: 100%;
min-height: 210px;
width: 33.33333%;
transition: all 1000ms ease;
}
.carousel-image {
width: 100%;
height: 100%;
display: block;
position: relative;
overflow: hidden;
}
.carousel-image-wrapper {
position: absolute;
display: block;
width: 100%;
height: 100%;
z-index: 1;
}
.carousel-image-wrapper img {
width: 100%;
height: 100%;
min-height: 170px;
object-fit: cover;
position: absolute;
top: 0;
left: 0;
}
.carousel-slide-content-wrapper {
overflow: hidden;
width: 100%;
height: calc(100% - 40px);
position: absolute;
top: 40px;
}
.carousel-slide-content {
display: flex;
flex-direction: column;
justify-content: flex-end;
height: 100%;
width: 100%;
position: relative;
padding: 15px 20px;
box-sizing: border-box;
color: #fff;
z-index: 3;
}
.carousel-slide-content .carousel-slide-title,
.carousel-slide-content .carousel-slide-description {
opacity: 0;
width: 100%;
position: relative;
}
.carousel-slide-title {
font-size: 135%;
font-weight: bold;
text-align: right;
}
.carousel-slide-description {
text-align: left;
}
@media (min-width: 800px) {
.image-carousel ul:hover li {
width: 10%;
}
.image-carousel ul:hover li:hover {
width: 60%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.7);
}
.image-carousel ul:hover li:hover .carousel-slide-title,
.image-carousel ul:hover li:hover .carousel-slide-description {
opacity: 1;
}
}
.carousel-slide-title a {
font-weight: bold;
}
.carousel-slide-title a,
.carousel-slide-description a {
color: white;
}
.carousel-slide-title a:link,
.carousel-slide-title a:visited,
.carousel-slide-title a:hover,
.carousel-slide-title a:active,
.carousel-slide-description a:link,
.carousel-slide-description a:visited,
.carousel-slide-description a:hover,
.carousel-slide-description a:active {
color: white;
}
@media (max-width: 800px) {
.image-carousel {
height: auto;
min-height: unset;
}
.image-carousel ul {
display: block;
height: auto;
}
.image-carousel ul li {
display: block;
width: 100%;
height: auto;
min-height: unset;
transition: none;
}
.carousel-image {
height: auto;
}
.carousel-image-wrapper {
position: relative;
height: auto;
}
.carousel-image-wrapper img {
position: relative;
width: 100%;
height: auto;
min-height: unset;
object-fit: cover;
}
.carousel-slide-content-wrapper {
position: relative;
height: auto;
top: auto;
}
.carousel-slide-content {
position: relative;
background: rgba(0, 0, 0, 0.6);
padding: 10px;
color: white;
}
/* Override opacity on mobile */
.carousel-slide-content-wrapper .carousel-slide-title,
.carousel-slide-content-wrapper .carousel-slide-description {
opacity: 1;
}
/* Disable hover effect for mobile */
.image-carousel ul:hover li {
width: 100%;
}
.image-carousel ul:hover li:hover {
width: 100%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.6);
}
}
.mobile-only {
display: none;
}
/* Display on mobile views (Minerva Neue skin / MobileFrontend) */
@media screen and (max-width: 640px) {
.mobile-only {
display: block;
}
}
0whqqcx75rhg2sgwydwbv53js7z1zfp
11028
11027
2026-08-26T11:58:28Z
RAPTOR7762
18
RAPTOR7762 changed the content model of the page [[Tempilet:Main page/Styles.css]] from "CSS" to "Sanitized CSS"
11028
sanitized-css
text/css
/* Derived from https://ay.wikipedia.org/wiki/Plantilla:Portada/styles.css (2025-06-06) */
.image-carousel {
overflow: hidden;
width: 100%;
height: 210px;
min-width: 280px;
}
.image-carousel ul {
width: 100%;
margin: 0;
padding: 0;
display: table;
table-layout: fixed;
height: 100%;
}
.image-carousel ul li {
display: table-cell;
vertical-align: top;
position: relative;
height: 100%;
min-height: 210px;
width: 33.33333%;
transition: all 1000ms ease;
}
.carousel-image {
width: 100%;
height: 100%;
display: block;
position: relative;
overflow: hidden;
}
.carousel-image-wrapper {
position: absolute;
display: block;
width: 100%;
height: 100%;
z-index: 1;
}
.carousel-image-wrapper img {
width: 100%;
height: 100%;
min-height: 170px;
object-fit: cover;
position: absolute;
top: 0;
left: 0;
}
.carousel-slide-content-wrapper {
overflow: hidden;
width: 100%;
height: calc(100% - 40px);
position: absolute;
top: 40px;
}
.carousel-slide-content {
display: flex;
flex-direction: column;
justify-content: flex-end;
height: 100%;
width: 100%;
position: relative;
padding: 15px 20px;
box-sizing: border-box;
color: #fff;
z-index: 3;
}
.carousel-slide-content .carousel-slide-title,
.carousel-slide-content .carousel-slide-description {
opacity: 0;
width: 100%;
position: relative;
}
.carousel-slide-title {
font-size: 135%;
font-weight: bold;
text-align: right;
}
.carousel-slide-description {
text-align: left;
}
@media (min-width: 800px) {
.image-carousel ul:hover li {
width: 10%;
}
.image-carousel ul:hover li:hover {
width: 60%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.7);
}
.image-carousel ul:hover li:hover .carousel-slide-title,
.image-carousel ul:hover li:hover .carousel-slide-description {
opacity: 1;
}
}
.carousel-slide-title a {
font-weight: bold;
}
.carousel-slide-title a,
.carousel-slide-description a {
color: white;
}
.carousel-slide-title a:link,
.carousel-slide-title a:visited,
.carousel-slide-title a:hover,
.carousel-slide-title a:active,
.carousel-slide-description a:link,
.carousel-slide-description a:visited,
.carousel-slide-description a:hover,
.carousel-slide-description a:active {
color: white;
}
@media (max-width: 800px) {
.image-carousel {
height: auto;
min-height: unset;
}
.image-carousel ul {
display: block;
height: auto;
}
.image-carousel ul li {
display: block;
width: 100%;
height: auto;
min-height: unset;
transition: none;
}
.carousel-image {
height: auto;
}
.carousel-image-wrapper {
position: relative;
height: auto;
}
.carousel-image-wrapper img {
position: relative;
width: 100%;
height: auto;
min-height: unset;
object-fit: cover;
}
.carousel-slide-content-wrapper {
position: relative;
height: auto;
top: auto;
}
.carousel-slide-content {
position: relative;
background: rgba(0, 0, 0, 0.6);
padding: 10px;
color: white;
}
/* Override opacity on mobile */
.carousel-slide-content-wrapper .carousel-slide-title,
.carousel-slide-content-wrapper .carousel-slide-description {
opacity: 1;
}
/* Disable hover effect for mobile */
.image-carousel ul:hover li {
width: 100%;
}
.image-carousel ul:hover li:hover {
width: 100%;
}
.image-carousel ul:hover li:hover .carousel-slide-content {
background: rgba(0, 0, 0, 0.6);
}
}
.mobile-only {
display: none;
}
/* Display on mobile views (Minerva Neue skin / MobileFrontend) */
@media screen and (max-width: 640px) {
.mobile-only {
display: block;
}
}
0whqqcx75rhg2sgwydwbv53js7z1zfp
Tempilet:Mbox
10
136
10699
9095
2024-12-18T20:47:42Z
commons>Matrix
0
did i only just realise I copy pasted the sandbox version
10699
wikitext
text/x-wiki
{{#invoke:Message box|mbox}}<noinclude>{{Documentation}}</noinclude>
tvrvu45gactjsm6e1hth3whyku1lcph
10700
9140
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Mbox]]
699
wikitext
text/x-wiki
{{#invoke:Message box|mbox}}<noinclude>
{{Documentation}}
</noinclude>
pvm9nlvkt71tloexx1r8m88i47rdcul
Tempilet:Sub
10
168
10915
2024-02-13T02:23:37Z
commons>W like wiki
0
10915
wikitext
text/x-wiki
<sub>{{{1|1}}}</sub><noinclude>
{{documentation|content=
Examples:
*X{{tlx|1=sub|2=subscript text}} -> X{{sub|subscript text}}
==See also==
{{Text formatting template (see also)}}
[[Category:Text formatting templates]]
}}
</noinclude>
8iu90e2054l84c6hzz469q7p7vbive1
10916
8305
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Sub]]
8305
wikitext
text/x-wiki
<sub>{{{1|}}}</sub><noinclude>
{{Documentation}}
</noinclude>
f9z4dgppgzi066a593fwqimz9ot6zrz
Tempilet:Tl
10
182
10669
2019-06-06T23:58:20Z
commons>4nn1l2
0
Fulfilling [[Template:Edit request|edit request]] by [[User:Sarang|Sarang]].
10669
wikitext
text/x-wiki
<noinclude>{{protected template}}
</noinclude>{{T/main|{{{1|}}}
|{{{2|}}}
|{{{3|{{{lang|}}}}}}
|{{{4|}}}
|{{{5|}}}
|incl={{{incl|{{{i|3}}}}}}
|code={{{code|}}}
|link={{{link|}}}
|case={{{case|}}}
|i18n={{{i18n|}}}
|parm={{{parm|}}}
|full={{{full|}}}
|style={{{style|}}}
}}<noinclude>
{{documentation|Template:T/doc}}
</noinclude>
0shomsirl6ymjg2m0k9fmpuf2xg4ml3
10670
8825
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Tl]]
904
wikitext
text/x-wiki
#REDIRECT [[Tempilet:Template link]]
sgee72tm3cdfvzdm94s1onfs05vdros
Tempilet:Yesno
10
194
10673
2024-08-28T17:38:59Z
commons>CptViraj
0
Protected "[[Template:Yesno]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10673
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|0 = {{{no|<!-- null -->}}}
| = {{{blank|{{{no|<!-- null -->}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
38pzczcy3yuch0ep5r1yz593bjppldv
10674
8917
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Yesno]]
950
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }}
|no
|n
|f
|false
|off
|0 = {{{no|}}}
| = {{{blank|{{{no|}}}}}}
|¬ = {{{¬|}}}
|yes
|y
|t
|true
|on
|1 = {{{yes|yes}}}
|#default = {{{def|{{{yes|yes}}}}}}
}}<noinclude>
{{Documentation}}
</noinclude>
ap97tktff18ii0muqd5f4eezydumg5v
Module:Arguments
828
215
10681
8822
2021-02-19T00:52:50Z
commons>Magog the Ogre
0
2 revisions imported from [[:w:en:Module:Arguments]]
8822
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
5qx9tzlul9ser30uxj9nbasjt92cevn
10682
9588
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Arguments]]
998
Scribunto
text/plain
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
5qx9tzlul9ser30uxj9nbasjt92cevn
Module:Category handler
828
217
10727
2019-07-30T14:18:08Z
commons>Steinsplitter
0
Protected "[[Module:Category handler]]": [[Commons:Protection policy|High-risk Lua module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10727
Scribunto
text/plain
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
letwavu3yvlayfzew66uuwixmwebq5b
10728
8841
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Category_handler]]
1002
Scribunto
text/plain
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
letwavu3yvlayfzew66uuwixmwebq5b
Module:Category handler/blacklist
828
218
10867
2015-05-15T00:16:51Z
commons>Krenair
0
[[phabricator:T99157|scribunto content model]]
10867
Scribunto
text/plain
-- This module contains the blacklist used by [[Module:Category handler]].
-- Pages that match Lua patterns in this list will not be categorised unless
-- categorisation is explicitly requested.
return {
'^Main Page$', -- don't categorise the main page.
-- Don't categorise the following pages or their subpages.
-- "%f[/\0]" matches if the next character is "/" or the end of the string.
'^Wikipedia:Cascade%-protected items%f[/\0]',
'^User:UBX%f[/\0]', -- The userbox "template" space.
'^User talk:UBX%f[/\0]',
-- Don't categorise subpages of these pages, but allow
-- categorisation of the base page.
'^Wikipedia:Template messages/.*$',
'/[aA]rchive' -- Don't categorise archives.
}
ne8sdldor304iu81gnqa05p401j3exc
10868
8849
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Category_handler/blacklist]]
1006
Scribunto
text/plain
-- This module contains the blacklist used by [[Module:Category handler]].
-- Pages that match Lua patterns in this list will not be categorised unless
-- categorisation is explicitly requested.
return {
'^Main Page$', -- don't categorise the main page.
-- Don't categorise the following pages or their subpages.
-- "%f[/\0]" matches if the next character is "/" or the end of the string.
'^Wikipidiya:Cascade%-protected items%f[/\0]',
'^User:UBX%f[/\0]', -- The userbox "template" space.
'^User talk:UBX%f[/\0]',
-- Don't categorise subpages of these pages, but allow
-- categorisation of the base page.
'^Wikipidiya:Template index/.*$',
-- Don't categorise archives.
'/[aA]rchive',
"^Wikipidiya:Administrators' noticeboard/IncidentArchive%d+$",
}
a2svcabdeugpj7zgfzcf3b47jxmajdc
Module:Category handler/config
828
219
10869
2015-05-15T00:16:51Z
commons>Krenair
0
[[phabricator:T99157|scribunto content model]]
10869
Scribunto
text/plain
--------------------------------------------------------------------------------
-- [[Module:Category handler]] configuration data --
-- Language-specific parameter names and values can be set here. --
-- For blacklist config, see [[Module:Category handler/blacklist]]. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Start configuration data --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- foo = 'parameter name', --
-- --
-- To add multiple names, you can use this format: --
-- --
-- foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'}, --
--------------------------------------------------------------------------------
cfg.parameters = {
-- The nocat and categories parameter suppress
-- categorisation. They are used with Module:Yesno, and work as follows:
--
-- cfg.nocat:
-- Result of yesno() Effect
-- true Categorisation is suppressed
-- false Categorisation is allowed, and
-- the blacklist check is skipped
-- nil Categorisation is allowed
--
-- cfg.categories:
-- Result of yesno() Effect
-- true Categorisation is allowed, and
-- the blacklist check is skipped
-- false Categorisation is suppressed
-- nil Categorisation is allowed
nocat = 'nocat',
categories = 'categories',
-- The parameter name for the legacy "category2" parameter. This skips the
-- blacklist if set to the cfg.category2Yes value, and suppresses
-- categorisation if present but equal to anything other than
-- cfg.category2Yes or cfg.category2Negative.
category2 = 'category2',
-- cfg.subpage is the parameter name to specify how to behave on subpages.
subpage = 'subpage',
-- The parameter for data to return in all namespaces.
all = 'all',
-- The parameter name for data to return if no data is specified for the
-- namespace that is detected.
other = 'other',
-- The parameter name used to specify a page other than the current page;
-- used for testing and demonstration.
demopage = 'page',
}
--------------------------------------------------------------------------------
-- Parameter values --
-- These are set values that can be used with certain parameters. Only one --
-- value can be specified, like this: --
-- --
-- cfg.foo = 'value name' -- --
--------------------------------------------------------------------------------
-- The following settings are used with the cfg.category2 parameter. Setting
-- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2
-- is present but equal to anything other than cfg.category2Yes or
-- cfg.category2Negative then it supresses cateogrisation.
cfg.category2Yes = 'yes'
cfg.category2Negative = '¬'
-- The following settings are used with the cfg.subpage parameter.
-- cfg.subpageNo is the value to specify to not categorise on subpages;
-- cfg.subpageOnly is the value to specify to only categorise on subpages.
cfg.subpageNo = 'no'
cfg.subpageOnly = 'only'
--------------------------------------------------------------------------------
-- Default namespaces --
-- This is a table of namespaces to categorise by default. The keys are the --
-- namespace numbers. --
--------------------------------------------------------------------------------
cfg.defaultNamespaces = {
[ 0] = true, -- main
[ 6] = true, -- file
[ 12] = true, -- help
[ 14] = true, -- category
[100] = true, -- portal
[108] = true, -- book
}
--------------------------------------------------------------------------------
-- Wrappers --
-- This is a wrapper template or a list of wrapper templates to be passed to --
-- [[Module:Arguments]]. --
--------------------------------------------------------------------------------
cfg.wrappers = 'Template:Category handler'
--------------------------------------------------------------------------------
-- End configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
6ga9hbq2pdwalsvx68i53dmbr421rq5
10870
8845
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Category_handler/config]]
1008
Scribunto
text/plain
--------------------------------------------------------------------------------
-- [[Module:Category handler]] configuration data --
-- Language-specific parameter names and values can be set here. --
-- For blacklist config, see [[Module:Category handler/blacklist]]. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Start configuration data --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- foo = 'parameter name', --
-- --
-- To add multiple names, you can use this format: --
-- --
-- foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'}, --
--------------------------------------------------------------------------------
cfg.parameters = {
-- The nocat and categories parameter suppress
-- categorisation. They are used with Module:Yesno, and work as follows:
--
-- cfg.nocat:
-- Result of yesno() Effect
-- true Categorisation is suppressed
-- false Categorisation is allowed, and
-- the blacklist check is skipped
-- nil Categorisation is allowed
--
-- cfg.categories:
-- Result of yesno() Effect
-- true Categorisation is allowed, and
-- the blacklist check is skipped
-- false Categorisation is suppressed
-- nil Categorisation is allowed
nocat = 'nocat',
categories = 'categories',
-- The parameter name for the legacy "category2" parameter. This skips the
-- blacklist if set to the cfg.category2Yes value, and suppresses
-- categorisation if present but equal to anything other than
-- cfg.category2Yes or cfg.category2Negative.
category2 = 'category2',
-- cfg.subpage is the parameter name to specify how to behave on subpages.
subpage = 'subpage',
-- The parameter for data to return in all namespaces.
all = 'all',
-- The parameter name for data to return if no data is specified for the
-- namespace that is detected.
other = 'other',
-- The parameter name used to specify a page other than the current page;
-- used for testing and demonstration.
demopage = 'page',
}
--------------------------------------------------------------------------------
-- Parameter values --
-- These are set values that can be used with certain parameters. Only one --
-- value can be specified, like this: --
-- --
-- cfg.foo = 'value name' -- --
--------------------------------------------------------------------------------
-- The following settings are used with the cfg.category2 parameter. Setting
-- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2
-- is present but equal to anything other than cfg.category2Yes or
-- cfg.category2Negative then it supresses cateogrisation.
cfg.category2Yes = 'yes'
cfg.category2Negative = '¬'
-- The following settings are used with the cfg.subpage parameter.
-- cfg.subpageNo is the value to specify to not categorise on subpages;
-- cfg.subpageOnly is the value to specify to only categorise on subpages.
cfg.subpageNo = 'no'
cfg.subpageOnly = 'only'
--------------------------------------------------------------------------------
-- Default namespaces --
-- This is a table of namespaces to categorise by default. The keys are the --
-- namespace numbers. --
--------------------------------------------------------------------------------
cfg.defaultNamespaces = {
[ 0] = true, -- main
[ 6] = true, -- file
[ 12] = true, -- help
[ 14] = true, -- category
[100] = true, -- portal
[108] = true, -- book
}
--------------------------------------------------------------------------------
-- Wrappers --
-- This is a wrapper template or a list of wrapper templates to be passed to --
-- [[Module:Arguments]]. --
--------------------------------------------------------------------------------
cfg.wrappers = 'Template:Category handler'
--------------------------------------------------------------------------------
-- End configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
6ga9hbq2pdwalsvx68i53dmbr421rq5
Module:Category handler/data
828
220
10871
2015-05-15T00:16:51Z
commons>Krenair
0
[[phabricator:T99157|scribunto content model]]
10871
Scribunto
text/plain
-- This module assembles data to be passed to [[Module:Category handler]] using
-- mw.loadData. This includes the configuration data and whether the current
-- page matches the title blacklist.
local data = require('Module:Category handler/config')
local mShared = require('Module:Category handler/shared')
local blacklist = require('Module:Category handler/blacklist')
local title = mw.title.getCurrentTitle()
data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(
title.prefixedText,
blacklist
)
data.currentTitleNamespaceParameters = mShared.getNamespaceParameters(
title,
mShared.getParamMappings()
)
return data
k26mwixuaeijisfddb0sxkg82iux8v4
10872
8843
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Category_handler/data]]
1010
Scribunto
text/plain
-- This module assembles data to be passed to [[Module:Category handler]] using
-- mw.loadData. This includes the configuration data and whether the current
-- page matches the title blacklist.
local data = require('Module:Category handler/config')
local mShared = require('Module:Category handler/shared')
local blacklist = require('Module:Category handler/blacklist')
local title = mw.title.getCurrentTitle()
data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(
title.prefixedText,
blacklist
)
data.currentTitleNamespaceParameters = mShared.getNamespaceParameters(
title,
mShared.getParamMappings()
)
return data
k26mwixuaeijisfddb0sxkg82iux8v4
Module:Category handler/shared
828
221
10873
2015-05-15T00:16:52Z
commons>Krenair
0
[[phabricator:T99157|scribunto content model]]
10873
Scribunto
text/plain
-- This module contains shared functions used by [[Module:Category handler]]
-- and its submodules.
local p = {}
function p.matchesBlacklist(page, blacklist)
for i, pattern in ipairs(blacklist) do
local match = mw.ustring.match(page, pattern)
if match then
return true
end
end
return false
end
function p.getParamMappings(useLoadData)
local dataPage = 'Module:Namespace detect/data'
if useLoadData then
return mw.loadData(dataPage).mappings
else
return require(dataPage).mappings
end
end
function p.getNamespaceParameters(titleObj, mappings)
-- We don't use title.nsText for the namespace name because it adds
-- underscores.
local mappingsKey
if titleObj.isTalkPage then
mappingsKey = 'talk'
else
mappingsKey = mw.site.namespaces[titleObj.namespace].name
end
mappingsKey = mw.ustring.lower(mappingsKey)
return mappings[mappingsKey] or {}
end
return p
omlsnhudxz6juptvtxz7ns97jutbzc5
10874
8847
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Category_handler/shared]]
1012
Scribunto
text/plain
-- This module contains shared functions used by [[Module:Category handler]]
-- and its submodules.
local p = {}
function p.matchesBlacklist(page, blacklist)
for i, pattern in ipairs(blacklist) do
local match = mw.ustring.match(page, pattern)
if match then
return true
end
end
return false
end
function p.getParamMappings(useLoadData)
local dataPage = 'Module:Namespace detect/data'
if useLoadData then
return mw.loadData(dataPage).mappings
else
return require(dataPage).mappings
end
end
function p.getNamespaceParameters(titleObj, mappings)
-- We don't use title.nsText for the namespace name because it adds
-- underscores.
local mappingsKey
if titleObj.isTalkPage then
mappingsKey = 'talk'
else
mappingsKey = mw.site.namespaces[titleObj.namespace].name
end
mappingsKey = mw.ustring.lower(mappingsKey)
return mappings[mappingsKey] or {}
end
return p
omlsnhudxz6juptvtxz7ns97jutbzc5
Module:List
828
247
10701
2019-07-16T11:19:24Z
commons>4nn1l2
0
Changed protection level for "[[Module:List]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite))
10701
Scribunto
text/plain
-- This module outputs different kinds of lists. At the moment, bulleted,
-- unbulleted, horizontal, ordered, and horizontal ordered lists are supported.
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes
data.classes = {}
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist hlist-separated')
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for i, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create('div')
for i, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for i, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return tostring(root)
end
function p.renderTrackingCategories(args)
local isDeprecated = false -- Tracks deprecated parameters.
for k, v in pairs(args) do
k = tostring(k)
if k:find('^item_style%d+$') or k:find('^item_value%d+$') then
isDeprecated = true
break
end
end
local ret = ''
if isDeprecated then
ret = ret .. '[[Category:List templates with deprecated parameters]]'
end
return ret
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
local list = p.renderList(data)
local trackingCategories = p.renderTrackingCategories(args)
return list .. trackingCategories
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame)
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
lkqmcmpfob2c6xhq46f675tm6p136ns
10702
8921
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:List]]
1085
Scribunto
text/plain
local libUtil = require('libraryUtil')
local checkType = libUtil.checkType
local mTableTools = require('Module:TableTools')
local p = {}
local listTypes = {
['bulleted'] = true,
['unbulleted'] = true,
['horizontal'] = true,
['ordered'] = true,
['horizontal_ordered'] = true
}
function p.makeListData(listType, args)
-- Constructs a data table to be passed to p.renderList.
local data = {}
-- Classes and TemplateStyles
data.classes = {}
data.templatestyles = ''
if listType == 'horizontal' or listType == 'horizontal_ordered' then
table.insert(data.classes, 'hlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Hlist/styles.css' }
}
elseif listType == 'unbulleted' then
table.insert(data.classes, 'plainlist')
data.templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Plainlist/styles.css' }
}
end
table.insert(data.classes, args.class)
-- Main div style
data.style = args.style
-- Indent for horizontal lists
if listType == 'horizontal' or listType == 'horizontal_ordered' then
local indent = tonumber(args.indent)
indent = indent and indent * 1.6 or 0
if indent > 0 then
data.marginLeft = indent .. 'em'
end
end
-- List style types for ordered lists
-- This could be "1, 2, 3", "a, b, c", or a number of others. The list style
-- type is either set by the "type" attribute or the "list-style-type" CSS
-- property.
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listStyleType = args.list_style_type or args['list-style-type']
data.type = args['type']
-- Detect invalid type attributes and attempt to convert them to
-- list-style-type CSS properties.
if data.type
and not data.listStyleType
and not tostring(data.type):find('^%s*[1AaIi]%s*$')
then
data.listStyleType = data.type
data.type = nil
end
end
-- List tag type
if listType == 'ordered' or listType == 'horizontal_ordered' then
data.listTag = 'ol'
else
data.listTag = 'ul'
end
-- Start number for ordered lists
data.start = args.start
if listType == 'horizontal_ordered' then
-- Apply fix to get start numbers working with horizontal ordered lists.
local startNum = tonumber(data.start)
if startNum then
data.counterReset = 'listitem ' .. tostring(startNum - 1)
end
end
-- List style
-- ul_style and ol_style are included for backwards compatibility. No
-- distinction is made for ordered or unordered lists.
data.listStyle = args.list_style
-- List items
-- li_style is included for backwards compatibility. item_style was included
-- to be easier to understand for non-coders.
data.itemStyle = args.item_style or args.li_style
data.items = {}
for _, num in ipairs(mTableTools.numKeys(args)) do
local item = {}
item.content = args[num]
item.style = args['item' .. tostring(num) .. '_style']
or args['item_style' .. tostring(num)]
item.value = args['item' .. tostring(num) .. '_value']
or args['item_value' .. tostring(num)]
table.insert(data.items, item)
end
return data
end
function p.renderList(data)
-- Renders the list HTML.
-- Return the blank string if there are no list items.
if type(data.items) ~= 'table' or #data.items < 1 then
return ''
end
-- Render the main div tag.
local root = mw.html.create('div')
for _, class in ipairs(data.classes or {}) do
root:addClass(class)
end
root:css{['margin-left'] = data.marginLeft}
if data.style then
root:cssText(data.style)
end
-- Render the list tag.
local list = root:tag(data.listTag or 'ul')
list
:attr{start = data.start, type = data.type}
:css{
['counter-reset'] = data.counterReset,
['list-style-type'] = data.listStyleType
}
if data.listStyle then
list:cssText(data.listStyle)
end
-- Render the list items
for _, t in ipairs(data.items or {}) do
local item = list:tag('li')
if data.itemStyle then
item:cssText(data.itemStyle)
end
if t.style then
item:cssText(t.style)
end
item
:attr{value = t.value}
:wikitext(t.content)
end
return data.templatestyles .. tostring(root)
end
function p.renderTrackingCategories(args)
local isDeprecated = false -- Tracks deprecated parameters.
for k, v in pairs(args) do
k = tostring(k)
if k:find('^item_style%d+$') or k:find('^item_value%d+$') then
isDeprecated = true
break
end
end
local ret = ''
if isDeprecated then
ret = ret .. '[[Panni:Pages using module:list with deprecated parameters]]'
end
return ret
end
function p.makeList(listType, args)
if not listType or not listTypes[listType] then
error(string.format(
"bad argument #1 to 'makeList' ('%s' is not a valid list type)",
tostring(listType)
), 2)
end
checkType('makeList', 2, args, 'table')
local data = p.makeListData(listType, args)
local list = p.renderList(data)
local trackingCategories = p.renderTrackingCategories(args)
return list .. trackingCategories
end
for listType in pairs(listTypes) do
p[listType] = function (frame)
local mArguments = require('Module:Arguments')
local origArgs = mArguments.getArgs(frame, {
frameOnly = ((frame and frame.args and frame.args.frameonly or '') ~= ''),
valueFunc = function (key, value)
if not value or not mw.ustring.find(value, '%S') then return nil end
if mw.ustring.find(value, '^%s*[%*#;:]') then
return value
else
return value:match('^%s*(.-)%s*$')
end
return nil
end
})
-- Copy all the arguments to a new table, for faster indexing.
local args = {}
for k, v in pairs(origArgs) do
args[k] = v
end
return p.makeList(listType, args)
end
end
return p
tr487zbcoedlshivz6396ck395x3poz
Module:Lua banner
828
248
10911
8958
2025-10-03T01:32:52Z
commons>Waddie96
0
add class .tpl-lua-banner
10911
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local TNT = require('Module:TNT')
local lang = mw.getCurrentFrame():preprocess('{{int:lang}}')
local p = {}
local function format(msg)
return TNT.formatInLanguage(lang, 'I18n/Lua banner', msg)
end
local function getConfig()
return mw.loadData('Module:Lua banner/config')
end
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args, cfg)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules, cfg)
local trackingCategories = p.renderTrackingCategories(args, modules, nil, cfg)
return box .. trackingCategories
end
function p.renderBox(modules, cfg)
local boxArgs = {}
if #modules < 1 then
cfg = cfg or getConfig()
if cfg['allow_wishes'] then
boxArgs.text = format('wishtext')
else
boxArgs.text = string.format('<strong class="error">%s</strong>', format('error_emptylist'))
end
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
end
local moduleList = mList.makeList('bulleted', moduleLinks)
boxArgs.text = format('header') .. '\n' .. moduleList
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.class = 'tpl-lua-banner'
boxArgs.image = string.format(
'<span aria-hidden="true">[[File:Lua-Logo-small.svg|30px|alt=%s|link=%s]]</span>',
format('logo_alt'),
format('logo_link')
)
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj, cfg)
if yesno(args.nocat) then
return ''
end
cfg = cfg or getConfig()
local cats = {}
-- Error category
if #modules < 1 and not cfg['allow_wishes'] and cfg['error_category'] then
cats[#cats + 1] = cfg['error_category']
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
if titleObj.namespace == 10
and not cfg['subpage_blacklist'][titleObj.subpageText]
then
local category = args.category
if not category then
local pagename = modules[1] and mw.title.new(modules[1])
category = pagename and cfg['module_categories'][pagename.text]
if not category then
if cfg['allow_wishes'] and #modules < 1 then
category = cfg['wish_category']
else
category = cfg['default_category']
end
end
end
if category then
cats[#cats + 1] = category
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Category:%s]]', cat)
end
return table.concat(cats)
end
return p
ayos2c7ulq1i25528cgh5txi0wub4uy
10912
8959
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Lua_banner]]
1088
Scribunto
text/plain
-- This module implements the {{lua}} template.
local yesno = require('Module:Yesno')
local mList = require('Module:List')
local mTableTools = require('Module:TableTools')
local mMessageBox = require('Module:Message box')
local p = {}
function p.main(frame)
local origArgs = frame:getParent().args
local args = {}
for k, v in pairs(origArgs) do
v = v:match('^%s*(.-)%s*$')
if v ~= '' then
args[k] = v
end
end
return p._main(args)
end
function p._main(args)
local modules = mTableTools.compressSparseArray(args)
local box = p.renderBox(modules)
local trackingCategories = p.renderTrackingCategories(args, modules)
return box .. trackingCategories
end
function p.renderBox(modules)
local boxArgs = {}
if #modules < 1 then
boxArgs.text = '<strong class="error">Error: no modules specified</strong>'
else
local moduleLinks = {}
for i, module in ipairs(modules) do
moduleLinks[i] = string.format('[[:%s]]', module)
local maybeSandbox = mw.title.new(module .. '/sandbox')
if maybeSandbox and maybeSandbox.exists then
moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText)
end
end
local moduleList = mList.makeList('bulleted', moduleLinks)
local title = mw.title.getCurrentTitle()
if title.subpageText == "doc" then
title = title.basePageTitle
end
if title.contentModel == "Scribunto" then
boxArgs.text = 'This module depends on the following other modules:' .. moduleList
else
boxArgs.text = 'This template uses [[Wikipidiya:Lua|Lua]]:\n' .. moduleList
end
end
boxArgs.type = 'notice'
boxArgs.small = true
boxArgs.image = '[[Fayil:Lua-Logo.svg|30px|alt=|link=]]'
return mMessageBox.main('mbox', boxArgs)
end
function p.renderTrackingCategories(args, modules, titleObj)
if yesno(args.nocat) then
return ''
end
local cats = {}
-- Error category
if #modules < 1 then
cats[#cats + 1] = 'Lua templates with errors'
end
-- Lua templates category
titleObj = titleObj or mw.title.getCurrentTitle()
local subpageBlacklist = {
doc = true,
sandbox = true,
sandbox2 = true,
testcases = true
}
if not subpageBlacklist[titleObj.subpageText] then
local protCatName
if titleObj.namespace == 10 then
local category = args.category
if not category then
local categories = {
['Module:String'] = 'Templates based on the String Lua module',
['Module:Math'] = 'Templates based on the Math Lua module',
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',
['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module'
}
category = modules[1] and categories[modules[1]]
category = category or 'Lua-based templates'
end
cats[#cats + 1] = category
protCatName = "Templates using under-protected Lua modules"
elseif titleObj.namespace == 828 then
protCatName = "Modules depending on under-protected modules"
end
if not args.noprotcat and protCatName then
local protLevels = {
autoconfirmed = 1,
extendedconfirmed = 2,
templateeditor = 3,
sysop = 4
}
local currentProt
if titleObj.id ~= 0 then
-- id is 0 (page does not exist) if am previewing before creating a template.
currentProt = titleObj.protectionLevels["edit"][1]
end
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end
for i, module in ipairs(modules) do
if module ~= "WP:libraryUtil" then
local moduleTitle = mw.title.new(module)
local moduleProt = moduleTitle and moduleTitle.protectionLevels["edit"][1]
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end
if moduleProt < currentProt then
cats[#cats + 1] = protCatName
break
end
end
end
end
end
for i, cat in ipairs(cats) do
cats[i] = string.format('[[Panni:%s]]', cat)
end
return table.concat(cats)
end
return p
r9irtnx3k4tcnyr4p6nnc2fsy1qsckr
Module:Math
828
249
10595
2026-04-10T14:26:08Z
en>Ahecht
0
Rewrite rounding and precision code to run faster, other code cleanup including removing unused variables. Please revert if this causes any unexpected side effects
10595
Scribunto
text/plain
--[[
This module provides a number of basic mathematical operations.
]]
local yesno, getArgs -- lazily initialized
local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua.
--[[
Helper functions used to avoid redundant code.
]]
local function err(msg)
-- Generates wikitext error messages.
return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg)
end
local function unpackNumberArgs(args)
-- Returns an unpacked list of arguments specified with numerical keys.
local ret = {}
for k, v in pairs(args) do
if type(k) == 'number' then
table.insert(ret, v)
end
end
return unpack(ret)
end
local function makeArgArray(...)
-- Makes an array of arguments from a list of arguments that might include nils.
local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs.
local nums = {} -- Stores the numbers of valid numerical arguments.
local ret = {}
for k, v in pairs(args) do
v = p._cleanNumber(v)
if v then
nums[#nums + 1] = k
args[k] = v
end
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[#ret + 1] = args[num]
end
return ret
end
local function fold(func, ...)
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- and must return a number as an output. This number is then supplied as input to the next function call.
local vals = makeArgArray(...)
local count = #vals -- The number of valid arguments
if count == 0 then return
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
nil, 0
end
local ret = table.remove(vals, 1)
for _, val in ipairs(vals) do
ret = func(ret, val)
end
return ret, count
end
--[[
Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value).
]]
local function binary_fold(func, ...)
local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...)
return value
end
--[[
random
Generate a random number
Usage:
{{#invoke: Math | random }}
{{#invoke: Math | random | maximum value }}
{{#invoke: Math | random | minimum value | maximum value }}
]]
function wrap.random(args)
local first = p._cleanNumber(args[1])
local second = p._cleanNumber(args[2])
return p._random(first, second)
end
function p._random(first, second)
math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000))
-- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params.
if first and second then
if first <= second then -- math.random doesn't allow the first number to be greater than the second.
return math.random(first, second)
end
elseif first then
return math.random(first)
else
return math.random()
end
end
--[[
order
Determine order of magnitude of a number
Usage:
{{#invoke: Math | order | value }}
]]
function wrap.order(args)
local input_string = (args[1] or args.x or '0');
local input_number = p._cleanNumber(input_string);
if input_number == nil then
return err('order of magnitude input appears non-numeric')
else
return p._order(input_number)
end
end
function p._order(x)
if x == 0 then return 0 end
return math.floor(math.log10(math.abs(x)))
end
--[[
precision
Detemines the precision of a number using the string representation
Usage:
{{ #invoke: Math | precision | value }}
]]
function wrap.precision(args)
local input_string = (args[1] or args.x or '0');
local trap_fraction = args.check_fraction;
if not yesno then
yesno = require('Module:Yesno')
end
if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]].
local pos = string.find(input_string, '/', 1, true);
if pos ~= nil then
if string.find(input_string, '/', pos + 1, true) == nil then
local denominator = string.sub(input_string, pos+1, -1);
local denom_value = tonumber(denominator);
if denom_value ~= nil then
return math.log10(denom_value);
end
end
end
end
local _, clean_string = p._cleanNumber(input_string);
if clean_string == nil then
return err('precision input appears non-numeric')
else
return p._precision(clean_string)
end
end
function p._precision(x)
if type(x) == 'number' then
x = tostring(x)
end
local result = 0;
--subtract exponent
local _, _, coefficient, exponent = x:find("^(.*)[eE](.*)$")
if coefficient then
result = result - (tonumber(exponent) or 0)
x = coefficient
end
--add decimal places
local i, j = x:find('%..*$')
if i then
result = result + (j - i)
return result
end
--subtract trailing zeroes
i, j = x:find('[^0]0+$')
if i then
result = result - (j - i)
end
return result
end
--[[
max
Finds the maximum argument
Usage:
{{#invoke:Math| max | value1 | value2 | ... }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.max(args)
return p._max(unpackNumberArgs(args))
end
function p._max(...)
local max_value = binary_fold((function(a, b) return a > b end), ...)
if max_value then
return max_value
end
end
--[[
median
Find the median of set of numbers
Usage:
{{#invoke:Math | median | number1 | number2 | ...}}
OR
{{#invoke:Math | median }}
]]
function wrap.median(args)
return p._median(unpackNumberArgs(args))
end
function p._median(...)
local vals = makeArgArray(...)
local count = #vals
table.sort(vals)
if count == 0 then
return 0
end
if p._mod(count, 2) == 0 then
return (vals[count/2] + vals[count/2+1])/2
else
return vals[math.ceil(count/2)]
end
end
--[[
min
Finds the minimum argument
Usage:
{{#invoke:Math| min | value1 | value2 | ... }}
OR
{{#invoke:Math| min }}
When used with no arguments, it takes its input from the parent
frame. Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.min(args)
return p._min(unpackNumberArgs(args))
end
function p._min(...)
local min_value = binary_fold((function(a, b) return a < b end), ...)
if min_value then
return min_value
end
end
--[[
sum
Finds the sum
Usage:
{{#invoke:Math| sum | value1 | value2 | ... }}
OR
{{#invoke:Math| sum }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.sum(args)
return p._sum(unpackNumberArgs(args))
end
function p._sum(...)
local sums = fold((function(a, b) return a + b end), ...)
if not sums then
return 0
else
return sums
end
end
--[[
average
Finds the average
Usage:
{{#invoke:Math| average | value1 | value2 | ... }}
OR
{{#invoke:Math| average }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.average(args)
return p._average(unpackNumberArgs(args))
end
function p._average(...)
local sum, count = fold((function(a, b) return a + b end), ...)
if not sum then
return 0
else
return sum / count
end
end
--[[
round
Rounds a number to specified precision
Usage:
{{#invoke:Math | round | value | precision }}
--]]
function wrap.round(args)
local value = p._cleanNumber(args[1] or args.value or 0)
local precision = p._cleanNumber(args[2] or args.precision or 0)
if value == nil or precision == nil then
return err('round input appears non-numeric')
else
return p._round(value, precision)
end
end
function p._round(value, precision)
local rescale = math.pow(10, precision or 0);
return math.floor(value * rescale + 0.5) / rescale;
end
--[[
log10
returns the log (base 10) of a number
Usage:
{{#invoke:Math | log10 | x }}
]]
function wrap.log10(args)
return math.log10(args[1])
end
--[[
mod
Implements the modulo operator
Usage:
{{#invoke:Math | mod | x | y }}
--]]
function wrap.mod(args)
local x = p._cleanNumber(args[1])
local y = p._cleanNumber(args[2])
if not x then
return err('first argument to mod appears non-numeric')
elseif not y then
return err('second argument to mod appears non-numeric')
else
return p._mod(x, y)
end
end
function p._mod(x, y)
local ret = x % y
if not (0 <= ret and ret < y) then
ret = 0
end
return ret
end
--[[
gcd
Calculates the greatest common divisor of multiple numbers
Usage:
{{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }}
--]]
function wrap.gcd(args)
return p._gcd(unpackNumberArgs(args))
end
function p._gcd(...)
local function findGcd(a, b)
local r = b
local oldr = a
while r ~= 0 do
local quotient = math.floor(oldr / r)
oldr, r = r, oldr - quotient * r
end
if oldr < 0 then
oldr = oldr * -1
end
return oldr
end
local result = fold(findGcd, ...)
return result
end
--[[
precision_format
Rounds a number to the specified precision and formats according to rules
originally used for {{template:Rnd}}. Output is a string.
Usage:
{{#invoke: Math | precision_format | number | precision }}
]]
function wrap.precision_format(args)
local value_string = args[1] or 0
local precision = args[2] or 0
return p._precision_format(value_string, precision)
end
function p._precision_format(value_string, precision)
-- For access to Mediawiki built-in formatter.
local lang = mw.getContentLanguage();
local value
value, value_string = p._cleanNumber(value_string)
precision = p._cleanNumber(precision)
-- Check for non-numeric input
if value == nil or precision == nil then
return err('invalid input when rounding')
end
local abs_value = math.abs(value)
local current_precision = p._precision(value)
local order = p._order(value)
-- Due to round-off effects it is neccesary to limit the returned precision under
-- some circumstances because the terminal digits will be inaccurately reported.
if order + precision >= 14 then
if order + p._precision(value_string) >= 14 then
precision = 13 - order;
end
end
-- If rounding off, truncate extra digits
if precision < current_precision then
value = p._round(value, precision)
abs_value = math.abs(value)
current_precision = p._precision(value)
end
local formatted_num = lang:formatNum(abs_value)
-- Handle cases requiring scientific notation
if math.abs(order) >= 9 or string.find(formatted_num, 'E', 1, true) then
value = value * (10 ^ (-order))
abs_value = math.abs(value)
current_precision = current_precision + order
precision = precision + order
formatted_num = lang:formatNum(abs_value)
else
order = 0;
end
-- Use proper unary minus sign rather than ASCII default
formatted_num = ((value < 0) and '−' or '') .. formatted_num
-- Pad with zeros, if needed
if current_precision < precision then
local padding
if current_precision <= 0 then
if precision > 0 then
local zero_sep = lang:formatNum(1.1)
formatted_num = formatted_num .. zero_sep:sub(2,2)
padding = precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
else
padding = precision - current_precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
end
-- Add exponential notation, if necessary.
if order ~= 0 then
-- Use proper unary minus sign rather than ASCII default
if order < 0 then
order = '−' .. lang:formatNum(math.abs(order))
else
order = lang:formatNum(order)
end
formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>'
end
return formatted_num
end
--[[
divide
Implements the division operator
Usage:
{{#invoke:Math | divide | x | y | round= | precision= }}
--]]
function wrap.divide(args)
local x = args[1]
local y = args[2]
local round = args.round
local precision = args.precision
if not yesno then
yesno = require('Module:Yesno')
end
return p._divide(x, y, yesno(round), precision)
end
function p._divide(x, y, round, precision)
if y == nil or y == "" then
return err("Empty divisor")
elseif not tonumber(y) then
if type(y) == 'string' and string.sub(y, 1, 1) == '<' then
return y
else
return err("Not a number: " .. y)
end
elseif x == nil or x == "" then
return err("Empty dividend")
elseif not tonumber(x) then
if type(x) == 'string' and string.sub(x, 1, 1) == '<' then
return x
else
return err("Not a number: " .. x)
end
else
local z = x / y
if round then
return p._round(z, 0)
elseif precision then
return p._round(z, precision)
else
return z
end
end
end
--[[
Helper function that interprets the input numerically. If the
input does not appear to be a number, attempts evaluating it as
a parser functions expression.
]]
function p._cleanNumber(number_string, unformat)
if type(number_string) == 'number' then
-- We were passed a number, so we don't need to do any processing.
return number_string, tostring(number_string)
elseif type(number_string) ~= 'string' or not number_string:find('%S') then
-- We were passed a non-string or a blank string, so exit.
return nil, nil;
end
-- Attempt basic conversion
local number = tonumber(number_string)
-- If failed, try unformatting the number_string
if unformat and number == nil then
-- Cannot use mw.language.getContentLanguage():parseFormattedNumber()
-- because, unlike {{formatnum:|R}}, it won't ignore operators (it
-- would return an error on "1,234+1,234" instead of "1234+1234")
number_string = mw.getCurrentFrame():callParserFunction("formatnum", {number_string, "R"})
number = tonumber(number_string)
end
-- If failed, attempt to evaluate input as an expression
if number == nil then
local success, result = pcall(mw.ext.ParserFunctions.expr, number_string)
if success then
number = tonumber(result)
number_string = tostring(number)
else
number = nil
number_string = nil
end
else
number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it.
number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs.
if number_string:find('^%-?0[xX]') then
-- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead.
number_string = tostring(number)
end
end
return number, number_string
end
--[[
Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current
frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments.
]]
local mt = { __index = function(_, k)
return function(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed.
end
end }
return setmetatable(p, mt)
f4r823qxvpkct3eikmvj99wyjq9cjkm
10596
1092
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Math]]
1090
Scribunto
text/plain
--[[
This module provides a number of basic mathematical operations.
]]
local yesno, getArgs -- lazily initialized
local p = {} -- Holds functions to be returned from #invoke, and functions to make available to other Lua modules.
local wrap = {} -- Holds wrapper functions that process arguments from #invoke. These act as intemediary between functions meant for #invoke and functions meant for Lua.
--[[
Helper functions used to avoid redundant code.
]]
local function err(msg)
-- Generates wikitext error messages.
return mw.ustring.format('<strong class="error">Formatting error: %s</strong>', msg)
end
local function unpackNumberArgs(args)
-- Returns an unpacked list of arguments specified with numerical keys.
local ret = {}
for k, v in pairs(args) do
if type(k) == 'number' then
table.insert(ret, v)
end
end
return unpack(ret)
end
local function makeArgArray(...)
-- Makes an array of arguments from a list of arguments that might include nils.
local args = {...} -- Table of arguments. It might contain nils or non-number values, so we can't use ipairs.
local nums = {} -- Stores the numbers of valid numerical arguments.
local ret = {}
for k, v in pairs(args) do
v = p._cleanNumber(v)
if v then
nums[#nums + 1] = k
args[k] = v
end
end
table.sort(nums)
for i, num in ipairs(nums) do
ret[#ret + 1] = args[num]
end
return ret
end
local function fold(func, ...)
-- Use a function on all supplied arguments, and return the result. The function must accept two numbers as parameters,
-- and must return a number as an output. This number is then supplied as input to the next function call.
local vals = makeArgArray(...)
local count = #vals -- The number of valid arguments
if count == 0 then return
-- Exit if we have no valid args, otherwise removing the first arg would cause an error.
nil, 0
end
local ret = table.remove(vals, 1)
for _, val in ipairs(vals) do
ret = func(ret, val)
end
return ret, count
end
--[[
Fold arguments by selectively choosing values (func should return when to choose the current "dominant" value).
]]
local function binary_fold(func, ...)
local value = fold((function(a, b) if func(a, b) then return a else return b end end), ...)
return value
end
--[[
random
Generate a random number
Usage:
{{#invoke: Math | random }}
{{#invoke: Math | random | maximum value }}
{{#invoke: Math | random | minimum value | maximum value }}
]]
function wrap.random(args)
local first = p._cleanNumber(args[1])
local second = p._cleanNumber(args[2])
return p._random(first, second)
end
function p._random(first, second)
math.randomseed(mw.site.stats.edits + mw.site.stats.pages + os.time() + math.floor(os.clock() * 1000000000))
-- math.random will throw an error if given an explicit nil parameter, so we need to use if statements to check the params.
if first and second then
if first <= second then -- math.random doesn't allow the first number to be greater than the second.
return math.random(first, second)
end
elseif first then
return math.random(first)
else
return math.random()
end
end
--[[
order
Determine order of magnitude of a number
Usage:
{{#invoke: Math | order | value }}
]]
function wrap.order(args)
local input_string = (args[1] or args.x or '0');
local input_number = p._cleanNumber(input_string);
if input_number == nil then
return err('order of magnitude input appears non-numeric')
else
return p._order(input_number)
end
end
function p._order(x)
if x == 0 then return 0 end
return math.floor(math.log10(math.abs(x)))
end
--[[
precision
Detemines the precision of a number using the string representation
Usage:
{{ #invoke: Math | precision | value }}
]]
function wrap.precision(args)
local input_string = (args[1] or args.x or '0');
local trap_fraction = args.check_fraction;
if not yesno then
yesno = require('Module:Yesno')
end
if yesno(trap_fraction, true) then -- Returns true for all input except nil, false, "no", "n", "0" and a few others. See [[Module:Yesno]].
local pos = string.find(input_string, '/', 1, true);
if pos ~= nil then
if string.find(input_string, '/', pos + 1, true) == nil then
local denominator = string.sub(input_string, pos+1, -1);
local denom_value = tonumber(denominator);
if denom_value ~= nil then
return math.log10(denom_value);
end
end
end
end
local _, clean_string = p._cleanNumber(input_string);
if clean_string == nil then
return err('precision input appears non-numeric')
else
return p._precision(clean_string)
end
end
function p._precision(x)
if type(x) == 'number' then
x = tostring(x)
end
local result = 0;
--subtract exponent
local _, _, coefficient, exponent = x:find("^(.*)[eE](.*)$")
if coefficient then
result = result - (tonumber(exponent) or 0)
x = coefficient
end
--add decimal places
local i, j = x:find('%..*$')
if i then
result = result + (j - i)
return result
end
--subtract trailing zeroes
i, j = x:find('[^0]0+$')
if i then
result = result - (j - i)
end
return result
end
--[[
max
Finds the maximum argument
Usage:
{{#invoke:Math| max | value1 | value2 | ... }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.max(args)
return p._max(unpackNumberArgs(args))
end
function p._max(...)
local max_value = binary_fold((function(a, b) return a > b end), ...)
if max_value then
return max_value
end
end
--[[
median
Find the median of set of numbers
Usage:
{{#invoke:Math | median | number1 | number2 | ...}}
OR
{{#invoke:Math | median }}
]]
function wrap.median(args)
return p._median(unpackNumberArgs(args))
end
function p._median(...)
local vals = makeArgArray(...)
local count = #vals
table.sort(vals)
if count == 0 then
return 0
end
if p._mod(count, 2) == 0 then
return (vals[count/2] + vals[count/2+1])/2
else
return vals[math.ceil(count/2)]
end
end
--[[
min
Finds the minimum argument
Usage:
{{#invoke:Math| min | value1 | value2 | ... }}
OR
{{#invoke:Math| min }}
When used with no arguments, it takes its input from the parent
frame. Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.min(args)
return p._min(unpackNumberArgs(args))
end
function p._min(...)
local min_value = binary_fold((function(a, b) return a < b end), ...)
if min_value then
return min_value
end
end
--[[
sum
Finds the sum
Usage:
{{#invoke:Math| sum | value1 | value2 | ... }}
OR
{{#invoke:Math| sum }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.sum(args)
return p._sum(unpackNumberArgs(args))
end
function p._sum(...)
local sums = fold((function(a, b) return a + b end), ...)
if not sums then
return 0
else
return sums
end
end
--[[
average
Finds the average
Usage:
{{#invoke:Math| average | value1 | value2 | ... }}
OR
{{#invoke:Math| average }}
Note, any values that do not evaluate to numbers are ignored.
]]
function wrap.average(args)
return p._average(unpackNumberArgs(args))
end
function p._average(...)
local sum, count = fold((function(a, b) return a + b end), ...)
if not sum then
return 0
else
return sum / count
end
end
--[[
round
Rounds a number to specified precision
Usage:
{{#invoke:Math | round | value | precision }}
--]]
function wrap.round(args)
local value = p._cleanNumber(args[1] or args.value or 0)
local precision = p._cleanNumber(args[2] or args.precision or 0)
if value == nil or precision == nil then
return err('round input appears non-numeric')
else
return p._round(value, precision)
end
end
function p._round(value, precision)
local rescale = math.pow(10, precision or 0);
return math.floor(value * rescale + 0.5) / rescale;
end
--[[
log10
returns the log (base 10) of a number
Usage:
{{#invoke:Math | log10 | x }}
]]
function wrap.log10(args)
return math.log10(args[1])
end
--[[
mod
Implements the modulo operator
Usage:
{{#invoke:Math | mod | x | y }}
--]]
function wrap.mod(args)
local x = p._cleanNumber(args[1])
local y = p._cleanNumber(args[2])
if not x then
return err('first argument to mod appears non-numeric')
elseif not y then
return err('second argument to mod appears non-numeric')
else
return p._mod(x, y)
end
end
function p._mod(x, y)
local ret = x % y
if not (0 <= ret and ret < y) then
ret = 0
end
return ret
end
--[[
gcd
Calculates the greatest common divisor of multiple numbers
Usage:
{{#invoke:Math | gcd | value 1 | value 2 | value 3 | ... }}
--]]
function wrap.gcd(args)
return p._gcd(unpackNumberArgs(args))
end
function p._gcd(...)
local function findGcd(a, b)
local r = b
local oldr = a
while r ~= 0 do
local quotient = math.floor(oldr / r)
oldr, r = r, oldr - quotient * r
end
if oldr < 0 then
oldr = oldr * -1
end
return oldr
end
local result = fold(findGcd, ...)
return result
end
--[[
precision_format
Rounds a number to the specified precision and formats according to rules
originally used for {{template:Rnd}}. Output is a string.
Usage:
{{#invoke: Math | precision_format | number | precision }}
]]
function wrap.precision_format(args)
local value_string = args[1] or 0
local precision = args[2] or 0
return p._precision_format(value_string, precision)
end
function p._precision_format(value_string, precision)
-- For access to Mediawiki built-in formatter.
local lang = mw.getContentLanguage();
local value
value, value_string = p._cleanNumber(value_string)
precision = p._cleanNumber(precision)
-- Check for non-numeric input
if value == nil or precision == nil then
return err('invalid input when rounding')
end
local abs_value = math.abs(value)
local current_precision = p._precision(value)
local order = p._order(value)
-- Due to round-off effects it is neccesary to limit the returned precision under
-- some circumstances because the terminal digits will be inaccurately reported.
if order + precision >= 14 then
if order + p._precision(value_string) >= 14 then
precision = 13 - order;
end
end
-- If rounding off, truncate extra digits
if precision < current_precision then
value = p._round(value, precision)
abs_value = math.abs(value)
current_precision = p._precision(value)
end
local formatted_num = lang:formatNum(abs_value)
-- Handle cases requiring scientific notation
if math.abs(order) >= 9 or string.find(formatted_num, 'E', 1, true) then
value = value * (10 ^ (-order))
abs_value = math.abs(value)
current_precision = current_precision + order
precision = precision + order
formatted_num = lang:formatNum(abs_value)
else
order = 0;
end
-- Use proper unary minus sign rather than ASCII default
formatted_num = ((value < 0) and '−' or '') .. formatted_num
-- Pad with zeros, if needed
if current_precision < precision then
local padding
if current_precision <= 0 then
if precision > 0 then
local zero_sep = lang:formatNum(1.1)
formatted_num = formatted_num .. zero_sep:sub(2,2)
padding = precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
else
padding = precision - current_precision
if padding > 20 then
padding = 20
end
formatted_num = formatted_num .. string.rep('0', padding)
end
end
-- Add exponential notation, if necessary.
if order ~= 0 then
-- Use proper unary minus sign rather than ASCII default
if order < 0 then
order = '−' .. lang:formatNum(math.abs(order))
else
order = lang:formatNum(order)
end
formatted_num = formatted_num .. '<span style="margin:0 .15em 0 .25em">×</span>10<sup>' .. order .. '</sup>'
end
return formatted_num
end
--[[
divide
Implements the division operator
Usage:
{{#invoke:Math | divide | x | y | round= | precision= }}
--]]
function wrap.divide(args)
local x = args[1]
local y = args[2]
local round = args.round
local precision = args.precision
if not yesno then
yesno = require('Module:Yesno')
end
return p._divide(x, y, yesno(round), precision)
end
function p._divide(x, y, round, precision)
if y == nil or y == "" then
return err("Empty divisor")
elseif not tonumber(y) then
if type(y) == 'string' and string.sub(y, 1, 1) == '<' then
return y
else
return err("Not a number: " .. y)
end
elseif x == nil or x == "" then
return err("Empty dividend")
elseif not tonumber(x) then
if type(x) == 'string' and string.sub(x, 1, 1) == '<' then
return x
else
return err("Not a number: " .. x)
end
else
local z = x / y
if round then
return p._round(z, 0)
elseif precision then
return p._round(z, precision)
else
return z
end
end
end
--[[
Helper function that interprets the input numerically. If the
input does not appear to be a number, attempts evaluating it as
a parser functions expression.
]]
function p._cleanNumber(number_string, unformat)
if type(number_string) == 'number' then
-- We were passed a number, so we don't need to do any processing.
return number_string, tostring(number_string)
elseif type(number_string) ~= 'string' or not number_string:find('%S') then
-- We were passed a non-string or a blank string, so exit.
return nil, nil;
end
-- Attempt basic conversion
local number = tonumber(number_string)
-- If failed, try unformatting the number_string
if unformat and number == nil then
-- Cannot use mw.language.getContentLanguage():parseFormattedNumber()
-- because, unlike {{formatnum:|R}}, it won't ignore operators (it
-- would return an error on "1,234+1,234" instead of "1234+1234")
number_string = mw.getCurrentFrame():callParserFunction("formatnum", {number_string, "R"})
number = tonumber(number_string)
end
-- If failed, attempt to evaluate input as an expression
if number == nil then
local success, result = pcall(mw.ext.ParserFunctions.expr, number_string)
if success then
number = tonumber(result)
number_string = tostring(number)
else
number = nil
number_string = nil
end
else
number_string = number_string:match("^%s*(.-)%s*$") -- String is valid but may contain padding, clean it.
number_string = number_string:match("^%+(.*)$") or number_string -- Trim any leading + signs.
if number_string:find('^%-?0[xX]') then
-- Number is using 0xnnn notation to indicate base 16; use the number that Lua detected instead.
number_string = tostring(number)
end
end
return number, number_string
end
--[[
Wrapper function that does basic argument processing. This ensures that all functions from #invoke can use either the current
frame or the parent frame, and it also trims whitespace for all arguments and removes blank arguments.
]]
local mt = { __index = function(_, k)
return function(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return wrap[k](getArgs(frame)) -- Argument processing is left to Module:Arguments. Whitespace is trimmed and blank arguments are removed.
end
end }
return setmetatable(p, mt)
f4r823qxvpkct3eikmvj99wyjq9cjkm
Module:Message box
828
250
10677
2025-01-03T22:26:40Z
commons>Matrix
0
add i18n
10677
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local err = require('Module:Error')
local TNT = require('Module:TNT')
local lang = mw.language.getContentLanguage()
local int_lang = mw.getCurrentFrame():preprocess('{{int:lang}}')
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'mbox', file = 'mbox', category = 'mbox', article = 'mbox', main = 'mbox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function errormsg(text)
-- create warning text
return err.error({tag="span", message=text})
end
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ambox
obj.cfg = cfg.mbox
end
elseif ns == 0 then
obj.cfg = cfg.mbox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.mbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.mbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.mbox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
self.typeImageNeedsLink = typeData.imageNeedsLink
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Set width
self.width = args.width
-- Set margin
self.margin = args.margin
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '45x45px'
self.imageLeft = string.format('[[File:%s|%s%s|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" )
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
end
function MessageBox:setAllNamespaceCategories()
local cfg = self.cfg
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Message box parameter needs fixing', allSort)
end
-- Deprecate license type
if self.type == 'license' and cfg.deprecateLicense then
self:addCat('all', 'Licensing templates based on Mbox')
end
end
function MessageBox:setCategories()
if self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.width then
boxTable:cssText('width: ' .. self.width)
end
if self.margin then
boxTable:cssText('margin: 2px ' .. self.margin)
end
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(errormsg(TNT.formatInLanguage(int_lang, 'I18n/Message box', 'err-type', self.type or '')))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
c30e5jp4c5gz5h8tktwgw1wb2jywejl
10678
8913
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Message_box]]
1093
Scribunto
text/plain
require('strict')
local getArgs
local yesno = require('Module:Yesno')
local lang = mw.language.getContentLanguage()
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
else
-- default to ombox
obj.cfg = cfg.ombox
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Panni:%s|%s]]', cat, sort)
else
cat = string.format('[[Panni:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
table.insert(self.classes, class)
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
self.typeImageNeedsLink = typeData.imageNeedsLink
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Set the below row.
self.below = cfg.below and args.below
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
if yesno(args.plainlinks) ~= false then
self:addClass('plainlinks')
end
if self.below then
self:addClass('mbox-with-below')
end
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Set image classes.
self.imageRightClass = args.imagerightclass or args.imageclass
self.imageLeftClass = args.imageleftclass or args.imageclass
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText
if self.isSmall then
local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == '#' and '' or '#') .. talk)
talkText = string.format('([[%s|talk]])', talkLink)
else
talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s' .. (talk == '#' and '' or '#') .. '%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[Fayil:%s|%s%s|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize, self.typeImageNeedsLink and "" or "|link=" )
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
-- set templatestyles
self.base_templatestyles = cfg.templatestyles
self.templatestyles = args.templatestyles
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.invalidTypeError then
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)
end
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:exportDiv()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Tempilet:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box.
local mbox = root:tag('div')
mbox:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
mbox:addClass(class or nil)
end
mbox
:cssText(self.style or nil)
if self.attrs then
mbox:attr(self.attrs)
end
local flex_container
if self.below then
-- we need to wrap the flex components (`image(right)` and `text`) in their
-- own container div to support the `below` parameter
flex_container = mw.html.create('div')
flex_container:addClass('mbox-flex')
else
-- the mbox itself is the parent, so we need no HTML flex_container
flex_container = mw.html.create()
end
-- Add the left-hand image.
if self.imageLeft then
local imageLeftCell = flex_container:tag('div'):addClass('mbox-image')
imageLeftCell
:addClass(self.imageLeftClass)
:wikitext(self.imageLeft or nil)
end
-- Add the text.
local textCell = flex_container:tag('div'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = flex_container:tag('div'):addClass('mbox-imageright')
imageRightCell
:addClass(self.imageRightClass)
:wikitext(self.imageRight or nil)
end
mbox:node(flex_container)
-- Add the below row.
if self.below then
mbox:tag('div')
:addClass('mbox-text mbox-below')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Tempilet:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
local frame = mw.getCurrentFrame()
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.base_templatestyles },
})
-- Add support for a single custom templatestyles sheet. Undocumented as
-- need should be limited and many templates using mbox are substed; we
-- don't want to spread templatestyles sheets around to arbitrary places
if self.templatestyles then
root:wikitext(frame:extensionTag{
name = 'templatestyles',
args = { src = self.templatestyles },
})
end
-- Create the box table.
local boxTable = root:tag('table')
boxTable:attr('id', self.id or nil)
for i, class in ipairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div')
end
imageLeftCell
:addClass(self.imageLeftClass)
:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div')
end
imageRightCell
:addClass(self.imageRightClass)
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:addClass('mbox-invalid-type')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
-- DIV MIGRATION CONDITIONAL
if box.cfg.div_structure then
return box:exportDiv()
end
-- END DIV MIGRATION CONDITIONAL
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
hivyujkkjf6nleigwpcxi5k21iafwpo
Module:Message box/configuration
828
253
10683
2024-12-18T20:50:14Z
commons>Matrix
0
Protected "[[Module:Message box/configuration]]": high risk ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10683
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css'
},
mbox = {
types = {
warning = {
class = 'mbox-warning',
image = 'Commons-emblem-late.svg'
},
speedy = {
class = 'mbox-speedy',
image = 'Commons-emblem-urgent.svg'
},
serious = {
class = 'mbox-serious',
image = 'Gnome-emblem-important.svg'
},
delete = {
class = 'mbox-delete',
image = 'Gnome-emblem-important.svg'
},
stop = {
class = 'mbox-stop',
image = 'Commons-emblem-hand.svg'
},
content = {
class = 'mbox-content',
image = 'Commons-emblem-issue.svg'
},
query = {
class = 'mbox-query',
image = 'Commons-emblem-query.svg'
},
issue = {
class = 'mbox-issue',
image = 'Commons-emblem-issue.svg'
},
style = {
class = 'mbox-style',
image = 'Gnome-edit-clear.svg'
},
move = {
class = 'mbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'mbox-protection',
image = 'Gnome-security-medium.svg'
},
license = {
class = 'mbox-license licensetpl',
image = 'Commons-emblem-copyright.svg'
},
legal = {
class = 'mbox-legal',
image = 'Commons-emblem-legal.svg'
},
honor = {
class = 'mbox-honor',
image = 'Gnome-help-about.svg'
},
growth = {
class = 'mbox-growth',
image = 'Dialog-apply.svg'
},
shit = {
class = 'mbox-shit',
image = 'OpenMoji-color 1F4A9.svg'
},
message = {
class = 'mbox-message',
image = 'Tango-style info icon.svg'
},
notice = {
class = 'mbox-notice',
image = 'Commons-emblem-notice.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'messagebox'},
allowSmall = true,
imageEmptyCell = true,
below = true,
deprecateLicense = true,
templateCategory = 'Main message boxes',
templatestyles = 'Module:Message box/mbox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
lr8hqsk3g1jt4lgc5h1hkuzw90vddob
10684
8915
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Message_box/configuration]]
1101
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ambox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ambox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Article message templates',
templateCategoryRequireName = true,
templateErrorCategory = 'Article message templates with missing parameters',
templateErrorParamsToCheck = {'issue', 'fix', 'subst'},
removalNotice = '<small>[[Taimako:Maintenance template removal|Learn how and when to remove this message]]</small>',
templatestyles = 'Module:Message box/ambox.css'
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'cmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'cmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'cmbox'},
imageEmptyCell = true,
templatestyles = 'Module:Message box/cmbox.css',
div_structure = true,
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'Ambox warning pn.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'Information icon4.svg'
},
system = {
class = 'fmbox-system',
image = 'Information icon4.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'fmbox'},
imageEmptyCell = false,
imageRightNone = false,
templatestyles = 'Module:Message box/fmbox.css',
div_structure = true,
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'imbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'imbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox-license.svg'
},
["license-related"] = {
class = 'imbox-license',
image = 'Imbox-license.svg'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg',
imageNeedsLink = true
},
notice = {
class = 'imbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
imageEmptyCell = true,
below = true,
templateCategory = 'File message boxes',
templatestyles = 'Module:Message box/imbox.css',
div_structure = true,
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'ombox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'ombox-content',
image = 'Ambox important.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true,
templatestyles = 'Module:Message box/ombox.css'
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'Ambox warning pn.svg'
},
delete = {
class = 'tmbox-delete',
image = 'Ambox warning pn.svg'
},
content = {
class = 'tmbox-content',
image = 'Ambox important.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'Information icon4.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
templateCategory = 'Talk message boxes',
templatestyles = 'Module:Message box/tmbox.css'
}
}
eo6o3evlig2w1beccdsk1nqp5gyflqn
Module:Message box/fmbox.css
828
255
11021
2025-10-17T00:59:48Z
en>Izno
0
bump paddings per [[Module talk:Message box#cmbox migration]]
11021
sanitized-css
text/css
/* {{pp|small=y}} */
.fmbox {
clear: both; /* this sheet does not require overflow-x because of this clear */
margin: 0.2em 0;
border: 1px solid #a2a9b1;
background-color: var(--background-color-interactive-subtle, #f8f9fa);
box-sizing: border-box;
color: var(--color-base, #202122);
}
.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
.fmbox-editnotice {
background-color: transparent;
}
.fmbox .mbox-text {
padding: 0.35em 1em;
flex: 1 1 100%;
}
.fmbox .mbox-image,
.fmbox .mbox-imageright {
padding: 4px 2px;
text-align: center;
flex: none;
}
/* keep synced with each other type of message box as this isn't qualified */
.mbox-invalid-type {
text-align: center;
}
@media (min-width: 480px) {
.fmbox {
display: flex;
align-items: center;
}
.fmbox .mbox-image {
/* @noflip */
padding-left: 1em;
}
.fmbox .mbox-imageright {
/* @noflip */
padding-right: 1em;
}
}
@media screen {
html.skin-theme-clientpref-night .fmbox-warning {
background-color: #300; /* Reddish, same hue/saturation as light */
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .fmbox-warning {
background-color: #300; /* Reddish, same hue/saturation as light */
}
}
ivof69wam0nxtvwqgg5cd5tk4dl4s0k
11022
1113
2026-08-26T11:32:49Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Message_box/fmbox.css]]
1112
sanitized-css
text/css
.fmbox {
clear: both; /* this sheet does not require overflow-x because of this clear */
margin: 0.2em 0;
border: 1px solid #a2a9b1;
background-color: var(--background-color-interactive-subtle, #f8f9fa);
box-sizing: border-box;
color: var(--color-base, #202122);
}
.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
.fmbox-editnotice {
background-color: transparent;
}
.fmbox .mbox-text {
padding: 0.35em 1em;
flex: 1 1 100%;
}
.fmbox .mbox-image,
.fmbox .mbox-imageright {
padding: 4px 2px;
text-align: center;
flex: none;
}
/* keep synced with each other type of message box as this isn't qualified */
.mbox-invalid-type {
text-align: center;
}
@media (min-width: 480px) {
.fmbox {
display: flex;
align-items: center;
}
.fmbox .mbox-image {
/* @noflip */
padding-left: 1em;
}
.fmbox .mbox-imageright {
/* @noflip */
padding-right: 1em;
}
}
@media screen {
html.skin-theme-clientpref-night .fmbox-warning {
background-color: #300; /* Reddish, same hue/saturation as light */
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .fmbox-warning {
background-color: #300; /* Reddish, same hue/saturation as light */
}
}
rsd8asiryncq04z6c5a348d9wq6jgwh
Module:Namespace detect/config
828
261
10875
2015-05-15T00:16:54Z
commons>Krenair
0
[[phabricator:T99157|scribunto content model]]
10875
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect configuration data --
-- --
-- This module stores configuration data for Module:Namespace detect. Here --
-- you can localise the module to your wiki's language. --
-- --
-- To activate a configuration item, you need to uncomment it. This means --
-- that you need to remove the text "-- " at the start of the line. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. Values added --
-- here will work in addition to the default English parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- cfg.foo = 'parameter name' --
-- --
-- To add multiple names, you can use this format: --
-- --
-- cfg.foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'} --
--------------------------------------------------------------------------------
---- This parameter displays content for the main namespace:
-- cfg.main = 'main'
---- This parameter displays in talk namespaces:
-- cfg.talk = 'talk'
---- This parameter displays content for "other" namespaces (namespaces for which
---- parameters have not been specified):
-- cfg.other = 'other'
---- This parameter makes talk pages behave as though they are the corresponding
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].
---- Edit that module to change the default values of "yes", "no", etc.
-- cfg.subjectns = 'subjectns'
---- This parameter sets a demonstration namespace:
-- cfg.demospace = 'demospace'
---- This parameter sets a specific page to compare:
cfg.demopage = 'page'
--------------------------------------------------------------------------------
-- Table configuration --
-- These configuration items allow customisation of the "table" function, --
-- used to generate a table of possible parameters in the module --
-- documentation. --
--------------------------------------------------------------------------------
---- The header for the namespace column in the wikitable containing the list of
---- possible subject-space parameters.
-- cfg.wikitableNamespaceHeader = 'Namespace'
---- The header for the wikitable containing the list of possible subject-space
---- parameters.
-- cfg.wikitableAliasesHeader = 'Aliases'
--------------------------------------------------------------------------------
-- End of configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
1o6ozz56i8q0xgyl6xa41n2v7kelhli
10876
8833
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Namespace_detect/config]]
1124
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect configuration data --
-- --
-- This module stores configuration data for Module:Namespace detect. Here --
-- you can localise the module to your wiki's language. --
-- --
-- To activate a configuration item, you need to uncomment it. This means --
-- that you need to remove the text "-- " at the start of the line. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. Values added --
-- here will work in addition to the default English parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- cfg.foo = 'parameter name' --
-- --
-- To add multiple names, you can use this format: --
-- --
-- cfg.foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'} --
--------------------------------------------------------------------------------
---- This parameter displays content for the main namespace:
-- cfg.main = 'main'
---- This parameter displays in talk namespaces:
-- cfg.talk = 'talk'
---- This parameter displays content for "other" namespaces (namespaces for which
---- parameters have not been specified):
-- cfg.other = 'other'
---- This parameter makes talk pages behave as though they are the corresponding
---- subject namespace. Note that this parameter is used with [[Module:Yesno]].
---- Edit that module to change the default values of "yes", "no", etc.
-- cfg.subjectns = 'subjectns'
---- This parameter sets a demonstration namespace:
-- cfg.demospace = 'demospace'
---- This parameter sets a specific page to compare:
cfg.demopage = 'page'
--------------------------------------------------------------------------------
-- Table configuration --
-- These configuration items allow customisation of the "table" function, --
-- used to generate a table of possible parameters in the module --
-- documentation. --
--------------------------------------------------------------------------------
---- The header for the namespace column in the wikitable containing the list of
---- possible subject-space parameters.
-- cfg.wikitableNamespaceHeader = 'Namespace'
---- The header for the wikitable containing the list of possible subject-space
---- parameters.
-- cfg.wikitableAliasesHeader = 'Aliases'
--------------------------------------------------------------------------------
-- End of configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
1o6ozz56i8q0xgyl6xa41n2v7kelhli
Module:Namespace detect/data
828
262
10877
2015-05-15T00:16:54Z
commons>Krenair
0
[[phabricator:T99157|scribunto content model]]
10877
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect data --
-- This module holds data for [[Module:Namespace detect]] to be loaded per --
-- page, rather than per #invoke, for performance reasons. --
--------------------------------------------------------------------------------
local cfg = require('Module:Namespace detect/config')
local function addKey(t, key, defaultKey)
if key ~= defaultKey then
t[#t + 1] = key
end
end
-- Get a table of parameters to query for each default parameter name.
-- This allows wikis to customise parameter names in the cfg table while
-- ensuring that default parameter names will always work. The cfg table
-- values can be added as a string, or as an array of strings.
local defaultKeys = {
'main',
'talk',
'other',
'subjectns',
'demospace',
'demopage'
}
local argKeys = {}
for i, defaultKey in ipairs(defaultKeys) do
argKeys[defaultKey] = {defaultKey}
end
for defaultKey, t in pairs(argKeys) do
local cfgValue = cfg[defaultKey]
local cfgValueType = type(cfgValue)
if cfgValueType == 'string' then
addKey(t, cfgValue, defaultKey)
elseif cfgValueType == 'table' then
for i, key in ipairs(cfgValue) do
addKey(t, key, defaultKey)
end
end
cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more.
end
local function getParamMappings()
--[[
-- Returns a table of how parameter names map to namespace names. The keys
-- are the actual namespace names, in lower case, and the values are the
-- possible parameter names for that namespace, also in lower case. The
-- table entries are structured like this:
-- {
-- [''] = {'main'},
-- ['wikipedia'] = {'wikipedia', 'project', 'wp'},
-- ...
-- }
--]]
local mappings = {}
local mainNsName = mw.site.subjectNamespaces[0].name
mainNsName = mw.ustring.lower(mainNsName)
mappings[mainNsName] = mw.clone(argKeys.main)
mappings['talk'] = mw.clone(argKeys.talk)
for nsid, ns in pairs(mw.site.subjectNamespaces) do
if nsid ~= 0 then -- Exclude main namespace.
local nsname = mw.ustring.lower(ns.name)
local canonicalName = mw.ustring.lower(ns.canonicalName)
mappings[nsname] = {nsname}
if canonicalName ~= nsname then
table.insert(mappings[nsname], canonicalName)
end
for _, alias in ipairs(ns.aliases) do
table.insert(mappings[nsname], mw.ustring.lower(alias))
end
end
end
return mappings
end
return {
argKeys = argKeys,
cfg = cfg,
mappings = getParamMappings()
}
ojp6d3pc8mql5nufaqdg576c9so3479
10878
8831
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Namespace_detect/data]]
1126
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Namespace detect data --
-- This module holds data for [[Module:Namespace detect]] to be loaded per --
-- page, rather than per #invoke, for performance reasons. --
--------------------------------------------------------------------------------
local cfg = require('Module:Namespace detect/config')
local function addKey(t, key, defaultKey)
if key ~= defaultKey then
t[#t + 1] = key
end
end
-- Get a table of parameters to query for each default parameter name.
-- This allows wikis to customise parameter names in the cfg table while
-- ensuring that default parameter names will always work. The cfg table
-- values can be added as a string, or as an array of strings.
local defaultKeys = {
'main',
'talk',
'other',
'subjectns',
'demospace',
'demopage'
}
local argKeys = {}
for i, defaultKey in ipairs(defaultKeys) do
argKeys[defaultKey] = {defaultKey}
end
for defaultKey, t in pairs(argKeys) do
local cfgValue = cfg[defaultKey]
local cfgValueType = type(cfgValue)
if cfgValueType == 'string' then
addKey(t, cfgValue, defaultKey)
elseif cfgValueType == 'table' then
for i, key in ipairs(cfgValue) do
addKey(t, key, defaultKey)
end
end
cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more.
end
local function getParamMappings()
--[[
-- Returns a table of how parameter names map to namespace names. The keys
-- are the actual namespace names, in lower case, and the values are the
-- possible parameter names for that namespace, also in lower case. The
-- table entries are structured like this:
-- {
-- [''] = {'main'},
-- ['wikipedia'] = {'wikipedia', 'project', 'wp'},
-- ...
-- }
--]]
local mappings = {}
local mainNsName = mw.site.subjectNamespaces[0].name
mainNsName = mw.ustring.lower(mainNsName)
mappings[mainNsName] = mw.clone(argKeys.main)
mappings['talk'] = mw.clone(argKeys.talk)
for nsid, ns in pairs(mw.site.subjectNamespaces) do
if nsid ~= 0 then -- Exclude main namespace.
local nsname = mw.ustring.lower(ns.name)
local canonicalName = mw.ustring.lower(ns.canonicalName)
mappings[nsname] = {nsname}
if canonicalName ~= nsname then
table.insert(mappings[nsname], canonicalName)
end
for _, alias in ipairs(ns.aliases) do
table.insert(mappings[nsname], mw.ustring.lower(alias))
end
end
end
return mappings
end
return {
argKeys = argKeys,
cfg = cfg,
mappings = getParamMappings()
}
ojp6d3pc8mql5nufaqdg576c9so3479
Module:String
828
270
10629
9630
2026-02-19T04:35:59Z
commons>Jarekt
0
synch with enwiki version
10629
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The first index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = string.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
-- findpagetext returns the position of a piece of text in a page
-- First positional parameter or |text is the search text
-- Optional parameter |title is the page title, defaults to current page
-- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search
-- Optional parameter |nomatch is the return value when no match is found; default is nil
function str._findpagetext(args)
-- process parameters
local nomatch = args.nomatch or ""
if nomatch == "" then nomatch = nil end
--
local text = mw.text.trim(args[1] or args.text or "")
if text == "" then return nil end
--
local title = args.title or ""
local titleobj
if title == "" then
titleobj = mw.title.getCurrentTitle()
else
titleobj = mw.title.new(title)
end
--
local plain = args.plain or ""
if plain:sub(1, 1) == "f" then plain = false else plain = true end
-- get the page content and look for 'text' - return position or nomatch
local content = titleobj and titleobj:getContent()
return content and mw.ustring.find(content, text, 1, plain) or nomatch
end
function str.findpagetext(frame)
local args = frame.args
local pargs = frame:getParent().args
for k, v in pairs(pargs) do
args[k] = v
end
if not (args[1] or args.text) then return nil end
-- just the first value
return (str._findpagetext(args))
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Category:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return ( string.gsub( pattern_str, "[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%0" ) )
end
return str
j3b8d4sejqnvazpfl0gk0yfaa503gli
10630
9631
2026-08-25T23:38:25Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:String]]
1145
Scribunto
text/plain
--[[
This module is intended to provide access to basic string functions.
Most of the functions provided here can be invoked with named parameters,
unnamed parameters, or a mixture. If named parameters are used, Mediawiki will
automatically remove any leading or trailing whitespace from the parameter.
Depending on the intended use, it may be advantageous to either preserve or
remove such whitespace.
Global options
ignore_errors: If set to 'true' or 1, any error condition will result in
an empty string being returned rather than an error message.
error_category: If an error occurs, specifies the name of a category to
include with the error message. The default category is
[Category:Errors reported by Module String].
no_category: If set to 'true' or 1, no category will be added if an error
is generated.
Unit tests for this module are available at Module:String/tests.
]]
local str = {}
--[[
len
This function returns the length of the target string.
Usage:
{{#invoke:String|len|target_string|}}
OR
{{#invoke:String|len|s=target_string}}
Parameters
s: The string whose length to report
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string.
]]
function str.len( frame )
local new_args = str._getParameters( frame.args, {'s'} )
local s = new_args['s'] or ''
return mw.ustring.len( s )
end
--[[
sub
This function returns a substring of the target string at specified indices.
Usage:
{{#invoke:String|sub|target_string|start_index|end_index}}
OR
{{#invoke:String|sub|s=target_string|i=start_index|j=end_index}}
Parameters
s: The string to return a subset of
i: The first index of the substring to return, defaults to 1.
j: The last index of the string to return, defaults to the last character.
The first character of the string is assigned an index of 1. If either i or j
is a negative value, it is interpreted the same as selecting a character by
counting from the end of the string. Hence, a value of -1 is the same as
selecting the last character of the string.
If the requested indices are out of range for the given string, an error is
reported.
]]
function str.sub( frame )
local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
local s = new_args['s'] or ''
local i = tonumber( new_args['i'] ) or 1
local j = tonumber( new_args['j'] ) or -1
local len = mw.ustring.len( s )
-- Convert negatives for range checking
if i < 0 then
i = len + i + 1
end
if j < 0 then
j = len + j + 1
end
if i > len or j > len or i < 1 or j < 1 then
return str._error( 'String subset index out of range' )
end
if j < i then
return str._error( 'String subset indices out of order' )
end
return mw.ustring.sub( s, i, j )
end
--[[
This function implements that features of {{str sub old}} and is kept in order
to maintain these older templates.
]]
function str.sublength( frame )
local i = tonumber( frame.args.i ) or 0
local len = tonumber( frame.args.len )
return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) )
end
--[[
_match
This function returns a substring from the source string that matches a
specified pattern. It is exported for use in other modules
Usage:
strmatch = require("Module:String")._match
sresult = strmatch( s, pattern, start, match, plain, nomatch )
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This sub-routine is exported for use in other modules
function str._match( s, pattern, start, match_index, plain_flag, nomatch )
if s == '' then
return str._error( 'Target string is empty' )
end
if pattern == '' then
return str._error( 'Pattern string is empty' )
end
start = tonumber(start) or 1
if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
return str._error( 'Requested start is out of range' )
end
if match_index == 0 then
return str._error( 'Match index is out of range' )
end
if plain_flag then
pattern = str._escapePattern( pattern )
end
local result
if match_index == 1 then
-- Find first match is simple case
result = mw.ustring.match( s, pattern, start )
else
if start > 1 then
s = mw.ustring.sub( s, start )
end
local iterator = mw.ustring.gmatch(s, pattern)
if match_index > 0 then
-- Forward search
for w in iterator do
match_index = match_index - 1
if match_index == 0 then
result = w
break
end
end
else
-- Reverse search
local result_table = {}
local count = 1
for w in iterator do
result_table[count] = w
count = count + 1
end
result = result_table[ count + match_index ]
end
end
if result == nil then
if nomatch == nil then
return str._error( 'Match not found' )
else
return nomatch
end
else
return result
end
end
--[[
match
This function returns a substring from the source string that matches a
specified pattern.
Usage:
{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
OR
{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index
|match=match_number|plain=plain_flag|nomatch=nomatch_output}}
Parameters
s: The string to search
pattern: The pattern or string to find within the string
start: The index within the source string to start the search. The first
character of the string has index 1. Defaults to 1.
match: In some cases it may be possible to make multiple matches on a single
string. This specifies which match to return, where the first match is
match= 1. If a negative number is specified then a match is returned
counting from the last match. Hence match = -1 is the same as requesting
the last match. Defaults to 1.
plain: A flag indicating that the pattern should be understood as plain
text. Defaults to false.
nomatch: If no match is found, output the "nomatch" value rather than an error.
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from each string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
If the match_number or start_index are out of range for the string being queried, then
this function generates an error. An error is also generated if no match is found.
If one adds the parameter ignore_errors=true, then the error will be suppressed and
an empty string will be returned on any failure.
For information on constructing Lua patterns, a form of [regular expression], see:
* http://www.lua.org/manual/5.1/manual.html#5.4.1
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns
]]
-- This is the entry point for #invoke:String|match
function str.match( frame )
local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )
local s = new_args['s'] or ''
local start = tonumber( new_args['start'] ) or 1
local plain_flag = str._getBoolean( new_args['plain'] or false )
local pattern = new_args['pattern'] or ''
local match_index = math.floor( tonumber(new_args['match']) or 1 )
local nomatch = new_args['nomatch']
return str._match( s, pattern, start, match_index, plain_flag, nomatch )
end
--[[
pos
This function returns a single character from the target string at position pos.
Usage:
{{#invoke:String|pos|target_string|index_value}}
OR
{{#invoke:String|pos|target=target_string|pos=index_value}}
Parameters
target: The string to search
pos: The index for the character to return
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the target string. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
The first character has an index value of 1.
If one requests a negative value, this function will select a character by counting backwards
from the end of the string. In other words pos = -1 is the same as asking for the last character.
A requested value of zero, or a value greater than the length of the string returns an error.
]]
function str.pos( frame )
local new_args = str._getParameters( frame.args, {'target', 'pos'} )
local target_str = new_args['target'] or ''
local pos = tonumber( new_args['pos'] ) or 0
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then
return str._error( 'String index out of range' )
end
return mw.ustring.sub( target_str, pos, pos )
end
--[[
str_find
This function duplicates the behavior of {{str_find}}, including all of its quirks.
This is provided in order to support existing templates, but is NOT RECOMMENDED for
new code and templates. New code is recommended to use the "find" function instead.
Returns the first index in "source" that is a match to "target". Indexing is 1-based,
and the function returns -1 if the "target" string is not present in "source".
Important Note: If the "target" string is empty / missing, this function returns a
value of "1", which is generally unexpected behavior, and must be accounted for
separatetly.
]]
function str.str_find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target'} )
local source_str = new_args['source'] or ''
local target_str = new_args['target'] or ''
if target_str == '' then
return 1
end
local start = mw.ustring.find( source_str, target_str, 1, true )
if start == nil then
start = -1
end
return start
end
--[[
find
This function allows one to search for a target string or pattern within another
string.
Usage:
{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}
OR
{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}
Parameters
source: The string to search
target: The string or pattern to find within source
start: The index within the source string to start the search, defaults to 1
plain: Boolean flag indicating that target should be understood as plain
text and not as a Lua style regular expression, defaults to true
If invoked using named parameters, Mediawiki will automatically remove any leading or
trailing whitespace from the parameter. In some circumstances this is desirable, in
other cases one may want to preserve the whitespace.
This function returns the first index >= "start" where "target" can be found
within "source". Indices are 1-based. If "target" is not found, then this
function returns 0. If either "source" or "target" are missing / empty, this
function also returns 0.
This function should be safe for UTF-8 strings.
]]
function str.find( frame )
local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['target'] or ''
local start_pos = tonumber(new_args['start']) or 1
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return 0
end
plain = str._getBoolean( plain )
local start = mw.ustring.find( source_str, pattern, start_pos, plain )
if start == nil then
start = 0
end
return start
end
--[[
replace
This function allows one to replace a target string or pattern within another
string.
Usage:
{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}
OR
{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string|
count=replacement_count|plain=plain_flag}}
Parameters
source: The string to search
pattern: The string or pattern to find within source
replace: The replacement text
count: The number of occurences to replace, defaults to all.
plain: Boolean flag indicating that pattern should be understood as plain
text and not as a Lua style regular expression, defaults to true
]]
function str.replace( frame )
local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )
local source_str = new_args['source'] or ''
local pattern = new_args['pattern'] or ''
local replace = new_args['replace'] or ''
local count = tonumber( new_args['count'] )
local plain = new_args['plain'] or true
if source_str == '' or pattern == '' then
return source_str
end
plain = str._getBoolean( plain )
if plain then
pattern = str._escapePattern( pattern )
replace = string.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.
end
local result
if count ~= nil then
result = mw.ustring.gsub( source_str, pattern, replace, count )
else
result = mw.ustring.gsub( source_str, pattern, replace )
end
return result
end
--[[
simple function to pipe string.rep to templates.
]]
function str.rep( frame )
local repetitions = tonumber( frame.args[2] )
if not repetitions then
return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )
end
return string.rep( frame.args[1] or '', repetitions )
end
--[[
escapePattern
This function escapes special characters from a Lua string pattern. See [1]
for details on how patterns work.
[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
Usage:
{{#invoke:String|escapePattern|pattern_string}}
Parameters
pattern_string: The pattern string to escape.
]]
function str.escapePattern( frame )
local pattern_str = frame.args[1]
if not pattern_str then
return str._error( 'No pattern string specified' )
end
local result = str._escapePattern( pattern_str )
return result
end
--[[
count
This function counts the number of occurrences of one string in another.
]]
function str.count(frame)
local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})
local source = args.source or ''
local pattern = args.pattern or ''
local plain = str._getBoolean(args.plain or true)
if plain then
pattern = str._escapePattern(pattern)
end
local _, count = mw.ustring.gsub(source, pattern, '')
return count
end
--[[
endswith
This function determines whether a string ends with another string.
]]
function str.endswith(frame)
local args = str._getParameters(frame.args, {'source', 'pattern'})
local source = args.source or ''
local pattern = args.pattern or ''
if pattern == '' then
-- All strings end with the empty string.
return "yes"
end
if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then
return "yes"
else
return ""
end
end
--[[
join
Join all non empty arguments together; the first argument is the separator.
Usage:
{{#invoke:String|join|sep|one|two|three}}
]]
function str.join(frame)
local args = {}
local sep
for _, v in ipairs( frame.args ) do
if sep then
if v ~= '' then
table.insert(args, v)
end
else
sep = v
end
end
return table.concat( args, sep or '' )
end
-- findpagetext returns the position of a piece of text in a page
-- First positional parameter or |text is the search text
-- Optional parameter |title is the page title, defaults to current page
-- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search
-- Optional parameter |nomatch is the return value when no match is found; default is nil
function str._findpagetext(args)
-- process parameters
local nomatch = args.nomatch or ""
if nomatch == "" then nomatch = nil end
--
local text = mw.text.trim(args[1] or args.text or "")
if text == "" then return nil end
--
local title = args.title or ""
local titleobj
if title == "" then
titleobj = mw.title.getCurrentTitle()
else
titleobj = mw.title.new(title)
end
--
local plain = args.plain or ""
if plain:sub(1, 1) == "f" then plain = false else plain = true end
-- get the page content and look for 'text' - return position or nomatch
local content = titleobj and titleobj:getContent()
return content and mw.ustring.find(content, text, 1, plain) or nomatch
end
function str.findpagetext(frame)
local args = frame.args
local pargs = frame:getParent().args
for k, v in pairs(pargs) do
args[k] = v
end
if not (args[1] or args.text) then return nil end
-- just the first value
return (str._findpagetext(args))
end
--[[
Helper function that populates the argument list given that user may need to use a mix of
named and unnamed parameters. This is relevant because named parameters are not
identical to unnamed parameters due to string trimming, and when dealing with strings
we sometimes want to either preserve or remove that whitespace depending on the application.
]]
function str._getParameters( frame_args, arg_list )
local new_args = {}
local index = 1
local value
for _, arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index]
index = index + 1
end
new_args[arg] = value
end
return new_args
end
--[[
Helper function to handle error messages.
]]
function str._error( error_str )
local frame = mw.getCurrentFrame()
local error_category = frame.args.error_category or 'Errors reported by Module String'
local ignore_errors = frame.args.ignore_errors or false
local no_category = frame.args.no_category or false
if str._getBoolean(ignore_errors) then
return ''
end
local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'
if error_category ~= '' and not str._getBoolean( no_category ) then
error_str = '[[Panni:' .. error_category .. ']]' .. error_str
end
return error_str
end
--[[
Helper Function to interpret boolean strings
]]
function str._getBoolean( boolean_str )
local boolean_value
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower()
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false
else
boolean_value = true
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str
else
error( 'No boolean value found' )
end
return boolean_value
end
--[[
Helper function that escapes all pattern characters so that they will be treated
as plain text.
]]
function str._escapePattern( pattern_str )
return ( string.gsub( pattern_str, "[%(%)%.%%%+%-%*%?%[%^%$%]]", "%%%0" ) )
end
return str
byteynla3ptc37v5z5xiom65ovniniq
Module:TableTools
828
272
10697
8836
2025-01-03T15:21:01Z
commons>Matrix
0
update from enwiki
8836
Scribunto
text/plain
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should not --
-- be called directly from #invoke. --
------------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
function p.isPositiveInteger(v)
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity
end
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false if
-- not. Although it doesn't operate on tables, it is included here as it is useful
-- for determining whether a value can be a valid table key. Lua will generate an
-- error if a NaN is used as a table key.
------------------------------------------------------------------------------------
function p.isNan(v)
return type(v) == 'number' and v ~= v
end
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
function p.shallowClone(t)
checkType('shallowClone', 1, t, 'table')
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
function p.removeDuplicates(arr)
checkType('removeDuplicates', 1, arr, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for _, v in ipairs(arr) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
elseif not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
return ret
end
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return
-- {1, 3, 6}.
------------------------------------------------------------------------------------
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table
-- of subtables in the format
-- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}.
-- Keys that don't end with an integer are stored in a subtable named "other". The
-- compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for _ in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then
return tostring(item1) < tostring(item2)
else
return item1 < item2
end
end
------------------------------------------------------------------------------------
-- keysToList
--
-- Returns an array of the keys in a table, sorted using either a default
-- comparison function or a custom keySort function.
------------------------------------------------------------------------------------
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'})
end
local arr = {}
local index = 1
for k in pairs(t) do
arr[index] = k
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(arr, keySort)
end
return arr
end
------------------------------------------------------------------------------------
-- sortedPairs
--
-- Iterates through a table, with the keys sorted using the keysToList function.
-- If there are only numerical keys, sparseIpairs is probably more efficient.
------------------------------------------------------------------------------------
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local arr = p.keysToList(t, keySort, true)
local i = 0
return function ()
i = i + 1
local key = arr[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- isArray
--
-- Returns true if the given value is a table and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArray(v)
if type(v) ~= 'table' then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- isArrayLike
--
-- Returns true if the given value is iterable and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArrayLike(v)
if not pcall(pairs, v) then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- invert
--
-- Transposes the keys and values in an array. For example, {"a", "b", "c"} ->
-- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to
-- the index of the last duplicate) and NaN values are ignored.
------------------------------------------------------------------------------------
function p.invert(arr)
checkType("invert", 1, arr, "table")
local isNan = p.isNan
local map = {}
for i, v in ipairs(arr) do
if not isNan(v) then
map[v] = i
end
end
return map
end
------------------------------------------------------------------------------------
-- listToSet
--
-- Creates a set from the array part of the table. Indexing the set by any of the
-- values of the array returns true. For example, {"a", "b", "c"} ->
-- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them
-- never equal to any value (including other NaNs or even themselves).
------------------------------------------------------------------------------------
function p.listToSet(arr)
checkType("listToSet", 1, arr, "table")
local isNan = p.isNan
local set = {}
for _, v in ipairs(arr) do
if not isNan(v) then
set[v] = true
end
end
return set
end
------------------------------------------------------------------------------------
-- deepCopy
--
-- Recursive deep copy function. Preserves identities of subtables.
------------------------------------------------------------------------------------
local function _deepCopy(orig, includeMetatable, already_seen)
if type(orig) ~= "table" then
return orig
end
-- already_seen stores copies of tables indexed by the original table.
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
copy = {}
already_seen[orig] = copy -- memoize before any recursion, to avoid infinite loops
for orig_key, orig_value in pairs(orig) do
copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen)
end
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
setmetatable(copy, _deepCopy(mt, true, already_seen))
end
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen or {})
end
------------------------------------------------------------------------------------
-- sparseConcat
--
-- Concatenates all values in the table that are indexed by a number, in order.
-- sparseConcat{a, nil, c, d} => "acd"
-- sparseConcat{nil, b, c, d} => "bcd"
------------------------------------------------------------------------------------
function p.sparseConcat(t, sep, i, j)
local arr = {}
local arr_i = 0
for _, v in p.sparseIpairs(t) do
arr_i = arr_i + 1
arr[arr_i] = v
end
return table.concat(arr, sep, i, j)
end
------------------------------------------------------------------------------------
-- length
--
-- Finds the length of an array, or of a quasi-array with keys such as "data1",
-- "data2", etc., using an exponential search algorithm. It is similar to the
-- operator #, but may return a different value when there are gaps in the array
-- portion of the table. Intended to be used on data loaded with mw.loadData. For
-- other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of the number
-- of unnamed template parameters, so use this function for frame.args.
------------------------------------------------------------------------------------
function p.length(t, prefix)
-- requiring module inline so that [[Module:Exponential search]] which is
-- only needed by this one function doesn't get millions of transclusions
local expSearch = require("Module:Exponential search")
checkType('length', 1, t, 'table')
checkType('length', 2, prefix, 'string', true)
return expSearch(function (i)
local key
if prefix then
key = prefix .. tostring(i)
else
key = i
end
return t[key] ~= nil
end) or 0
end
------------------------------------------------------------------------------------
-- inArray
--
-- Returns true if searchElement is a member of the array, and false otherwise.
-- Equivalent to JavaScript array.includes(searchElement) or
-- array.includes(searchElement, fromIndex), except fromIndex is 1 indexed
------------------------------------------------------------------------------------
function p.inArray(array, searchElement, fromIndex)
checkType("inArray", 1, array, "table")
-- if searchElement is nil, error?
fromIndex = tonumber(fromIndex)
if fromIndex then
if (fromIndex < 0) then
fromIndex = #array + fromIndex + 1
end
if fromIndex < 1 then fromIndex = 1 end
for _, v in ipairs({unpack(array, fromIndex)}) do
if v == searchElement then
return true
end
end
else
for _, v in pairs(array) do
if v == searchElement then
return true
end
end
end
return false
end
------------------------------------------------------------------------------------
-- merge
--
-- Given the arrays, returns an array containing the elements of each input array
-- in sequence.
------------------------------------------------------------------------------------
function p.merge(...)
local arrays = {...}
local ret = {}
for i, arr in ipairs(arrays) do
checkType('merge', i, arr, 'table')
for _, v in ipairs(arr) do
ret[#ret + 1] = v
end
end
return ret
end
------------------------------------------------------------------------------------
-- extend
--
-- Extends the first array in place by appending all elements from the second
-- array.
------------------------------------------------------------------------------------
function p.extend(arr1, arr2)
checkType('extend', 1, arr1, 'table')
checkType('extend', 2, arr2, 'table')
for _, v in ipairs(arr2) do
arr1[#arr1 + 1] = v
end
end
return p
4n03zk6kcoeg4gz82mieeh94c1szcjy
10698
9530
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:TableTools]]
1149
Scribunto
text/plain
------------------------------------------------------------------------------------
-- TableTools --
-- --
-- This module includes a number of functions for dealing with Lua tables. --
-- It is a meta-module, meant to be called from other Lua modules, and should not --
-- be called directly from #invoke. --
------------------------------------------------------------------------------------
local libraryUtil = require('libraryUtil')
local p = {}
-- Define often-used variables and functions.
local floor = math.floor
local infinity = math.huge
local checkType = libraryUtil.checkType
local checkTypeMulti = libraryUtil.checkTypeMulti
------------------------------------------------------------------------------------
-- isPositiveInteger
--
-- This function returns true if the given value is a positive integer, and false
-- if not. Although it doesn't operate on tables, it is included here as it is
-- useful for determining whether a given table key is in the array part or the
-- hash part of a table.
------------------------------------------------------------------------------------
function p.isPositiveInteger(v)
return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity
end
------------------------------------------------------------------------------------
-- isNan
--
-- This function returns true if the given number is a NaN value, and false if
-- not. Although it doesn't operate on tables, it is included here as it is useful
-- for determining whether a value can be a valid table key. Lua will generate an
-- error if a NaN is used as a table key.
------------------------------------------------------------------------------------
function p.isNan(v)
return type(v) == 'number' and v ~= v
end
------------------------------------------------------------------------------------
-- shallowClone
--
-- This returns a clone of a table. The value returned is a new table, but all
-- subtables and functions are shared. Metamethods are respected, but the returned
-- table will have no metatable of its own.
------------------------------------------------------------------------------------
function p.shallowClone(t)
checkType('shallowClone', 1, t, 'table')
local ret = {}
for k, v in pairs(t) do
ret[k] = v
end
return ret
end
------------------------------------------------------------------------------------
-- removeDuplicates
--
-- This removes duplicate values from an array. Non-positive-integer keys are
-- ignored. The earliest value is kept, and all subsequent duplicate values are
-- removed, but otherwise the array order is unchanged.
------------------------------------------------------------------------------------
function p.removeDuplicates(arr)
checkType('removeDuplicates', 1, arr, 'table')
local isNan = p.isNan
local ret, exists = {}, {}
for _, v in ipairs(arr) do
if isNan(v) then
-- NaNs can't be table keys, and they are also unique, so we don't need to check existence.
ret[#ret + 1] = v
elseif not exists[v] then
ret[#ret + 1] = v
exists[v] = true
end
end
return ret
end
------------------------------------------------------------------------------------
-- numKeys
--
-- This takes a table and returns an array containing the numbers of any numerical
-- keys that have non-nil values, sorted in numerical order.
------------------------------------------------------------------------------------
function p.numKeys(t)
checkType('numKeys', 1, t, 'table')
local isPositiveInteger = p.isPositiveInteger
local nums = {}
for k in pairs(t) do
if isPositiveInteger(k) then
nums[#nums + 1] = k
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- affixNums
--
-- This takes a table and returns an array containing the numbers of keys with the
-- specified prefix and suffix. For example, for the table
-- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return
-- {1, 3, 6}.
------------------------------------------------------------------------------------
function p.affixNums(t, prefix, suffix)
checkType('affixNums', 1, t, 'table')
checkType('affixNums', 2, prefix, 'string', true)
checkType('affixNums', 3, suffix, 'string', true)
local function cleanPattern(s)
-- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally.
return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1')
end
prefix = prefix or ''
suffix = suffix or ''
prefix = cleanPattern(prefix)
suffix = cleanPattern(suffix)
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local nums = {}
for k in pairs(t) do
if type(k) == 'string' then
local num = mw.ustring.match(k, pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
end
table.sort(nums)
return nums
end
------------------------------------------------------------------------------------
-- numData
--
-- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table
-- of subtables in the format
-- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}.
-- Keys that don't end with an integer are stored in a subtable named "other". The
-- compress option compresses the table so that it can be iterated over with
-- ipairs.
------------------------------------------------------------------------------------
function p.numData(t, compress)
checkType('numData', 1, t, 'table')
checkType('numData', 2, compress, 'boolean', true)
local ret = {}
for k, v in pairs(t) do
local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$')
if num then
num = tonumber(num)
local subtable = ret[num] or {}
if prefix == '' then
-- Positional parameters match the blank string; put them at the start of the subtable instead.
prefix = 1
end
subtable[prefix] = v
ret[num] = subtable
else
local subtable = ret.other or {}
subtable[k] = v
ret.other = subtable
end
end
if compress then
local other = ret.other
ret = p.compressSparseArray(ret)
ret.other = other
end
return ret
end
------------------------------------------------------------------------------------
-- compressSparseArray
--
-- This takes an array with one or more nil values, and removes the nil values
-- while preserving the order, so that the array can be safely traversed with
-- ipairs.
------------------------------------------------------------------------------------
function p.compressSparseArray(t)
checkType('compressSparseArray', 1, t, 'table')
local ret = {}
local nums = p.numKeys(t)
for _, num in ipairs(nums) do
ret[#ret + 1] = t[num]
end
return ret
end
------------------------------------------------------------------------------------
-- sparseIpairs
--
-- This is an iterator for sparse arrays. It can be used like ipairs, but can
-- handle nil values.
------------------------------------------------------------------------------------
function p.sparseIpairs(t)
checkType('sparseIpairs', 1, t, 'table')
local nums = p.numKeys(t)
local i = 0
local lim = #nums
return function ()
i = i + 1
if i <= lim then
local key = nums[i]
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- size
--
-- This returns the size of a key/value pair table. It will also work on arrays,
-- but for arrays it is more efficient to use the # operator.
------------------------------------------------------------------------------------
function p.size(t)
checkType('size', 1, t, 'table')
local i = 0
for _ in pairs(t) do
i = i + 1
end
return i
end
local function defaultKeySort(item1, item2)
-- "number" < "string", so numbers will be sorted before strings.
local type1, type2 = type(item1), type(item2)
if type1 ~= type2 then
return type1 < type2
elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then
return tostring(item1) < tostring(item2)
else
return item1 < item2
end
end
------------------------------------------------------------------------------------
-- keysToList
--
-- Returns an array of the keys in a table, sorted using either a default
-- comparison function or a custom keySort function.
------------------------------------------------------------------------------------
function p.keysToList(t, keySort, checked)
if not checked then
checkType('keysToList', 1, t, 'table')
checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'})
end
local arr = {}
local index = 1
for k in pairs(t) do
arr[index] = k
index = index + 1
end
if keySort ~= false then
keySort = type(keySort) == 'function' and keySort or defaultKeySort
table.sort(arr, keySort)
end
return arr
end
------------------------------------------------------------------------------------
-- sortedPairs
--
-- Iterates through a table, with the keys sorted using the keysToList function.
-- If there are only numerical keys, sparseIpairs is probably more efficient.
------------------------------------------------------------------------------------
function p.sortedPairs(t, keySort)
checkType('sortedPairs', 1, t, 'table')
checkType('sortedPairs', 2, keySort, 'function', true)
local arr = p.keysToList(t, keySort, true)
local i = 0
return function ()
i = i + 1
local key = arr[i]
if key ~= nil then
return key, t[key]
else
return nil, nil
end
end
end
------------------------------------------------------------------------------------
-- isArray
--
-- Returns true if the given value is a table and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArray(v)
if type(v) ~= 'table' then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- isArrayLike
--
-- Returns true if the given value is iterable and all keys are consecutive
-- integers starting at 1.
------------------------------------------------------------------------------------
function p.isArrayLike(v)
if not pcall(pairs, v) then
return false
end
local i = 0
for _ in pairs(v) do
i = i + 1
if v[i] == nil then
return false
end
end
return true
end
------------------------------------------------------------------------------------
-- invert
--
-- Transposes the keys and values in an array. For example, {"a", "b", "c"} ->
-- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to
-- the index of the last duplicate) and NaN values are ignored.
------------------------------------------------------------------------------------
function p.invert(arr)
checkType("invert", 1, arr, "table")
local isNan = p.isNan
local map = {}
for i, v in ipairs(arr) do
if not isNan(v) then
map[v] = i
end
end
return map
end
------------------------------------------------------------------------------------
-- listToSet
--
-- Creates a set from the array part of the table. Indexing the set by any of the
-- values of the array returns true. For example, {"a", "b", "c"} ->
-- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them
-- never equal to any value (including other NaNs or even themselves).
------------------------------------------------------------------------------------
function p.listToSet(arr)
checkType("listToSet", 1, arr, "table")
local isNan = p.isNan
local set = {}
for _, v in ipairs(arr) do
if not isNan(v) then
set[v] = true
end
end
return set
end
------------------------------------------------------------------------------------
-- deepCopy
--
-- Recursive deep copy function. Preserves identities of subtables.
------------------------------------------------------------------------------------
local function _deepCopy(orig, includeMetatable, already_seen)
if type(orig) ~= "table" then
return orig
end
-- already_seen stores copies of tables indexed by the original table.
local copy = already_seen[orig]
if copy ~= nil then
return copy
end
copy = {}
already_seen[orig] = copy -- memoize before any recursion, to avoid infinite loops
for orig_key, orig_value in pairs(orig) do
copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen)
end
if includeMetatable then
local mt = getmetatable(orig)
if mt ~= nil then
setmetatable(copy, _deepCopy(mt, true, already_seen))
end
end
return copy
end
function p.deepCopy(orig, noMetatable, already_seen)
checkType("deepCopy", 3, already_seen, "table", true)
return _deepCopy(orig, not noMetatable, already_seen or {})
end
------------------------------------------------------------------------------------
-- sparseConcat
--
-- Concatenates all values in the table that are indexed by a number, in order.
-- sparseConcat{a, nil, c, d} => "acd"
-- sparseConcat{nil, b, c, d} => "bcd"
------------------------------------------------------------------------------------
function p.sparseConcat(t, sep, i, j)
local arr = {}
local arr_i = 0
for _, v in p.sparseIpairs(t) do
arr_i = arr_i + 1
arr[arr_i] = v
end
return table.concat(arr, sep, i, j)
end
------------------------------------------------------------------------------------
-- length
--
-- Finds the length of an array, or of a quasi-array with keys such as "data1",
-- "data2", etc., using an exponential search algorithm. It is similar to the
-- operator #, but may return a different value when there are gaps in the array
-- portion of the table. Intended to be used on data loaded with mw.loadData. For
-- other tables, use #.
-- Note: #frame.args in frame object always be set to 0, regardless of the number
-- of unnamed template parameters, so use this function for frame.args.
------------------------------------------------------------------------------------
function p.length(t, prefix)
-- requiring module inline so that [[Module:Exponential search]] which is
-- only needed by this one function doesn't get millions of transclusions
local expSearch = require("Module:Exponential search")
checkType('length', 1, t, 'table')
checkType('length', 2, prefix, 'string', true)
return expSearch(function (i)
local key
if prefix then
key = prefix .. tostring(i)
else
key = i
end
return t[key] ~= nil
end) or 0
end
------------------------------------------------------------------------------------
-- inArray
--
-- Returns true if searchElement is a member of the array, and false otherwise.
-- Equivalent to JavaScript array.includes(searchElement) or
-- array.includes(searchElement, fromIndex), except fromIndex is 1 indexed
------------------------------------------------------------------------------------
function p.inArray(array, searchElement, fromIndex)
checkType("inArray", 1, array, "table")
-- if searchElement is nil, error?
fromIndex = tonumber(fromIndex)
if fromIndex then
if (fromIndex < 0) then
fromIndex = #array + fromIndex + 1
end
if fromIndex < 1 then fromIndex = 1 end
for _, v in ipairs({unpack(array, fromIndex)}) do
if v == searchElement then
return true
end
end
else
for _, v in pairs(array) do
if v == searchElement then
return true
end
end
end
return false
end
------------------------------------------------------------------------------------
-- merge
--
-- Given the arrays, returns an array containing the elements of each input array
-- in sequence.
------------------------------------------------------------------------------------
function p.merge(...)
local arrays = {...}
local ret = {}
for i, arr in ipairs(arrays) do
checkType('merge', i, arr, 'table')
for _, v in ipairs(arr) do
ret[#ret + 1] = v
end
end
return ret
end
------------------------------------------------------------------------------------
-- extend
--
-- Extends the first array in place by appending all elements from the second
-- array.
------------------------------------------------------------------------------------
function p.extend(arr1, arr2)
checkType('extend', 1, arr1, 'table')
checkType('extend', 2, arr2, 'table')
for _, v in ipairs(arr2) do
arr1[#arr1 + 1] = v
end
end
return p
4n03zk6kcoeg4gz82mieeh94c1szcjy
Module:Yesno
828
273
10679
8820
2021-02-19T00:52:55Z
commons>Magog the Ogre
0
6 revisions imported from [[:w:en:Module:Yesno]]
8820
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
swdskn7svew8i9wuydn9uj5l3r2ghcs
10680
9092
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Yesno]]
1152
Scribunto
text/plain
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
swdskn7svew8i9wuydn9uj5l3r2ghcs
A Zonge Ga Ada
0
359
10565
1901
2026-08-25T22:19:01Z
Yakubu19
208
10565
wikitext
text/x-wiki
'''Zonge sun ati malaji la apina monango ga (kura) Ada ke sunni (kare) Zonge ga Ada,''' Ada ley lawoto bawulo zonge let lawoto bawulo ba Sato golluy ye kala zonge Na Ada in innajino mala Shi kirbe lawoshi Shi iimuadi.
== Zonge ndajjito ==
Zonge ndajjito it's konni lawoto zonge Taman jisu Ada fashion inde ndajjito ga mocci ndajjito ga mocce fashion ga dandeto '''zonge''' Ringo volume otto takkoyi a da Ada Kala a auwa fashion ita mala kobam mala ye boli Ada aga mocci ndajjito ga ada a donor dandeto yeyye yeyye ye fashion nossu ye kumum
== Ɗiwwa ==
1dxycjwhu5xwawoixa1d6tiw94vhsms
Abba Kabir Yusuf
0
360
10516
8392
2026-08-25T14:43:12Z
Mamie05
196
10516
wikitext
text/x-wiki
{{Databox|item=Q91908076}}
'''Abba Kabir Yusuf''' (layannin foti 5 ga taren un'an 1 ga'ga sunin un'an 1963)<ref>https://www.okaynews.com/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/</ref> An siyasa ga [[Nijeriya]] la isshin iiy ruta ga matsayi gomna un [[Kano]], Yan ko teren 5 sunin un'an 2023, (2) iyi ruta ga matsayi comishinan ruta, buninshe ga mecee- mecce. GA matira buta hukunci un Kano, ga'ga sunin 2011 zuwa 2015, ga lokaci gomnati [[Rabi'u Musa Kwankwaso|Rabiu Musa Kwankwaso]].
==Zalshe Rayuwa Ni ga Ilimi==
Abba Kabir Yusuf (layanningu sunii ABUBAKAR laa undoni ga ABBA, mabu sunii ga hukuma CE). Layannin futi 5 ga teren un'an [[1]], 1963. Gaga [[Filanti|fillantin]] sullubawa, la Mette aji mulki Kano koga Bani alhaji Kabir Yusuf. GA malama khadijatul Naja'atu ga lardi Gaya inga Kano.
YUSUF zalu karatuni ga muhammadiya Yan isshin a lawo GA ul'olli Dishini an mutu, Danmukwayon Kano. Alhaji yusuf Bashari ( Dan Galadiman Kano, yusuf Kala dishitii MOI un Siri, Abdullahi maje karofi ). Laga lokacinye isshin ji an wakilta Gaya guru la ul'olli Kano, [[Nijeriya|Nigeria]].
Isshin zalu makaranta ni un firamare, ga sumaila gaga sunin 1968 zuwa 1975, boi ishin takawoyi sako mena Bo secondray ni ga makaranta gomnati na Dawakin Tofa, ko boi majini makaranta gomnati un lautai ga Gumel ishin taka makaranta ni un secondray ga sunin 1980, ishin watu izini ga Federal polytechnic Mubi ga'ga manshi jiha Gongola la hunssene she itaji [[Adamawa|ADAMAWA]]. Ishin wa Diploma ni in ulii ( ND ). Ga'ga injiniya tajiya un fetila ga sunin 1985.
Koboi isshin wadu Diploma in Siri ( HAND ). In injiniya ga'ga albarkatu Amma GA injiniya muhali ko Kaduna polytechnic ga 1989.<ref>title=Kano State Governor |url=https://nggovernorsforum.org/index.php/the-ngf/governors/553-kano-state-governor |access-date=11 July 2024 |website=nggovernorsforum.org}}</ref> <ref>date=20 March 2023 |title=CLOSE-UP: Yusuf Abba, Kwankwaso's PA and son-in-law who will be governor of Kano |url=https://www.thecable.ng/profile-yusuf-abba-kwankwasos-pa-and-son-in-law-who-will-be-governor-of-kano/ |access-date=11 July 2024 |website=[[TheCable]]<nowiki>}}</nowiki></ref>
Yusuf ko boi ni jami'ah Bayero un Kano, ( BUK ). Kai isshin wa Diploma in an balau. GA diploma in an balau ga fanni goomah.<ref>A. Aliyu |date=20 March 2023 |title=Who is Abba Kabir Yusuf? Nine Facts About the Governor-elect of Kano State |url=https://www.okay.ng/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/ |access-date=29 August 2024 |website=Okay}}</ref>
==Ɗiwwa==
[[Panni:Miyya]]
1qp500tpvsx47qg4zn99m9wqhhvqbtr
10517
10516
2026-08-25T17:23:59Z
An pikka
367
10517
wikitext
text/x-wiki
{{Databox|item=Q91908076}}
'''Abba Kabir Yusuf''' (layannin foti 5 ga taren in an Modi 1 ga'ga sunin un'an 1963)<ref>https://www.okaynews.com/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/</ref> An siyasa ga [[Nijeriya]] la isshin iiy ruta ga matsayi gomna un [[Kano]], Yan ko tere in an badi 5 sunin un'an 2023, (2) iyi ruta ga matsayi comishinan ruta, buninshe ga mecee- mecce. GA matira bota hukunci Kano, ga'ga sunin 2011 zuwa 2015, ga lokaci gomnati [[Rabi'u Musa Kwankwaso|Rabiu Musa Kwankwaso]].
==Zalshe Rayuwa Ni ga Ilimi==
Abba Kabir Yusuf (layanningu sunii ABUBAKAR laa undoni ga ABBA, mabu sunii ga hukuma CE). Layannin futi 5 ga teren un'an [[1]], 1963. Gaga [[Filanti|fillantin]] sullubawa, la Mette aji mulki Kano koga Bani alhaji Kabir Yusuf. GA malama khadijatul Naja'atu ga lardi Gaya inga Kano.
YUSUF zalu karatuni ga muhammadiya Yan isshin a lawo GA ul'olli Dishini an mutu, Danmukwayon Kano. Alhaji yusuf Bashari ( Dan Galadiman Kano, yusuf Kala dishitii MOI un Siri, Abdullahi maje karofi ). Laga lokacinye isshin ji an wakilta Gaya guru la ul'olli Kano, [[Nijeriya|Nigeria]].
Isshin zalu makaranta ni un firamare, ga sumaila gaga sunin 1968 zuwa 1975, boi ishin takawoyi sako mena Bo secondray ni ga makaranta gomnati na Dawakin Tofa, ko boi majini makaranta gomnati un lautai ga Gumel ishin taka makaranta ni un secondray ga sunin 1980, ishin watu izini ga Federal polytechnic Mubi ga'ga manshi jiha Gongola la hunssene she itaji [[Adamawa|ADAMAWA]]. Ishin wa Diploma ni in ulii ( ND ). Ga'ga injiniya tajiya un fetila ga sunin 1985.
Koboi isshin wadu Diploma in Siri ( HAND ). In injiniya ga'ga albarkatu Amma GA injiniya muhali ko Kaduna polytechnic ga 1989.<ref>title=Kano State Governor |url=https://nggovernorsforum.org/index.php/the-ngf/governors/553-kano-state-governor |access-date=11 July 2024 |website=nggovernorsforum.org}}</ref> <ref>date=20 March 2023 |title=CLOSE-UP: Yusuf Abba, Kwankwaso's PA and son-in-law who will be governor of Kano |url=https://www.thecable.ng/profile-yusuf-abba-kwankwasos-pa-and-son-in-law-who-will-be-governor-of-kano/ |access-date=11 July 2024 |website=[[TheCable]]<nowiki>}}</nowiki></ref>
Yusuf ko boi ni jami'ah Bayero un Kano, ( BUK ). Kai isshin wa Diploma in an balau. GA diploma in an balau ga fanni goomah.<ref>A. Aliyu |date=20 March 2023 |title=Who is Abba Kabir Yusuf? Nine Facts About the Governor-elect of Kano State |url=https://www.okay.ng/who-is-abba-kabir-yusuf-nine-facts-about-the-governor-elect-of-kano-state/ |access-date=29 August 2024 |website=Okay}}</ref>
==Ɗiwwa==
[[Panni:Miyya]]
h1cw89qlqxmnmh3futnof7v8fxo4xa9
Abdoulay diaby
0
362
10518
8394
2026-08-25T17:24:17Z
Mamie05
196
10518
wikitext
text/x-wiki
{{Databox|item=Q2821368}}
'''Abdoulay Diaby''' (Layannin ga foti 21 ga tere mayu soninshe in 1991) kwararre an kwallo sheke ji la aji Wano inne ga matsayin an bomfo Sara gede ga Al Jazir. Layanin ga faransa aji wakilta Mali GA mataki woli ga woli.<ref name=":1">Sedan: Abdoulay Diaby passe pro" (in French). Foot National. 13 January 2011. Retrieved 29 August 2018.</ref>
== Ruta Club/Kungiya ==
=== Sedan ===
Kala layannin ga Nanterra [[Faransa]], Diaby zalu ruta ga sedan koboii INT Clairfontaine (Cibiya kwallo sheke in faransa gadango) . Koboii tidon ga bomfo ga sedan. Diaby zalu gowa bomfo in fari ga foti 4 ga tere mayu soninshe in 2010 ga Dijon inko ningo ga matsayi la a mata gurbi Lossemy karaboue koga minti in 73 ga gawa yakul nasara ga Tina 3-1 saku fatako fadir koboii sombodi balau ga foti 7 ga tere mayu soninshe,, 2010 kala saku nakoyi ga matsa la a mata gurbi ga bomfo la aji Indo 0-0 ga AC Arles - Avignon la tidon ga gowa bomfo balau soninshe,2009 zuwa 2010.
Koga soninshe '''2010''' zuwa '''2011''' Diaby zalu baiyina ga tawagani in 20 ga tere Nuwambah ga soninshe 2010 inko zalu bomfo ga ga nasara 2-0 gako FC Sateinseltz GA zagaye in bawulo in coupe ga Faransa. Ga foti 13 ga tere janairu soninshe in 2011 Diaby zowu Sara gako kwantiraki ni in kwararru in farko jizani ga kulob in yutu ishin har Soni in 2014 satu kwallo in farko ga kungiya kala kafu koga kwallagen koga yakul nasara ga Tina 5-3 ga FC Istres ga foti 11 ga tere maris soninshe 2011. Koboii sombodi bawulo ga foti 18 ga tere maris soninshe in 2011 satu kwallo ga bomfo la gowangoyi indan go 1-1 ga Le Hevra. Ga tetteke kala bomfo in soninshe 2010 zuwa 2011 ti Dom ga gowa bomfo 11 kala satu kwallo balau ga shaf gasa.<ref>FEUILLE DE MATCH FC STEINSELTZ 0–2 CS
SEDAN" (in French). Ligue de Football Professionnel. 20 November 2010. Retrieved 29bAugust 2018.</ref>
Koga kaka soninshe 2011 zuwa 2012 Diaby satu kwallo ni in farko koga kaka bomfo in gawa GA yakul nasara 2-1 ga Clermont foot ga 12 ga tere Agusta soninshe in 2011. Koboii tere modi, ga foti 16 ga tere satumba soninshe in 2011 sakutu Sena kwallo ga bomfo ga aji inayi ga Le Hevra ga Tina 3-0 jamji satu kwallo kunum koga tere oktoba inko satu kwallaye kunum gako Angers SCO (sheke balau) ga Lille. Kala alatu tetteke fari in tere balau ga foti 9 ga tere maris ga soninshe in 2012 ga lokaci koga Sena kwallo ga bomfo mate indan 1-1 ga US Boulogna . Kasatun ga lokaci la zoii GA foti 18 ga tere mayu soninshe in 2012 satu kwallo ga ga nasara 2-1 gako Nantes . Shafga gutto la iwoyi ga lokaci kakaye soninshe in 2011 zuwa 2012 Diaby ti Dom ga gowa bomfo 31 kala satu kwallo bonumga gasaye.<ref>FEUILLE DE MATCH DIJON FCO 3–1 CS SEDAN" (in French). Ligue de Football Professionnel. 4 May 2010. Retrieved 29 August 2018.</ref>
== Lardi ==
Faransa
== Ahre ==
* [[Faransi]]
* [[Inglish]]
== Diwwa ==
24c4igk2bl9pfiknjb6ly56zloz6te5
Abraham Lincoln
0
367
10566
8399
2026-08-25T22:24:13Z
Yakubu19
208
10566
wikitext
text/x-wiki
{{Databox|item=Q91}}
'''Abraham Lincoln''' (/ˈlɪŋkən/ LINK-ən; February badi 12, 1809 – April 15, 1865) E'shiji President in dir bacci-modi ga America (16th president of the United States), duwu mukami ko soni badi alif 1861 har zuwa lokacin ya duwan zau ni ga soni badi alif 1865. Eshi a ga biya don ga washin la ango ga zaman onzi (American Civil War), ee kokari rankata ga lamar 'yorta gojjo ga gojjita mi' yya (slavery), saku lamar goma [[America]] ke mate kuman tun zoini rankata.
Layannin ga Kentucky, Lincoln Siri ga Western frontierya feten kon boni talakawa. La mate ilmantu GA kossu majini lauya ga Illinois. Kala majini bo shugaba jam'iya whig, itu Soni hordo 8 GA majalisa kala itu Soni balau 2 ga Congress, Janji tidon GA ruta lauyani . Inko inne anin majalisa sakan ewe zoni ga goru prairie an tinadom GA gojja bayinshe majini GA siyasa 1854.
==Ɗiwwa==
oydupivt6h6dztpx8wgt0ek1i6gnv4v
Adekunle Gold
0
379
10520
8411
2026-08-25T17:35:19Z
Yakubu19
208
10520
wikitext
text/x-wiki
{{Databox|item=Q21280581}}
[[Fayil:Adekunle Goldddd.jpg|thumb|Hoton adekunle]]
[[Fayil:Adekunle Gold from Lagos state.png|thumb|adekunle gold lagos]]
[[Fayil:Adekunle Golddd.jpg|thumb|Adekunle Gold]]
[[Fayil:GNAKO.jpg|thumb|Adekunle Gold]]
'''Adekunle gold''' Kosoko ba Adekunle Gold eshin ye an aruu woli [[Nijeriya]]o<ref>https://metro.co.uk/2018/07/20/adekunle-gold-went-king-photoshop-africas-newest-pop-star-7740101/</ref> Ga Soni badi alif in dubu modi ga dalma bonum ga kohurdo ga bawlo 1987 Ga burni [[Lagos]].
==Discography==
===Studio albums===
* ''[[Gold (Adekunle Gold album)|Gold]]'' (2016)
* ''[[About 30]]'' (2018)
* ''[[Afro Pop, Vol. 1]]'' (2020)
* ''[[Catch Me If You Can (Adekunle Gold album)|Catch Me If You Can]]'' (2022)
* ''[[Tequila Ever After]]'' (2023)
* ''[[Fuji (album)|Fuji]]'' (2025)
==Awards and nominations==
{| class ="wikitable"
|-
!Year
!Award ceremony
!Prize
!Recipient/Nominated work
!Result
!Ref
|-
|-
|2015
|[[2015 Nigeria Entertainment Awards|Nigeria Entertainment Awards]]
|Best New Act
|"Himself"
|{{Won}}
|
|-
| rowspan="3" |2016
| rowspan="2" | [[2016 Nigeria Entertainment Awards|Nigeria Entertainment Awards]]
|Best Song
| Pick Up
|{{Won}}
|
|-
|Best New Act to Watch
|Himself
|{{Won}}
|
|-
|[[The Headies 2016|The Headies]]
|Best Alternative Song
|"Sade"
|{{Won}}
|
|-
| rowspan="3" |2017
|[[City People Entertainment Awards]]
|Album of the Year
|"Himself"
|{{Won}}
|
|-
|City People Entertainment Awards
|Collabo of the Year
|"Himself and Simi"
|{{Won}}
|
|-
|IARA
|Best African Music Artist
| rowspan="2" |"Himself"
|{{Won}}
|
|-
| rowspan="2" |2021
| rowspan="2" |Net Honours
|Most Popular Musician
|{{Nom}}
| rowspan="2" |<ref>{{Cite news|title=Net Honours – The Class of 2021|url=https://thenet.ng/net-honours-class-of-2021/|location=Lagos, Nigeria|url-status=live|access-date=2021-07-21|newspaper=[[The Netng|The NET]]|language=en-US|archive-url=https://web.archive.org/web/20210621172630/https://thenet.ng/net-honours-class-of-2021/ |archive-date=2021-06-21 }}</ref>
|-
|Most Played RnB Song
|"Pami"
{{Small|([[DJ Tunez]] featuring Wizkid Adekunle Gold & [[Omah Lay]])}}
|{{Nom}}
|-
|2023
|[[The Headies 2023|The Headies]]
|Songwriter of the Year
|Himself for ([[Simi (singer)|Simi]] – "Loyal")
|{{Won}}
|<ref>{{Cite news |last1=Arogbonlo |first1=Israel |title=Full list: See 2023 Headies Award winners |url=https://tribuneonlineng.com/full-list-see-2023-headies-award-winners/ |newspaper=[[Nigerian Tribune]]|access-date=10 September 2023 |date=4 September 2023}}</ref>
|-
|2024
|TurnTable Music Awards
|Outstanding Achievement in Music in Film
|Himself for "[[The Book of Clarence#Music|Book of Clarence]]" and "Christmas in Lagos"
|{{Won}}
|<ref>{{Cite web |title=The TurnTable 2024 Music Awards |url=https://www.turntablecharts.com/magazine/6th/134 |website=TurnTable Charts |publisher=TurnTable |access-date=2 April 2025}}</ref>
|}
== Diwwa ==
b2c1cus3zzwnhgvsn73pj8q7lvnp3z2
Al-Qur'an
0
401
10567
8429
2026-08-25T22:36:42Z
Yakubu19
208
10567
wikitext
text/x-wiki
{{Databox|item=Q428}}
[[Fayil:Qur'aan.jpg|thumb]]
'''Al-Qur'an'''<ref>https://en.wikipedia.org/wiki/Quran</ref> (Larabci, القرآن al-Qur'an) ba kalama Alkur'an ga siri ni, mana la monangoyi, Ishin littafilla [[Allah]] oninmungo ko harshe annabin Ripo(Rahama), wato larabci kala Ishin littafilla Allah fatu yauta shap littafi ko konni (kala littafi Allah la alanningo andisa la Allah oni woyi boini) mana yadda Allah oninmungo annabawa la gedan jisu inko [[Annabi Muhammadu|annabi muhammadu]] (S A W) Ishin gonto bo annabawa Allah.<ref>https://en.wikipedia.org/wiki/Al-Tabari</ref><ref>https://aboutislam.net/counseling/ask-about%E2%80%91islam/islam%E2%80%91final%E2%80%91message%E2%80%91quran%E2%80%91last%E2%80%91testament/{{Dead link|date=July 2025 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref>https://islamhouse.com/read/en/the-last-revelation-2827843</ref><ref>https://www.masjidulmumineen.org.tt/revelation-wahy-the-belief-that-the-quran-is-the-final-unaltered-word-of-allah/</ref><ref>https://quranhouse.org/en/article/1871</ref><ref>https://www.islamreligion.com/article/pdf/2652</ref><ref>https://www.islamandquran.org/fatwas/the-quran-the-final-link-of-divine-revelation.html</ref><ref>https://quransubjects.wordpress.com/2019/12/03/muhammad-seal/</ref><ref>https://www.jstor.org/stable/10.13173/zeitdeutmorggese.164.1.0065</ref><ref>https://www.mdpi.com/2077-1444/12/1/4</ref><ref>https://aboutislam.net/counseling/ask-about-islam/why-didnt-god-preserve-the-previous-books/</ref>
Surat al-Nisa'i La Allah yautin goyi ga ayoyini ga annabi [[musulwa]] annabi muhammad (S.A.W) ko Sara mala'ika jibrilu. Ga a kida musulwa, kur'ani Ishin ji laga muhimmanci kala yatu siro mu'ujiza annabi muhammadu (S.A.W) Manzone in jire.<ref>dictionary.reference.com: [http://dictionary.reference.com/browse/Koran koran]</ref><ref>https://www.islamweb.net/en/fatwa/90933/how%E2%80%91the%E2%80%91quran%E2%80%91was%E2%80%91revealed%E2%80%91from%E2%80%91allaah%E2%80%91to%E2%80%91his%E2%80%91prophet</ref><ref>https://www.britannica.com/topic/Quran</ref><ref>https://www.islamreligion.com/articles/150/viewall/miracles-of-muhammad-part-1</ref><ref>https://islamhouse.com/read/en/the-last-revelation-2827843</ref><ref>https://islamhouse.com/read/en/the-last-revelation-2827843</ref><ref>https://qurantalkblog.com/2023/04/17/muhammads-only-miracle/</ref>
Shariya musulwa, la aji unda to ga shari'a, ta dogara ji gako kur'ani (madogarani in farko), Ishin littafin la musulwa la aji karintayi kala ayoyi kur'ani daban- daban gaga lukuram ye Andi addu'o inni.<ref>Bell, Richard; Watt, William Montgomery (1970). Bell's introduction to the Qurʼān. Edinburgh University Press. ISBN 978-0-7486-0597-2.</ref>
Hankali la ga lafiya ni ga tsafta tunani in lawo adamu ga rutani inso ga lama foti yalla tabbitu jini ka cewa lukuram onu, gomtattu kulawa ga [[duniya]], ga yanci lawo adamu (21) lukuram kala mah Ina shiru , [[maluwa]] ununtungo ga misali cewa Andi kuskure ga direbobi la aji kunna lukuram ga ga motasu janji miyya kala aji ta mosa, gako cewa zunubi Ishin aji wenayi ga ladasa. Kala atiye aji wena memu aji karintayi lukuram awena lada sa? [[Malum abubakar Abdullahi Goran Namaye]] foruwoyi siri atilla aji memu Ishin karinte lukuram janji Ishin awena ladasa, Ishin ji aiyi inko Allah kawaii. Foruwoyi lema memu aji karintayi aji wena kuskure sheye a genani wena lada sa, inko foruwoyi memu a wena lada balau, jam sake forayi lukuram Ishin karatulla lema Ishin di gama malum adin [[musulunci]] foru yamodi sa azowa memu kine wena lada inko Ishin a Ina [[karatu]] lukuram Ishin ji karatu ga beyi la andi tsarki sa mana gede boibin "ya Maddi aji zowa wena lada Ishin ji memu diwo Goma Ishin awatu dilo ni ajita karinta lukuram ansiro. Kala Andi godon mosa, to awena zunubi memu awena Yi gako ishin wai lada, inkume malum abubakar goran Namaye.
== Hotuna: ==
<gallery>
File:Ibn al-Bawwab - Qurʾan f. 278v-279r.jpg|Mushafin Ibn al-Bawwab.
File:Quran Surah Al Kahf.png|surah surorin alkur'ani, al-Kahf
File:Birmingham Quran manuscript.jpg|Mushafin al-qurani wafatin Annabi [[Muhammad]] SAW a Birmingham kasar Ingila
File:The Mushaf of Imam Ali.jpg|mushaf din Imam Ali RA
File:Qur'ans.jpg|Bugun Qur'ani a 1907
File:المخطط الصغير للقراءات الأربعة عشر بالعربية والإنجليزية.pdf|Rubutun qurani a warsh da [[turanci]]
File:Melaka Al-Quran Museum - Exhibition Hall.jpg|Dakin alkuranai a Meseum din al-Quran a Melaka.
</gallery>
== Ɗiwwa ==
m1mgk83xlqkyt6jppiknngohqus73en
Barrack Obama
0
453
10524
10477
2026-08-25T19:43:07Z
Abu Sadeeq77
197
10524
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office.
== Ɗiwwa ==
8xq7uy1ro0pck92gr9tdxtpbmtshz62
10525
10524
2026-08-25T19:47:52Z
Abu Sadeeq77
197
10525
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani;
== Ɗiwwa ==
1rx7xbzpmy401rivwq1rmrznniklgff
10526
10525
2026-08-25T19:51:54Z
Abu Sadeeq77
197
10526
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009)
== Ɗiwwa ==
oj8swzvouxlrjoio3zu9dx02zyixx21
10527
10526
2026-08-25T20:00:05Z
Abu Sadeeq77
197
10527
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka.
== Ɗiwwa ==
ma4vw0onp5nb2g8mt6cp4x3jhbk754t
10528
10527
2026-08-25T20:06:27Z
Abu Sadeeq77
197
10528
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973,
== Ɗiwwa ==
oq0vaaarvke02koqpq3lzoer1ilq81n
10529
10528
2026-08-25T20:09:17Z
Abu Sadeeq77
197
10529
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
== Ɗiwwa ==
pgd1tl2nrwld60c04hne2dtcpbcttr1
10530
10529
2026-08-25T20:15:08Z
Abu Sadeeq77
197
10530
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ.
== Ɗiwwa ==
9g0t2zngg497cypzw0ly5frs1wme1wf
10531
10530
2026-08-25T20:19:16Z
Abu Sadeeq77
197
10531
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges):
== Ɗiwwa ==
t2xweinc2phsvwjjm3u06ismmmtaj8q
10532
10531
2026-08-25T20:26:36Z
Abu Sadeeq77
197
10532
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete.
== Ɗiwwa ==
5gx19u1astiwfk9q3d2sgkothkq6gww
10533
10532
2026-08-25T20:30:57Z
Abu Sadeeq77
197
10533
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015)
== Ɗiwwa ==
ok5jmbhfab1s02n279hu7qk6j6uimbi
10534
10533
2026-08-25T20:39:14Z
Abu Sadeeq77
197
10534
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba.
== Ɗiwwa ==
71kun1v2b3lqogd0u2b3cdavu7rjmvi
10535
10534
2026-08-25T20:44:34Z
Abu Sadeeq77
197
10535
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell,
== Ɗiwwa ==
qmftuzzp3k6ukcw4ukotgb1fvsfaakm
10536
10535
2026-08-25T20:48:14Z
Abu Sadeeq77
197
10536
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC
== Ɗiwwa ==
5qp96g3wwz8cwm5ux3fwlpw3qk4cp36
10537
10536
2026-08-25T20:53:23Z
Abu Sadeeq77
197
10537
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai.
== Ɗiwwa ==
1tfcz0d2ofpbiqcxitjuuszkfzu9m26
10538
10537
2026-08-25T20:59:47Z
Abu Sadeeq77
197
10538
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka.
== Ɗiwwa ==
la4cr9ygcltn341e1kbilohdodtnkls
10539
10538
2026-08-25T21:02:35Z
Abu Sadeeq77
197
10539
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020).
== Ɗiwwa ==
16kfc60v03eghpv0uxx7zsusjxaw6k3
10540
10539
2026-08-25T21:06:27Z
Abu Sadeeq77
197
10540
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi.
== Ɗiwwa ==
pr0r71vz0dckbyrdp9i4scbytas9gtl
10541
10540
2026-08-25T21:18:43Z
Abu Sadeeq77
197
10541
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964).
== Ɗiwwa ==
dt15nn0np57axi7d2m3z3tw97jqvarb
10542
10541
2026-08-25T21:25:44Z
Abu Sadeeq77
197
10542
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971)
== Ɗiwwa ==
hiv77b733tdicmu0go2mjvivm0qafm7
10543
10542
2026-08-25T21:31:10Z
Abu Sadeeq77
197
10543
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino."
== Ɗiwwa ==
guymbcyo7uwv28rlsavt6e0lt8hm07u
10544
10543
2026-08-25T21:33:53Z
Abu Sadeeq77
197
10544
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi
== Ɗiwwa ==
rc8o7eybv9snaw9uhohd9vscqam8a39
10545
10544
2026-08-25T21:38:39Z
Abu Sadeeq77
197
10545
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
== Ɗiwwa ==
lmdnen6583d9jithuvrelt9peddq6j2
10546
10545
2026-08-25T21:42:08Z
Abu Sadeeq77
197
/* Ilimi */
10546
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Ɗiwwa ==
cppv1tbjsmd9icwaut6df5w7hog5zra
10547
10546
2026-08-25T21:45:08Z
Abu Sadeeq77
197
10547
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
== Ɗiwwa ==
qol013gxtfxfu4gjnruqylrgxfiyxs3
10548
10547
2026-08-25T21:47:29Z
Abu Sadeeq77
197
10548
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
{{Shugabannin Amurka}}
[[Category:Shugabannin Amurka]]
== Ɗiwwa ==
chvm1a7wcncc39vjvmx2z7rj06tx4bo
10550
10548
2026-08-25T21:51:57Z
Abu Sadeeq77
197
10550
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
{{Shugabannin Amurka}}
== Ɗiwwa ==
11qxt4hmx5qhtf6yukux5ri9k0xvgyb
10551
10550
2026-08-25T21:52:37Z
Abu Sadeeq77
197
/* Manazarta */
10551
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
{{Shugabannin Amurka}}
== Ɗiwwa ==
06i3nsnowecuatjm2eojw84u6kdcnyl
10552
10551
2026-08-25T21:54:34Z
Abu Sadeeq77
197
10552
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
== Ɗiwwa ==
1fpsbl4u08mismk08hw9x5e0pn212me
10553
10552
2026-08-25T21:55:19Z
Abu Sadeeq77
197
/* Manazarta */
10553
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
== Ɗiwwa ==
poi7t0uzxio048swmogz90lynsshl49
10554
10553
2026-08-25T21:57:10Z
Abu Sadeeq77
197
/* Manazarta */
10554
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
<references></references>
== Ɗiwwa ==
203rbycmii2movnrqrqfbczwftrabne
10555
10554
2026-08-25T21:59:21Z
Abu Sadeeq77
197
/* Manazarta */
10555
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
<references></references>
== Ɗiwwa ==
es7tykcq76o7ymhi6xtsc7otl0fbl5z
10556
10555
2026-08-25T22:01:13Z
Abu Sadeeq77
197
/* Manazarta */
10556
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
<references></references>
== Ɗiwwa ==
1qgimad6kvxys2zkr0b66eolc5793on
10557
10556
2026-08-25T22:06:21Z
Abu Sadeeq77
197
/* Manazarta */
10557
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
<references></references>
== Ɗiwwa ==
b10i3j9o57x7varqkxfrg3xpdhisiue
10558
10557
2026-08-25T22:07:41Z
Abu Sadeeq77
197
/* Manazarta */
10558
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
#https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/
<references></references>
== Ɗiwwa ==
r52idfo4co6j8pwpyk0tibi4673xewb
10559
10558
2026-08-25T22:08:57Z
Abu Sadeeq77
197
/* Manazarta */
10559
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
#https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/
#https://www.nytimes.com/2007/09/09/us/politics/09obama.html
<references></references>
== Ɗiwwa ==
ngoukkfe0bzozkyz2puj8f3k5b6hqv2
10560
10559
2026-08-25T22:11:00Z
Abu Sadeeq77
197
/* Manazarta */
10560
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
#https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/
#https://www.nytimes.com/2007/09/09/us/politics/09obama.html
#"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05
<references></references>
== Ɗiwwa ==
2hzx8ahdvhkavbwus7ifaqrpdf0sp5y
10561
10560
2026-08-25T22:11:57Z
Abu Sadeeq77
197
/* Manazarta */
10561
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
#https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/
#https://www.nytimes.com/2007/09/09/us/politics/09obama.html
#"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05
#Scott (2011), pp. 87–93.
<references></references>
== Ɗiwwa ==
656iftx4evc24w6yaof0is0is3d0nnh
10562
10561
2026-08-25T22:13:21Z
Abu Sadeeq77
197
/* Manazarta */
10562
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
#https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/
#https://www.nytimes.com/2007/09/09/us/politics/09obama.html
#"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05
#Scott (2011), pp. 87–93.
#Obama "Dreams from My Father a Story of Race and Inheritance"
<references></references>
== Ɗiwwa ==
22tggefc459zozn9ouplva5qf3aot8n
10563
10562
2026-08-25T22:15:18Z
Abu Sadeeq77
197
/* Manazarta */
10563
wikitext
text/x-wiki
{{Databox|item=Q76}}
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
#https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/
#https://www.nytimes.com/2007/09/09/us/politics/09obama.html
#"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05
#Scott (2011), pp. 87–93.
#Obama "Dreams from My Father a Story of Race and Inheritance"
#Scott (2011), pp. 142–144.
<references></references>
== Ɗiwwa ==
ou887hlbnrz1of0fq4xrm1mq5u0wchc
10564
10563
2026-08-25T22:17:44Z
Abu Sadeeq77
197
10564
wikitext
text/x-wiki
{{Databox|item=Q76}}{{Databox}}
[[File:Official_portrait_of_Barack_Obama.jpg|200px|right|thumbnail|Barack Obama]]
[[File:Flickr_Obama_Springfield_01.jpg|200px|right|thumbnail|Obama da iyalinsa a Springfield, Illinois]]
[[File:Barack_Obama_arrives_at_Baghdad_International_Airport_4-7-09_2.JPG|200px|right|thumbnail|Obama ya sauka a filin jirgin sama na Baghdad]]
[[Fayil:President Barack Obama with full cabinet 09-10-09.jpg|thumb]]
[[Fayil:Barack Obama with artistic gymnastic McKayla Maroney 2.jpg|thumb]]
[[Fayil:President Barack Obama.jpg|thumb]]
[[Fayil:Barack Obama family portrait 2011.jpg|thumb]]
[[Fayil:Barack Michelle.jpg|thumb]]
[[Fayil:Obama Portrait 2006.jpg|thumb]]
[[Fayil:United States President Barack Obama bends down to allow the son of a White House staff member to touch his head.jpg|thumb]]
[[Fayil:Obama and Biden await updates on bin Laden.jpg|thumb]]
[[Fayil:Barack Obama signature.svg|thumb]]
[[Fayil:Biden Obama 2.jpg|thumb]]
[[Fayil:Barack Obama profile picture.jpg|thumb]]
[[Fayil:Obama signs DADT repeal.jpg|thumb]]
[[Fayil:President Barack Obama, 2012 portrait crop.jpg|thumb]]
[[Fayil:Obama family in mist in Rio de Janeiro.jpg|thumb]]
'''Barrack Obamaye''' sun President in [[America]] in kisato. Sunni Barack Hussein [[Obama]] II (La'annin ga August 4, 1961) An siyasan gon ga America, ishiji Shugaba su in Ko foddo ga foddo 44th ga United States, ko 2009 zuwa 2017. Ishiji African-American in bodom la isu shugabanci ga U.S. Obama kafun ishi ai president, e Senator ko lardi su (Illinois) dalla 2005 zuwa 2008. Ke e state senator ga Illinois ko 1997 zuwa 2004. Honolulu, Hawaii. Boi kammila karatuni ga Jami'a Columbia ga soni in 1983, itu Ruta ga matsayi an shirye mi'yya ga Chicago. Ga soni in 1988, itu register ga makaranta Shari'a in Harvard, India kasantu shugaba bu'um mi'yya in farko in doka Harvard Law. Boii kammila karatuni, itu Dono lauya in Kare Hakki mi'yya ga kala ilimi , Aji goze doka tsari mulkiga Jami'a Chicago Law school Koga soni in (1992) zuwa soni in (2004). La majini siyasa an zabe, itu wakili ga gunduma(13) a majalisa dottijai in Illinois Koga soni in 1997 zuwa ga soni in (2004), lokaci la Aji zawwa Takara majalisa dottawa Amurka. Obama watu kule ga woli ga soni in (2004) jizani ga wena zabe farko in majalisa Dottawa, Siri jawabini in Siri taro Dimokradiyya ga Tere Yuli , ga zabeni in Tere Nuwamba ga majalisa Dottawa. Ga soni in (2018) soni modi Ko boii zalo kafenni, kala boii sili kamfen in nem ga Hillary Clinton, jam'iya democrat Onannin Takara shugaba woli. Zaban Obama ,gako an Takara Republican John McCain ga Siri zabe kala rantsantun ishin jizani ga soba takarani, Joe Biden, ga Foti 20 ga Tere janairu 2009. Boii Tere bonum 9 Onannin Lamba Yano in Nobel in Dono lafiya in soni (2009.
Barrack Obama zowu Sara gako takarda Maddi Laga muhimmanci in doka gaga soni balau in farko ga office. Siri chanje chanje gontango ga: Duka kule la gollaka (ACA ɗo " Obamacare") ɗoma jizani ga zaɓa mi'yya sa: Doka Dodd - Frank wall Street Reform ga Doka Sota anin amfani; Ga kala mah'ai loɗu sa kala mah'ai mosa sa gako doka duwati in tetteke soni 2010. Doka matako ga inshora Ɓo Amurka in soni (2009). In taimiki haraji inshora yakul ati inayi, ga doka wena Ruta ga soni in 2010) antun Ruta ga Dono matsaloli Dara ga Dalla siri mate boii tattali dara.Boi garan muhawara gako iyaka gudum woli, zowu Sara gako kule ga kasafi dodo ga Ruta taimiki anin dogga harajiin Amurka. Gaga Manu Foti ladira, mataka sojoji amurka ga Afghanistan, sikitu makamai nikiliya jizani ga Amurka -Rasha Foyo START yarjejeniya, kala alako tetteke gede sojaga Libya inko aiwita ga kuduri kwamiti sulhu in majalisa donɗu Duniya in soni 1973, La Onu gudumowa Jabba mummuna Gaddafi. Kala Onu umarni Ruta soja la itu sanadiya Duwa Osama bin Laden.
Boii watu zabe Ko goggo Gozu in soba hamayya no Republican Mitt Romney's, rantsantun Obama ga wa'adi in balau Ga soni in 2013. Ga Lokaci eme ingantu Haɓika ga Amurka LGBJ. Gwamnati ni antun gabatan takaitace ɓosa la buƙatu Koti Koli mate fodi, haranci kaibono jinsi mana la doka dolakko sa( Amurka v. Windsor ga Obergefell v. Hodges): Halattan kai bono jinsi ga Modi ga shaf Siri woli ga soni in 2015 boii ga Kotu antun hukunci ga Obergefell. Onu Shawara sarrifa bindiga inko Mata martani Ko Besi makaranta sakandare Ko sandy Hook,la Aji ona oyon baya ga gena Ele'hari Ko makarantu kala Onu Siri Ruta in zartarwa game ga ɗumama yanayi ga gede ga fete. Gaga Manufofi wolinshe fewe, Onu umarni gete Ruta soja ga iraki ga Siriya inko Mata martani ga nasarori ga ISIL Ko wena boii Fatako Koga iraki ga soni in (2011) , ingantu inda leyi ga yarjejeniya Paris Ko soni in 2015). Ko chanje yanayi in duniya, itu jagora kala zauwu afuwa ga tetteke gami ga mummuna Hari la alango ga hasibiti Kuduz., tidom ga aiwita ga alako tetteke Ruta washi ga Amurka ga Afghanistan gaga soni in (2016) , zalu zowa takunkumi ga Rasha boii mamaya la angoyi ga Ukraine kala boi katsalanda ga zabe Amurka in soni (2016) Ɓoltu yarjejeniya gonta koyi in yarjejeniya Nukiliya jizani ga Iran kala daidai tu alaka Amurka ga Cuba. Obama gabatu ga al'ƙalai kunum ga Kotu Koli; Sonia Sotomayor ga Elena Kagan tabbitantun mate ga matsayi al'ƙalai dalili la Merricks Garland watu cikas Koga bangare majalisa dottawa Laga rinjayein Republican wol woli jagoranci Mitch McConnell, La danɗu sauraro do kaɗa kuri'a gako zoisa . Obama dayu ofis ga tare January soni in 2017) kala titu Dom ga Dono ga Washington. DC.
Ga lokaci wa'adi Mulki Obama ga matsayi shugaba woli, martaba Amurka ingantu sosai. Shaf Aji inne shugabanci Obama gollaka kala kimanto Dalla la anin Mona tarihi, anin Mona kimiyya siyasa ga Messe mi'yya Aji zowani gaga shugabanni la sirasu ga Amurka. Tun lokaci la dayi ofis , Obama tidom ga Ruta gaga Siyasa democradiyya , gami ga Bayyina Siri taro Democradiyya in soni (2020). Ga tetteke Tere August in soni (1961) boii Tere shim ga layini, Barrack ga nonni mate manjisu Jami'a Washington ga Seattle, inko mate dowan in soni modi. Ga Lokaci ye boni takatu Digirini in farko ga Fanni tattali dara Hawaii, kammilu ga Tere Yumi gaga soni in (1962). Dijini makaranta digiri in balau gako malunta ga Jami'a Harvard, inko watu MA ga Fanni tattali dara. Boti Obama ga nonni Sakan kaibono ga Tere Maris soni in (1964). Obama majini Kenya ga soni in (1964) itu kaibono ga Karo in kunum' kala itu Ruta ga Gwamnati Kenya ga matsayi Siri an nazari tattali dara ga beyi Ruta dodo. Alatu ziyara ga Beni ga Hawell sheke Modi ga kirsimeti ga soni in (1971). Kafin ishin Moti ga hatsari mota ga soni (1982) lokaci ye Obama ishin ga soni 21 ). Aji tuna ga kurushiya ni. Obama forwoyi Na: Bono i'suwa ga mi'yya la a Gita Dono ga fadirnosa - inko inshin ga bu'um mana fetila sa, Nonno fetilato sar, mana madara- gaket ita Attu regisata gaga tunanino." Bayyinu jir Gwagwarmaya la iwoyi Yan ga matsayi daidaito tunani mi'yya game ga al'adu la kunsuwo yi.
== Ilimi ==
[File:Barry_Soetoro_school_record.jpg|thumb| Rikodin makaranta Barack Obama a St. Francis na Makaranta Elementary Catholic in Assisi. Antun in Obama rajista ga matsayin "Barry Soetoro" (lamba 1), kala antun kuskure rubuta ni ga matsayin an woliIndonesiya (lamba 3) ga Musulmi (lamba 4).
== Manazarta ==
{{reflist}}
# http://www.bloomberg.com/news/2011-05-02/death-of-bin-laden-may-strengthen-obama-s-hand-in-domestic-foreign-policy.html
# Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#Obama wins historic US election". BBC News. November 5, 2008. Archived from the original on December 18, 2008. Retrieved November 5, 2008. Nagourney, Adam (November 4, 2008). "Obama Elected President as Racial Barrier Falls". The New York Times. Archived from the original on December 9, 2008. Retrieved November 5, 2008. "Obama: 'This is your victory'". CNN. November 5, 2008. Archived from the original on November 4, 2008. Retrieved November 5, 2008
#http://www.nato.int/nato_static/assets/pdf/pdf_2011_03/20110325_110325-unified-protector-no-fly-zone.pdf
#https://www.theatlantic.com/international/archive/2015/09/obama-netanyahu-and-the-future-of-israel/405082/
#https://www.boston.com/news/education/higher/articles/2007/02/20/obama_got_start_in_civil_rights_practice
#https://web.archive.org/web/20110828104819/http://m.vcstar.com/news/2011/mar/23/ap-news-in-brief/
#https://www.nytimes.com/2007/09/09/us/politics/09obama.html
#"Kwafin la zenani". Archived from the original on 2008-06-17. Retrieved 2024-02-05
#Scott (2011), pp. 87–93.
#Obama "Dreams from My Father a Story of Race and Inheritance"
#Scott (2011), pp. 142–144.
<references></references>
== Ɗiwwa ==
te1t3y33efj2k5unmldiqxkgarqylbo
Chadi
0
477
10522
8490
2026-08-25T17:37:19Z
Mamie05
196
10522
wikitext
text/x-wiki
{{Databox|item=Q657}}
'''Chadi''' ita a ga Modi koga Olli in Africa ko Dalla, ita aji kodoki ga Olli bacci Modi: kofai dar [[Sudan]], kofai aushito [[LIBYA]], kofai zunito [[Nijar|NIJAR]], ga [[KAMARU]], ga [[Nijeriya|NIGERIA]], kofanni gudi Kala ita aji kodoki ga Africa in dallah, Olli Chadi ita ga Amma sa kega tekusa, Amma ita ga tabki Modi Sunni. Tabkin Chadi ( '''Lake Chad)'''. Ishi a gudi-zunii ga Ndjamena Gur gunta koyii in Olli chadi.
== Ɗiwwa ==
[[Panni:Lelo'aji]]
0wrbueois6p77p8immn3hj8me3zipta
DAGACIN GARIN GADAM
0
485
10521
3830
2026-08-25T17:35:50Z
An pikka
367
10521
wikitext
text/x-wiki
Alhaji Adamu Ibrahim Gadam: inke Moi Gadam (Dagachi Gadam) layannin futi Modi 1 gaga teren in an modi jam gaga sati I 1985 ke ishin zalu ruta ga futi 10-10-1986.
[[Fayil:MOI GADAM.jpg|thumb|MOI GADAM]]
Ishin iyi karuta primary ga Jijji Gadam primary.
{{DEFAULTSORT:MOI GADAM}}
jamnebc8qtk1ky34yichpkxlpbexla5
Fika
0
534
11006
8728
2026-08-26T08:01:38Z
Morkoz
369
Undid revision [[Special:Diff/8728|8728]] by [[Special:Contributions/~2026-45570-55|~2026-45570-55]] ([[User talk:~2026-45570-55|talk]])
11006
wikitext
text/x-wiki
{{Infobox settlement
| name = Fika
| image_skyline = [[Fayil:Doum Palm Trees farm near Ngaji River (1).jpg|280px]]<br>[[Fayil:Mountain in Fika LGA Yobe State (3).jpg|280px]]<br>[[Fayil:Fika kurtzifizioa.jpg|280px]]
| settlement_type = [[Local government areas ga Nijeriya|LGA]] and town
| mapframe = <mapframe height="300" width="300" align="center" text="Location of Fika LGA">
{
"type": "ExternalData",
"service": "geoshape",
"ids": "Q5448220"
}
</mapframe><mapframe width="300" height="300" zoom="14" longitude="11.308056" latitude="11.283333" text="Location of Fika (Town)" align="center">
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [11.308056, 11.283333] },
}
</mapframe>
| country = Nigeria
}}
Fika goru ji ko ga lardi [[jiha Yobe]], Ga ko goggo [[Gombe]] ba ka indu ko [[Potiskum|pataskum]], kafin ka lomi Ngara ga [[Nijeriya]]. Goruye goru anin pìkkà.<ref>https://www.nipc.gov.ng/nigeria-states/yobe-state/</ref> Fika ga faɗi area 2,852 km2. Akwati
== Ɗiwwa ==
ic3pnexv42l9ty0gj52hydxwnv9kmoh
Filanti
0
537
10519
4390
2026-08-25T17:27:36Z
Yakubu19
208
10519
wikitext
text/x-wiki
{{Databox|item=Q202575}}
Filanti do filata (toli: Filata do filantiwa)<ref>Fula: Fulɓe, 𞤊𞤵𞤤𞤩𞤫; French: Peul; Hausa: Fulani or Hilani; Kanuri: Fillata; Portuguese: Fula; Wolof: Pël; Bambara: Fulaw; Tyap: A̱fa̱taa</ref> miyya la aji zoni ga gudi ga [[Afirka|Afrika]] Yan lokacin la garan: jir saniya in Filata monannin ga dayi uwwa ga gojjita wodi<ref>[https://www.rumbunilimi.com.ng/KasarHausaKiwo.html#gsc.tab=0 sanar kiwohttps://www.rumbunilimi.com.ng/KasarHausaKiwo.html#gsc.tab=0]</ref>, mate aji kamya koyi bo gajjitayi, filantiwa jir miyyanla la ga fahimta la gollaka, ga donosu ga lema yalla kabila aji dono lafiya ga mate, jam har gonta kaibono ga dallasu.<ref>Felicity Crowe (2010). Modern Muslim Societies. Marshall Cavendish. p. 262. <nowiki>ISBN 978-0-7614-7927-7</nowiki>.</ref><ref>Steven L. Danver (2015). Native Peoples of the World: An Encyclopedia of Groups, Cultures and Contemporary Issues. Routledge. pp. 31–32. <nowiki>ISBN 978-1-317-46400-6</nowiki>.</ref><ref>Fulbe". homepage.univie.ac.at (in German). Archived from the original on 24 November 2021. Retrieved 30 August 2020.</ref> ga lokaci jir menme ajidisu gaga duniya kala Alan miliyan ko kunum ga badi ga [[Nijeriya]].
==Mosa Gabo==
Mosa jir bo missu ga sunni Fulfulde. Sheji aji undasu ga biye Maddi ga Nigeria ga [[Nijar]] ga [[Sudan]] ga [[kamaro]], kala a tushe su la fetengo, mana beyi Maddi ga Senegal ga mautaniya ga Gini ga messesu, aji undasu ga pulaar ko fula.
==Assalin Sun Filata==
GABO gari de, moninshe ya aji forayi tabbaccensu tarihi su Ishin la ningo gaga lukuram ga Hadisai, Amma shap yassu aji menajisu bo miyyanla la gollaka sa inko she majini bo wajibi sa yalla, aji forayi Ishin jire ga, A forayi asali sunsu Filantiwa Ishin ji sunla wennin ga (Fita joro) jam gaga manshiwa su kabilu su inga duniya ga. Ishin sunsu Futa din su wengo ga Ishin koga dilkkesu/ga bowunshe su la aji undasu ga Futa, jam dikkesu ga Annabi NUHU, ko gamani wen ga samudawa fa Adawa, inko she forshe Allah ta ala lukuram (IRAMA ZA TIL'IMAAD) ga kabila su inko wego gako cewa dandan undasu ga Iramawa.
Ko bisani inko godon ga, washi_washin la jai godon faro, shiyasa aji undasu ga Fatah. ma'ana Jarumai. Ledi ledi jam zali undasu ga sunsu Futa.
Yanayin dono su ga beyi beyi kuwa Ishin ji silar sauyuwa sunsu ko yadda aji undasu ga Futa Jor0, ma'ana, Futuwa, Ishin ji la aji dono ga Toro, ga Futa Madina Futa jallo ga Futa falgo ga messesu. A forinshe la monan'ni Ishin sun emeyye FULANI, wentun asali ni ga zoni ga Africa, Sanda gontan koyi ga MANDINKA beyi dono miyyanla matema ma Fulani ji ga hali su ga dani"u su.
Malum Ahmed jijini gako cewa Fulani kabilasu in farko ce ga la zalan dowa ga [[Afirka]], jam mate ninga adin zani ga Afirka.
Inko she Filantiwa daffan lawinshe su aji forasu cewa Ana hulbe(Fulbe) Allah, muji zuwa allah ji, inko yalla mandinkawa, sobawa donomu aiki tan. Kotene kawai mandinkawa aji inna bo innesu mate aji undasu ga sun Fulah, kafin mate sunsu zali chanxa jini bo Fullata, da Fulbe.
==Ɗiwwa==
jg7ctetrcppl18hx3j49jmky7seuwz6
Foti
0
538
10515
4393
2026-08-25T13:54:53Z
Yakubu19
208
10515
wikitext
text/x-wiki
{{Databox|item=Q525}}
Foti (alama) modi Siri halitta ga aji fete ga femfeli ga Haske sakamako Tina osi aji inayi inko she majjito fitila la aji Haske koyye gaba Daya, ga takaice de foti itaji aji haskika shaf ga duniya ga sarari koyye gabadaya su,(1)(2)(3)(4) duniyo aji zagaye su ga foti ga bisa kuduri (ya Baki) aji zagayayi Ga bisa jir agogo wato aji Ina kore foti, sheji shaf duniyamu aji konayi har tsawo sombodi 360 kafin ita zagaye foti, shaji in shaf duniya yalla Andi godom sombodi la aji inayi ga aji Kona kafin in bimbadi kure foti.(5)(6)(7) Foti itaji fitila LA Siri Ga sarari koyye. Itaji Haske la godum gedau.(8)
== Solar Radiation ==
Foti aji wena Haske ga Fadi bakan lake sola, inko she launi aji fetila, jizani ga launi in sarari koyye in CIE nem (0.3 0.3,) lokaci la inne koga sarari koyye do lokaci ga foti ga Le garan foti ga garan ga gawa bangare korena bakan lokaci ga aji inneyi koga sarari koyye.(9)
Lokacin la foti antu in woli sosai ga sarari koyye, yaduwa yanayi aji zowa foti majjito bo rawaya, dai. (Orange), do magenla. Kala ga lokaci laga bone harga kore shudi ga al'adu aji tunanin foti ga matsayi rawaya kala maddi ma dai. Dalilai in Al'adu in eme aji muhawara.(10) Bissanau ga matsayin taurari G2 ma'ana tauraro G ji jizaniga in 2 aji ewe zafi jito aji gawa kewaya in balau in aji G.
Adadi Haske foti ishinji adadi osi la foti aji zenayi ga lema yanki yalla la fanlisangoyi kai tseye ga Haske foti. Haske foti gaga duniya aji sikita in goggo yanayi duniya inko she karanci Iko lomu koyye ( numga 1,000 w /m2) Gaga yanayi laga Haske lokaci ga foti aji Nemga zenith Haske foti ga koyye yanayi duniya kunsu ( ko goggo jimla makamashi) in nem 50% infrared Haske, 40% bayina Haske ga 10% ultraviolet Haske. Yanayi aji taceyi maba Kashi 70% in ultraviolet in foti , musamman ga gakeru wavelength.(11) Haske foti in ultraviolet aji Ina haske ga sarari koyye in duniya aji alako ga ionosphere la aji gudana ga lantarki.
Haske ultraviolet koga foti aji ga Dara antiseptic kala aji Ina amfani Ga ishin inko tsabtace Karai ruta ga Amma eme, radiation aji alako bokka foti, kala aji ga maddi tasiri halittu mana wena ga Bilamin D fa kala Haske foti. Ishin Siri dalilin yakul lafiya fada mala in fata. Haske ultraviolet aji sikita sosai ko goggo loyer in ozone in Duniya inko she godom UV aji bambinta yo sosai jizaniga latitude kala aji ga modi bangare in halitta, gami ga bambata bambanci Gaga launi in fata in mulum (12)
== Ɗiwwa ==
f93y0rpqy3rkz9q6x36klwtce3ggkfk
GURRENSHE LA AGA PIKKA
0
543
10569
4423
2026-08-25T22:48:30Z
Yakubu19
208
10569
wikitext
text/x-wiki
Yan mako miy'ya Pikka jajin Moi Buraima ga 1805, shaf NBOGAWUNA la eshin foduwo Yi manjisu nguranshe Maddi su aga gawuna Maddi kala a boi gawuna Pikka.
== Sunsu Mana she ==
1. Bo garu
2. Bo gawuna Moi
3. Bo gawuna Tinja
4. Sirrife
5. Mainari
6. Fukumari
7. Ga mutuwai
8. Janga ndemi
9. Kussur fuddo
10. Korori
11. Nga nguzum
12.nguro Dala
13. Ga bani Garba
14. Low cost 15. Ngafate 16. Zirki zanzana 17.Dewe burba
== Ɗiwwa ==
2zjkoc6d89r4a9gl7h1fy5mi32x04ag
Ga Matira An Guru Gadam
0
544
10570
4426
2026-08-25T22:50:38Z
Yakubu19
208
10570
wikitext
text/x-wiki
An siri gomna Lefa Gombe esi elengi ati dono ga ga MATIRA moi ansiri Gadam
Ishin an siri goru Gadam ga messe biya goru Gadam mate angi gariya gake kunani in wena sauwi ê ango'e
dz6g87sx2ajrep8xprkgffcudgm7jjl
Ghana
0
556
10523
8541
2026-08-25T17:41:19Z
Yakubu19
208
10523
wikitext
text/x-wiki
{{Infobox country
| conventional_long_name = Republic of Ghana
| image_flag = Flag of Ghana.svg
| image_coat = Coat of arms of Ghana.svg
| image_map = Ghana (orthographic projection).svg
| national_motto = "Freedom and Justice"
| national_anthem = "[[God Bless Our Homeland Ghana]]"<br>[[Fayil:National Anthem of Ghana.ogg]]
| official_languages = [[English language|English]], [[French language|French]]
| capital = [[Yaoundé]]
| largest_city = [[Douala]]
| demonym = Ghanaian
| ethnic_groups = 45.7% Akan<br>18.5% Mole-Dagbon<br>12.8% Ewe<br>7.1% Ga-Adangbe<br>6.4% Gurma<br>3.2% Guan<br>2.7% Gurunsi<br>2.0% Mande<br>1.6% other
| government = Unitary presidential republic
| leader1 = John Dramani Mahama
| leader1_type = President
| leader2 = Jane Naana Opoku-Agyemang
| leader2_type = Vice-president
| sovereignty_type = Independence from [[United Kingdom]]
| established_event1 = [[Dominion of Ghana|Dominion]]
| established_date1 = 6 March 1957
| established_event2 = Republic
| established_date2 = 1 July 1960
}}
[[Fayil:Beach with palms Ghana.jpg|thumb]]
'''Ghana''' bakala gana bake jamhuriyar Ghana (Ga turanci Kala, Republic of Ghana), Olli ji koga Olli in Africa, Ghana ita ga fili Olli laa eetu mil murabba'i (238,540), Ghana ita adadi miyya la antun (27,043,093). Ko kididiga la angu sunin dibu buluo ga dir foddo. (2014). Ghana ita aji kodoki ga cote d'ivoire, [[Togo]] jamga Burkina Faso. Maraya un Siritu Accra. Ghana ita yattu bu Mata hankali Ku falla ilmi ga ma'adinai inga Olli, ga Africa gabadaya.
Nana Akufu-Addo isshin ji an menne jizani ga Ann buyinii Mahamudu Bawumia, ko sunin dibu buluo ga dir bawulu (2017).
==Soninshe Wena Yanci Koyi==
Ghana wattun yanci kotto ga soninshe in alif dalma bonum ga hansin ga bawulo (1957)A,C, ko woli Birtaniya.(19)(20)(21)
==Kmiyya Ga Fasaha==
ghana kaddimu goggo sadarwa in waya salula ga soninshe in alif dalma bonum ga hansin ga bawulo 1992 koga boii gontan ga sabis in matsi shirye ADSE.(22)(23)(24).
Ghana kasantu matsayi in 99. Ga koga kididddga innovation in duniya koga 2024.(25)(26)(27).
Cibiya kimiya ga fasaha in Ghana (GSSSFC) Ga hukuma kule ga sarari koyye in Ghana (GhsA) aji kulega shirye shirye sarari koyye ga (28)(29)(30) GSSFC ga ghsA mate antun ruta inko harba tauraro an Adam la aji lure ga tsaro woli zuwa sarari samaniya ga 2015.(31)(32)(33) Dodo bincike sarari samaniya Ghana in soninshe soninshe ga kasantan Kashi 1% in GDP inko tallifa bincike kimiyya ga fasaha. (34)(35)(36) Koga 2012 Zaban Ghana gako shugaba hukuma kimiyya ga fasaha inko Dom dorewa ga aushi (Comsast) Ghana Andi Hadi gwaiwa ga jizani ga hukuma kule ga sarari samaniya in afirka ko aushi.(37)(38)(39).
== Ɗiwwa ==
0p8eo1agt4bz7e7ol1l8dued1jwppas
Ja'afar Mahmud Adam
0
608
10571
8573
2026-08-25T22:55:10Z
Yakubu19
208
10571
wikitext
text/x-wiki
{{Databox|item=Q6109466}}
[[Fayil:Sheikh Ja'afar Mahmud Adam 1.jpg|thumb|Sheikh Ja'afar Mahmud Adam]]
'''Sheikh Ja'afar Mahmoud Adam''' (Fabarairu 12 1960- Afrrilu 13 2007) kasantu masani adin salafiya kala member ga jam'at izala Al Bid a wa qawamatus Sunnah in Najeriya kungiya adin lake siyasa lake ga hedkwata ga Abuja. Dowu ga Kani inko Ramadan tafsir in soninshe soninshe.(2)
==Rayuwa Ni==
Duwantun ishin ga mashidi lokaci sallah shandal gudi ga birni Kano ga tere Afrilu soninshe in dubu balau ga bawulo 2007 ra'ayiyo bissu jini ga lokaci ye gamega anin laifi ye shaf ga maddi forango na Boko Haram kungiya modi anin tsauri ra'ayi duwan sheikh Ja'afar maddi aji forayi gako mista shekarau gwamna Kano ga lokaci aji kasantu ga Alkahira inko maluwa aji modi koga su Siri anin suka ni (3)
== Ɗiwwa ==
[[Panni:Malunwa]]
pspfnxbxp1fg6y7flqep4i91fpotgbj
Musulwa
0
712
10568
5978
2026-08-25T22:41:46Z
Yakubu19
208
10568
wikitext
text/x-wiki
{{Databox|item=Q47740}}
[[Fayil:Caliphate_Nasiru_Kabara_07.jpg |thumb| Wasu musulmi tare da Caliphate Nasiru Kabara]]
[[Fayil:Muslim Leaders at Ahsan Manzil 1892.jpg|thumb|shugabannin addinin musulunci a wani taro a Manzil, 1892]]
[[Fayil:القاضي محمد اسماعيل الحجي.jpg|thumb|Kadi Shaykh Muhammad Ismail Hadji]]
[[Fayil:Ayatul Kursi by AbdurRahman Al Sudais.wav|thumb|karatun Ayatul kursiyyu bakin Shaykh Sudais]]
[[Fayil:Prayer in Cairo 1865.jpg|thumb|Musulmi]]
[[Fayil:Prayer time muslim ummah.jpg|thumb|a yayinda musulmai na sallah]]
Musulwa: memu ji la aji doffa dokoki musulunci addin kadaita Allah. Musulunci aji amfa ga lukram la Nin ko goggo [[Annabi Muhammadu|monzo Allah (SAW)]] Ga matsayin littafi laga tsarki (1)(2)(3)(4)(5)(6)(7)(8)(9)(10) Musulwa aji ga goru ga aji Dina inko Ina ibada ga hajji ga umra.
Inko aji yayi ruta hajji aji Unda ishin ga Alhaji do hajiya inko Mandu ji.
Musulwa (Larabci:المسلمون, Al-musulimu transl" anin ele Lelesu ga Allah") (11) miyya ji la'an riko ga musulunci addini tauhidi ga le gawa addini annabi Ibrahim (As).
Aji Kona lukram tushe nassi adin in islama ga matsayin kalma Allah (do Allah) a zahiri ga mana aji kala yauta ga annabi muhammdu (S A W) Siri annabi musulwa (12) godom musulwa kala aji doffa koyarwa ga ruta annabi muhammdu (S A W) Sunnah mana yadda aji rubutan ga gawa (hadisi) .13)
Jizani ga kiyasi godom miyya billion 2 mana yadda modi 1 ga janairu 2023 kiyasi soninshe musulwa kunsan mana Kashi 25% in godom Al'umma ga duniya.(14)
Koga tsari la aji yawwakoyi adadi miyya la bayinan ga matsayin musulwa ga lema nahiya mate yorasu ga 45% in Africa 25% in Asia ga Oceania ( ga dunkule) (15) 6% in turai (16) ga 1% in Amurka (17)(18)(19)(20) Bugu ga Kari koga yankuna anin rarrafe adadi aji tseye a; 91% ko dar in Dalla gudi Africa,(21)(22)(23)90% in Asiya ko Dalla 24)(25)(26) 65% in caucasu , (27)(28)(29)(30/(31)(30)(31)32) 42% ko aushi mana dar Asiya (33)(34) 32% in aushi Asiya (32)(36) ga 42% in sub Saharan Africa.(37)(38)
Shafji Andi makarantu la Raza in islama ga godom kungiyoyi balau layan Siri aji Islam sunni (75-90% in shap musulwa) (39) ga shi a Islam (10-20% in shap musulwa) (40) bisa kididdiga aushi kudanci Asiya lake ga mana mafi Siro (31%) in Al'umma musulwa I ga duniya musamman ga wolinshe kunum; Pakistan Indiya ga Bangladesh.(41)(42) Ko woli insomnia itaji mafi Siro duniya musulwa aji ga Nemga Kashi 12% in shaf musulwa duniya (43) ga beyi wolinshe musulwa India ga china aji Bono yatu Siro (11%) ga inbalau mafi Siro (2%) godom Al'umma musulwa ishinji adin mafi Siro ga duniya (47)(48)49)
== Ɗiwwa ==
4xwnkau6dcea836mya681nwqyfhephi
Nijeriya
0
735
10514
8602
2026-08-25T13:44:14Z
Yakubu19
208
10514
wikitext
text/x-wiki
{{Infobox country
| conventional_long_name = Federal Republic of Nigeria
| image_flag = Flag of Nigeria.svg
| image_coat = Coat of arms of Nigeria.svg
| image_map = Nigeria (orthographic projection).svg
| national_motto = "Unity and Faith, Peace and Progress"
| national_anthem = "[[Nigeria, We Hail Thee]]"<br>[[Fayil:Nigeria, We Hail Thee - Banda do Batalhão da Guarda Presidencial, 2025.ogg]]
| official_languages = [[Yarenshe Turanci]]
| capital = [[Abuja]]
| largest_city = [[Lagos]]
| demonym = Nigerian
| ethnic_groups = 30% Hausa<br>15.5% Yoruba<br>15.2% Igbo<br>6% Fulani<br>2.4% Tiv<br>2.4% Kanuri<br>1.8% Ibibio<br>1.8% Ijaw<br>24.7% other
| government = Federal presidential republic
| leader1 = [[Bola Ahmed Tinubu]]
| leader1_type = President
| leader2 = [[Godswill Akpabio]]
| leader2_type = Senate President
| leader3 = Kudirat Kekere-Ekun
| leader3_type = Chief Justice
| sovereignty_type = Independence from [[United Kingdom]]
}}
[[Fayil:The City Gate of Abuja.jpg|thumb|babban birnin najeriya]]
[[Fayil:20200408 Nigeria Crisis.pdf|thumb|crisis a najeriya]]
[[Fayil:Nigerian Public Domain 143.jpg|thumb|Sojan Nigeria ]]
'''Nijeriya''' (!nadzI3r1a) ko Nijeriya da (turanci: Nigeria): A Gwamanatance Tarayyar Najeriya, woli la ga take ga [[Afirka|Africa]] ko zoni<ref>The countries with the 10 largest Christian populations and the 10 largest Muslim populations". Pew Research Center. April 2019. Archived from the original on 18 January 2021. Retrieved 25 May 2020.</ref><ref>Nigeria Fact Sheet" (PDF). United States Embassy in Nigeria. Archived from the original (PDF) on 18 October 2020. Retrieved 23 September 2018.</ref><ref>Nigeria: The African giant". The Round Table. 50 (197): 55–63. 1959. doi:10.1080/00358535908452221. ISSN 0035-8533.</ref> ita ji tetteke woli niger koga Arewa. Ga [[Chadi]] koga zoni koga aushi jam aji dar ga teku Atlantika.<ref>Online Etymological Dictionary". Etymonline.com. Archived from the original on 2 July 2017. Retrieved 28 July 2014</ref><ref>Non-Aligned Movement (NAM) – The Nuclear Threat Initiative". Archived from the original on 19 October 2021. Retrieved 19 October 2021.</ref><ref>Kperogi, Farooq A. "Natasha H. Akpoti's Wildly Inaccurate History of Nigeria". Notes From Atlanta. Archived from the original on 11 August 2023. Retrieved 11 August 2023.</ref> Jamhuri gonta koyi Nigeria kunsan jahohi guda ko kunum ga bacci modi ([[36]]) jizani ga siri birni gonta koyi ([[Abuja]]) beyi la bono shugaban woli a tene "Villa" take. Abuja aji modi koga su siri birni ga [[duniya]].<ref name=":0">http://www.unep.org/news-and-stories/story/unep-ogoniland-oil-assessment-reveals-extent-environmental-contamination-and</ref><ref>https://www.greenleft.org.au/content/shell%E2%80%99s-nigeria-ecocide-creating-refugee-crisis,%20https://www.greenleft.org.au/content/shell%E2%80%99s-nigeria-ecocide-creating-refugee-crisis{{Dead link|date=January 2024 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref>https://web.archive.org/web/20141205124719/http://www.punchng.com/news/us-sends-medical-experts-to-study-how-nigeria-contained-ebola/</ref>
Najeriya' kasantanjito bono kogama lawonshe turawa mulki mallaka, jihohi la mata mallakan tund (BC) (13)(14)(15) Jizani ga Nok wayewa ko kasantan itaji in fari la turawa mulki mallaka zanlan mallikayi ga zoni Africa koga karni in dirbadi(15),(16)(17)(18) Ko zamani jihar wangoyii ga [[Birtaniya]] ga koga karni in ko (19) aji kona yanayi in honsene jizani ga ko gontasu ga aushi ga Najeriya' ga kuma kule ga gudi ga Najeriya' koga soni alif dubu modi ga dalma bonum ga dirhoddo (1914)(19)20)(21)(22) ko [[Lord Lugord]] inglishi zalu kafa tsari ni gudannarwa ga duka yayi aiwata moyinshe koyi yorani ko goggo shugabanni gargajiya. (23)(24)(25) Najeriya' majjito woli Tarayyar lake ga yanci to In kotto (1) ga tere oktoba, soninshe ko alif dubu modi ga dalma bonum ga kobaccimodi (1960)(26)(27)28) ita fuskantar Washi basasa koga soninshe in dubu modi ga dalma bonum ga kobaccimodi ga bawulo (1967) zuwa soninshe dubu modi ga dalma bonum ga kobawulo ga bawulo (1977),(29)(30)(31) jamji ga doffako boii zabasu Gwamanatance fetila tajiya mulki kama karya in soja har ko an sami tabbatacciyar Dimokuradyyar ko soninshe in alif dalma bonum ga kobonum ga bonum (1999) zabe shugaba woli ko soninshe in (2015) dubu bolau ga dibadi Ishin ji Karo in farko la shugaba woli la antinayi sorry zabeni.(32)(33)(34)
Najeriya' yattu woli godom bo godom miyya ga nahiya Africa, wali ji kala Andi miyya godom dowasu ga gawa kabilu godom mana dalma balau ga sittin (260)(32)(36)(37) maddilla aji bosa ga jir yarishe kala kala har dalma badi(500) chaffinsu aji kona ga al'adu jir daban daban, kabilu la siran jisu har guda kunum, ga afiniwa [[filanti]] ga [[arewa]], jirmin yarabawa ko xoni kala [[Igbo]] ko dar kala matela gontan ga har guda 60% godonsu miyya yaresu hukuma ji inglishi (38)(39)40) maddisu la zabasu inko wai sauki Lamar in tetteke woli tsari mulki su ga Nijeriya tabbitu jini ga yanci adin jam woli ji lake Kona miyya [[musulwa]] ga [[kirista]] ga lokaci modi. Najeriya' kasajjito kashi balau ko tsakanin musulwa ga godon ji dowasu ga arewa woli jam kirista kala(41)(42)(43) inko godonsu dowasu ga kudanci woli jizani ga la godonsa lake Ina adinsu asali mana la gawa kabilu igbo ga yarabawa(44)(45)(46)
Najeriya' itaji woli laga godom miyya ga afirka jan kala woli in bawulo bo godon miyya ga duniya (47)(48)(49) jizani ga kimani miyya miliyan dalma balau ga bacci modi (2,00,000,006). Tattali arziki Ishin mafi siro ga Africa jam Ishin ji in ko balau ga bacci modi (26)(50)(51)(52) la siru jini ga duniya ko gaggo GDP yakul soro jam Ishin in kobalau ga badi (25) yatu siro koga PPP. Najeriya' galibisu aji kiranta ga Giant ga afirka "ma ana gedau Africa inko godon miyya ga tattali arziki jam banki duniya aji kona matsayi [[Goma]] laga indakoyi dole yanki ga Africa godausu sosai sa gadu miyya woli ga woli jamji kala aji aga modi koga gasu tatteke mafi godom miyya ga duniya (53)(54)(55) lamatan woli aji woli sosae ko gasu jeri wolinshe ga duniya jamji har honsene aji modi ga wolinshe la rusanjisu ga duniya. Nijeriya memba ji ko kungiyoyi wolinshe godom laga hada ga majalisa dondu Duniya kungiya wolinshe zoni Africa ([[ECOWAS]]) Kungiya wolinshe la arziki mor fetur (OPEN) jam memba ji inso ga kullun ga gontakoyi MINT. Jam aji modi koga su wolinshe binbadi ga modi laga tashe sawwi tattali arziki wato Next Eleven"(56)(57)(58)
==Ƙirƙiro==
==Tarihi==
== Addinai ==
* [[Fayil:The Abuja National Mosque.jpg|alt=Babban Masallacin Kasa dake Abuja|thumb|Babban Masallacin Kasa dake Abuja|146x146px]]Addinin [[Musulunci]] 50%.
* [[Fayil:National Church of Nigeria in Abuja 22.jpg|alt=Babbar Mujama,ar Kasa dake Abuja|thumb|Babbar Mujama,ar Kasa dake Abuja|216x216px]]Addinin [[Kristanci]] 45%.
* Sauran kashin 5% basuda kowanne irin Addini.
==Jihohi==
#[[Abia]]
#[[Adamawa]]
#[[Anambra]]
#[[Akwa Ibom]]
#[[Bauchi]]
#[[Bayelsa]]
#[[Banue|Benue]]
#[[Borno]]
#[[Cross River]]
#[[Delta]]
#[[Enugu]]
#[[Edo]]
#[[Ebonyi]]
#[[Ekiti]]
#[[Filato]]
#[[Gombe]]
#[[Imo]]
#[[Jigawa]]
#[[Kano]]
#[[Katsina]]
#[[Kaduna]]
#[[Kebbi]]
#[[Kogi]]
#[[Kwara]]
#[[Lagos]]
#[[Neja]]
#[[Nasarawa]]
#[[Jiha Ogun|Ogun]]
#[[Osun]]
#[[Oyo (jiha)|Oyo]]
#[[Ondo]]
#[[Rivers]]
#[[Sokoto]]
#[[Taraba]]
#[[Jiha Yobe|Yobe]]
#[[Zamfara]]
==Ɗiwwa==
[[Panni:Lelo'aji]]
[[Panni:Olii]]
p7zctmcfp9sr9bvliyn5ld6l50b3zcn
Tempilet:Clarify
10
990
10881
8876
2026-08-06T13:59:44Z
commons>Sebastian Wallroth
0
+languages
10881
wikitext
text/x-wiki
<small style="display:inline-block;font-size:83%;line-height:normal"><sup>[<!--
--><bdi><em>{{#switch: {{{lang|{{int:lang}}}}}
|default = [[:en:Wikipedia:Please clarify|Please clarify]]
|ar = [[:ar:ويكيبيديا:توضيح معلومة|توضيح معلومة]]
|ca = [[:en:Wikipedia:Please clarify|clarifica, si us plau]]
|de = [[:en:Wikipedia:Please clarify|Bitte klären]]
|en = [[:en:Wikipedia:Please clarify|Please clarify]]
|es = [[:es:Wikipedia:Por favor aclarar|Por favor aclarar]]
|fa = [[:fa:ویکیپدیا:واضح بیان کنید|واضح بیان کنید]]
|fr = [[:fr:Aide:Préciser un fait|Préciser un fait]]
|fi = [[:en:Wikipedia:Please clarify|voisitko selventää]]
|hi = [[:en:Wikipedia:Please clarify|तथ्य वांछित]]
|hu = [[:en:Wikipedia:Please clarify|kérlek pontosíts]]
|id = [[:id:Wikipedia:Klarifikasi|Klarifikasi]]
|it = [[:it:Aiuto:Chiarezza|Chiarezza]]
|ja = [[:ja:Wikipedia:避けたい言葉|避けたい言葉]]
|ko = [[:en:Wikipedia:Please clarify|명확한 설명 필요]]
|mk = [[:mk:Википедија:Појасни|Појасни]]
|ml = [[:en:Wikipedia:Please clarify|വ്യക്തമാക്കുക]]
|nl = [[:en:Wikipedia:Please clarify|verklaring nodig]]
|or = [[:or:ଉଇକିପିଡ଼ିଆ:Please clarify|Please clarify]]
|pl = [[:en:Wikipedia:Please clarify|proszę o wyjaśnienie]]
|pt = [[:pt:Wikipédia:Por favor, seja claro|Por favor, seja claro]]
|pt-br = [[:pt:Wikipédia:Por favor, seja claro|necessário esclarecer]]
|ro = [[:en:Wikipedia:Please clarify|clarifica]]
|ru = [[:en:Wikipedia:Please clarify|просьба уточнить]]
|si = [[:si:විකිපීඩියා:කරුණාකර පහදන්න|කරුණාකර පහදන්න]]
|sk = [[:sk:Pomoc:Objasnenie|Objasnenie]]
|sl = [[:sl:Wikipedija:Prosimo, pojasnite|Prosimo, pojasnite]]
|sq = [[:en:Wikipedia:Please clarify|ju lutem qartesoni]]
|sr = [[:sr:Википедија:Будите јасни|Будите јасни]]
|sv = [[:en:Wikipedia:Please clarify|vänligen förtydliga]]
|tr = [[:tr:Vikipedi:İfadeleri netleştirin|İfadeleri netleştirin]]
|zh-hans = [[:zh:Wikipedia:请进行澄清|需要解释]]
|zh-hant = [[:zh:Wikipedia:请进行澄清|需要解釋]]
-->}}<!--
--></em></bdi><!--
-->{{#if: {{{reason|{{{2|}}} }}}
| {{Colon |lang={{{lang|{{int:lang}} }}} }} {{{reason|{{{2|}}} }}}
}}<!--
-->{{#if: {{{date|{{{1|}}}}}}
| – <em>{{ISOdate|{{{date|{{{1|}}} }}} }}</em>
}}<!--
-->{{#if: {{{nocat|<noinclude>1</noinclude>}}} || [[Category:Pages needing clarification]] }}<!--
-->]</sup></small><!--
--><noinclude>{{Documentation}}</noinclude>
itcl7vgqezgi43plgiog68msbqxocux
10882
8877
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Clarify]]
8876
wikitext
text/x-wiki
{{ safesubst:<noinclude/>#invoke:Unsubst||date=__DATE__ |$B=
{{Fix-span
|link=Wikipedia:Please clarify
|text=clarification needed
|title={{delink|{{{reason|{{{1|The text near this tag may need clarification or removal of jargon.}}}}}}}}
|date={{{date|}}}
|pre-text={{{pre-text|}}}
|post-text={{{post-text|}}}
|cat-date=Category:Wikipedia articles needing clarification
|content={{{text|}}}
}}
}}<noinclude>
{{documentation}}
</noinclude>
h752ul4rgcry3t3r5dhowyi87e2i871
Tempilet:Documentation subpage
10
992
10845
2024-10-21T13:35:12Z
commons>Matrix
0
Restored revision 591762713 by [[Special:Contributions/ExE Boss|ExE Boss]] ([[User talk:ExE Boss|talk]])
10845
wikitext
text/x-wiki
<includeonly><!--
-->{{#ifeq:{{SUBPAGENAME}}|{{#ifeq:{{{1|}}}|override|{{SUBPAGENAME}}|doc}}|</includeonly><!-- show on doc pages only
-->{{#invoke:Autotranslate | autotranslate
|base = Documentation subpage
|lang = {{{lang|}}}
|page = {{#if:{{{page|}}}|{{{page|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}
}}<!--
--><includeonly>{{{category|[[Category:{{#switch:{{SUBJECTSPACE}}
| Template = Template
| Module = Module
| User = User
| #default = Template
}} documentation|{{PAGENAME}}]]__EXPECTED_UNCONNECTED_PAGE__}}}</includeonly><!--
--><includeonly>}}</includeonly><!-- show on doc pages only
--><noinclude>{{documentation}}</noinclude>
e1m6vc2tdw71dgnw3k58bhv9fdxxadi
10846
8889
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Documentation_subpage]]
8888
wikitext
text/x-wiki
<includeonly><!--
-->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}}
| <!--(this template has been transcluded on a /doc or /{{{override}}} page)-->
</includeonly><!--
-->{{#ifeq:{{{doc-notice|show}}} |show
| {{Mbox
| type = notice
| style = margin-bottom:1.0em;
| image = [[File:Edit-copy green.svg|40px|alt=icon]]
| text =
{{strong|This is a [[Wikipedia:Template documentation|documentation subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}<br />It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}.
}}
}}<!--
-->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!--
--><includeonly>__EXPECTED_UNCONNECTED_PAGE__</includeonly><!--
-->{{#if:{{{nocat|}}}{{{inhibit|}}}|<!--(don't categorize)-->
|<includeonly><!--
-->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}}
| [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]]
| [[Category:Documentation subpages without corresponding pages]]
}}<!--
--></includeonly>
}}<!--
(completing initial #ifeq: at start of template:)
--><includeonly>
| <!--(this template has not been transcluded on a /doc or /{{{override}}} page)-->
}}<!--
--></includeonly><noinclude>{{Documentation}}</noinclude>
iwz7dreef73y68fx96yxyj3ry6l1x58
Tempilet:Tag
10
1013
10837
2024-08-28T08:29:00Z
commons>CptViraj
0
Protected "[[Template:Tag]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10837
wikitext
text/x-wiki
{{#if:{{{plain|}}}|
|<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}">
}}{{#switch:{{{2|pair}}}
|c|close = <!--nothing-->
|s|single
|o|open
|p|pair = {{#tag:span|‎<|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}| {{{params}}}}}
}}{{#switch:{{{2|pair}}}
|c|close = {{{content|}}}
|s|single =  {{#tag:span|/>|class="p"}}
|o|open = {{#tag:span|>|class="p"}}{{{content|}}}
|p|pair = {{#tag:span|>|class="p"}}{{{content|...}}}
}}{{#switch:{{{2|pair}}}
|s|single
|o|open = <!--nothing-->
|c|close
|p|pair = {{#tag:span|‎</|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|>|class="p"}}
}}{{#if:{{{plain|}}}|
|</code>
}}<noinclude>
{{Documentation}}
</noinclude>
fxkoeaewp3sxkblsyvrui5bt7264kv5
10838
8943
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Tag]]
8942
wikitext
text/x-wiki
<code class="{{#ifeq:{{{wrap|}}}|yes|wrap|nowrap}}" style="{{#ifeq:{{{style|}}}|plain|border:none;background:transparent;color:inherit;|{{{style|}}}}}"><!--
Opening tag
-->{{#switch:{{{2|pair}}}
|c|close =
|e|empty|s|single|v|void
|o|open
|p|pair = <{{#if:{{{link|}}}|[[HTML element#{{{1|tag}}}|{{{1|tag}}}]]|{{{1|tag}}}}}{{#if:{{{params|{{{attribs|}}}}}}| {{{params|{{{attribs}}}}}}}}
}}<!--
Content between tags
-->{{#switch:{{{2|pair}}}
|c|close = {{{content|}}}
|e|empty|s|single|v|void =  />
|o|open = >{{{content|}}}
|p|pair = {{#ifeq:{{{1|tag}}}|!--||>}}{{{content|...}}}
}}<!--
Closing tag
-->{{#switch:{{{2|pair}}}
|e|empty|s|single|v|void
|o|open =
|c|close
|p|pair = {{#ifeq:{{{1|tag}}}|!--|-->|</{{{1|tag}}}>}}
}}<!--
--></code><noinclude>
{{Documentation}}
</noinclude>
raaklsk7m011yysk3yxm5h60oevl896
Tempilet:Em
10
1050
10903
2018-08-25T23:36:34Z
commons>Nøkkenbuer
0
no clue why it inserted that; I guess I misclicked?
10903
wikitext
text/x-wiki
<em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
g9i6h00ap35wxdar0fg1tibei9ktn9g
10904
9052
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Em]]
9051
wikitext
text/x-wiki
<em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
qihth5vbfna026aqh87kteifb1nb5ot
Tempilet:C
10
1066
10719
2023-09-13T16:15:25Z
commons>Verdy p
0
10719
wikitext
text/x-wiki
{{#switch: G
|{{{2|}}}|{{{3|}}}|{{{4|}}} = [[Category:{{PAGENAME:{{{1}}}}}{{#if:{{{2|}}}
| {{!}}{{{2|}}}
}}]]<!-- Category generation -->
|#default = {{#switch: -
|{{{2|}}}|{{{3|}}}|{{{4|}}} = {{#switch: +
|{{{2|}}}|{{{3|}}}|{{{4|}}} =
|#default = Category:
}}
}}<!--
-->{{#switch: {{{link|}}}
|n|none = {{{2|{{{1|}}}}}}
|#default = {{#switch:{{{3|}}}
||-|+ = <!-- standard: Commons -->{{#ifexist: Category:{{PAGENAME:{{{1|}}}}}
| [[:Category:{{PAGENAME:{{{1|}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]<!-- ex -->
| [[:Category:{{{1|}}}|<em>{{C/display|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}</em>]]<!-- nx -->
}}
|B = [[:Category:{{PAGENAME:{{{1|}}}}}|[[{{C/display|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]]]<!-- only standard: [[commons]] -->
|X|x = {{#ifexist: Category:{{PAGENAME:{{{1}}}}}
| [[:Category:{{PAGENAME:{{{1}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]<!-- ex -->
| {{#ifexpr: {{PAGESINCATEGORY:{{PAGENAME:{{{1|}}}}}}} > 0
| <span style="background:#CF9">[[:Category:{{PAGENAME:{{{1|}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]</span><!-- nx+ -->
| {{#ifeq: {{{3|}}} | X
| <span style="background:#FCC">{{C/display|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}</span><!-- nx- italic -->
| [[''Category'':<span style="color:red">{{C/display|{{{1|}}}|{{{2|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}</span>]]
}}
}}
}}
|#default = <!-- not Commons: take it as it is -->[[:{{#if:{{{3|}}}
| {{{3|}}}:
}}Category:{{PAGENAME:{{{1|}}}}}|{{C/display|{{PAGENAME:{{{1|}}}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|l={{{lang|}}}|v={{{link|}}}|c={{{case|}}}}}]]
}}
}}
}}<noinclude>{{Documentation}}</noinclude>
j9ok4l05pnqllrpp8oqe4zjf8nlnkm7
10720
9098
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:C]]
9097
wikitext
text/x-wiki
#REDIRECT [[Template:Category link without namespace]]
{{Redirect category shell|
{{R from move}}
}}
3qa60t6mwxjkjff4k91jtkyn2wfm6h0
Tempilet:Str len
10
1071
10743
9107
2021-07-10T16:48:39Z
commons>CptViraj
0
Protected "[[Template:Str len]]": [[Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10743
wikitext
text/x-wiki
{{{{{|safesubst:}}}#invoke:String|len|s={{{1|}}}}}<noinclude>
{{documentation}}
<!-- Add categories and interwikis to the /doc subpage, not here! -->
</noinclude>
b1x8qcqpdocnua2ihkd8pr5jd1jn7xn
10744
9108
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Str_len]]
9107
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:String|len|s={{{1|}}}}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, not here! -->
</noinclude>
2n0p928wu8hdh499dl0eaxtmt6t1tr4
Tempilet:T
10
1116
10779
2019-06-05T01:10:43Z
commons>4nn1l2
0
Fulfilling [[Template:Edit request|edit request]] by [[User:Sarang|Sarang]].
10779
wikitext
text/x-wiki
<noinclude>{{protected template}}
</noinclude>{{T/main|{{{1|}}}
|{{{2|}}}
|{{{3|{{{lang|}}}}}}
|{{{4|}}}
|{{{5|}}}
|incl={{{incl|{{{i|2}}}}}}
|code={{{code|}}}
|link={{{link|}}}
|case={{{case|}}}
|i18n={{{i18n|}}}
|parm={{{parm|}}}
|full={{{full|}}}
}}<noinclude>
{{documentation}}
</noinclude>
5vvg1pfppzsn3fa39d9b7s0zzq27fs6
10780
9242
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:T]]
9241
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Rcat shell|
{{R from template shortcut}}
}}
<!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta -->
lundwspklp4q9oao3icq7qp0luocglh
Tempilet:Tlf
10
1120
10815
2019-07-16T10:39:32Z
commons>4nn1l2
0
Changed protection level for "[[Template:Tlf]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite))
10815
wikitext
text/x-wiki
<span style="white-space:nowrap;">{{{{#if:{{{1|}}}|{{{1}}}| tlf|...}}<!--
-->{{#ifeq:{{{2|x}}}|{{{2|}}}| |{{{2}}} | }}<!--
-->{{#ifeq:{{{3|x}}}|{{{3|}}}| |{{{3}}} | }}<!--
-->{{#ifeq:{{{4|x}}}|{{{4|}}}| |{{{4}}} | }}<!--
-->{{#ifeq:{{{5|x}}}|{{{5|}}}| |{{{5}}} | }}<!--
-->{{#ifeq:{{{6|x}}}|{{{6|}}}| |{{{6}}} | }}<!--
-->{{#ifeq:{{{7|x}}}|{{{7|}}}| |{{{7}}} | }}<!--
-->{{#ifeq:{{{8|x}}}|{{{8|}}}| |{{{8}}} | }}<!--
-->{{#ifeq:{{{9|x}}}|{{{9|}}}| |{{{9}}} | }}<!--
-->}}</span><noinclude>
{{documentation}}
</noinclude>
szs1st0u3mutwf74am5cr29gflw966p
10816
9250
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Tlf]]
9249
wikitext
text/x-wiki
#REDIRECT [[Template:Template link with link off]]
{{Redirect category shell|
{{R from move}}
}}
9mrb4gzoa8i94zzxq5i6opzke6v5ntr
Tempilet:((
10
1169
10939
9370
2023-06-06T10:00:55Z
commons>Yann
0
Protected "[[Template:((]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
10939
wikitext
text/x-wiki
<onlyinclude>{{</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
5eke7czrsw8gv7w6x0znyysuomyjxqa
10940
9371
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:((]]
9370
wikitext
text/x-wiki
{{<noinclude>
{{documentation}}
</noinclude>
7ddca00qmssfls0dctzbj32xy1q28ir
Tempilet:))
10
1170
10941
9372
2024-08-08T11:41:01Z
commons>Achim55
0
[[Commons:Rollback|Reverted]] edits by [[Special:Contributions/2401:D800:58A9:737B:9154:F769:4542:1D00|2401:D800:58A9:737B:9154:F769:4542:1D00]] ([[User talk:2401:D800:58A9:737B:9154:F769:4542:1D00|talk]]) to last revision by Yann
10941
wikitext
text/x-wiki
<onlyinclude>}}</onlyinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! -->
j5ttkv5phbu7ga8ivmvaxwdhbs5ebka
10942
9373
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:))]]
9372
wikitext
text/x-wiki
}}<noinclude>
{{documentation}}
</noinclude>
fmm8htexq13hwrjrvzcsiy59gv65l36
Tempilet:-
10
1198
10717
9428
2022-11-30T16:13:24Z
commons>JoKalliauer
0
fullfilling edit-request on talkpage
10717
wikitext
text/x-wiki
#REDIRECT[[Template:Clear]] {{template redirect|protected}}<noinclude>[[Category:One-character templates| ]]</noinclude>
aqsc7avciythw41rlvapzcu9tqs70zo
10718
9429
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:-]]
9428
wikitext
text/x-wiki
#REDIRECT [[Template:Clear]]
{{Redirect category shell|
{{R from modification}}
{{R from template shortcut}}
}}
7ftw22ju220o4mhfryrhdhdanb4vzun
Module:TNT
828
1213
10849
9458
2025-12-27T18:06:02Z
commons>ExE Boss
0
Update from [[d:Special:GoToLinkedPage/mediawikiwiki/Q28132212|master]] using [[mw:Synchronizer| #Synchronizer]]
10849
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local config = (function()
local ok, res = pcall(mw.loadData, "Module:TNT/config");
return ok and res or {};
end)();
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
params[k - 2] = mw.text.trim(v)
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
local implGetTemplateData;
function p.doc(frame)
local dataset = sanitizeDataset(frame.args[1])
local json, dataPage, categories = implGetTemplateData(nil, dataset, frame.args)
return frame:extensionTag('templatedata', json) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataPage)}) ..
(categories or "");
end
function p.getTemplateData(dataset)
local data = implGetTemplateData(true, dataset);
return data;
end
function p.getTemplateDataNew(...)
return implGetTemplateData(nil, ...);
end
function implGetTemplateData(legacy, dataset, args)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data, dataPage, categories = loadData(
dataset, nil, not legacy and 'TemplateData' or nil);
local names = {}
for _, field in ipairs(data.schema.fields) do
table.insert(names, field.name)
end
local numOnly = true
local params = {}
local paramOrder = {}
for _, row in ipairs(data.data) do
local newVal = {}
local name = nil
for pos, columnName in ipairs(names) do
if columnName == 'name' then
name = row[pos]
else
newVal[columnName] = row[pos]
end
end
if name then
if (
(type(name) ~= "number")
and (
(type(name) ~= "string")
or not string.match(name, "^%d+$")
)
) then
numOnly = false
end
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
if numOnly then
params['zzz123']=''
end
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description,
-- TODO: Store this in a dataset:
format = (args and args.format or nil),
})
if numOnly then
json = string.gsub(json,'"zzz123":"",?', "")
end
return json, dataPage, categories;
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang, dataType)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error(string.format([['''Missing JsonConfig extension, or not properly configured;
Cannot load https://commons.wikimedia.org/wiki/Data:%s.
See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset))
end
local dataPage = dataset;
local data, categories;
if dataType == 'TemplateData' then
dataPage = 'TemplateData/' .. dataset;
data = mw.ext.data.get(dataPage, lang);
if data == false then
data = mw.ext.data.get('Templatedata/' .. dataset, lang);
if data ~= false then
local legacyTemplateDataCategoryName = config.legacyTemplateDataCategoryName;
if legacyTemplateDataCategoryName ~= false then
categories = string.format(
'[[Category:%s%s]]',
legacyTemplateDataCategoryName or "Templates using legacy global TemplateData table name",
config.translatableCategoryLink and mw.getCurrentFrame():callParserFunction("#translation:") or ""
);
end
dataPage = 'Templatedata/' .. dataset;
end
end
else
data = mw.ext.data.get(dataset, lang)
end
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataPage)}))
end
end
return data, dataPage, categories;
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
2ii65lh3z6ssbx7s7r8h0vsbnbhbiyl
10850
9459
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:TNT]]
9458
Scribunto
text/plain
--
-- INTRO: (!!! DO NOT RENAME THIS PAGE !!!)
-- This module allows any template or module to be copy/pasted between
-- wikis without any translation changes. All translation text is stored
-- in the global Data:*.tab pages on Commons, and used everywhere.
--
-- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
-- Please do NOT rename this module - it has to be identical on all wikis.
-- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
-- Please do not modify it anywhere else, as it may get copied and override your changes.
-- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
-- The "msg" function uses a Commons dataset to translate a message
-- with a given key (e.g. source-table), plus optional arguments
-- to the wiki markup in the current content language.
-- Use lang=xx to set language. Example:
--
-- {{#invoke:TNT | msg
-- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
-- | source-table <!-- uses a translation message with id = "source-table" -->
-- | param1 }} <!-- optional parameter -->
--
--
-- The "doc" function will generate the <templatedata> parameter documentation for templates.
-- This way all template parameters can be stored and localized in a single Commons dataset.
-- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
-- {{#invoke:TNT | doc | Graph:Lines }}
-- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
-- if the current page is Template:Graph:Lines/doc
--
local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'
-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage
function p.msg(frame)
local dataset, id
local params = {}
local lang = nil
for k, v in pairs(frame.args) do
if k == 1 then
dataset = mw.text.trim(v)
elseif k == 2 then
id = mw.text.trim(v)
elseif type(k) == 'number' then
table.insert(params, mw.text.trim(v))
elseif k == 'lang' and v ~= '_' then
lang = mw.text.trim(v)
end
end
return formatMessage(dataset, id, params, lang)
end
-- Identical to p.msg() above, but used from other lua modules
-- Parameters: name of dataset, message key, optional arguments
-- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('format', 1, dataset, 'string')
checkType('format', 2, key, 'string')
return formatMessage(dataset, key, {...})
end
-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters: language code, name of dataset, message key, optional arguments
-- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
local checkType = require('libraryUtil').checkType
checkType('formatInLanguage', 1, lang, 'string')
checkType('formatInLanguage', 2, dataset, 'string')
checkType('formatInLanguage', 3, key, 'string')
return formatMessage(dataset, key, {...}, lang)
end
-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
return link(frame.args[1])
end
function p.doc(frame)
local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end
function p.getTemplateData(dataset)
-- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
local data = loadData(dataset)
local names = {}
for _, field in pairs(data.schema.fields) do
table.insert(names, field.name)
end
local params = {}
local paramOrder = {}
for _, row in pairs(data.data) do
local newVal = {}
local name = nil
for pos, val in pairs(row) do
local columnName = names[pos]
if columnName == 'name' then
name = val
else
newVal[columnName] = val
end
end
if name then
params[name] = newVal
table.insert(paramOrder, name)
end
end
-- Work around json encoding treating {"1":{...}} as an [{...}]
params['zzz123']=''
local json = mw.text.jsonEncode({
params=params,
paramOrder=paramOrder,
description=data.description
})
json = string.gsub(json,'"zzz123":"",?', "")
return json
end
-- Local functions
sanitizeDataset = function(dataset)
if not dataset then
return nil
end
dataset = mw.text.trim(dataset)
if dataset == '' then
return nil
elseif string.sub(dataset,-4) ~= '.tab' then
return dataset .. '.tab'
else
return dataset
end
end
loadData = function(dataset, lang)
dataset = sanitizeDataset(dataset)
if not dataset then
error(formatMessage(i18nDataset, 'error_no_dataset', {}))
end
-- Give helpful error to thirdparties who try and copy this module.
if not mw.ext or not mw.ext.data or not mw.ext.data.get then
error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset)
end
local data = mw.ext.data.get(dataset, lang)
if data == false then
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Missing Commons dataset ' .. i18nDataset)
else
error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
end
end
return data
end
-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
return 'c:Data:' .. mw.text.trim(dataset or '')
end
formatMessage = function(dataset, key, params, lang)
for _, row in pairs(loadData(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
local result = mw.message.newRawMessage(msg, unpack(params or {}))
return result:plain()
end
end
if dataset == i18nDataset then
-- Prevent cyclical calls
error('Invalid message key "' .. key .. '"')
else
error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
end
end
return p
icfixo3zxiew6gqg3s5h19xr03x3wkh
Tempilet:Label
10
1250
10685
9938
2021-02-11T13:54:18Z
commons>Romaine
0
[[Commons:Rollback|Reverted]] edits by [[Special:Contributions/Romaine|Romaine]] ([[User talk:Romaine|talk]]) to last revision by Verdy p
10685
wikitext
text/x-wiki
{{#if:{{{item|{{{1|}}}}}}|{{#invoke:Wikidata label|getLabel|item={{{item|{{{1|}}}}}}|lang={{{lang|{{{2|}}}}}}|link={{{link|wikipedia}}}|capitalization={{{capitalization|none}}}}}}}<noinclude>{{Documentation}}</noinclude>
nj6f7qeu9psqpbajlvwspm7rdszhqy1
10686
9943
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Label]]
9941
wikitext
text/x-wiki
{{#if:{{{item|{{{1|}}} }}}|
{{#invoke:Wikidata label|getLabel
|item={{{item|{{{1|}}} }}}
|lang={{{lang|{{{2|}}} }}}
|link={{{link|-}}}
|capitalization={{{capitalization|none}}}
|show_id={{{show_id|}}}
}}
}}<noinclude>
{{documentation}}</noinclude>
3n5b146mlbpr2piyuavzxrctzu75y5c
Module:Wikidata label
828
1251
10649
9947
2024-12-02T17:24:15Z
commons>Jarekt
0
add support for "mul" language meaning "default for all languages"
10649
Scribunto
text/plain
--[[
__ __ _ _ __ ___ _ _ _ _ _ _ _
| \/ | ___ __| |_ _| | ___ \ \ / (_) | _(_) __| | __ _| |_ __ _ | | __ _| |__ ___| |
| |\/| |/ _ \ / _` | | | | |/ _ (_) \ /\ / /| | |/ / |/ _` |/ _` | __/ _` | | |/ _` | '_ \ / _ \ |
| | | | (_) | (_| | |_| | | __/_ \ V V / | | <| | (_| | (_| | || (_| | | | (_| | |_) | __/ |
|_| |_|\___/ \__,_|\__,_|_|\___(_) \_/\_/ |_|_|\_\_|\__,_|\__,_|\__\__,_| |_|\__,_|_.__/ \___|_|
This module is intended to be the engine behind "Template:Label".
This module was copied from Commons please ask for changes there.
Please do not modify this code without applying the changes first at "Module:Wikidata label/sandbox" and testing
at "Module:Wikidata label/testcases".
Authors and maintainers:
* User:Jarekt - original version
]]
require('strict') -- used for debugging purposes as it detects cases of unintended global variables
--=============================================
--=== Internal functions ======================
--=============================================
---------------------------------------------------------------------------
-- Normalize input arguments by converting them all to lower case and
-- replacing space with "_" in the argument name. Also empty strings are
-- converted to nils. Arguments are collected from arguments passed to the
-- module and if missing from the template that calls the module
local function getArgs(frame)
local function normalize_input_args(input_args, output_args)
for name, value in pairs( input_args ) do
value = mw.text.trim(value) -- trim whitespaces from the beggining and the end of the string
if value ~= '' then -- nuke empty strings
if type(name)=='string' then
name = string.gsub( string.lower(name), ' ', '_')
end
output_args[name] = value
end
end
return output_args
end
local args = {}
args = normalize_input_args(frame:getParent().args, args)
args = normalize_input_args(frame.args, args)
return args
end
---------------------------------------------------------------------------
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to Module:Yesno but does not assume val is a string
local function yesno(val, default)
if type(val) == 'boolean' then
return val
elseif type(val) == 'number' then
if val == 1 then
return true
elseif val == 0 then
return false
end
elseif type(val) == 'string' then
val = mw.ustring.lower(val) -- put in lower case
if val == 'no' or val == 'n' or val == 'false' or val == '0' then
return false
elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then
return true
end
end
return default
end
-------------------------------------------------------------------------
-- get message in a given language
-- INPUTS:
-- * msg - name of a message. For it to work [[MediaWiki:msg]] page need to be set up
-- * lang - translate message to language "lang"
-- * default - string to return in case this module is moved to a project where this message is not set
-- OUTPUT:
-- * translated message
local function getMessage(msg, lang, default)
msg = mw.message.new(msg):inLanguage(lang):plain()
return (msg == nil and default) or msg
end
---------------------------------------------------------------------------
-- use different sitelink call depending if you already have an entity or not
-- INPUTS:
-- * item and entity - entity id and entity: if full entity already uploded than use that
-- otherwise use entity id to look up sitelink
-- * lang - language of the project
-- OUTPUT:
-- * sitelink
local function getSitelink(item, entity, lang)
if entity and entity.getSitelink then -- if we have entity then use it
return entity:getSitelink(lang .. 'wiki')
else -- if no entity then use different function
return mw.wikibase.getSitelink(item, lang .. 'wiki')
end
end
---------------------------------------------------------------------------
-- use different sitelink call depending if you already have an entity or not
-- INPUTS:
-- * item and entity - entity id and entity: if full entity already uploded than use that
-- otherwise use entity id to look up sitelink
-- * prop - property for which to return the best statment
-- OUTPUT:
-- * value of the best statment (only from the first one)
local function getBestStatementsValue(item, entity, prop)
local statments
if entity then
statments = entity:getBestStatements(prop)
else
statments = mw.wikibase.getBestStatements(item, prop)
end
for _, statment in ipairs(statments) do
if statment and statment.mainsnak.datavalue.value then
return statment.mainsnak.datavalue.value
end
end
end
---------------------------------------------------------------------------
-- change capitalization of the label
-- INPUTS:
-- * label - label string
-- * capitalization - capitalization to be applied: allowed values are "tc", "lc",
-- "uc", "lcfirst", and "ucfirst". Any other value will return original string
-- * lang - language of the label
-- OUTPUT:
-- * value of the best statment (only from the first one)
local function apply_capitalization(label, capitalization, lang)
capitalization = string.lower(capitalization or 'none')
if capitalization == 'none' then
return label
elseif capitalization == 'uc' then
return mw.language.new(lang):uc(label)
elseif capitalization == 'lc' then
return mw.language.new(lang):lc(label)
elseif capitalization == 'tc' then -- title case
local new_label = {}
for _, word in ipairs(mw.text.split(label, ' ')) do
table.insert(new_label, mw.language.new(lang):ucfirst(word))
end
return table.concat(new_label, ' ')
elseif capitalization == 'ucfirst' then
return mw.language.new(lang):ucfirst(label)
elseif capitalization == 'lcfirst' then
return mw.language.new(lang):lcfirst(label)
end
return label
end
--[[-------------------------------------------------------------------------
get link based on user preference
INPUTS:
* link_type - can be :
* "wikidata" - link to wikidata
* "wikipedia" - link to wikipedia (language dependent)
* "wikidata talk" - link to wikidata talk page
* "commons" - link to commons (try sitelink then commons category then commons gallery)
* "commonscat" - link to commons (try commons category then commons gallery)
* "-" - means no link
* item - entity ID (always provided)
* entity - whole entity. It can be nil if whole entity is not loaded
* langList - language fallback list for preferred language (required)
OUTPUT:
* link - link to the wikimedia page
]]
local function getLink(link_type, item, entity, langList)
local link, eLink
link_type = mw.ustring.lower(link_type or '')
local item_type = mw.ustring.sub(item, 1, 1) -- first letter prefix of item entity ID: 'Q', 'P' or 'M'
if item_type == 'M' then
eLink='c:Special:EntityPage/'..item
elseif item_type == 'Q' then
eLink='d:'..item -- wikibase entity page link
elseif item_type == 'P' then
eLink='d:Property:'..item -- wikibase entity page link
else
eLink='d:Special:EntityPage/'..item
end
if link_type == '-' then -- allow different link formats
link = '' -- no link
elseif link_type == 'wikidata' or item_type == 'M' then
link = eLink -- link to wikibase entity page
elseif link_type == 'wikidata talk' and item_type == 'P' then
link = 'd:Property talk:'.. item -- link to wikidata property talk page
elseif link_type == 'wikidata talk' then
link = 'd:Talk:'..item -- link to wikidata talk page
elseif link_type == 'commons' or link_type == 'commonscat' then
--[[
When link_type == 'commons' we try the following links (in specified order):
1) commons sitelink
2) P373 "Commons Category" claims
3) P935 "Commons Gallery" claims
Since most items have a commons sitelink we never have to look for claims
When link_type == 'commonscat' we try to maximize chances of commons link being a category, so we
try the following links (in specified order):
1) commons sitelink, which is kept if it points to a category
2) P373 "Commons Category" claims
3) commons sitelink (which does not point to a category)
4) P935 "Commons Gallery" claims
Since most pages have a commons sitelink we never have to look for claims
]]
local sLink = getSitelink(item, entity, 'commons') -- look for sitelink to commons
if sLink then
sLink = 'c:'..sLink
if (link_type == 'commons') or (link_type == 'commonscat' and mw.ustring.find(sLink, 'Category:')) then
link = sLink
end
end
if not link then -- try linking to P373 "Commons Category"
local cat = getBestStatementsValue(item, entity, 'P373')
link = (cat ~= nil and 'c:Category:' .. cat) or nil
end
link = link or sLink
if not link then -- try linking to P935 "Commons Gallery"
link = getBestStatementsValue(item, entity, 'P935')
end
end
if not link then -- apply default "Wikipedia" link type
for _, language in ipairs(langList) do
local sitelink = getSitelink(item, entity, language)
if sitelink then
link = 'w:'.. language ..':'.. sitelink
break
end
end
end
return link or eLink -- no wiki sitelink, so link to wikidata
end
--=============================================
--=== External functions ======================
--=============================================
local p = {}
--======================================================================
--=== API functions for use from other Scribunto modules ===============
--======================================================================
--[[
_getLabel
This function returns a label translated to desired language, created based on wikidata
Inputs:
1: item - wikidata's item's q-id or entity class
2: lang - desired language of the label
3: link_type - link style. Possible values (case-insensitive): "wikipedia", "wikidata", "Commons", or "-" (no link)
4: capitalization - can be "uc" (upper case), "lc" (lower case), "ucfirst" (upper case for the first letter),
"lcfirst" (lower case for the first letter), or 'none' (default)
Error Handling:
Bad q-id will result in displayed error
]]
function p._getLabel(item, lang, link_type, capitalization, show_id)
local entity, s, link, label, language, desc
-- clean up the input parameters
if type(item) ~= 'string' then -- "item" is not a q-id
entity = item -- "item" must be the entity
item = entity.id -- look-up q-id
elseif tonumber(item) then -- if it is just the number then add "Q" in front
item = 'Q'..item
end
item = mw.ustring.gsub(mw.ustring.upper(item), 'PROPERTY:P', 'P') -- make all the properties the same and capitalize
if link_type == 'no' then
link_type = '-'
end
if not lang then
label, lang = mw.wikibase.getLabelWithLang(item)
end
if not lang then -- if still no language
lang = mw.getCurrentFrame():callParserFunction("int","lang") -- get user's chosen language
label = nil
end
-- build language fallback list
lang = mw.ustring.lower(lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList, 1, lang)
table.insert(langList, 'mul') -- add "default for all languages"
-- get label (visible part of the link)
if not label then
for _, language in ipairs(langList) do -- loop over language fallback list looking for label in the specific language
if entity then
label = entity:getLabel(language)
else
label = mw.wikibase.getLabelByLang(item, language)
end
if label then break end -- label found and we are done
end
end
if label then -- wikitext-escape the label if we have one
label = mw.text.nowiki(label)
end
if not label then -- no labels found, so just show the q-id
label = item
elseif show_id then -- add id
show_id = yesno(show_id,false)
if show_id then
local wordsep = getMessage('Word-separator', lang, ' ')
local id = mw.message.new('parentheses', item):inLanguage(lang):plain()
id = (id~=nil and id) or ('('..item..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set
label = label .. wordsep .. "<small>" .. id .. "</small>"
end
end
label = apply_capitalization(label, capitalization, lang)
-- look for description
if entity and entity.descriptions and lang then
for _, language in ipairs(langList) do
if entity.descriptions[language] then
desc = entity.descriptions[language].value
break
end
end
else
desc = mw.wikibase.getDescription(item)
end
if desc and link_type ~= '-' then -- wikitext-escape the description if we have one
desc = mw.text.nowiki(desc) -- add description as hover text
label = '<span title="' .. desc .. '">' .. label .. '</span>'
end
-- return the results
if link_type == '-' then
return label -- return just the label
else
link = getLink(link_type, item, entity, langList)
return '[[' .. link .. '|' .. label .. ']]' -- return link
end
end
--[[-------------------------------------------------------------------------------
_sitelinks
This function returns a table of sitelinks for a single project organized by language
Inputs:
1: item - wikidata's item's q-id or entity class
2: project - (case-insensitive) one of: "wikipedia", "wikisource", "wikiquote", "wikibooks", "wikinews",
"wikiversity", "wikivoyage", "wiktionary", "commons", "mediawiki", "wikispecies", "wikidata", etc.
Output:
Table of sitelinks with language fields
Output:
Table of sitelinks with language fields
See also
* [https://foundation.wikimedia.org/wiki/Special:SiteMatrix] for the full list of supported interwikis.
* [https://dumps.wikimedia.org/backup-index.html] for the full list of sitecodes (used in database dumps).
]]
function p._sitelinks(item, project)
local entity, sitelink
-- get entity
if type(item) == 'string' then -- "item" is a q-id
entity = mw.wikibase.getEntity(item)
else
entity = item -- "item" is the entity
end
-- convert from english project name to proproject code
local projLUT = {
wikipedia = 'wiki', commons = 'commonswiki',
foundation = 'foundationwiki', mediawiki = 'mediawikiwiki',
wikispecies = 'specieswiki', wikidata = 'wikidatawiki',
incubator = 'incubatorwiki', oldwikisource = 'sourceswiki',
}
local langLUT = {
-- These are not language codes before the 'wiki' or 'wikiversity' suffix in a sitecode:
foundation = '~', commons = '~', -- they will be skipped
incubator = '~', meta = '~',
mediawiki = '~', sources = '~',
species = '~', beta = '~',
-- Legacy language codes used in sitecodes, remapped to standard Wikimedia language codes:
-- See https://meta.wikimedia.org/wiki/Special_language_codes for details
als = 'gsw', bat_smg = 'sgs',
fiu_vro = 'vro', be_x_old = 'be-tarask',
roa_rup = 'rup', zh_classical = 'lzh',
zh_yue = 'yue', zh_min_nan = 'nan',
zh_wuu = 'wuu', no = 'nb',
}
project = project:lower()
project = projLUT[project] or project -- correct the project name
local n = project:len()
local linkTable = {}
if entity and entity.sitelinks then -- See if entity exists, and that it has sitelinks
for _, sitelink in pairs(entity.sitelinks) do -- loop over all sitelinks
local site = sitelink.site
local m = site:len() - n
local proj = site:sub(m +1) -- project part of the siteID
if proj == project then -- proj matches desired "project"
local lang = site:sub(1, m) -- language part of the siteID
lang = langLUT[lang] or lang:gsub('_','-')
if lang ~= '~' then -- proj matches desired "project"
linkTable[lang] = sitelink.title
end
end
end
end
return linkTable
end
--[[----------------------------------------------------------------
_aliases
This function returns a table of aliases for a single language
Inputs:
1: item - wikidata's item's q-id or entity class
2: lang - language code, like 'en' or 'de'
Output:
Table of aliases with language fields
]]
function p._aliases(item, lang)
local entity
if type(item) == 'string' then -- "item" is a q-id
entity = mw.wikibase.getEntity(item)
else
entity = item -- "item" is the entity
end
local aliasTable = {}
if entity and entity.aliases then -- See if there is an entity and that is has aliases
if entity.aliases[lang] then -- See if it has English Aliases
for _, alias in pairs(entity.aliases[lang]) do -- Make a loop around the English aliases
table.insert(aliasTable, alias.value) -- Create a table of English aliases
end
end
end
return aliasTable
end
--======================================================================
--=== Invoke functions for use from wikitext, e.g., templates ==========
---=====================================================================
--[[
getLabel
This function returns a label translated to desired language, created based on wikidata
Usage:
{{#invoke:Wikidata label|getLabel|item=Q...|lang=..|link_style=..|capitalization=..}}
Parameters
1: wikidata's item's q-id (required)
2: language (optional; default {{int:lang}})
3: link_style: "wikipedia" (default), "Wikidata", "Commons", or "-" (no link)
4: capitalization - can be "uc", "lc", "tc", "ucfirst", "lcfirst"
Error Handling:
Bad q-id will result in displayed error
]]
function p.getLabel(frame)
local args = getArgs(frame)
return p._getLabel(args.item, args.lang, args.link, args.capitalization, args.show_id)
end
--[[-------------------------------------------------------------------------------
sitelinks
This function returns a comma separated list of sitelinks for a single project organized by language
Its main purpose is to help with testing of _sitelinks function.
Usage:
{{#invoke:Wikidata label|sitelinks|item=Q...|project=..}}
Inputs:
1: item - wikidata's item's q-id or entity class
2: project - "wikipedia" (or "wiki"), "wikisource", "wikiquote", "wikibooks",
"wikinews", "wikiversity", "wikivoyage", "wiktionary", etc.
Output:
comma separated list
]]
function p.sitelinks(frame)
local args = getArgs(frame)
local sitelinks = p._sitelinks(args.item, args.project)
local sitelinkList = {}
for lang, sitelink in pairs(sitelinks) do
table.insert(sitelinkList, (lang=='' and sitelink) or (lang .. ':' .. sitelink))
end
return table.concat(sitelinkList, ', ')
end
--[[----------------------------------------------------------------------------
aliases
This function returns a comma separated list of aliases for a single language
Its main purpose is to help with testing of _aliases function.
Usage:
{{#invoke:Wikidata label|aliases|item=Q...|lang=..}}
Inputs:
1: item - wikidata's item's q-id or entity class
2: lang - language code, like 'en' or 'de'
Output:
Comma separated list of aliases
]]
function p.aliases(frame)
local args = getArgs(frame)
return table.concat(p._aliases(args.item, args.lang), ', ')
end
return p
7b3k45meuo4sbudososz6gy9dx3nxzm
10650
9949
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Wikidata_label]]
9948
Scribunto
text/plain
--[[
__ __ _ _ __ ___ _ _ _ _ _ _ _
| \/ | ___ __| |_ _| | ___ \ \ / (_) | _(_) __| | __ _| |_ __ _ | | __ _| |__ ___| |
| |\/| |/ _ \ / _` | | | | |/ _ (_) \ /\ / /| | |/ / |/ _` |/ _` | __/ _` | | |/ _` | '_ \ / _ \ |
| | | | (_) | (_| | |_| | | __/_ \ V V / | | <| | (_| | (_| | || (_| | | | (_| | |_) | __/ |
|_| |_|\___/ \__,_|\__,_|_|\___(_) \_/\_/ |_|_|\_\_|\__,_|\__,_|\__\__,_| |_|\__,_|_.__/ \___|_|
This module is intended to be the engine behind "Template:Label".
This module was copied from Commons please ask for changes there.
Please do not modify this code without applying the changes first at "Module:Wikidata label/sandbox" and testing
at "Module:Wikidata label/testcases".
Authors and maintainers:
* User:Jarekt - original version
]]
require('strict') -- used for debugging purposes as it detects cases of unintended global variables
--=============================================
--=== Internal functions ======================
--=============================================
---------------------------------------------------------------------------
-- Normalize input arguments by converting them all to lower case and
-- replacing space with "_" in the argument name. Also empty strings are
-- converted to nils. Arguments are collected from arguments passed to the
-- module and if missing from the template that calls the module
local function getArgs(frame)
local function normalize_input_args(input_args, output_args)
for name, value in pairs( input_args ) do
value = mw.text.trim(value) -- trim whitespaces from the beggining and the end of the string
if value ~= '' then -- nuke empty strings
if type(name)=='string' then
name = string.gsub( string.lower(name), ' ', '_')
end
output_args[name] = value
end
end
return output_args
end
local args = {}
args = normalize_input_args(frame:getParent().args, args)
args = normalize_input_args(frame.args, args)
return args
end
---------------------------------------------------------------------------
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to Module:Yesno but does not assume val is a string
local function yesno(val, default)
if type(val) == 'boolean' then
return val
elseif type(val) == 'number' then
if val == 1 then
return true
elseif val == 0 then
return false
end
elseif type(val) == 'string' then
val = mw.ustring.lower(val) -- put in lower case
if val == 'no' or val == 'n' or val == 'false' or val == '0' then
return false
elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then
return true
end
end
return default
end
-------------------------------------------------------------------------
-- get message in a given language
-- INPUTS:
-- * msg - name of a message. For it to work [[MediaWiki:msg]] page need to be set up
-- * lang - translate message to language "lang"
-- * default - string to return in case this module is moved to a project where this message is not set
-- OUTPUT:
-- * translated message
local function getMessage(msg, lang, default)
msg = mw.message.new(msg):inLanguage(lang):plain()
return (msg == nil and default) or msg
end
---------------------------------------------------------------------------
-- use different sitelink call depending if you already have an entity or not
-- INPUTS:
-- * item and entity - entity id and entity: if full entity already uploded than use that
-- otherwise use entity id to look up sitelink
-- * lang - language of the project
-- OUTPUT:
-- * sitelink
local function getSitelink(item, entity, lang)
if entity and entity.getSitelink then -- if we have entity then use it
return entity:getSitelink(lang .. 'wiki')
else -- if no entity then use different function
return mw.wikibase.getSitelink(item, lang .. 'wiki')
end
end
---------------------------------------------------------------------------
-- use different sitelink call depending if you already have an entity or not
-- INPUTS:
-- * item and entity - entity id and entity: if full entity already uploded than use that
-- otherwise use entity id to look up sitelink
-- * prop - property for which to return the best statment
-- OUTPUT:
-- * value of the best statment (only from the first one)
local function getBestStatementsValue(item, entity, prop)
local statments
if entity then
statments = entity:getBestStatements(prop)
else
statments = mw.wikibase.getBestStatements(item, prop)
end
for _, statment in ipairs(statments) do
if statment and statment.mainsnak.datavalue.value then
return statment.mainsnak.datavalue.value
end
end
end
---------------------------------------------------------------------------
-- change capitalization of the label
-- INPUTS:
-- * label - label string
-- * capitalization - capitalization to be applied: allowed values are "tc", "lc",
-- "uc", "lcfirst", and "ucfirst". Any other value will return original string
-- * lang - language of the label
-- OUTPUT:
-- * value of the best statment (only from the first one)
local function apply_capitalization(label, capitalization, lang)
capitalization = string.lower(capitalization or 'none')
if capitalization == 'none' then
return label
elseif capitalization == 'uc' then
return mw.language.new(lang):uc(label)
elseif capitalization == 'lc' then
return mw.language.new(lang):lc(label)
elseif capitalization == 'tc' then -- title case
local new_label = {}
for _, word in ipairs(mw.text.split(label, ' ')) do
table.insert(new_label, mw.language.new(lang):ucfirst(word))
end
return table.concat(new_label, ' ')
elseif capitalization == 'ucfirst' then
return mw.language.new(lang):ucfirst(label)
elseif capitalization == 'lcfirst' then
return mw.language.new(lang):lcfirst(label)
end
return label
end
--[[-------------------------------------------------------------------------
get link based on user preference
INPUTS:
* link_type - can be :
* "wikidata" - link to wikidata
* "wikipedia" - link to wikipedia (language dependent)
* "wikidata talk" - link to wikidata talk page
* "commons" - link to commons (try sitelink then commons category then commons gallery)
* "commonscat" - link to commons (try commons category then commons gallery)
* "-" - means no link
* item - entity ID (always provided)
* entity - whole entity. It can be nil if whole entity is not loaded
* langList - language fallback list for preferred language (required)
OUTPUT:
* link - link to the wikimedia page
]]
local function getLink(link_type, item, entity, langList)
local link, eLink
link_type = mw.ustring.lower(link_type or '')
local item_type = mw.ustring.sub(item, 1, 1) -- first letter prefix of item entity ID: 'Q', 'P' or 'M'
if item_type == 'M' then
eLink='c:Special:EntityPage/'..item
elseif item_type == 'Q' then
eLink='d:'..item -- wikibase entity page link
elseif item_type == 'P' then
eLink='d:Property:'..item -- wikibase entity page link
else
eLink='d:Special:EntityPage/'..item
end
if link_type == '-' then -- allow different link formats
link = '' -- no link
elseif link_type == 'wikidata' or item_type == 'M' then
link = eLink -- link to wikibase entity page
elseif link_type == 'wikidata talk' and item_type == 'P' then
link = 'd:Property talk:'.. item -- link to wikidata property talk page
elseif link_type == 'wikidata talk' then
link = 'd:Talk:'..item -- link to wikidata talk page
elseif link_type == 'commons' or link_type == 'commonscat' then
--[[
When link_type == 'commons' we try the following links (in specified order):
1) commons sitelink
2) P373 "Commons Category" claims
3) P935 "Commons Gallery" claims
Since most items have a commons sitelink we never have to look for claims
When link_type == 'commonscat' we try to maximize chances of commons link being a category, so we
try the following links (in specified order):
1) commons sitelink, which is kept if it points to a category
2) P373 "Commons Category" claims
3) commons sitelink (which does not point to a category)
4) P935 "Commons Gallery" claims
Since most pages have a commons sitelink we never have to look for claims
]]
local sLink = getSitelink(item, entity, 'commons') -- look for sitelink to commons
if sLink then
sLink = 'c:'..sLink
if (link_type == 'commons') or (link_type == 'commonscat' and mw.ustring.find(sLink, 'Category:')) then
link = sLink
end
end
if not link then -- try linking to P373 "Commons Category"
local cat = getBestStatementsValue(item, entity, 'P373')
link = (cat ~= nil and 'c:Category:' .. cat) or nil
end
link = link or sLink
if not link then -- try linking to P935 "Commons Gallery"
link = getBestStatementsValue(item, entity, 'P935')
end
end
if not link then -- apply default "Wikipedia" link type
for _, language in ipairs(langList) do
local sitelink = getSitelink(item, entity, language)
if sitelink then
link = 'w:'.. language ..':'.. sitelink
break
end
end
end
return link or eLink -- no wiki sitelink, so link to wikidata
end
--=============================================
--=== External functions ======================
--=============================================
local p = {}
--======================================================================
--=== API functions for use from other Scribunto modules ===============
--======================================================================
--[[
_getLabel
This function returns a label translated to desired language, created based on wikidata
Inputs:
1: item - wikidata's item's q-id or entity class
2: lang - desired language of the label
3: link_type - link style. Possible values (case-insensitive): "wikipedia", "wikidata", "Commons", or "-" (no link)
4: capitalization - can be "uc" (upper case), "lc" (lower case), "ucfirst" (upper case for the first letter),
"lcfirst" (lower case for the first letter), or 'none' (default)
Error Handling:
Bad q-id will result in displayed error
]]
function p._getLabel(item, lang, link_type, capitalization, show_id)
local entity, s, link, label, language, desc
-- clean up the input parameters
if type(item) ~= 'string' then -- "item" is not a q-id
entity = item -- "item" must be the entity
item = entity.id -- look-up q-id
elseif tonumber(item) then -- if it is just the number then add "Q" in front
item = 'Q'..item
end
item = mw.ustring.gsub(mw.ustring.upper(item), 'PROPERTY:P', 'P') -- make all the properties the same and capitalize
if link_type == 'no' then
link_type = '-'
end
if not lang then
label, lang = mw.wikibase.getLabelWithLang(item)
end
if not lang then -- if still no language
lang = mw.getCurrentFrame():callParserFunction("int","lang") -- get user's chosen language
label = nil
end
-- build language fallback list
lang = mw.ustring.lower(lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList, 1, lang)
table.insert(langList, 'mul') -- add "default for all languages"
-- get label (visible part of the link)
if not label then
for _, language in ipairs(langList) do -- loop over language fallback list looking for label in the specific language
if entity then
label = entity:getLabel(language)
else
label = mw.wikibase.getLabelByLang(item, language)
end
if label then break end -- label found and we are done
end
end
if label then -- wikitext-escape the label if we have one
label = mw.text.nowiki(label)
end
if not label then -- no labels found, so just show the q-id
label = item
elseif show_id then -- add id
show_id = yesno(show_id,false)
if show_id then
local wordsep = getMessage('Word-separator', lang, ' ')
local id = mw.message.new('parentheses', item):inLanguage(lang):plain()
id = (id~=nil and id) or ('('..item..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set
label = label .. wordsep .. "<small>" .. id .. "</small>"
end
end
label = apply_capitalization(label, capitalization, lang)
-- look for description
if entity and entity.descriptions and lang then
for _, language in ipairs(langList) do
if entity.descriptions[language] then
desc = entity.descriptions[language].value
break
end
end
else
desc = mw.wikibase.getDescription(item)
end
if desc and link_type ~= '-' then -- wikitext-escape the description if we have one
desc = mw.text.nowiki(desc) -- add description as hover text
label = '<span title="' .. desc .. '">' .. label .. '</span>'
end
-- return the results
if link_type == '-' then
return label -- return just the label
else
link = getLink(link_type, item, entity, langList)
return '[[' .. link .. '|' .. label .. ']]' -- return link
end
end
--[[-------------------------------------------------------------------------------
_sitelinks
This function returns a table of sitelinks for a single project organized by language
Inputs:
1: item - wikidata's item's q-id or entity class
2: project - (case-insensitive) one of: "wikipedia", "wikisource", "wikiquote", "wikibooks", "wikinews",
"wikiversity", "wikivoyage", "wiktionary", "commons", "mediawiki", "wikispecies", "wikidata", etc.
Output:
Table of sitelinks with language fields
Output:
Table of sitelinks with language fields
See also
* [https://foundation.wikimedia.org/wiki/Special:SiteMatrix] for the full list of supported interwikis.
* [https://dumps.wikimedia.org/backup-index.html] for the full list of sitecodes (used in database dumps).
]]
function p._sitelinks(item, project)
local entity, sitelink
-- get entity
if type(item) == 'string' then -- "item" is a q-id
entity = mw.wikibase.getEntity(item)
else
entity = item -- "item" is the entity
end
-- convert from english project name to proproject code
local projLUT = {
wikipedia = 'wiki', commons = 'commonswiki',
foundation = 'foundationwiki', mediawiki = 'mediawikiwiki',
wikispecies = 'specieswiki', wikidata = 'wikidatawiki',
incubator = 'incubatorwiki', oldwikisource = 'sourceswiki',
}
local langLUT = {
-- These are not language codes before the 'wiki' or 'wikiversity' suffix in a sitecode:
foundation = '~', commons = '~', -- they will be skipped
incubator = '~', meta = '~',
mediawiki = '~', sources = '~',
species = '~', beta = '~',
-- Legacy language codes used in sitecodes, remapped to standard Wikimedia language codes:
-- See https://meta.wikimedia.org/wiki/Special_language_codes for details
als = 'gsw', bat_smg = 'sgs',
fiu_vro = 'vro', be_x_old = 'be-tarask',
roa_rup = 'rup', zh_classical = 'lzh',
zh_yue = 'yue', zh_min_nan = 'nan',
zh_wuu = 'wuu', no = 'nb',
}
project = project:lower()
project = projLUT[project] or project -- correct the project name
local n = project:len()
local linkTable = {}
if entity and entity.sitelinks then -- See if entity exists, and that it has sitelinks
for _, sitelink in pairs(entity.sitelinks) do -- loop over all sitelinks
local site = sitelink.site
local m = site:len() - n
local proj = site:sub(m +1) -- project part of the siteID
if proj == project then -- proj matches desired "project"
local lang = site:sub(1, m) -- language part of the siteID
lang = langLUT[lang] or lang:gsub('_','-')
if lang ~= '~' then -- proj matches desired "project"
linkTable[lang] = sitelink.title
end
end
end
end
return linkTable
end
--[[----------------------------------------------------------------
_aliases
This function returns a table of aliases for a single language
Inputs:
1: item - wikidata's item's q-id or entity class
2: lang - language code, like 'en' or 'de'
Output:
Table of aliases with language fields
]]
function p._aliases(item, lang)
local entity
if type(item) == 'string' then -- "item" is a q-id
entity = mw.wikibase.getEntity(item)
else
entity = item -- "item" is the entity
end
local aliasTable = {}
if entity and entity.aliases then -- See if there is an entity and that is has aliases
if entity.aliases[lang] then -- See if it has English Aliases
for _, alias in pairs(entity.aliases[lang]) do -- Make a loop around the English aliases
table.insert(aliasTable, alias.value) -- Create a table of English aliases
end
end
end
return aliasTable
end
--======================================================================
--=== Invoke functions for use from wikitext, e.g., templates ==========
---=====================================================================
--[[
getLabel
This function returns a label translated to desired language, created based on wikidata
Usage:
{{#invoke:Wikidata label|getLabel|item=Q...|lang=..|link_style=..|capitalization=..}}
Parameters
1: wikidata's item's q-id (required)
2: language (optional; default {{int:lang}})
3: link_style: "wikipedia" (default), "Wikidata", "Commons", or "-" (no link)
4: capitalization - can be "uc", "lc", "tc", "ucfirst", "lcfirst"
Error Handling:
Bad q-id will result in displayed error
]]
function p.getLabel(frame)
local args = getArgs(frame)
return p._getLabel(args.item, args.lang, args.link, args.capitalization, args.show_id)
end
--[[-------------------------------------------------------------------------------
sitelinks
This function returns a comma separated list of sitelinks for a single project organized by language
Its main purpose is to help with testing of _sitelinks function.
Usage:
{{#invoke:Wikidata label|sitelinks|item=Q...|project=..}}
Inputs:
1: item - wikidata's item's q-id or entity class
2: project - "wikipedia" (or "wiki"), "wikisource", "wikiquote", "wikibooks",
"wikinews", "wikiversity", "wikivoyage", "wiktionary", etc.
Output:
comma separated list
]]
function p.sitelinks(frame)
local args = getArgs(frame)
local sitelinks = p._sitelinks(args.item, args.project)
local sitelinkList = {}
for lang, sitelink in pairs(sitelinks) do
table.insert(sitelinkList, (lang=='' and sitelink) or (lang .. ':' .. sitelink))
end
return table.concat(sitelinkList, ', ')
end
--[[----------------------------------------------------------------------------
aliases
This function returns a comma separated list of aliases for a single language
Its main purpose is to help with testing of _aliases function.
Usage:
{{#invoke:Wikidata label|aliases|item=Q...|lang=..}}
Inputs:
1: item - wikidata's item's q-id or entity class
2: lang - language code, like 'en' or 'de'
Output:
Comma separated list of aliases
]]
function p.aliases(frame)
local args = getArgs(frame)
return table.concat(p._aliases(args.item, args.lang), ', ')
end
return p
7b3k45meuo4sbudososz6gy9dx3nxzm
Tempilet:T1
10
1270
10945
10417
2025-10-11T19:52:13Z
commons>Achim55
0
[[Commons:Rollback|Reverted]] edits by [[Special:Contributions/2402:3A80:1E1B:A914:6CF8:7E3E:1B0D:8981|2402:3A80:1E1B:A914:6CF8:7E3E:1B0D:8981]] ([[User talk:2402:3A80:1E1B:A914:6CF8:7E3E:1B0D:8981|talk]]) to last revision by Sarang
10945
wikitext
text/x-wiki
{{T/main|{{{1|}}}
|{{{2|}}}
|{{{3|{{{lang|}}}}}}
|{{{4|}}}
|{{{5|}}}
|incl={{{incl|{{{i|1}}}}}}
|code={{{code|}}}
|link={{{link|}}}
|case={{{case|}}}
|i18n={{{i18n|}}}
|parm={{{parm|}}}
|full={{{full|}}}
}}<noinclude>
{{documentation|Template:T/doc}}
</noinclude>
ihdmvv4dc7650xxqjayfwkuegv9ghzw
10946
10418
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:T1]]
10417
wikitext
text/x-wiki
#REDIRECT [[Template:Template link]]
{{Rcat shell|{{R from template shortcut}}}}
agft1wgq288u2uoq25oey2z7oz8m2sa
Tempilet:Shugabannin Amurka
10
1281
10549
2026-08-25T21:47:59Z
Abu Sadeeq77
197
Created page with "{{reflist}} {{Shugabannin Amurka}} [[Category:Shugabannin Amurka]]"
10549
wikitext
text/x-wiki
{{reflist}}
{{Shugabannin Amurka}}
[[Category:Shugabannin Amurka]]
2xwbaz6be0lz0zkq0vo44i4q1vn3x8k
Tempilet:Location map+
10
1282
10573
2017-06-16T21:44:41Z
en>Plastikspork
0
TFD closed as no consensus ([[WP:XFDC|XFDcloser]])
10573
wikitext
text/x-wiki
<includeonly>{{#invoke:Location map/multi|container}}</includeonly><noinclude>{{documentation}}</noinclude>
cshtxc3nnd9lycyakwliacrbcdvid4y
10574
10573
2026-08-25T23:33:35Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Location_map+]]
10573
wikitext
text/x-wiki
<includeonly>{{#invoke:Location map/multi|container}}</includeonly><noinclude>{{documentation}}</noinclude>
cshtxc3nnd9lycyakwliacrbcdvid4y
Tempilet:Anchor
10
1283
10575
2021-01-31T22:06:17Z
en>Plastikspork
0
Fix |=FOO bug where {{anchor|=FOO}} transcludes [[Template:FOO]]
10575
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
enb6c4d9v8ozj2bh2wvmo7698r1sot4
10576
10575
2026-08-25T23:33:42Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Anchor]]
10575
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
enb6c4d9v8ozj2bh2wvmo7698r1sot4
10805
2020-02-14T10:43:51Z
commons>Ahmad252
0
Now working with [[Module:Anchor]] instead
10805
wikitext
text/x-wiki
{{{{{|safesubst:}}}#invoke:anchor|main}}<noinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
cjfgfxc6tpjgpyvzhnbfkngu6u3spzc
10806
10576
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Anchor]]
10575
wikitext
text/x-wiki
{{<includeonly>safesubst:</includeonly>#invoke:anchor|main}}<noinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
enb6c4d9v8ozj2bh2wvmo7698r1sot4
Module:Anchor
828
1284
10577
2020-09-24T22:32:51Z
en>Pppery
0
Add class per edit request
10577
Scribunto
text/plain
-- This module implements {{anchor}}.
local getArgs = require('Module:Arguments').getArgs
local tableTools = require('Module:TableTools')
local p = {}
function p.main(frame)
-- Get the positional arguments from #invoke, remove any nil values,
-- and pass them to p._main.
local args = getArgs(frame)
local argArray = tableTools.compressSparseArray(args)
return p._main(unpack(argArray))
end
function p._main(...)
-- Generate the list of anchors.
local anchors = {...}
local ret = {}
for _, anchor in ipairs(anchors) do
ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>'
end
return table.concat(ret)
end
return p
qn9l8z10vmc8ghld7804a9aaffg6g8o
10578
10577
2026-08-25T23:33:42Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Anchor]]
10577
Scribunto
text/plain
-- This module implements {{anchor}}.
local getArgs = require('Module:Arguments').getArgs
local tableTools = require('Module:TableTools')
local p = {}
function p.main(frame)
-- Get the positional arguments from #invoke, remove any nil values,
-- and pass them to p._main.
local args = getArgs(frame)
local argArray = tableTools.compressSparseArray(args)
return p._main(unpack(argArray))
end
function p._main(...)
-- Generate the list of anchors.
local anchors = {...}
local ret = {}
for _, anchor in ipairs(anchors) do
ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>'
end
return table.concat(ret)
end
return p
qn9l8z10vmc8ghld7804a9aaffg6g8o
10807
2020-02-14T17:00:59Z
commons>Tacsipacsi
0
still accept {{{anchor}}}, used e.g. on [[Commons:European Science Photo Competition 2015/Winners]]
10807
Scribunto
text/plain
-- This module implements {{anchor}}.
local getArgs = require('Module:Arguments').getArgs
local tableTools = require('Module:TableTools')
local p = {}
function p.main(frame)
-- Get the positional arguments from #invoke, remove any nil values,
-- and pass them to p._main.
local args = getArgs(frame)
args[1] = args[1] or args.anchor
local argArray = tableTools.compressSparseArray(args)
return p._main(unpack(argArray))
end
function p._main(...)
-- Generate the list of anchors.
local anchors = {...}
local ret = {}
for _, anchor in ipairs(anchors) do
ret[#ret + 1] = '<span id="' .. anchor .. '"></span>'
end
return table.concat(ret)
end
return p
2pv7ltgi61xmnjphayza1bs93gzf81t
10808
10578
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Anchor]]
10577
Scribunto
text/plain
-- This module implements {{anchor}}.
local getArgs = require('Module:Arguments').getArgs
local tableTools = require('Module:TableTools')
local p = {}
function p.main(frame)
-- Get the positional arguments from #invoke, remove any nil values,
-- and pass them to p._main.
local args = getArgs(frame)
local argArray = tableTools.compressSparseArray(args)
return p._main(unpack(argArray))
end
function p._main(...)
-- Generate the list of anchors.
local anchors = {...}
local ret = {}
for _, anchor in ipairs(anchors) do
ret[#ret + 1] = '<span class="anchor" id="' .. anchor .. '"></span>'
end
return table.concat(ret)
end
return p
qn9l8z10vmc8ghld7804a9aaffg6g8o
Tempilet:Code
10
1285
10579
2025-02-03T21:00:59Z
en>Ahecht
0
Undid revision [[Special:Diff/1273749230|1273749230]] by [[Special:Contributions/Ahecht|Ahecht]] ([[User talk:Ahecht|talk]])
10579
wikitext
text/x-wiki
{{#tag:syntaxhighlight|{{{code|{{{1}}}}}}|lang={{{lang|{{{2|text}}}}}}|class={{{class|}}}|style={{{style|}}}|inline=1}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
c4j1dm0qlwo4osjl4tof16x31yebphy
10580
10579
2026-08-25T23:33:43Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Code]]
10579
wikitext
text/x-wiki
{{#tag:syntaxhighlight|{{{code|{{{1}}}}}}|lang={{{lang|{{{2|text}}}}}}|class={{{class|}}}|style={{{style|}}}|inline=1}}<noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
c4j1dm0qlwo4osjl4tof16x31yebphy
Tempilet:Coord
10
1286
10581
2025-12-25T18:30:20Z
en>Primefac
0
[[Wikipedia:Templates for discussion/Log/2025 December 13#Template:WikidataCoord]] closed as merge ([[WP:XFDC#4.0.16|XFDcloser]])
10581
wikitext
text/x-wiki
<includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
0o7lasvhdxe29mlczlsmvzkvka0kscy
10582
10581
2026-08-25T23:33:43Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Coord]]
10581
wikitext
text/x-wiki
<includeonly>{{#invoke:Coordinates|coord}}</includeonly><noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
0o7lasvhdxe29mlczlsmvzkvka0kscy
Tempilet:Location map~
10
1287
10583
2026-06-01T21:39:27Z
en>Zackmann08
0
Undid revision [[Special:Diff/1357297609|1357297609]] by [[Special:Contributions/Zackmann08|Zackmann08]] ([[User talk:Zackmann08|talk]])
10583
wikitext
text/x-wiki
<includeonly>{{#invoke:Location map|mark}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1lw8zlt59mztp7ojo9dt06oixklle0p
10584
10583
2026-08-25T23:33:43Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Location_map~]]
10583
wikitext
text/x-wiki
<includeonly>{{#invoke:Location map|mark}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
1lw8zlt59mztp7ojo9dt06oixklle0p
Module:Coordinates
828
1288
10585
2026-07-01T16:40:59Z
en>Ahecht
0
Copy from sandbox. Implement parsing of coordinates from a single parameter. Feel free to roll back if there are unintended consequences.
10585
Scribunto
text/plain
--[[
This module is intended to replace the functionality of {{Coord}} and related
templates. It provides several methods, including
{{#invoke:Coordinates | coord }} : General function formatting and displaying
coordinate values.
{{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal
degree values to DMS format.
{{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format
to decimal degree format.
{{#invoke:Coordinates | link }} : Export the link used to reach the tools
]]
require('strict')
local math_mod = require("Module:Math")
local coordinates = {};
local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true);
local current_page = mw.title.getCurrentTitle()
local page_name = mw.uri.encode( current_page.prefixedText, 'WIKI' );
local coord_link = 'https://geohack.toolforge.org/geohack.php?pagename=' .. page_name .. '¶ms='
--[[ Helper function, replacement for {{coord/display/title}} ]]
local function displaytitle(coords)
return mw.getCurrentFrame():extensionTag{
name = 'indicator',
args = { name = 'coordinates' },
content = '<span id="coordinates">[[Geographic coordinate system|Coordinates]]: ' .. coords .. '</span>'
}
end
--[[ Helper function, used in detecting DMS formatting ]]
local function dmsTest(first, second)
if type(first) ~= 'string' or type(second) ~= 'string' then
return nil
end
local s = (first .. second):upper()
return s:find('^[NS][EW]$') or s:find('^[EW][NS]$')
end
--[[ Wrapper function to grab args, see Module:Arguments for this function's documentation. ]]
local function makeInvokeFunc(funcName)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Coord'
})
return coordinates[funcName](args, frame)
end
end
--[[ Helper function, handle optional args. ]]
local function optionalArg(arg, supplement)
return arg and arg .. supplement or ''
end
--[[
Formats any error messages generated for display
]]
local function errorPrinter(errors)
local result = ""
for i,v in ipairs(errors) do
result = result .. '<strong class="error">Coordinates: ' .. v[2] .. '</strong><br />'
end
return result
end
--[[
Determine the required CSS class to display coordinates
Usually geo-nondefault is hidden by CSS, unless a user has overridden this for himself
default is the mode as specificied by the user when calling the {{coord}} template
mode is the display mode (dec or dms) that we will need to determine the css class for
]]
local function displayDefault(default, mode)
if default == "" then
default = "dec"
end
if default == mode then
return "geo-default"
else
return "geo-nondefault"
end
end
--[[
specPrinter
Output formatter. Takes the structure generated by either parseDec
or parseDMS and formats it for inclusion on Wikipedia.
]]
local function specPrinter(args, coordinateSpec)
local uriComponents = coordinateSpec["param"]
if uriComponents == "" then
-- RETURN error, should never be empty or nil
return "ERROR param was empty"
end
if args["name"] then
uriComponents = uriComponents .. "&title=" .. mw.uri.encode(coordinateSpec["name"])
end
local geodmshtml = '<span class="geo-dms" title="Maps, aerial photos, and other data for this location">'
.. '<span class="latitude">' .. coordinateSpec["dms-lat"] .. '</span> '
.. '<span class="longitude">' ..coordinateSpec["dms-long"] .. '</span>'
.. '</span>'
local lat = tonumber( coordinateSpec["dec-lat"] ) or 0
local geodeclat
if lat < 0 then
-- FIXME this breaks the pre-existing precision
geodeclat = tostring(coordinateSpec["dec-lat"]):sub(2) .. "°S"
else
geodeclat = (coordinateSpec["dec-lat"] or 0) .. "°N"
end
local long = tonumber( coordinateSpec["dec-long"] ) or 0
local geodeclong
if long < 0 then
-- FIXME does not handle unicode minus
geodeclong = tostring(coordinateSpec["dec-long"]):sub(2) .. "°W"
else
geodeclong = (coordinateSpec["dec-long"] or 0) .. "°E"
end
local geodechtml = '<span class="geo-dec" title="Maps, aerial photos, and other data for this location">'
.. geodeclat .. ' '
.. geodeclong
.. '</span>'
local geonumhtml = '<span class="geo">'
.. coordinateSpec["dec-lat"] .. '; '
.. coordinateSpec["dec-long"]
.. '</span>'
local inner = '<span class="' .. displayDefault(coordinateSpec["default"], "dms" ) .. '">' .. geodmshtml .. '</span>'
.. '<span class="geo-multi-punct"> / </span>'
.. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">';
if not args["name"] then
inner = inner .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span></span>'
else
inner = inner .. '<span class="vcard">' .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span>'
.. '<span style="display:none"> (<span class="fn org">'
.. args["name"] .. '</span>)</span></span></span>'
end
local stylesheetLink = 'Module:Coordinates' .. ( isSandbox and '/sandbox' or '' ) .. '/styles.css'
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = stylesheetLink }
} .. '<span class="plainlinks nourlexpansion">[' .. coord_link .. uriComponents ..
' ' .. inner .. ']</span>' .. '[[Category:Pages using gadget WikiMiniAtlas]]'
end
--[[ Helper function, convert decimal to degrees ]]
local function convert_dec2dms_d(coordinate)
local d = math_mod._round( coordinate, 0 ) .. "°"
return d .. ""
end
--[[ Helper function, convert decimal to degrees and minutes ]]
local function convert_dec2dms_dm(coordinate)
coordinate = math_mod._round( coordinate * 60, 0 );
local m = coordinate % 60;
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m )
end
--[[ Helper function, convert decimal to degrees, minutes, and seconds ]]
local function convert_dec2dms_dms(coordinate)
coordinate = math_mod._round( coordinate * 60 * 60, 0 );
local s = coordinate % 60
coordinate = math.floor( (coordinate - s) / 60 );
local m = coordinate % 60
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m ) .. string.format( "%02d″", s )
end
--[[
Helper function, convert decimal latitude or longitude to
degrees, minutes, and seconds format based on the specified precision.
]]
local function convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
local coord = tonumber(coordinate)
local postfix
if coord >= 0 then
postfix = firstPostfix
else
postfix = secondPostfix
end
precision = precision:lower();
if precision == "dms" then
return convert_dec2dms_dms( math.abs( coord ) ) .. postfix;
elseif precision == "dm" then
return convert_dec2dms_dm( math.abs( coord ) ) .. postfix;
elseif precision == "d" then
return convert_dec2dms_d( math.abs( coord ) ) .. postfix;
end
end
--[[
Convert DMS format into a N or E decimal coordinate
]]
local function convert_dms2dec(direction, degrees_str, minutes_str, seconds_str)
local degrees = tonumber(degrees_str)
local minutes = tonumber(minutes_str) or 0
local seconds = tonumber(seconds_str) or 0
local factor = 1
if direction == "S" or direction == "W" then
factor = -1
end
local precision = 0
if seconds_str then
precision = 5 + math.max( math_mod._precision(seconds_str), 0 );
elseif minutes_str and minutes_str ~= '' then
precision = 3 + math.max( math_mod._precision(minutes_str), 0 );
else
precision = math.max( math_mod._precision(degrees_str), 0 );
end
local decimal = factor * (degrees+(minutes+seconds/60)/60)
return string.format( "%." .. precision .. "f", decimal ) -- not tonumber since this whole thing is string based.
end
--[[
Checks input values to for out of range errors.
]]
local function validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, source, strong )
local errors = {};
lat_d = tonumber( lat_d ) or 0;
lat_m = tonumber( lat_m ) or 0;
lat_s = tonumber( lat_s ) or 0;
long_d = tonumber( long_d ) or 0;
long_m = tonumber( long_m ) or 0;
long_s = tonumber( long_s ) or 0;
if strong then
if lat_d < 0 then
table.insert(errors, {source, "latitude degrees < 0 with hemisphere flag"})
end
if long_d < 0 then
table.insert(errors, {source, "longitude degrees < 0 with hemisphere flag"})
end
--[[
#coordinates is inconsistent about whether this is an error. If globe: is
specified, it won't error on this condition, but otherwise it will.
For not simply disable this check.
if long_d > 180 then
table.insert(errors, {source, "longitude degrees > 180 with hemisphere flag"})
end
]]
end
if lat_d > 90 then
table.insert(errors, {source, "latitude degrees > 90"})
end
if lat_d < -90 then
table.insert(errors, {source, "latitude degrees < -90"})
end
if lat_m >= 60 then
table.insert(errors, {source, "latitude minutes >= 60"})
end
if lat_m < 0 then
table.insert(errors, {source, "latitude minutes < 0"})
end
if lat_s >= 60 then
table.insert(errors, {source, "latitude seconds >= 60"})
end
if lat_s < 0 then
table.insert(errors, {source, "latitude seconds < 0"})
end
if long_d >= 360 then
table.insert(errors, {source, "longitude degrees >= 360"})
end
if long_d <= -360 then
table.insert(errors, {source, "longitude degrees <= -360"})
end
if long_m >= 60 then
table.insert(errors, {source, "longitude minutes >= 60"})
end
if long_m < 0 then
table.insert(errors, {source, "longitude minutes < 0"})
end
if long_s >= 60 then
table.insert(errors, {source, "longitude seconds >= 60"})
end
if long_s < 0 then
table.insert(errors, {source, "longitude seconds < 0"})
end
return errors;
end
--[[
parseDec
Transforms decimal format latitude and longitude into the
structure to be used in displaying coordinates
]]
local function parseDec( lat, long, format )
local coordinateSpec = {}
local errors = {}
if not long then
return nil, {{"parseDec", "Missing longitude"}}
elseif not tonumber(long) then
return nil, {{"parseDec", "Longitude could not be parsed as a number: " .. long}}
end
errors = validate( lat, nil, nil, long, nil, nil, 'parseDec', false );
coordinateSpec["dec-lat"] = lat;
coordinateSpec["dec-long"] = long;
local mode = coordinates.determineMode( lat, long );
coordinateSpec["dms-lat"] = convert_dec2dms( lat, "N", "S", mode) -- {{coord/dec2dms|{{{1}}}|N|S|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
coordinateSpec["dms-long"] = convert_dec2dms( long, "E", "W", mode) -- {{coord/dec2dms|{{{2}}}|E|W|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dec"
end
return coordinateSpec, errors
end
--[[
parseDMS
Transforms degrees, minutes, seconds format latitude and longitude
into the a structure to be used in displaying coordinates
]]
local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format )
local coordinateSpec, errors, backward = {}, {}
lat_f = lat_f:upper();
long_f = long_f:upper();
-- Check if specified backward
if lat_f == 'E' or lat_f == 'W' then
lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true;
end
errors = validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, 'parseDMS', true );
if not long_d then
return nil, {{"parseDMS", "Missing longitude" }}
elseif not tonumber(long_d) then
return nil, {{"parseDMS", "Longitude could not be parsed as a number:" .. long_d }}
end
if not lat_m and not lat_s and not long_m and not long_s and #errors == 0 then
if math_mod._precision( lat_d ) > 0 or math_mod._precision( long_d ) > 0 then
if lat_f:upper() == 'S' then
lat_d = '-' .. lat_d;
end
if long_f:upper() == 'W' then
long_d = '-' .. long_d;
end
return parseDec( lat_d, long_d, format );
end
end
coordinateSpec["dms-lat"] = lat_d.."°"..optionalArg(lat_m,"′") .. optionalArg(lat_s,"″") .. lat_f
coordinateSpec["dms-long"] = long_d.."°"..optionalArg(long_m,"′") .. optionalArg(long_s,"″") .. long_f
coordinateSpec["dec-lat"] = convert_dms2dec(lat_f, lat_d, lat_m, lat_s) -- {{coord/dms2dec|{{{4}}}|{{{1}}}|0{{{2}}}|0{{{3}}}}}
coordinateSpec["dec-long"] = convert_dms2dec(long_f, long_d, long_m, long_s) -- {{coord/dms2dec|{{{8}}}|{{{5}}}|0{{{6}}}|0{{{7}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dms"
end
return coordinateSpec, errors, backward
end
--[[
Check the input arguments for coord to determine the kind of data being provided
and then make the necessary processing.
]]
local function formatTest(args)
local result, errors
local backward, primary = false, false
local function getParam(args, lim)
local ret = {}
for i = 1, lim do
ret[i] = args[i] or ''
end
return table.concat(ret, '_')
end
if not args[1] then
-- no lat logic
return errorPrinter( {{"formatTest", "Missing latitude"}} )
elseif not tonumber(args[1]) then
-- bad lat logic
return errorPrinter( {{"formatTest", "Unable to parse latitude as a number:" .. args[1]}} )
elseif not args[4] and not args[5] and not args[6] then
-- dec logic
result, errors = parseDec(args[1], args[2], args.format)
if not result then
return errorPrinter(errors);
end
-- formatting for geohack: geohack expects D_N_D_E notation or D;D notation
-- wikiminiatlas doesn't support D;D notation
-- #coordinates parserfunction doesn't support negative decimals with NSWE
result.param = table.concat({
math.abs(tonumber(args[1])),
((tonumber(args[1]) or 0) < 0) and 'S' or 'N',
math.abs(tonumber(args[2])),
((tonumber(args[2]) or 0) < 0) and 'W' or 'E',
args[3] or ''}, '_')
elseif dmsTest(args[4], args[8]) then
-- dms logic
result, errors, backward = parseDMS(args[1], args[2], args[3], args[4],
args[5], args[6], args[7], args[8], args.format)
if args[10] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 9)
elseif dmsTest(args[3], args[6]) then
-- dm logic
result, errors, backward = parseDMS(args[1], args[2], nil, args[3],
args[4], args[5], nil, args[6], args['format'])
if args[8] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 7)
elseif dmsTest(args[2], args[4]) then
-- d logic
result, errors, backward = parseDMS(args[1], nil, nil, args[2],
args[3], nil, nil, args[4], args.format)
if args[6] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 5)
else
-- Error
return errorPrinter({{"formatTest", "Unknown argument format"}}) .. '[[Category:Pages with malformed coordinate tags]]'
end
result.name = args.name
local extra_param = {'dim', 'globe', 'scale', 'region', 'source', 'type'}
for _, v in ipairs(extra_param) do
if args[v] then
table.insert(errors, {'formatTest', 'Parameter: "' .. v .. '=" should be "' .. v .. ':"' })
end
end
local ret = specPrinter(args, result)
if #errors > 0 then
ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:Pages with malformed coordinate tags]]'
end
return ret, backward
end
--[[
Generate Wikidata tracking categories.
]]
local function makeWikidataCategories(qid)
local ret
local qid = qid or mw.wikibase.getEntityIdForCurrentPage()
if mw.wikibase and current_page.namespace == 0 then
if qid and mw.wikibase.entityExists(qid) and mw.wikibase.getBestStatements(qid, "P625") and mw.wikibase.getBestStatements(qid, "P625")[1] then
local snaktype = mw.wikibase.getBestStatements(qid, "P625")[1].mainsnak.snaktype
if snaktype == 'value' then
-- coordinates exist both here and on Wikidata, and can be compared.
ret = 'Coordinates on Wikidata'
elseif snaktype == 'somevalue' then
ret = 'Coordinates on Wikidata set to unknown value'
elseif snaktype == 'novalue' then
ret = 'Coordinates on Wikidata set to no value'
end
else
-- We have to either import the coordinates to Wikidata or remove them here.
ret = 'Coordinates not on Wikidata'
end
end
if ret then
return string.format('[[Category:%s]]', ret)
else
return ''
end
end
--[[
Parse coordinates entered as a single string
]]
local function text2coord(text)
if type(text) ~= 'string' then return end
local coords = {}
local numTerms = 0
local parts
local function assign(k, number, start, pos)
if number then
coords[start + pos - 1] = number
if k == 1 then
numTerms = pos
elseif numTerms < pos then -- more terms in long than lat
return false
end
elseif numTerms >= pos then -- more terms in lat than long
return false
end
return true
end
text = mw.ustring.gsub(mw.text.trim(text:uupper()), "[*′″]", {['*'] = '°', ['′'] = "'", ['″'] = '"'})
for _, regex in ipairs({
"^([+%-%d.°'\"NS%s]+),%s*([+%-%d.°'\"EW%s]+)$", --split by commas
"^([+%-%d.°'\"%s]+[NS])%s*([+%-%d.°'\"%s]+[EW])$", --split by N/S
"^([+%-%d.°'%s]+\")%s*([+%-%d.°'%s]+\")$", --split by "
"^([+%-%d.°%s]+')%s*([+%-%d.°%s]+')$", --split by '
"^([+%-%d.%s]+°)%s*([+%-%d.%s]+°)$", --split by °
"^([+%-%d.]+)%s+([+%-%d.]+)$" --split by space
}) do
local lat, long = string.match(text, regex)
if lat and long then
parts = {mw.text.trim(lat), mw.text.trim(long)}
break
end
end
if not parts then return end
local SW = {"S", "W"}
local NE = {"N", "E"}
for k, v in ipairs(parts) do
local number
local start = k + numTerms
-- Find or create N, S, E, and W
local dir = v:match("([NSEW])$")
if dir then
v = v:sub(1,-2)
elseif v:sub(1,1) == '-' then
v = v:sub(2)
dir = SW[k]
else
dir = NE[k]
end
-- attempt to convert text to number
number = tonumber(v)
if number then
-- Single number, assign it to the position "start" in the "coords" array
if not assign(k, number, start, 1) then
return
end
-- attempt to convert dms to decimal
elseif string.match(v, "°") then
for pos, regex in ipairs({
"^%s*([+%-%d.]+)%s*°[^°]*$", --degrees
"^[^°']+°%s*([%d.]+)%s*'[^°']*$", --minutes
"^[^'\"]+'%s*([%d.]+)%s*\"[^'\"]*$" --seconds
}) do
-- Assign component to a position in the "coords" array determined
-- by "start" and "pos", and increment "numTerms" if this is latitude
if not assign(k, tonumber(string.match(v, regex)), start, pos) then
return
end
end
end
if coords[start] == nil then return end
coords[start + numTerms] = dir
end
return coords
end
--[[
link
Simple function to export the coordinates link for other uses.
Usage:
{{#invoke:Coordinates | link }}
]]
function coordinates.link(frame)
return coord_link;
end
--[[
dec2dms
Wrapper to allow templates to call dec2dms directly.
Usage:
{{#invoke:Coordinates | dec2dms | decimal_coordinate | positive_suffix |
negative_suffix | precision }}
decimal_coordinate is converted to DMS format. If positive, the positive_suffix
is appended (typical N or E), if negative, the negative suffix is appended. The
specified precision is one of 'D', 'DM', or 'DMS' to specify the level of detail
to use.
]]
coordinates.dec2dms = makeInvokeFunc('_dec2dms')
function coordinates._dec2dms(args)
local coordinate = args[1]
local firstPostfix = args[2] or ''
local secondPostfix = args[3] or ''
local precision = args[4] or ''
return convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
end
--[[
Helper function to determine whether to use D, DM, or DMS
format depending on the precision of the decimal input.
]]
function coordinates.determineMode( value1, value2 )
local precision = math.max( math_mod._precision( value1 ), math_mod._precision( value2 ) );
if precision <= 0 then
return 'd'
elseif precision <= 2 then
return 'dm';
else
return 'dms';
end
end
--[[
dms2dec
Wrapper to allow templates to call dms2dec directly.
Usage:
{{#invoke:Coordinates | dms2dec | direction_flag | degrees |
minutes | seconds }}
Converts DMS values specified as degrees, minutes, seconds too decimal format.
direction_flag is one of N, S, E, W, and determines whether the output is
positive (i.e. N and E) or negative (i.e. S and W).
]]
coordinates.dms2dec = makeInvokeFunc('_dms2dec')
function coordinates._dms2dec(args)
local direction = args[1]
local degrees = args[2]
local minutes = args[3]
local seconds = args[4]
return convert_dms2dec(direction, degrees, minutes, seconds)
end
--[[
coord
Main entry point for Lua function to replace {{coord}}
Usage:
{{#invoke:Coordinates | coord }}
{{#invoke:Coordinates | coord | lat | long }}
{{#invoke:Coordinates | coord | lat | lat_flag | long | long_flag }}
...
Refer to {{coord}} documentation page for many additional parameters and
configuration options.
Note: This function provides the visual display elements of {{coord}}. In
order to load coordinates into the database, the {{#coordinates:}} parser
function must also be called, this is done automatically in the Lua
version of {{coord}}.
]]
coordinates.coord = makeInvokeFunc('_coord')
function coordinates._coord(args)
if not tonumber(args[1]) then
local parsed = text2coord(args[1])
if parsed then -- full lat/long entered as a single string
for i = 2, #args do args[#parsed + i - 1] = args[i] end
for i, v in ipairs(parsed) do args[i] = v end
elseif not args[2] then -- look for coordinates from wikidata
args[3] = args[1]; args[1] = nil
local entity = mw.wikibase.getEntityObject(args.qid)
if entity
and entity.claims
and entity.claims.P625
and entity.claims.P625[1].mainsnak.snaktype == 'value'
then
local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision
args[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude
args[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude
if precision then
precision = -math_mod._round(math.log(precision)/math.log(10),0)
args[1] = math_mod._round(args[1],precision)
args[2] = math_mod._round(args[2],precision)
end
end
end
end
local contents, backward = formatTest(args)
local Notes = args.notes or ''
local Display = args.display and args.display:lower() or 'inline'
-- it and ti are short for inline,title and title,inline
local function isInline(s)
-- Finds whether coordinates are displayed inline.
return s:find('inline') ~= nil or s == 'i' or s == 'it' or s == 'ti'
end
local function isInTitle(s)
-- Finds whether coordinates are displayed in the title.
return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti'
end
local function coord_wrapper(in_args)
-- Calls the parser function {{#coordinates:}}.
return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or ''
end
local text = ''
if isInline(Display) then
text = text .. '<span class="geo-inline">' .. contents .. Notes .. '</span>'
end
if isInTitle(Display) then
-- Add to output since indicator content is invisible to Lua later on
if not isInline(Display) then
text = text .. '<span class="geo-inline-hidden noexcerpt">' .. contents .. Notes .. '</span>'
end
text = text .. displaytitle(contents .. Notes) .. makeWikidataCategories(args.qid)
end
if not args.nosave then
local page_title, count = mw.title.getCurrentTitle(), 1
if backward then
local tmp = {}
while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end
tmp.count = count; count = 2*(count-1)
while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end
for i, v in ipairs(tmp) do args[i] = v end
else
while count <= 9 do args[count] = (args[count] or ''); count = count+1 end
end
if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end
args.notes, args.format, args.display = nil
text = text .. coord_wrapper(args)
end
return text
end
--[[
coord2text
Extracts a single value from a transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coord2text | {{Coord}} | parameter }}
Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source
]]
function coordinates._coord2text(coord,type)
if coord == '' or type == '' or not type then return nil end
type = mw.text.trim(type)
if type == 'lat' or type == 'long' then
local coordString = mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]')
if not coordString then
return nil
end
local result = mw.text.split(coordString, ' ')
local negative
if type == 'lat' then
result, negative = result[1], 'S'
else
result, negative = result[2], 'W'
end
if not result then
return nil
end
result = mw.text.split(result, '°')
if not result[1] then
return nil
end
if result[2] == negative then result[1] = '-'..result[1] end
return result[1]
else
return mw.ustring.match(coord, 'params=.-_' .. type .. ':(.-)[ _]')
end
end
function coordinates.coord2text(frame)
return coordinates._coord2text(frame.args[1],frame.args[2]) or ''
end
--[[
coordinsert
Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }}
Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation.
]]
function coordinates.coordinsert(frame)
-- for the 2nd or later integer parameter (the first is the coord template, as above)
for i, v in ipairs(frame.args) do
if i ~= 1 then
-- if we cannot find in the coord_template the i_th coordinsert parameter e.g. region
if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then
-- find from the params= up to the first possibly-present underscore
-- and append the i_th coordinsert parameter and a space
-- IDK why we're adding a space but it does seem somewhat convenient
frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ')
end
end
end
if frame.args.name then
-- if we can't find the vcard class
if not mw.ustring.find(frame.args[1], '<span class="vcard">') then
-- take something that looks like a coord template and add the vcard span with class and fn org class
local namestr = frame.args.name
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-default">)(<span[^<>]*>[^<>]*</span><span[^<>]*>[^<>]*<span[^<>]*>[^<>]*</span></span>)(</span>)',
'%1<span class="vcard">%2<span style="display:none"> (<span class="fn org">' .. namestr .. '</span>)</span></span>%3'
)
-- then find anything from coordinates parameters to the 'end' and attach the title parameter
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(¶ms=[^&"<>%[%] ]*) ',
'%1&title=' .. mw.uri.encode(namestr) .. ' '
)
end
end
-- replace the existing indicator with a new indicator using the modified content
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-inline[^"]*">(.+)</span>)\127[^\127]*UNIQ%-%-indicator%-%x+%-%-?QINU[^\127]*\127',
function (inline, coord) return inline .. displaytitle(coord) end
)
return frame.args[1]
end
return coordinates
mgr040y9bhe26jrkzioi6ulvlqhvehy
10586
10585
2026-08-25T23:33:43Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Coordinates]]
10585
Scribunto
text/plain
--[[
This module is intended to replace the functionality of {{Coord}} and related
templates. It provides several methods, including
{{#invoke:Coordinates | coord }} : General function formatting and displaying
coordinate values.
{{#invoke:Coordinates | dec2dms }} : Simple function for converting decimal
degree values to DMS format.
{{#invoke:Coordinates | dms2dec }} : Simple function for converting DMS format
to decimal degree format.
{{#invoke:Coordinates | link }} : Export the link used to reach the tools
]]
require('strict')
local math_mod = require("Module:Math")
local coordinates = {};
local isSandbox = mw.getCurrentFrame():getTitle():find('sandbox', 1, true);
local current_page = mw.title.getCurrentTitle()
local page_name = mw.uri.encode( current_page.prefixedText, 'WIKI' );
local coord_link = 'https://geohack.toolforge.org/geohack.php?pagename=' .. page_name .. '¶ms='
--[[ Helper function, replacement for {{coord/display/title}} ]]
local function displaytitle(coords)
return mw.getCurrentFrame():extensionTag{
name = 'indicator',
args = { name = 'coordinates' },
content = '<span id="coordinates">[[Geographic coordinate system|Coordinates]]: ' .. coords .. '</span>'
}
end
--[[ Helper function, used in detecting DMS formatting ]]
local function dmsTest(first, second)
if type(first) ~= 'string' or type(second) ~= 'string' then
return nil
end
local s = (first .. second):upper()
return s:find('^[NS][EW]$') or s:find('^[EW][NS]$')
end
--[[ Wrapper function to grab args, see Module:Arguments for this function's documentation. ]]
local function makeInvokeFunc(funcName)
return function (frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Coord'
})
return coordinates[funcName](args, frame)
end
end
--[[ Helper function, handle optional args. ]]
local function optionalArg(arg, supplement)
return arg and arg .. supplement or ''
end
--[[
Formats any error messages generated for display
]]
local function errorPrinter(errors)
local result = ""
for i,v in ipairs(errors) do
result = result .. '<strong class="error">Coordinates: ' .. v[2] .. '</strong><br />'
end
return result
end
--[[
Determine the required CSS class to display coordinates
Usually geo-nondefault is hidden by CSS, unless a user has overridden this for himself
default is the mode as specificied by the user when calling the {{coord}} template
mode is the display mode (dec or dms) that we will need to determine the css class for
]]
local function displayDefault(default, mode)
if default == "" then
default = "dec"
end
if default == mode then
return "geo-default"
else
return "geo-nondefault"
end
end
--[[
specPrinter
Output formatter. Takes the structure generated by either parseDec
or parseDMS and formats it for inclusion on Wikipedia.
]]
local function specPrinter(args, coordinateSpec)
local uriComponents = coordinateSpec["param"]
if uriComponents == "" then
-- RETURN error, should never be empty or nil
return "ERROR param was empty"
end
if args["name"] then
uriComponents = uriComponents .. "&title=" .. mw.uri.encode(coordinateSpec["name"])
end
local geodmshtml = '<span class="geo-dms" title="Maps, aerial photos, and other data for this location">'
.. '<span class="latitude">' .. coordinateSpec["dms-lat"] .. '</span> '
.. '<span class="longitude">' ..coordinateSpec["dms-long"] .. '</span>'
.. '</span>'
local lat = tonumber( coordinateSpec["dec-lat"] ) or 0
local geodeclat
if lat < 0 then
-- FIXME this breaks the pre-existing precision
geodeclat = tostring(coordinateSpec["dec-lat"]):sub(2) .. "°S"
else
geodeclat = (coordinateSpec["dec-lat"] or 0) .. "°N"
end
local long = tonumber( coordinateSpec["dec-long"] ) or 0
local geodeclong
if long < 0 then
-- FIXME does not handle unicode minus
geodeclong = tostring(coordinateSpec["dec-long"]):sub(2) .. "°W"
else
geodeclong = (coordinateSpec["dec-long"] or 0) .. "°E"
end
local geodechtml = '<span class="geo-dec" title="Maps, aerial photos, and other data for this location">'
.. geodeclat .. ' '
.. geodeclong
.. '</span>'
local geonumhtml = '<span class="geo">'
.. coordinateSpec["dec-lat"] .. '; '
.. coordinateSpec["dec-long"]
.. '</span>'
local inner = '<span class="' .. displayDefault(coordinateSpec["default"], "dms" ) .. '">' .. geodmshtml .. '</span>'
.. '<span class="geo-multi-punct"> / </span>'
.. '<span class="' .. displayDefault(coordinateSpec["default"], "dec" ) .. '">';
if not args["name"] then
inner = inner .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span></span>'
else
inner = inner .. '<span class="vcard">' .. geodechtml
.. '<span style="display:none"> / ' .. geonumhtml .. '</span>'
.. '<span style="display:none"> (<span class="fn org">'
.. args["name"] .. '</span>)</span></span></span>'
end
local stylesheetLink = 'Module:Coordinates' .. ( isSandbox and '/sandbox' or '' ) .. '/styles.css'
return mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = stylesheetLink }
} .. '<span class="plainlinks nourlexpansion">[' .. coord_link .. uriComponents ..
' ' .. inner .. ']</span>' .. '[[Category:Pages using gadget WikiMiniAtlas]]'
end
--[[ Helper function, convert decimal to degrees ]]
local function convert_dec2dms_d(coordinate)
local d = math_mod._round( coordinate, 0 ) .. "°"
return d .. ""
end
--[[ Helper function, convert decimal to degrees and minutes ]]
local function convert_dec2dms_dm(coordinate)
coordinate = math_mod._round( coordinate * 60, 0 );
local m = coordinate % 60;
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m )
end
--[[ Helper function, convert decimal to degrees, minutes, and seconds ]]
local function convert_dec2dms_dms(coordinate)
coordinate = math_mod._round( coordinate * 60 * 60, 0 );
local s = coordinate % 60
coordinate = math.floor( (coordinate - s) / 60 );
local m = coordinate % 60
coordinate = math.floor( (coordinate - m) / 60 );
local d = coordinate % 360 .."°"
return d .. string.format( "%02d′", m ) .. string.format( "%02d″", s )
end
--[[
Helper function, convert decimal latitude or longitude to
degrees, minutes, and seconds format based on the specified precision.
]]
local function convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
local coord = tonumber(coordinate)
local postfix
if coord >= 0 then
postfix = firstPostfix
else
postfix = secondPostfix
end
precision = precision:lower();
if precision == "dms" then
return convert_dec2dms_dms( math.abs( coord ) ) .. postfix;
elseif precision == "dm" then
return convert_dec2dms_dm( math.abs( coord ) ) .. postfix;
elseif precision == "d" then
return convert_dec2dms_d( math.abs( coord ) ) .. postfix;
end
end
--[[
Convert DMS format into a N or E decimal coordinate
]]
local function convert_dms2dec(direction, degrees_str, minutes_str, seconds_str)
local degrees = tonumber(degrees_str)
local minutes = tonumber(minutes_str) or 0
local seconds = tonumber(seconds_str) or 0
local factor = 1
if direction == "S" or direction == "W" then
factor = -1
end
local precision = 0
if seconds_str then
precision = 5 + math.max( math_mod._precision(seconds_str), 0 );
elseif minutes_str and minutes_str ~= '' then
precision = 3 + math.max( math_mod._precision(minutes_str), 0 );
else
precision = math.max( math_mod._precision(degrees_str), 0 );
end
local decimal = factor * (degrees+(minutes+seconds/60)/60)
return string.format( "%." .. precision .. "f", decimal ) -- not tonumber since this whole thing is string based.
end
--[[
Checks input values to for out of range errors.
]]
local function validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, source, strong )
local errors = {};
lat_d = tonumber( lat_d ) or 0;
lat_m = tonumber( lat_m ) or 0;
lat_s = tonumber( lat_s ) or 0;
long_d = tonumber( long_d ) or 0;
long_m = tonumber( long_m ) or 0;
long_s = tonumber( long_s ) or 0;
if strong then
if lat_d < 0 then
table.insert(errors, {source, "latitude degrees < 0 with hemisphere flag"})
end
if long_d < 0 then
table.insert(errors, {source, "longitude degrees < 0 with hemisphere flag"})
end
--[[
#coordinates is inconsistent about whether this is an error. If globe: is
specified, it won't error on this condition, but otherwise it will.
For not simply disable this check.
if long_d > 180 then
table.insert(errors, {source, "longitude degrees > 180 with hemisphere flag"})
end
]]
end
if lat_d > 90 then
table.insert(errors, {source, "latitude degrees > 90"})
end
if lat_d < -90 then
table.insert(errors, {source, "latitude degrees < -90"})
end
if lat_m >= 60 then
table.insert(errors, {source, "latitude minutes >= 60"})
end
if lat_m < 0 then
table.insert(errors, {source, "latitude minutes < 0"})
end
if lat_s >= 60 then
table.insert(errors, {source, "latitude seconds >= 60"})
end
if lat_s < 0 then
table.insert(errors, {source, "latitude seconds < 0"})
end
if long_d >= 360 then
table.insert(errors, {source, "longitude degrees >= 360"})
end
if long_d <= -360 then
table.insert(errors, {source, "longitude degrees <= -360"})
end
if long_m >= 60 then
table.insert(errors, {source, "longitude minutes >= 60"})
end
if long_m < 0 then
table.insert(errors, {source, "longitude minutes < 0"})
end
if long_s >= 60 then
table.insert(errors, {source, "longitude seconds >= 60"})
end
if long_s < 0 then
table.insert(errors, {source, "longitude seconds < 0"})
end
return errors;
end
--[[
parseDec
Transforms decimal format latitude and longitude into the
structure to be used in displaying coordinates
]]
local function parseDec( lat, long, format )
local coordinateSpec = {}
local errors = {}
if not long then
return nil, {{"parseDec", "Missing longitude"}}
elseif not tonumber(long) then
return nil, {{"parseDec", "Longitude could not be parsed as a number: " .. long}}
end
errors = validate( lat, nil, nil, long, nil, nil, 'parseDec', false );
coordinateSpec["dec-lat"] = lat;
coordinateSpec["dec-long"] = long;
local mode = coordinates.determineMode( lat, long );
coordinateSpec["dms-lat"] = convert_dec2dms( lat, "N", "S", mode) -- {{coord/dec2dms|{{{1}}}|N|S|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
coordinateSpec["dms-long"] = convert_dec2dms( long, "E", "W", mode) -- {{coord/dec2dms|{{{2}}}|E|W|{{coord/prec dec|{{{1}}}|{{{2}}}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dec"
end
return coordinateSpec, errors
end
--[[
parseDMS
Transforms degrees, minutes, seconds format latitude and longitude
into the a structure to be used in displaying coordinates
]]
local function parseDMS( lat_d, lat_m, lat_s, lat_f, long_d, long_m, long_s, long_f, format )
local coordinateSpec, errors, backward = {}, {}
lat_f = lat_f:upper();
long_f = long_f:upper();
-- Check if specified backward
if lat_f == 'E' or lat_f == 'W' then
lat_d, long_d, lat_m, long_m, lat_s, long_s, lat_f, long_f, backward = long_d, lat_d, long_m, lat_m, long_s, lat_s, long_f, lat_f, true;
end
errors = validate( lat_d, lat_m, lat_s, long_d, long_m, long_s, 'parseDMS', true );
if not long_d then
return nil, {{"parseDMS", "Missing longitude" }}
elseif not tonumber(long_d) then
return nil, {{"parseDMS", "Longitude could not be parsed as a number:" .. long_d }}
end
if not lat_m and not lat_s and not long_m and not long_s and #errors == 0 then
if math_mod._precision( lat_d ) > 0 or math_mod._precision( long_d ) > 0 then
if lat_f:upper() == 'S' then
lat_d = '-' .. lat_d;
end
if long_f:upper() == 'W' then
long_d = '-' .. long_d;
end
return parseDec( lat_d, long_d, format );
end
end
coordinateSpec["dms-lat"] = lat_d.."°"..optionalArg(lat_m,"′") .. optionalArg(lat_s,"″") .. lat_f
coordinateSpec["dms-long"] = long_d.."°"..optionalArg(long_m,"′") .. optionalArg(long_s,"″") .. long_f
coordinateSpec["dec-lat"] = convert_dms2dec(lat_f, lat_d, lat_m, lat_s) -- {{coord/dms2dec|{{{4}}}|{{{1}}}|0{{{2}}}|0{{{3}}}}}
coordinateSpec["dec-long"] = convert_dms2dec(long_f, long_d, long_m, long_s) -- {{coord/dms2dec|{{{8}}}|{{{5}}}|0{{{6}}}|0{{{7}}}}}
if format then
coordinateSpec.default = format
else
coordinateSpec.default = "dms"
end
return coordinateSpec, errors, backward
end
--[[
Check the input arguments for coord to determine the kind of data being provided
and then make the necessary processing.
]]
local function formatTest(args)
local result, errors
local backward, primary = false, false
local function getParam(args, lim)
local ret = {}
for i = 1, lim do
ret[i] = args[i] or ''
end
return table.concat(ret, '_')
end
if not args[1] then
-- no lat logic
return errorPrinter( {{"formatTest", "Missing latitude"}} )
elseif not tonumber(args[1]) then
-- bad lat logic
return errorPrinter( {{"formatTest", "Unable to parse latitude as a number:" .. args[1]}} )
elseif not args[4] and not args[5] and not args[6] then
-- dec logic
result, errors = parseDec(args[1], args[2], args.format)
if not result then
return errorPrinter(errors);
end
-- formatting for geohack: geohack expects D_N_D_E notation or D;D notation
-- wikiminiatlas doesn't support D;D notation
-- #coordinates parserfunction doesn't support negative decimals with NSWE
result.param = table.concat({
math.abs(tonumber(args[1])),
((tonumber(args[1]) or 0) < 0) and 'S' or 'N',
math.abs(tonumber(args[2])),
((tonumber(args[2]) or 0) < 0) and 'W' or 'E',
args[3] or ''}, '_')
elseif dmsTest(args[4], args[8]) then
-- dms logic
result, errors, backward = parseDMS(args[1], args[2], args[3], args[4],
args[5], args[6], args[7], args[8], args.format)
if args[10] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 9)
elseif dmsTest(args[3], args[6]) then
-- dm logic
result, errors, backward = parseDMS(args[1], args[2], nil, args[3],
args[4], args[5], nil, args[6], args['format'])
if args[8] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 7)
elseif dmsTest(args[2], args[4]) then
-- d logic
result, errors, backward = parseDMS(args[1], nil, nil, args[2],
args[3], nil, nil, args[4], args.format)
if args[6] then
table.insert(errors, {'formatTest', 'Extra unexpected parameters'})
end
if not result then
return errorPrinter(errors)
end
result.param = getParam(args, 5)
else
-- Error
return errorPrinter({{"formatTest", "Unknown argument format"}}) .. '[[Category:Pages with malformed coordinate tags]]'
end
result.name = args.name
local extra_param = {'dim', 'globe', 'scale', 'region', 'source', 'type'}
for _, v in ipairs(extra_param) do
if args[v] then
table.insert(errors, {'formatTest', 'Parameter: "' .. v .. '=" should be "' .. v .. ':"' })
end
end
local ret = specPrinter(args, result)
if #errors > 0 then
ret = ret .. ' ' .. errorPrinter(errors) .. '[[Category:Pages with malformed coordinate tags]]'
end
return ret, backward
end
--[[
Generate Wikidata tracking categories.
]]
local function makeWikidataCategories(qid)
local ret
local qid = qid or mw.wikibase.getEntityIdForCurrentPage()
if mw.wikibase and current_page.namespace == 0 then
if qid and mw.wikibase.entityExists(qid) and mw.wikibase.getBestStatements(qid, "P625") and mw.wikibase.getBestStatements(qid, "P625")[1] then
local snaktype = mw.wikibase.getBestStatements(qid, "P625")[1].mainsnak.snaktype
if snaktype == 'value' then
-- coordinates exist both here and on Wikidata, and can be compared.
ret = 'Coordinates on Wikidata'
elseif snaktype == 'somevalue' then
ret = 'Coordinates on Wikidata set to unknown value'
elseif snaktype == 'novalue' then
ret = 'Coordinates on Wikidata set to no value'
end
else
-- We have to either import the coordinates to Wikidata or remove them here.
ret = 'Coordinates not on Wikidata'
end
end
if ret then
return string.format('[[Category:%s]]', ret)
else
return ''
end
end
--[[
Parse coordinates entered as a single string
]]
local function text2coord(text)
if type(text) ~= 'string' then return end
local coords = {}
local numTerms = 0
local parts
local function assign(k, number, start, pos)
if number then
coords[start + pos - 1] = number
if k == 1 then
numTerms = pos
elseif numTerms < pos then -- more terms in long than lat
return false
end
elseif numTerms >= pos then -- more terms in lat than long
return false
end
return true
end
text = mw.ustring.gsub(mw.text.trim(text:uupper()), "[*′″]", {['*'] = '°', ['′'] = "'", ['″'] = '"'})
for _, regex in ipairs({
"^([+%-%d.°'\"NS%s]+),%s*([+%-%d.°'\"EW%s]+)$", --split by commas
"^([+%-%d.°'\"%s]+[NS])%s*([+%-%d.°'\"%s]+[EW])$", --split by N/S
"^([+%-%d.°'%s]+\")%s*([+%-%d.°'%s]+\")$", --split by "
"^([+%-%d.°%s]+')%s*([+%-%d.°%s]+')$", --split by '
"^([+%-%d.%s]+°)%s*([+%-%d.%s]+°)$", --split by °
"^([+%-%d.]+)%s+([+%-%d.]+)$" --split by space
}) do
local lat, long = string.match(text, regex)
if lat and long then
parts = {mw.text.trim(lat), mw.text.trim(long)}
break
end
end
if not parts then return end
local SW = {"S", "W"}
local NE = {"N", "E"}
for k, v in ipairs(parts) do
local number
local start = k + numTerms
-- Find or create N, S, E, and W
local dir = v:match("([NSEW])$")
if dir then
v = v:sub(1,-2)
elseif v:sub(1,1) == '-' then
v = v:sub(2)
dir = SW[k]
else
dir = NE[k]
end
-- attempt to convert text to number
number = tonumber(v)
if number then
-- Single number, assign it to the position "start" in the "coords" array
if not assign(k, number, start, 1) then
return
end
-- attempt to convert dms to decimal
elseif string.match(v, "°") then
for pos, regex in ipairs({
"^%s*([+%-%d.]+)%s*°[^°]*$", --degrees
"^[^°']+°%s*([%d.]+)%s*'[^°']*$", --minutes
"^[^'\"]+'%s*([%d.]+)%s*\"[^'\"]*$" --seconds
}) do
-- Assign component to a position in the "coords" array determined
-- by "start" and "pos", and increment "numTerms" if this is latitude
if not assign(k, tonumber(string.match(v, regex)), start, pos) then
return
end
end
end
if coords[start] == nil then return end
coords[start + numTerms] = dir
end
return coords
end
--[[
link
Simple function to export the coordinates link for other uses.
Usage:
{{#invoke:Coordinates | link }}
]]
function coordinates.link(frame)
return coord_link;
end
--[[
dec2dms
Wrapper to allow templates to call dec2dms directly.
Usage:
{{#invoke:Coordinates | dec2dms | decimal_coordinate | positive_suffix |
negative_suffix | precision }}
decimal_coordinate is converted to DMS format. If positive, the positive_suffix
is appended (typical N or E), if negative, the negative suffix is appended. The
specified precision is one of 'D', 'DM', or 'DMS' to specify the level of detail
to use.
]]
coordinates.dec2dms = makeInvokeFunc('_dec2dms')
function coordinates._dec2dms(args)
local coordinate = args[1]
local firstPostfix = args[2] or ''
local secondPostfix = args[3] or ''
local precision = args[4] or ''
return convert_dec2dms(coordinate, firstPostfix, secondPostfix, precision)
end
--[[
Helper function to determine whether to use D, DM, or DMS
format depending on the precision of the decimal input.
]]
function coordinates.determineMode( value1, value2 )
local precision = math.max( math_mod._precision( value1 ), math_mod._precision( value2 ) );
if precision <= 0 then
return 'd'
elseif precision <= 2 then
return 'dm';
else
return 'dms';
end
end
--[[
dms2dec
Wrapper to allow templates to call dms2dec directly.
Usage:
{{#invoke:Coordinates | dms2dec | direction_flag | degrees |
minutes | seconds }}
Converts DMS values specified as degrees, minutes, seconds too decimal format.
direction_flag is one of N, S, E, W, and determines whether the output is
positive (i.e. N and E) or negative (i.e. S and W).
]]
coordinates.dms2dec = makeInvokeFunc('_dms2dec')
function coordinates._dms2dec(args)
local direction = args[1]
local degrees = args[2]
local minutes = args[3]
local seconds = args[4]
return convert_dms2dec(direction, degrees, minutes, seconds)
end
--[[
coord
Main entry point for Lua function to replace {{coord}}
Usage:
{{#invoke:Coordinates | coord }}
{{#invoke:Coordinates | coord | lat | long }}
{{#invoke:Coordinates | coord | lat | lat_flag | long | long_flag }}
...
Refer to {{coord}} documentation page for many additional parameters and
configuration options.
Note: This function provides the visual display elements of {{coord}}. In
order to load coordinates into the database, the {{#coordinates:}} parser
function must also be called, this is done automatically in the Lua
version of {{coord}}.
]]
coordinates.coord = makeInvokeFunc('_coord')
function coordinates._coord(args)
if not tonumber(args[1]) then
local parsed = text2coord(args[1])
if parsed then -- full lat/long entered as a single string
for i = 2, #args do args[#parsed + i - 1] = args[i] end
for i, v in ipairs(parsed) do args[i] = v end
elseif not args[2] then -- look for coordinates from wikidata
args[3] = args[1]; args[1] = nil
local entity = mw.wikibase.getEntityObject(args.qid)
if entity
and entity.claims
and entity.claims.P625
and entity.claims.P625[1].mainsnak.snaktype == 'value'
then
local precision = entity.claims.P625[1].mainsnak.datavalue.value.precision
args[1] = entity.claims.P625[1].mainsnak.datavalue.value.latitude
args[2] = entity.claims.P625[1].mainsnak.datavalue.value.longitude
if precision then
precision = -math_mod._round(math.log(precision)/math.log(10),0)
args[1] = math_mod._round(args[1],precision)
args[2] = math_mod._round(args[2],precision)
end
end
end
end
local contents, backward = formatTest(args)
local Notes = args.notes or ''
local Display = args.display and args.display:lower() or 'inline'
-- it and ti are short for inline,title and title,inline
local function isInline(s)
-- Finds whether coordinates are displayed inline.
return s:find('inline') ~= nil or s == 'i' or s == 'it' or s == 'ti'
end
local function isInTitle(s)
-- Finds whether coordinates are displayed in the title.
return s:find('title') ~= nil or s == 't' or s == 'it' or s == 'ti'
end
local function coord_wrapper(in_args)
-- Calls the parser function {{#coordinates:}}.
return mw.getCurrentFrame():callParserFunction('#coordinates', in_args) or ''
end
local text = ''
if isInline(Display) then
text = text .. '<span class="geo-inline">' .. contents .. Notes .. '</span>'
end
if isInTitle(Display) then
-- Add to output since indicator content is invisible to Lua later on
if not isInline(Display) then
text = text .. '<span class="geo-inline-hidden noexcerpt">' .. contents .. Notes .. '</span>'
end
text = text .. displaytitle(contents .. Notes) .. makeWikidataCategories(args.qid)
end
if not args.nosave then
local page_title, count = mw.title.getCurrentTitle(), 1
if backward then
local tmp = {}
while not string.find((args[count-1] or ''), '[EW]') do tmp[count] = (args[count] or ''); count = count+1 end
tmp.count = count; count = 2*(count-1)
while count >= tmp.count do table.insert(tmp, 1, (args[count] or '')); count = count-1 end
for i, v in ipairs(tmp) do args[i] = v end
else
while count <= 9 do args[count] = (args[count] or ''); count = count+1 end
end
if isInTitle(Display) and not page_title.isTalkPage and page_title.subpageText ~= 'doc' and page_title.subpageText ~= 'testcases' then args[10] = 'primary' end
args.notes, args.format, args.display = nil
text = text .. coord_wrapper(args)
end
return text
end
--[[
coord2text
Extracts a single value from a transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coord2text | {{Coord}} | parameter }}
Valid values for the second parameter are: lat (signed integer), long (signed integer), type, scale, dim, region, globe, source
]]
function coordinates._coord2text(coord,type)
if coord == '' or type == '' or not type then return nil end
type = mw.text.trim(type)
if type == 'lat' or type == 'long' then
local coordString = mw.ustring.match(coord,'[%.%d]+°[NS] [%.%d]+°[EW]')
if not coordString then
return nil
end
local result = mw.text.split(coordString, ' ')
local negative
if type == 'lat' then
result, negative = result[1], 'S'
else
result, negative = result[2], 'W'
end
if not result then
return nil
end
result = mw.text.split(result, '°')
if not result[1] then
return nil
end
if result[2] == negative then result[1] = '-'..result[1] end
return result[1]
else
return mw.ustring.match(coord, 'params=.-_' .. type .. ':(.-)[ _]')
end
end
function coordinates.coord2text(frame)
return coordinates._coord2text(frame.args[1],frame.args[2]) or ''
end
--[[
coordinsert
Injects some text into the Geohack link of a transclusion of {{Coord}} (if that text isn't already in the transclusion). Outputs the modified transclusion of {{Coord}}.
IF THE GEOHACK LINK SYNTAX CHANGES THIS FUNCTION MUST BE MODIFIED.
Usage:
{{#invoke:Coordinates | coordinsert | {{Coord}} | parameter:value | parameter:value | … }}
Do not make Geohack unhappy by inserting something which isn't mentioned in the {{Coord}} documentation.
]]
function coordinates.coordinsert(frame)
-- for the 2nd or later integer parameter (the first is the coord template, as above)
for i, v in ipairs(frame.args) do
if i ~= 1 then
-- if we cannot find in the coord_template the i_th coordinsert parameter e.g. region
if not mw.ustring.find(frame.args[1], (mw.ustring.match(frame.args[i], '^(.-:)') or '')) then
-- find from the params= up to the first possibly-present underscore
-- and append the i_th coordinsert parameter and a space
-- IDK why we're adding a space but it does seem somewhat convenient
frame.args[1] = mw.ustring.gsub(frame.args[1], '(params=.-)_? ', '%1_'..frame.args[i]..' ')
end
end
end
if frame.args.name then
-- if we can't find the vcard class
if not mw.ustring.find(frame.args[1], '<span class="vcard">') then
-- take something that looks like a coord template and add the vcard span with class and fn org class
local namestr = frame.args.name
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-default">)(<span[^<>]*>[^<>]*</span><span[^<>]*>[^<>]*<span[^<>]*>[^<>]*</span></span>)(</span>)',
'%1<span class="vcard">%2<span style="display:none"> (<span class="fn org">' .. namestr .. '</span>)</span></span>%3'
)
-- then find anything from coordinates parameters to the 'end' and attach the title parameter
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(¶ms=[^&"<>%[%] ]*) ',
'%1&title=' .. mw.uri.encode(namestr) .. ' '
)
end
end
-- replace the existing indicator with a new indicator using the modified content
frame.args[1] = mw.ustring.gsub(
frame.args[1],
'(<span class="geo%-inline[^"]*">(.+)</span>)\127[^\127]*UNIQ%-%-indicator%-%x+%-%-?QINU[^\127]*\127',
function (inline, coord) return inline .. displaytitle(coord) end
)
return frame.args[1]
end
return coordinates
mgr040y9bhe26jrkzioi6ulvlqhvehy
Module:Coordinates/styles.css
828
1289
10587
2023-05-24T21:17:17Z
en>Izno
0
per tper
10587
sanitized-css
text/css
/* {{pp-template}} */
/* Geographical coordinates defaults. The classes "geo", "longitude", and
"latitude" are used by the [[Geo microformat]]. */
.geo-default,
.geo-dms,
.geo-dec {
display: inline;
}
.geo-nondefault,
.geo-multi-punct,
.geo-inline-hidden {
display: none;
}
.longitude,
.latitude {
white-space: nowrap;
}
372gk2cap99kasnuwl2084jfakikzgw
10588
10587
2026-08-25T23:33:43Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Coordinates/styles.css]]
10587
sanitized-css
text/css
/* {{pp-template}} */
/* Geographical coordinates defaults. The classes "geo", "longitude", and
"latitude" are used by the [[Geo microformat]]. */
.geo-default,
.geo-dms,
.geo-dec {
display: inline;
}
.geo-nondefault,
.geo-multi-punct,
.geo-inline-hidden {
display: none;
}
.longitude,
.latitude {
white-space: nowrap;
}
372gk2cap99kasnuwl2084jfakikzgw
Module:Location map
828
1290
10589
2026-08-06T02:42:13Z
en>Hike395
0
let pushpin_* parameters to infoboxes override arguments specified in template code
10589
Scribunto
text/plain
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function round(n, decimals)
local pow = 10^(decimals or 0)
return math.floor(n * pow + 0.5) / pow
end
function p.getMapParams(map, frame)
if not map then
error('The name of the location map definition to use must be specified', 2)
end
local moduletitle = mw.title.new('Module:Location map/data/' .. map)
if not moduletitle then
error(string.format('%q is not a valid name for a location map definition', map), 2)
elseif moduletitle.exists then
local mapData = mw.loadData('Module:Location map/data/' .. map)
return function(name, params)
if name == nil then
return 'Module:Location map/data/' .. map
elseif mapData[name] == nil then
return ''
elseif params then
return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain()
else
return mapData[name]
end
end
else
error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2)
end
end
function p.data(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local params = {}
for k,v in ipairs(args) do
if k > 2 then
params[k-2] = v
end
end
return map(args[2], #params ~= 0 and params)
end
local hemisphereMultipliers = {
longitude = { W = -1, w = -1, E = 1, e = 1 },
latitude = { S = -1, s = -1, N = 1, n = 1 }
}
local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction)
if decimal then
if degrees then
error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2)
elseif minutes then
error('Minutes can only be provided with DMS degrees for ' .. direction, 2)
elseif seconds then
error('Seconds can only be provided with DMS degrees for ' .. direction, 2)
elseif hemisphere then
error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2)
end
local retval = tonumber(decimal)
if retval then
return retval
end
error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not minutes then
error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2)
elseif not degrees then
if minutes then
error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2)
elseif hemisphere then
error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2)
end
return nil
end
decimal = tonumber(degrees)
if not decimal then
error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2)
elseif minutes and not tonumber(minutes) then
error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not tonumber(seconds) then
error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere then
local multiplier = hemisphereMultipliers[direction][hemisphere]
if not multiplier then
error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal * multiplier
end
return decimal
end
-- Finds a parameter in a transclusion of {{Coord}}.
local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign
local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>')
if lat then
return tonumber(para == 'longitude' and long or lat)
end
local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]')
if para == 'longitude' then result = {result[3], result[4]} end
if not tonumber(result[1]) or not result[2] then
mw.log('Malformed coordinates value')
mw.logObject(para, 'para')
mw.logObject(coord, 'coord')
return error('Malformed coordinates value', 2)
end
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
end
-- effectively make removeBlanks false for caption and maplink, and true for everything else
-- if useWikidata is present but blank, convert it to false instead of nil
-- p.top, p.bottom, and their callers need to use this
function p.valueFunc(key, value)
if value then
value = mw.text.trim(value)
end
if value ~= '' or key == 'caption' or key == 'maplink' then
return value
elseif key == 'useWikidata' then
return false
end
end
local function getContainerImage(args, map)
if args.AlternativeMap then
return args.AlternativeMap
elseif args.relief then
local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') -- image1 to image99
if digits then
local imageDigits = map('image' .. digits)
if imageDigits ~= '' then return imageDigits end
end
local yesNo = require('Module:Yesno')
if yesNo(args.relief,true) then
local image1 = map('image1')
if image1 ~= '' then return image1 end
end
end
return map('image')
end
function p.top(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local width
local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*"))
if not args.width then
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
elseif mw.ustring.sub(args.width, -2) == 'px' then
width = mw.ustring.sub(args.width, 1, -3)
else
width = args.width
end
local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
if width_as_number == 0 then
-- check to see if width is junk. If it is, then use default calculation
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
end
if args.max_width ~= "" and args.max_width ~= nil then
-- check to see if width bigger than max_width
local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0;
if width_as_number>max_as_number and max_as_number>0 then
width = args.max_width;
end
end
local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}}
if args.float == 'center' then
retval = retval .. '<div class="center">'
end
if args.caption and args.caption ~= '' and args.border ~= 'infobox' then
retval = retval .. '<div class="locmap noresize thumb '
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'floatleft'
elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then
retval = retval .. 'tnone'
else
retval = retval .. 'floatright'
end
retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px'
if args.border == 'none' then
retval = retval .. ';border:none'
elseif args.border then
retval = retval .. ';border-color:' .. args.border
end
retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">')
else
retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;'
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'float:left;clear:left'
elseif args.float == '"center"' or args.float == 'center' then
retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto'
elseif args.float == '"none"' or args.float == 'none' then
retval = retval .. 'float:none;clear:none'
else
retval = retval .. 'float:right;clear:right'
end
retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">'
end
local image = getContainerImage(args, map)
local currentTitle = mw.title.getCurrentTitle()
retval = string.format(
'%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]',
retval,
image,
width,
args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')),
args.maplink and ('|link=' .. args.maplink) or ''
)
if args.caption and args.caption ~= '' then
if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then
retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]'
end
end
if args.overlay_image then
return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>'
else
return retval
end
end
function p.bottom(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local retval = '</div>'
local currentTitle = mw.title.getCurrentTitle()
if not args.caption or args.border == 'infobox' then
if args.border then
retval = retval .. '<div style="padding-top:0.2em">'
else
retval = retval .. '<div style="font-size:91%;padding-top:3px">'
end
retval = retval
.. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')')
.. '</div>'
elseif args.caption ~= '' then
-- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image
retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>'
end
if args.switcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>'
elseif args.autoSwitcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>'
end
retval = retval .. '</div></div>'
if args.caption_undefined then
mw.log('Removed parameter caption_undefined used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]'
end
end
if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then
mw.log('Removed parameter used in map definition ' .. map())
if currentTitle.namespace == 0 then
local key = (map('skew') ~= '' and 'skew' or '') ..
(map('lat_skew') ~= '' and 'lat_skew' or '') ..
(map('crosses180') ~= '' and 'crosses180' or '') ..
(map('type') ~= '' and 'type' or '')
retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]'
end
end
if string.find(map('name'), '|', 1, true) then
mw.log('Pipe used in name of map definition ' .. map())
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with a name containing a pipe]]'
end
end
if args.float == 'center' then
retval = retval .. '</div>'
end
return retval
end
local function markOuterDiv(x, y, imageDiv, labelDiv, label_size)
return mw.html.create('div')
:addClass('od')
:addClass('notheme') -- T236137
:cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%')
:node(imageDiv)
:node(labelDiv)
end
local function markImageDiv(mark, marksize, label, link, alt, title)
local builder = mw.html.create('div')
:addClass('id')
:cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px')
:attr('title', title)
if marksize ~= 0 then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]',
mark,
marksize,
marksize,
label,
link,
alt and ('|alt=' .. alt) or ''
))
end
return builder
end
local function markLabelDiv(label, label_size, label_width, position, background, x, marksize)
if tonumber(label_size) == 0 then
return mw.html.create('div'):addClass('l0'):wikitext(label)
end
local builder = mw.html.create('div')
:cssText('width:' .. label_width .. 'em')
local distance = round(marksize / 2 + 1)
if position == 'top' then -- specified top
builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'bottom' then -- specified bottom
builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left
builder:addClass('pl'):cssText('right:' .. distance .. 'px')
else -- specified right or autodetected to right
builder:addClass('pr'):cssText('left:' .. distance .. 'px')
end
builder = builder:tag('div')
:wikitext(label)
if background then
builder:cssText('background-color:' .. background)
end
return builder:done()
end
local function getX(longitude, left, right)
local width = (right - left) % 360
if width == 0 then
width = 360
end
local distanceFromLeft = (longitude - left) % 360
-- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter
if distanceFromLeft - width / 2 >= 180 then
distanceFromLeft = distanceFromLeft - 360
end
return 100 * distanceFromLeft / width
end
local function getY(latitude, top, bottom)
return 100 * (top - latitude) / (top - bottom)
end
function p.mark(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map~'})
end
local mapnames = {}
if not map then
if args[1] then
map = {}
for mapname in mw.text.gsplit(args[1], '#', true) do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
mapnames[#mapnames + 1] = mapname
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
args[1] = 'World'
end
end
if type(map) == 'table' then
local outputs = {}
local oldargs = args[1]
for k,v in ipairs(map) do
args[1] = mapnames[k]
outputs[k] = tostring(p.mark(frame, args, v))
end
args[1] = oldargs
return table.concat(outputs, '#PlaceList#') .. '#PlaceList#'
end
local x, y, longitude, latitude
longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude')
latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude')
if args.excludefrom then
-- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps)
for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do
-- Check if this map is excluded. If so, return an empty string.
if args[1] == exclusionmap then
return ''
end
end
end
local builder = mw.html.create()
local currentTitle = mw.title.getCurrentTitle()
if args.coordinates then
-- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]]
-- if longitude or latitude then
-- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided')
-- end
longitude = coord2text('longitude', args.coordinates)
latitude = coord2text('latitude', args.coordinates)
elseif not longitude and not latitude and args.useWikidata then
-- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't.
local entity = mw.wikibase.getEntity()
if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then
local value = entity.claims.P625[1].mainsnak.datavalue.value
longitude, latitude = value.longitude, value.latitude
end
if args.link and (currentTitle.namespace == 0) then
builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]')
end
end
if not longitude then
error('No value was provided for longitude')
elseif not latitude then
error('No value was provided for latitude')
end
if currentTitle.namespace > 0 then
if (not args.lon_deg) ~= (not args.lat_deg) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]')
elseif (not args.lon_min) ~= (not args.lat_min) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]')
elseif (not args.lon_sec) ~= (not args.lat_sec) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]')
elseif (not args.lon_dir) ~= (not args.lat_dir) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]')
elseif (not args.long) ~= (not args.lat) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]')
end
end
if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if args.skew or args.lon_shift or args.markhigh then
mw.log('Removed parameter used in invocation.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = (args.skew and 'skew' or '') ..
(args.lon_shift and 'lon_shift' or '') ..
(args.markhigh and 'markhigh' or '')
builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]')
end
end
if map('x') ~= '' then
x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude })))
else
x = tonumber(getX(longitude, map('left'), map('right')))
end
if map('y') ~= '' then
y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude })))
else
y = tonumber(getY(latitude, map('top'), map('bottom')))
end
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then
mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y)
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = currentTitle.prefixedText
builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]')
end
end
local mark = args.mark or map('mark')
if mark == '' then
mark = 'Red pog.svg'
end
local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8
local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2])
local label_size = args.label_size or 91
local labelDiv
if args.label and args.position ~= 'none' then
labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize)
end
return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size))
end
local function switcherSeparate(s)
if s == nil then return {} end
local retval = {}
for i in string.gmatch(s .. '#', '([^#]*)#') do
i = mw.text.trim(i)
retval[#retval + 1] = (i ~= '' and i)
end
return retval
end
function p.infobox_pushpin_map(frame)
--This function is designed to be invoked from an infobox template
--* Some parameters (generally starting with "pushpin_") are meant to be exposed as parameters
-- in the outer infobox, settable by editors
--* Others are meant to be "hidden" (e.g., only set inside the infobox template code)
-- First get the combined arguments from both parent and invocation frame
local raw_args = getArgs(frame,{parentFirst=true})
--If no map is supplied, return.
if not raw_args['pushpin_map'] then
return
end
-- Now get arguments from just the invocation frame
local frame_args = getArgs(frame,{frameOnly=true})
-- parsed_args will have the resulting merged parameters
local parsed_args = {}
-- Default to using wikidata coodinates if no other coordiantes supplied.
if raw_args.useWikidata == nil then
parsed_args.useWikidata = true
else
parsed_args.useWikidata = raw_args.useWikidata
end
-- Parse the arguments
parsed_args[1] = raw_args['pushpin_map']
parsed_args.float = frame_args.float or 'center'
parsed_args.border = frame_args.border or 'infobox'
parsed_args.default_width = frame_args.default_width
parsed_args.max_width = frame_args.max_width
parsed_args.coordinates = raw_args['coordinates']
parsed_args.caption = raw_args['pushpin_caption']
parsed_args.relief = raw_args['pushpin_relief']
parsed_args.label = raw_args['pushpin_label']
parsed_args.label_size = raw_args['pushpin_label_size']
parsed_args.position = raw_args['pushpin_label_position']
parsed_args.mark = raw_args['pushpin_mark']
parsed_args.marksize = raw_args['pushpin_mark_size']
parsed_args.alt = raw_args['pushpin_alt']
parsed_args.background = raw_args['pushpin_background']
parsed_args.width = raw_args['pushpin_map_size']
local map = {}
local caption_list = {}
for mapname in string.gmatch(parsed_args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if parsed_args['caption'] then
for caption in mw.text.gsplit(parsed_args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
if #map == 1 then
map = map[1]
if not parsed_args.caption then
parsed_args.caption = 'Location within ' .. map('name')
end
end
if type(map) == 'table' then
mw.log('----')
mw.logObject(map)
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
elseif not parsed_args.caption then
-- Set a default caption for each of the multiple maps
for i=1, #map do
caption_list[#caption_list + 1] = 'Location within '.. map[i]('name')
end
end
local outputs = {}
parsed_args.autoSwitcherLabel = true
for k,v in ipairs(map) do
parsed_args.caption = caption_list[k]
outputs[k] = p.main(frame, parsed_args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, parsed_args, map) .. tostring( p.mark(frame, parsed_args, map) ) .. p.bottom(frame, parsed_args, map)
end
end
function p.main(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc})
end
if args.useWikidata == nil then
args.useWikidata = true
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if args['caption'] then
if args['caption'] == "" then
while #caption_list < #map do
caption_list[#caption_list + 1] = args['caption']
end
else
for caption in mw.text.gsplit(args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
end
end
if type(map) == 'table' then
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
end
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
args.AlternativeMap = altmaps[k]
args.overlay_image = overlays[k]
args.caption = caption_list[k]
outputs[k] = p.main(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map)
end
end
return p
3pqbnkg8pemwulwnvka0szt6hqc0tii
10590
10589
2026-08-25T23:33:43Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map]]
10589
Scribunto
text/plain
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local function round(n, decimals)
local pow = 10^(decimals or 0)
return math.floor(n * pow + 0.5) / pow
end
function p.getMapParams(map, frame)
if not map then
error('The name of the location map definition to use must be specified', 2)
end
local moduletitle = mw.title.new('Module:Location map/data/' .. map)
if not moduletitle then
error(string.format('%q is not a valid name for a location map definition', map), 2)
elseif moduletitle.exists then
local mapData = mw.loadData('Module:Location map/data/' .. map)
return function(name, params)
if name == nil then
return 'Module:Location map/data/' .. map
elseif mapData[name] == nil then
return ''
elseif params then
return mw.message.newRawMessage(tostring(mapData[name]), unpack(params)):plain()
else
return mapData[name]
end
end
else
error('Unable to find the specified location map definition: "Module:Location map/data/' .. map .. '" does not exist', 2)
end
end
function p.data(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local params = {}
for k,v in ipairs(args) do
if k > 2 then
params[k-2] = v
end
end
return map(args[2], #params ~= 0 and params)
end
local hemisphereMultipliers = {
longitude = { W = -1, w = -1, E = 1, e = 1 },
latitude = { S = -1, s = -1, N = 1, n = 1 }
}
local function decdeg(degrees, minutes, seconds, hemisphere, decimal, direction)
if decimal then
if degrees then
error('Decimal and DMS degrees cannot both be provided for ' .. direction, 2)
elseif minutes then
error('Minutes can only be provided with DMS degrees for ' .. direction, 2)
elseif seconds then
error('Seconds can only be provided with DMS degrees for ' .. direction, 2)
elseif hemisphere then
error('A hemisphere can only be provided with DMS degrees for ' .. direction, 2)
end
local retval = tonumber(decimal)
if retval then
return retval
end
error('The value "' .. decimal .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not minutes then
error('Seconds were provided for ' .. direction .. ' without minutes also being provided', 2)
elseif not degrees then
if minutes then
error('Minutes were provided for ' .. direction .. ' without degrees also being provided', 2)
elseif hemisphere then
error('A hemisphere was provided for ' .. direction .. ' without degrees also being provided', 2)
end
return nil
end
decimal = tonumber(degrees)
if not decimal then
error('The degree value "' .. degrees .. '" provided for ' .. direction .. ' is not valid', 2)
elseif minutes and not tonumber(minutes) then
error('The minute value "' .. minutes .. '" provided for ' .. direction .. ' is not valid', 2)
elseif seconds and not tonumber(seconds) then
error('The second value "' .. seconds .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal + (minutes or 0)/60 + (seconds or 0)/3600
if hemisphere then
local multiplier = hemisphereMultipliers[direction][hemisphere]
if not multiplier then
error('The hemisphere "' .. hemisphere .. '" provided for ' .. direction .. ' is not valid', 2)
end
decimal = decimal * multiplier
end
return decimal
end
-- Finds a parameter in a transclusion of {{Coord}}.
local function coord2text(para,coord) -- this should be changed for languages which do not use Arabic numerals or the degree sign
local lat, long = mw.ustring.match(coord,'<span class="p%-latitude latitude">([^<]+)</span><span class="p%-longitude longitude">([^<]+)</span>')
if lat then
return tonumber(para == 'longitude' and long or lat)
end
local result = mw.text.split(mw.ustring.match(coord,'%-?[%.%d]+°[NS] %-?[%.%d]+°[EW]') or '', '[ °]')
if para == 'longitude' then result = {result[3], result[4]} end
if not tonumber(result[1]) or not result[2] then
mw.log('Malformed coordinates value')
mw.logObject(para, 'para')
mw.logObject(coord, 'coord')
return error('Malformed coordinates value', 2)
end
return tonumber(result[1]) * hemisphereMultipliers[para][result[2]]
end
-- effectively make removeBlanks false for caption and maplink, and true for everything else
-- if useWikidata is present but blank, convert it to false instead of nil
-- p.top, p.bottom, and their callers need to use this
function p.valueFunc(key, value)
if value then
value = mw.text.trim(value)
end
if value ~= '' or key == 'caption' or key == 'maplink' then
return value
elseif key == 'useWikidata' then
return false
end
end
local function getContainerImage(args, map)
if args.AlternativeMap then
return args.AlternativeMap
elseif args.relief then
local digits = mw.ustring.match(args.relief,'^[1-9][0-9]?$') -- image1 to image99
if digits then
local imageDigits = map('image' .. digits)
if imageDigits ~= '' then return imageDigits end
end
local yesNo = require('Module:Yesno')
if yesNo(args.relief,true) then
local image1 = map('image1')
if image1 ~= '' then return image1 end
end
end
return map('image')
end
function p.top(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local width
local default_as_number = tonumber(mw.ustring.match(tostring(args.default_width),"%d*"))
if not args.width then
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
elseif mw.ustring.sub(args.width, -2) == 'px' then
width = mw.ustring.sub(args.width, 1, -3)
else
width = args.width
end
local width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
if width_as_number == 0 then
-- check to see if width is junk. If it is, then use default calculation
width = round((default_as_number or 240) * (tonumber(map('defaultscale')) or 1))
width_as_number = tonumber(mw.ustring.match(tostring(width),"%d*")) or 0;
end
if args.max_width ~= "" and args.max_width ~= nil then
-- check to see if width bigger than max_width
local max_as_number = tonumber(mw.ustring.match(args.max_width,"%d*")) or 0;
if width_as_number>max_as_number and max_as_number>0 then
width = args.max_width;
end
end
local retval = frame:extensionTag{name = 'templatestyles', args = {src = 'Module:Location map/styles.css'}}
if args.float == 'center' then
retval = retval .. '<div class="center">'
end
if args.caption and args.caption ~= '' and args.border ~= 'infobox' then
retval = retval .. '<div class="locmap noresize thumb '
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'floatleft'
elseif args.float == '"center"' or args.float == 'center' or args.float == '"none"' or args.float == 'none' then
retval = retval .. 'tnone'
else
retval = retval .. 'floatright'
end
retval = retval .. '"><div class="thumbinner" style="width:' .. (width + 2) .. 'px'
if args.border == 'none' then
retval = retval .. ';border:none'
elseif args.border then
retval = retval .. ';border-color:' .. args.border
end
retval = retval .. '"><div style="position:relative;width:' .. width .. 'px' .. (args.border ~= 'none' and ';border:1px solid lightgray">' or '">')
else
retval = retval .. '<div class="locmap" style="width:' .. width .. 'px;'
if args.float == '"left"' or args.float == 'left' then
retval = retval .. 'float:left;clear:left'
elseif args.float == '"center"' or args.float == 'center' then
retval = retval .. 'float:none;clear:both;margin-left:auto;margin-right:auto'
elseif args.float == '"none"' or args.float == 'none' then
retval = retval .. 'float:none;clear:none'
else
retval = retval .. 'float:right;clear:right'
end
retval = retval .. '"><div style="width:' .. width .. 'px;padding:0"><div style="position:relative;width:' .. width .. 'px">'
end
local image = getContainerImage(args, map)
local currentTitle = mw.title.getCurrentTitle()
retval = string.format(
'%s[[File:%s|%spx|%s%s|class=notpageimage noviewer]]',
retval,
image,
width,
args.alt or ((args.label or currentTitle.text) .. ' is located in ' .. map('name')),
args.maplink and ('|link=' .. args.maplink) or ''
)
if args.caption and args.caption ~= '' then
if (currentTitle.namespace == 0) and mw.ustring.find(args.caption, '##') then
retval = retval .. '[[Category:Pages using location map with a double number sign in the caption]]'
end
end
if args.overlay_image then
return retval .. '<div style="position:absolute;top:0;left:0">[[File:' .. args.overlay_image .. '|' .. width .. 'px|class=notpageimage noviewer]]</div>'
else
return retval
end
end
function p.bottom(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true, valueFunc = p.valueFunc})
end
if not map then
map = p.getMapParams(args[1], frame)
end
local retval = '</div>'
local currentTitle = mw.title.getCurrentTitle()
if not args.caption or args.border == 'infobox' then
if args.border then
retval = retval .. '<div style="padding-top:0.2em">'
else
retval = retval .. '<div style="font-size:91%;padding-top:3px">'
end
retval = retval
.. (args.caption or (args.label or currentTitle.text) .. ' (' .. map('name') .. ')')
.. '</div>'
elseif args.caption ~= '' then
-- This is not the pipe trick. We're creating a link with no text on purpose, so that CSS can give us a nice image
retval = retval .. '<div class="thumbcaption"><div class="magnify">[[:File:' .. getContainerImage(args, map) .. '| ]]</div>' .. args.caption .. '</div>'
end
if args.switcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">' .. args.switcherLabel .. '</span>'
elseif args.autoSwitcherLabel then
retval = retval .. '<span class="switcher-label" style="display:none">Show map of ' .. map('name') .. '</span>'
end
retval = retval .. '</div></div>'
if args.caption_undefined then
mw.log('Removed parameter caption_undefined used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with removed parameters|caption_undefined]]'
end
end
if map('skew') ~= '' or map('lat_skew') ~= '' or map('crosses180') ~= '' or map('type') ~= '' then
mw.log('Removed parameter used in map definition ' .. map())
if currentTitle.namespace == 0 then
local key = (map('skew') ~= '' and 'skew' or '') ..
(map('lat_skew') ~= '' and 'lat_skew' or '') ..
(map('crosses180') ~= '' and 'crosses180' or '') ..
(map('type') ~= '' and 'type' or '')
retval = retval .. '[[Category:Location maps with removed parameters|' .. key .. ' ]]'
end
end
if string.find(map('name'), '|', 1, true) then
mw.log('Pipe used in name of map definition ' .. map())
if currentTitle.namespace == 0 then
retval = retval .. '[[Category:Location maps with a name containing a pipe]]'
end
end
if args.float == 'center' then
retval = retval .. '</div>'
end
return retval
end
local function markOuterDiv(x, y, imageDiv, labelDiv, label_size)
return mw.html.create('div')
:addClass('od')
:addClass('notheme') -- T236137
:cssText('top:' .. round(y, 3) .. '%;left:' .. round(x, 3) .. '%;font-size:' .. label_size .. '%')
:node(imageDiv)
:node(labelDiv)
end
local function markImageDiv(mark, marksize, label, link, alt, title)
local builder = mw.html.create('div')
:addClass('id')
:cssText('left:-' .. round(marksize / 2) .. 'px;top:-' .. round(marksize / 2) .. 'px')
:attr('title', title)
if marksize ~= 0 then
builder:wikitext(string.format(
'[[File:%s|%dx%dpx|%s|link=%s%s|class=notpageimage noviewer]]',
mark,
marksize,
marksize,
label,
link,
alt and ('|alt=' .. alt) or ''
))
end
return builder
end
local function markLabelDiv(label, label_size, label_width, position, background, x, marksize)
if tonumber(label_size) == 0 then
return mw.html.create('div'):addClass('l0'):wikitext(label)
end
local builder = mw.html.create('div')
:cssText('width:' .. label_width .. 'em')
local distance = round(marksize / 2 + 1)
if position == 'top' then -- specified top
builder:addClass('pv'):cssText('bottom:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'bottom' then -- specified bottom
builder:addClass('pv'):cssText('top:' .. distance .. 'px;left:' .. (-label_width / 2) .. 'em')
elseif position == 'left' or (tonumber(x) > 70 and position ~= 'right') then -- specified left or autodetected to left
builder:addClass('pl'):cssText('right:' .. distance .. 'px')
else -- specified right or autodetected to right
builder:addClass('pr'):cssText('left:' .. distance .. 'px')
end
builder = builder:tag('div')
:wikitext(label)
if background then
builder:cssText('background-color:' .. background)
end
return builder:done()
end
local function getX(longitude, left, right)
local width = (right - left) % 360
if width == 0 then
width = 360
end
local distanceFromLeft = (longitude - left) % 360
-- the distance needed past the map to the right equals distanceFromLeft - width. the distance needed past the map to the left equals 360 - distanceFromLeft. to minimize page stretching, go whichever way is shorter
if distanceFromLeft - width / 2 >= 180 then
distanceFromLeft = distanceFromLeft - 360
end
return 100 * distanceFromLeft / width
end
local function getY(latitude, top, bottom)
return 100 * (top - latitude) / (top - bottom)
end
function p.mark(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map~'})
end
local mapnames = {}
if not map then
if args[1] then
map = {}
for mapname in mw.text.gsplit(args[1], '#', true) do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
mapnames[#mapnames + 1] = mapname
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
args[1] = 'World'
end
end
if type(map) == 'table' then
local outputs = {}
local oldargs = args[1]
for k,v in ipairs(map) do
args[1] = mapnames[k]
outputs[k] = tostring(p.mark(frame, args, v))
end
args[1] = oldargs
return table.concat(outputs, '#PlaceList#') .. '#PlaceList#'
end
local x, y, longitude, latitude
longitude = decdeg(args.lon_deg, args.lon_min, args.lon_sec, args.lon_dir, args.long, 'longitude')
latitude = decdeg(args.lat_deg, args.lat_min, args.lat_sec, args.lat_dir, args.lat, 'latitude')
if args.excludefrom then
-- If this mark is to be excluded from certain maps entirely (useful in the context of multiple maps)
for exclusionmap in mw.text.gsplit(args.excludefrom, '#', true) do
-- Check if this map is excluded. If so, return an empty string.
if args[1] == exclusionmap then
return ''
end
end
end
local builder = mw.html.create()
local currentTitle = mw.title.getCurrentTitle()
if args.coordinates then
-- Temporarily removed to facilitate infobox conversion. See [[Wikipedia:Coordinates in infoboxes]]
-- if longitude or latitude then
-- error('Coordinates from [[Module:Coordinates]] and individual coordinates cannot both be provided')
-- end
longitude = coord2text('longitude', args.coordinates)
latitude = coord2text('latitude', args.coordinates)
elseif not longitude and not latitude and args.useWikidata then
-- If they didn't provide either coordinate, try Wikidata. If they provided one but not the other, don't.
local entity = mw.wikibase.getEntity()
if entity and entity.claims and entity.claims.P625 and entity.claims.P625[1].mainsnak.snaktype == 'value' then
local value = entity.claims.P625[1].mainsnak.datavalue.value
longitude, latitude = value.longitude, value.latitude
end
if args.link and (currentTitle.namespace == 0) then
builder:wikitext('[[Category:Location maps with linked markers with coordinates from Wikidata]]')
end
end
if not longitude then
error('No value was provided for longitude')
elseif not latitude then
error('No value was provided for latitude')
end
if currentTitle.namespace > 0 then
if (not args.lon_deg) ~= (not args.lat_deg) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Degrees]]')
elseif (not args.lon_min) ~= (not args.lat_min) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Minutes]]')
elseif (not args.lon_sec) ~= (not args.lat_sec) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Seconds]]')
elseif (not args.lon_dir) ~= (not args.lat_dir) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Hemisphere]]')
elseif (not args.long) ~= (not args.lat) then
builder:wikitext('[[Category:Location maps with different longitude and latitude precisions|Decimal]]')
end
end
if ((tonumber(args.lat_deg) or 0) < 0) and ((tonumber(args.lat_min) or 0) ~= 0 or (tonumber(args.lat_sec) or 0) ~= 0 or (args.lat_dir and args.lat_dir ~='')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if ((tonumber(args.lon_deg) or 0) < 0) and ((tonumber(args.lon_min) or 0) ~= 0 or (tonumber(args.lon_sec) or 0) ~= 0 or (args.lon_dir and args.lon_dir ~= '')) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lat_min) or 0) < 0) or ((tonumber(args.lat_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if (((tonumber(args.lon_min) or 0) < 0) or ((tonumber(args.lon_sec) or 0) < 0)) then
builder:wikitext('[[Category:Location maps with negative degrees and minutes or seconds]]')
end
if args.skew or args.lon_shift or args.markhigh then
mw.log('Removed parameter used in invocation.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = (args.skew and 'skew' or '') ..
(args.lon_shift and 'lon_shift' or '') ..
(args.markhigh and 'markhigh' or '')
builder:wikitext('[[Category:Location maps with removed parameters|' .. key ..' ]]')
end
end
if map('x') ~= '' then
x = tonumber(mw.ext.ParserFunctions.expr(map('x', { latitude, longitude })))
else
x = tonumber(getX(longitude, map('left'), map('right')))
end
if map('y') ~= '' then
y = tonumber(mw.ext.ParserFunctions.expr(map('y', { latitude, longitude })))
else
y = tonumber(getY(latitude, map('top'), map('bottom')))
end
if (x < 0 or x > 100 or y < 0 or y > 100) and not args.outside then
mw.log('Mark placed outside map boundaries without outside flag set. x = ' .. x .. ', y = ' .. y)
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
if currentTitle.namespace == 0 then
local key = currentTitle.prefixedText
builder:wikitext('[[Category:Location maps with marks outside map and outside parameter not set|' .. key .. ' ]]')
end
end
local mark = args.mark or map('mark')
if mark == '' then
mark = 'Red pog.svg'
end
local marksize = tonumber(args.marksize) or tonumber(map('marksize')) or 8
local imageDiv = markImageDiv(mark, marksize, args.label or mw.title.getCurrentTitle().text, args.link or '', args.alt, args[2])
local label_size = args.label_size or 91
local labelDiv
if args.label and args.position ~= 'none' then
labelDiv = markLabelDiv(args.label, label_size, args.label_width or 6, args.position, args.background, x, marksize)
end
return builder:node(markOuterDiv(x, y, imageDiv, labelDiv, label_size))
end
local function switcherSeparate(s)
if s == nil then return {} end
local retval = {}
for i in string.gmatch(s .. '#', '([^#]*)#') do
i = mw.text.trim(i)
retval[#retval + 1] = (i ~= '' and i)
end
return retval
end
function p.infobox_pushpin_map(frame)
--This function is designed to be invoked from an infobox template
--* Some parameters (generally starting with "pushpin_") are meant to be exposed as parameters
-- in the outer infobox, settable by editors
--* Others are meant to be "hidden" (e.g., only set inside the infobox template code)
-- First get the combined arguments from both parent and invocation frame
local raw_args = getArgs(frame,{parentFirst=true})
--If no map is supplied, return.
if not raw_args['pushpin_map'] then
return
end
-- Now get arguments from just the invocation frame
local frame_args = getArgs(frame,{frameOnly=true})
-- parsed_args will have the resulting merged parameters
local parsed_args = {}
-- Default to using wikidata coodinates if no other coordiantes supplied.
if raw_args.useWikidata == nil then
parsed_args.useWikidata = true
else
parsed_args.useWikidata = raw_args.useWikidata
end
-- Parse the arguments
parsed_args[1] = raw_args['pushpin_map']
parsed_args.float = frame_args.float or 'center'
parsed_args.border = frame_args.border or 'infobox'
parsed_args.default_width = frame_args.default_width
parsed_args.max_width = frame_args.max_width
parsed_args.coordinates = raw_args['coordinates']
parsed_args.caption = raw_args['pushpin_caption']
parsed_args.relief = raw_args['pushpin_relief']
parsed_args.label = raw_args['pushpin_label']
parsed_args.label_size = raw_args['pushpin_label_size']
parsed_args.position = raw_args['pushpin_label_position']
parsed_args.mark = raw_args['pushpin_mark']
parsed_args.marksize = raw_args['pushpin_mark_size']
parsed_args.alt = raw_args['pushpin_alt']
parsed_args.background = raw_args['pushpin_background']
parsed_args.width = raw_args['pushpin_map_size']
local map = {}
local caption_list = {}
for mapname in string.gmatch(parsed_args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if parsed_args['caption'] then
for caption in mw.text.gsplit(parsed_args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
if #map == 1 then
map = map[1]
if not parsed_args.caption then
parsed_args.caption = 'Location within ' .. map('name')
end
end
if type(map) == 'table' then
mw.log('----')
mw.logObject(map)
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
elseif not parsed_args.caption then
-- Set a default caption for each of the multiple maps
for i=1, #map do
caption_list[#caption_list + 1] = 'Location within '.. map[i]('name')
end
end
local outputs = {}
parsed_args.autoSwitcherLabel = true
for k,v in ipairs(map) do
parsed_args.caption = caption_list[k]
outputs[k] = p.main(frame, parsed_args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, parsed_args, map) .. tostring( p.mark(frame, parsed_args, map) ) .. p.bottom(frame, parsed_args, map)
end
end
function p.main(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map', valueFunc = p.valueFunc})
end
if args.useWikidata == nil then
args.useWikidata = true
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = p.getMapParams(mw.ustring.gsub(mapname, '^%s*(.-)%s*$', '%1'), frame)
end
if args['caption'] then
if args['caption'] == "" then
while #caption_list < #map do
caption_list[#caption_list + 1] = args['caption']
end
else
for caption in mw.text.gsplit(args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
end
if #map == 1 then map = map[1] end
else
map = p.getMapParams('World', frame)
end
end
if type(map) == 'table' then
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
end
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
args.AlternativeMap = altmaps[k]
args.overlay_image = overlays[k]
args.caption = caption_list[k]
outputs[k] = p.main(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return p.top(frame, args, map) .. tostring( p.mark(frame, args, map) ) .. p.bottom(frame, args, map)
end
end
return p
3pqbnkg8pemwulwnvka0szt6hqc0tii
Module:Location map/multi
828
1291
10591
2024-04-30T01:22:33Z
en>Pppery
0
Desandbox
10591
Scribunto
text/plain
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local locmap = require('Module:Location map')
local function switcherSeparate(s)
if s == nil then return {} end
local retval = {}
for i in string.gmatch(s .. '#', '([^#]*)#') do
i = mw.text.trim(i)
retval[#retval + 1] = (i ~= '' and i)
end
return retval
end
function p.container(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map+', valueFunc = locmap.valueFunc})
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if args['caption'] then
if args['caption'] == "" then
while #caption_list < #map do
caption_list[#caption_list + 1] = args['caption']
end
else
for caption in mw.text.gsplit(args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
end
if #map == 1 then map = map[1] end
else
map = locmap.getMapParams('World', frame)
end
end
if type(map) == 'table' then
local placeslist = mw.text.gsplit(args.places, '#PlaceList#')
local permaplaces = {}
local numbermaps = #map
local count = 0
for i = 1,numbermaps do
permaplaces[i] = {}
end
for place in placeslist do
table.insert(permaplaces[count%numbermaps + 1],place)
count = count + 1
end
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
end
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
args.AlternativeMap = altmaps[k]
args.overlay_image = overlays[k]
args.caption = caption_list[k]
args.places = table.concat(permaplaces[k])
outputs[k] = p.container(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return locmap.top(frame, args, map) .. (args.places and args.places:gsub('%s*\n%s*', '') or '') .. locmap.bottom(frame, args, map)
end
end
local function manyMakeArgs(fullArgs, n)
if n == 1 then
return {
lat = fullArgs.lat1 or fullArgs.lat,
long = fullArgs.long1 or fullArgs.long,
coordinates = fullArgs.coordinates1 or fullArgs.coordinates,
lat_deg = fullArgs.lat1_deg or fullArgs.lat_deg,
lat_min = fullArgs.lat1_min or fullArgs.lat_min,
lat_sec = fullArgs.lat1_sec or fullArgs.lat_sec,
lat_dir = fullArgs.lat1_dir or fullArgs.lat_dir,
lon_deg = fullArgs.lon1_deg or fullArgs.lon_deg,
lon_min = fullArgs.lon1_min or fullArgs.lon_min,
lon_sec = fullArgs.lon1_sec or fullArgs.lon_sec,
lon_dir = fullArgs.lon1_dir or fullArgs.lon_dir,
outside = fullArgs.outside1 or fullArgs.outside,
mark = fullArgs.mark1 or fullArgs.mark,
marksize = fullArgs.mark1size or fullArgs.marksize,
link = fullArgs.link1 or fullArgs.link,
label = fullArgs.label1 or fullArgs.label,
label_size = fullArgs.label1_size or fullArgs.label_size,
label_width = fullArgs.label1_width or fullArgs.label_width,
position = fullArgs.position1 or fullArgs.pos1 or fullArgs.position or fullArgs.pos,
background = fullArgs.background1 or fullArgs.bg1 or fullArgs.background or fullArgs.bg
}
else
return {
lat = fullArgs['lat' .. n],
long = fullArgs['long' .. n],
coordinates = fullArgs['coordinates' .. n],
lat_deg = fullArgs['lat' .. n .. '_deg'],
lat_min = fullArgs['lat' .. n .. '_min'],
lat_sec = fullArgs['lat' .. n .. '_sec'],
lat_dir = fullArgs['lat' .. n .. '_dir'],
lon_deg = fullArgs['lon' .. n .. '_deg'],
lon_min = fullArgs['lon' .. n .. '_min'],
lon_sec = fullArgs['lon' .. n .. '_sec'],
lon_dir = fullArgs['lon' .. n .. '_dir'],
outside = fullArgs['outside' .. n],
mark = fullArgs['mark' .. n],
marksize = fullArgs['mark' .. n .. 'size'],
link = fullArgs['link' .. n],
label = fullArgs['label' .. n],
label_size = fullArgs['label' .. n .. '_size'],
label_width = fullArgs['label' .. n .. '_width'],
position = fullArgs['position' .. n] or fullArgs['pos' .. n],
background = fullArgs['background' .. n] or fullArgs['bg' .. n]
}
end
end
function p.many(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map many', valueFunc = locmap.valueFunc})
end
if not args[1] then
args[1] = 'World'
end
if not map then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if #map ~= 1 then
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
outputs[k] = p.many(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
end
map = map[1]
end
local marks = {}
local markhigh
if args.markhigh then
mw.log('Removed parameter markhigh used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
markhigh = true
end
for k, v in pairs(args) do -- @todo change to uargs once we have that
if v then
if string.sub(k, -4) == '_deg' then
k = string.sub(k, 1, -5)
end
if string.sub(k, 1, 3) == 'lat' then
k = tonumber(string.sub(k, 4))
if k then
table.insert(marks, k)
end
elseif string.sub(k, 1, 11) == 'coordinates' then
k = tonumber(string.sub(k, 12))
if k then
table.insert(marks,k)
end
end
end
end
table.sort(marks)
if marks[1] ~= 1 and (args.lat or args.lat_deg or args.coordinates) then
table.insert(marks, 1, 1)
end
local body = ''
for _, v in ipairs(marks) do
-- don't try to consolidate this into the above loop. ordering of elements from pairs() is unspecified
body = body .. tostring( locmap.mark(frame, manyMakeArgs(args, v), map) )
if args['mark' .. v .. 'high'] then
mw.log('Removed parameter mark' .. v .. 'high used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
markhigh = true
end
end
args.label = nil -- there is no global label
return locmap.top(frame, args, map) .. body .. locmap.bottom(frame, args, map) .. (markhigh and '[[Category:Location maps with possible errors|Page using removed parameter]]' or '')
end
function p.load(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
local dataModule = mw.loadData(args[1])
local containerArgs = dataModule.containerArgs
if not map then
map = {}
for mapname in string.gmatch(containerArgs[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if #map ~= 1 then
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
outputs[k] = p.load(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
end
map = map[1]
end
local marks = {}
if dataModule.marks then
for k,markArgs in ipairs(dataModule.marks) do
marks[k] = tostring(locmap.mark(frame, markArgs, map))
end
end
if dataModule.secondaryModules then
for _,modname in ipairs(dataModule.secondaryModules) do
for _,markArgs in ipairs(mw.loadData(modname).marks) do
marks[#marks + 1] = tostring(locmap.mark(frame, markArgs, map))
end
end
end
if args.autoSwitcherLabel then
local TableTools = require('Module:TableTools')
containerArgs = TableTools.shallowClone(containerArgs)
containerArgs.autoSwitcherLabel = true
end
return locmap.top(frame, containerArgs, map) .. table.concat(marks) .. locmap.bottom(frame, containerArgs, map)
end
return p
q9gz44tzbnjx2aljxbl0067zos3ns53
10592
10591
2026-08-25T23:33:43Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map/multi]]
10591
Scribunto
text/plain
require('strict')
local p = {}
local getArgs = require('Module:Arguments').getArgs
local locmap = require('Module:Location map')
local function switcherSeparate(s)
if s == nil then return {} end
local retval = {}
for i in string.gmatch(s .. '#', '([^#]*)#') do
i = mw.text.trim(i)
retval[#retval + 1] = (i ~= '' and i)
end
return retval
end
function p.container(frame, args, map)
local caption_list = {}
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map+', valueFunc = locmap.valueFunc})
end
if not map then
if args[1] then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if args['caption'] then
if args['caption'] == "" then
while #caption_list < #map do
caption_list[#caption_list + 1] = args['caption']
end
else
for caption in mw.text.gsplit(args['caption'], '##', true) do
caption_list[#caption_list + 1] = caption
end
end
end
if #map == 1 then map = map[1] end
else
map = locmap.getMapParams('World', frame)
end
end
if type(map) == 'table' then
local placeslist = mw.text.gsplit(args.places, '#PlaceList#')
local permaplaces = {}
local numbermaps = #map
local count = 0
for i = 1,numbermaps do
permaplaces[i] = {}
end
for place in placeslist do
table.insert(permaplaces[count%numbermaps + 1],place)
count = count + 1
end
local altmaps = switcherSeparate(args.AlternativeMap)
if #altmaps > #map then
error(string.format('%d AlternativeMaps were provided, but only %d maps were provided', #altmaps, #map))
end
local overlays = switcherSeparate(args.overlay_image)
if #overlays > #map then
error(string.format('%d overlay_images were provided, but only %d maps were provided', #overlays, #map))
end
if #caption_list > #map then
error(string.format('%d captions were provided, but only %d maps were provided', #caption_list, #map))
end
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
args.AlternativeMap = altmaps[k]
args.overlay_image = overlays[k]
args.caption = caption_list[k]
args.places = table.concat(permaplaces[k])
outputs[k] = p.container(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
else
return locmap.top(frame, args, map) .. (args.places and args.places:gsub('%s*\n%s*', '') or '') .. locmap.bottom(frame, args, map)
end
end
local function manyMakeArgs(fullArgs, n)
if n == 1 then
return {
lat = fullArgs.lat1 or fullArgs.lat,
long = fullArgs.long1 or fullArgs.long,
coordinates = fullArgs.coordinates1 or fullArgs.coordinates,
lat_deg = fullArgs.lat1_deg or fullArgs.lat_deg,
lat_min = fullArgs.lat1_min or fullArgs.lat_min,
lat_sec = fullArgs.lat1_sec or fullArgs.lat_sec,
lat_dir = fullArgs.lat1_dir or fullArgs.lat_dir,
lon_deg = fullArgs.lon1_deg or fullArgs.lon_deg,
lon_min = fullArgs.lon1_min or fullArgs.lon_min,
lon_sec = fullArgs.lon1_sec or fullArgs.lon_sec,
lon_dir = fullArgs.lon1_dir or fullArgs.lon_dir,
outside = fullArgs.outside1 or fullArgs.outside,
mark = fullArgs.mark1 or fullArgs.mark,
marksize = fullArgs.mark1size or fullArgs.marksize,
link = fullArgs.link1 or fullArgs.link,
label = fullArgs.label1 or fullArgs.label,
label_size = fullArgs.label1_size or fullArgs.label_size,
label_width = fullArgs.label1_width or fullArgs.label_width,
position = fullArgs.position1 or fullArgs.pos1 or fullArgs.position or fullArgs.pos,
background = fullArgs.background1 or fullArgs.bg1 or fullArgs.background or fullArgs.bg
}
else
return {
lat = fullArgs['lat' .. n],
long = fullArgs['long' .. n],
coordinates = fullArgs['coordinates' .. n],
lat_deg = fullArgs['lat' .. n .. '_deg'],
lat_min = fullArgs['lat' .. n .. '_min'],
lat_sec = fullArgs['lat' .. n .. '_sec'],
lat_dir = fullArgs['lat' .. n .. '_dir'],
lon_deg = fullArgs['lon' .. n .. '_deg'],
lon_min = fullArgs['lon' .. n .. '_min'],
lon_sec = fullArgs['lon' .. n .. '_sec'],
lon_dir = fullArgs['lon' .. n .. '_dir'],
outside = fullArgs['outside' .. n],
mark = fullArgs['mark' .. n],
marksize = fullArgs['mark' .. n .. 'size'],
link = fullArgs['link' .. n],
label = fullArgs['label' .. n],
label_size = fullArgs['label' .. n .. '_size'],
label_width = fullArgs['label' .. n .. '_width'],
position = fullArgs['position' .. n] or fullArgs['pos' .. n],
background = fullArgs['background' .. n] or fullArgs['bg' .. n]
}
end
end
function p.many(frame, args, map)
if not args then
args = getArgs(frame, {wrappers = 'Template:Location map many', valueFunc = locmap.valueFunc})
end
if not args[1] then
args[1] = 'World'
end
if not map then
map = {}
for mapname in string.gmatch(args[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if #map ~= 1 then
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
outputs[k] = p.many(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
end
map = map[1]
end
local marks = {}
local markhigh
if args.markhigh then
mw.log('Removed parameter markhigh used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
markhigh = true
end
for k, v in pairs(args) do -- @todo change to uargs once we have that
if v then
if string.sub(k, -4) == '_deg' then
k = string.sub(k, 1, -5)
end
if string.sub(k, 1, 3) == 'lat' then
k = tonumber(string.sub(k, 4))
if k then
table.insert(marks, k)
end
elseif string.sub(k, 1, 11) == 'coordinates' then
k = tonumber(string.sub(k, 12))
if k then
table.insert(marks,k)
end
end
end
end
table.sort(marks)
if marks[1] ~= 1 and (args.lat or args.lat_deg or args.coordinates) then
table.insert(marks, 1, 1)
end
local body = ''
for _, v in ipairs(marks) do
-- don't try to consolidate this into the above loop. ordering of elements from pairs() is unspecified
body = body .. tostring( locmap.mark(frame, manyMakeArgs(args, v), map) )
if args['mark' .. v .. 'high'] then
mw.log('Removed parameter mark' .. v .. 'high used.')
local parent = frame:getParent()
if parent then
mw.log('Parent is ' .. parent:getTitle())
end
mw.logObject(args, 'args')
markhigh = true
end
end
args.label = nil -- there is no global label
return locmap.top(frame, args, map) .. body .. locmap.bottom(frame, args, map) .. (markhigh and '[[Category:Location maps with possible errors|Page using removed parameter]]' or '')
end
function p.load(frame, args, map)
if not args then
args = getArgs(frame, {frameOnly = true})
end
local dataModule = mw.loadData(args[1])
local containerArgs = dataModule.containerArgs
if not map then
map = {}
for mapname in string.gmatch(containerArgs[1], '[^#]+') do
map[#map + 1] = locmap.getMapParams(mapname, frame)
end
if #map ~= 1 then
local outputs = {}
args.autoSwitcherLabel = true
for k,v in ipairs(map) do
outputs[k] = p.load(frame, args, v)
end
return '<div class="switcher-container">' .. table.concat(outputs) .. '</div>'
end
map = map[1]
end
local marks = {}
if dataModule.marks then
for k,markArgs in ipairs(dataModule.marks) do
marks[k] = tostring(locmap.mark(frame, markArgs, map))
end
end
if dataModule.secondaryModules then
for _,modname in ipairs(dataModule.secondaryModules) do
for _,markArgs in ipairs(mw.loadData(modname).marks) do
marks[#marks + 1] = tostring(locmap.mark(frame, markArgs, map))
end
end
end
if args.autoSwitcherLabel then
local TableTools = require('Module:TableTools')
containerArgs = TableTools.shallowClone(containerArgs)
containerArgs.autoSwitcherLabel = true
end
return locmap.top(frame, containerArgs, map) .. table.concat(marks) .. locmap.bottom(frame, containerArgs, map)
end
return p
q9gz44tzbnjx2aljxbl0067zos3ns53
Module:Location map/styles.css
828
1292
10593
2025-05-23T23:48:41Z
en>Izno
0
per tper
10593
sanitized-css
text/css
/* {{pp|small=yes}} */
.locmap .od {
position: absolute;
}
.locmap .id {
position: absolute;
line-height: 0;
}
.locmap .l0 {
font-size: 0;
position: absolute;
}
.locmap .pv {
line-height: 110%;
position: absolute;
text-align: center;
}
.locmap .pl {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: right;
}
.locmap .pr {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: left;
}
.locmap .pv > div {
display: inline;
padding: 1px;
}
.locmap .pl > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: right;
}
.locmap .pr > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: left;
}
/* Dark mode theme: */
@media screen {
html.skin-theme-clientpref-night .od,
html.skin-theme-clientpref-night .od .pv > div,
html.skin-theme-clientpref-night .od .pl > div,
html.skin-theme-clientpref-night .od .pr > div {
/* Use !important to override any infobox rules */
background: #fff !important;
color: #000 !important;
}
html.skin-theme-clientpref-night .locmap img {
filter: grayscale(0.6);
}
/* Special handling for maps inside infoboxes
* [[Module talk:Location map#Map label background bug in dark mode]]
*/
html.skin-theme-clientpref-night .infobox-full-data .locmap div {
background: transparent !important;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .locmap img {
filter: grayscale(0.6);
}
html.skin-theme-clientpref-os .od,
html.skin-theme-clientpref-os .od .pv > div,
html.skin-theme-clientpref-os .od .pl > div,
html.skin-theme-clientpref-os .od .pr > div {
/* Use !important to override any infobox rules */
background: white !important;
color: #000 !important;
}
html.skin-theme-clientpref-os .infobox-full-data .locmap div {
background: transparent !important;
}
}
rs1zb23dpoja6q2k5yakw4kskmcnf7l
10594
10593
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map/styles.css]]
10593
sanitized-css
text/css
/* {{pp|small=yes}} */
.locmap .od {
position: absolute;
}
.locmap .id {
position: absolute;
line-height: 0;
}
.locmap .l0 {
font-size: 0;
position: absolute;
}
.locmap .pv {
line-height: 110%;
position: absolute;
text-align: center;
}
.locmap .pl {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: right;
}
.locmap .pr {
line-height: 110%;
position: absolute;
top: -0.75em;
text-align: left;
}
.locmap .pv > div {
display: inline;
padding: 1px;
}
.locmap .pl > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: right;
}
.locmap .pr > div {
display: inline; /* inline does not impact floated elements */
padding: 1px;
float: left;
}
/* Dark mode theme: */
@media screen {
html.skin-theme-clientpref-night .od,
html.skin-theme-clientpref-night .od .pv > div,
html.skin-theme-clientpref-night .od .pl > div,
html.skin-theme-clientpref-night .od .pr > div {
/* Use !important to override any infobox rules */
background: #fff !important;
color: #000 !important;
}
html.skin-theme-clientpref-night .locmap img {
filter: grayscale(0.6);
}
/* Special handling for maps inside infoboxes
* [[Module talk:Location map#Map label background bug in dark mode]]
*/
html.skin-theme-clientpref-night .infobox-full-data .locmap div {
background: transparent !important;
}
}
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .locmap img {
filter: grayscale(0.6);
}
html.skin-theme-clientpref-os .od,
html.skin-theme-clientpref-os .od .pv > div,
html.skin-theme-clientpref-os .od .pl > div,
html.skin-theme-clientpref-os .od .pr > div {
/* Use !important to override any infobox rules */
background: white !important;
color: #000 !important;
}
html.skin-theme-clientpref-os .infobox-full-data .locmap div {
background: transparent !important;
}
}
rs1zb23dpoja6q2k5yakw4kskmcnf7l
Tempilet:Non breaking hyphen
10
1293
10597
2024-01-12T17:59:51Z
en>MusikBot II
0
Changed protection settings for "[[Template:Non breaking hyphen]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 191125 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
10597
wikitext
text/x-wiki
<noinclude>{{#tag:syntaxhighlight|
</noinclude>‑<noinclude>
|lang=html}}
{{template doc}}</noinclude>
9x62ykcwm4ewfyma6zlp3neiskjrym5
10598
10597
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Non_breaking_hyphen]]
10597
wikitext
text/x-wiki
<noinclude>{{#tag:syntaxhighlight|
</noinclude>‑<noinclude>
|lang=html}}
{{template doc}}</noinclude>
9x62ykcwm4ewfyma6zlp3neiskjrym5
Module:Location map/data/France
828
1294
10599
2016-01-02T11:08:51Z
en>John of Reading
0
[[File:France location map-Regions and departements-2016.svg]] per edit request
10599
Scribunto
text/plain
return {
name = 'France',
top = 51.5,
bottom = 41.0,
left = -5.8,
right = 10.0,
image = 'France location map-Regions and departements-2016.svg',
image1 = 'France relief location map.jpg'
}
st58qibwsfel1bkal2phy30a261hk3d
10600
10599
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map/data/France]]
10599
Scribunto
text/plain
return {
name = 'France',
top = 51.5,
bottom = 41.0,
left = -5.8,
right = 10.0,
image = 'France location map-Regions and departements-2016.svg',
image1 = 'France relief location map.jpg'
}
st58qibwsfel1bkal2phy30a261hk3d
Module:Location map/data/Australia
828
1295
10601
2018-02-23T03:22:06Z
en>Plastikspork
0
Protected "[[Module:Location map/data/Australia]]": [[WP:High-risk templates|High-risk Lua module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
10601
Scribunto
text/plain
return {
name = 'Australia',
top = -9,
bottom = -44.5,
left = 111.5,
right = 155,
image = 'Australia location map.svg',
image1 = 'Australia relief map.jpg',
image2 = 'Australia location map grey.svg',
}
768s4xmgc8tlyys5gz6nzv4ciq0ri2b
10602
10601
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map/data/Australia]]
10601
Scribunto
text/plain
return {
name = 'Australia',
top = -9,
bottom = -44.5,
left = 111.5,
right = 155,
image = 'Australia location map.svg',
image1 = 'Australia relief map.jpg',
image2 = 'Australia location map grey.svg',
}
768s4xmgc8tlyys5gz6nzv4ciq0ri2b
Module:Location map/data/England
828
1296
10603
2024-01-03T19:28:12Z
en>Pppery
0
Convert old-style module redirect to new built-in redirect (via [[WP:JWB]])
10603
Scribunto
text/plain
return require [[Module:Location map/data/UK England]]
ecw7q5eaadmfhsbd2m0vkc8cf92t7ue
10604
10603
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map/data/England]]
10603
Scribunto
text/plain
return require [[Module:Location map/data/UK England]]
ecw7q5eaadmfhsbd2m0vkc8cf92t7ue
Module:Location map/data/UK England
828
1297
10605
2024-05-31T14:44:00Z
en>Paine Ellsworth
0
per edit request on talk page - update location map
10605
Scribunto
text/plain
return {
name = 'England',
top = 56,
bottom = 49.75,
left = -6.75,
right = 2,
image = 'United Kingdom England adm location map.svg',
image1 = 'England relief location map.jpg'
}
4k3uq1nac82f8r609159gk6tggmmg7h
10606
10605
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map/data/UK_England]]
10605
Scribunto
text/plain
return {
name = 'England',
top = 56,
bottom = 49.75,
left = -6.75,
right = 2,
image = 'United Kingdom England adm location map.svg',
image1 = 'England relief location map.jpg'
}
4k3uq1nac82f8r609159gk6tggmmg7h
Module:Location map/data/USA
828
1298
10607
2019-02-10T18:47:41Z
en>Zyxw
0
update name used in automatic captions
10607
Scribunto
text/plain
return {
name = 'the United States',
x = '50.0 + 124.03149777329222 * ((1.9694462586094064-($1 * pi / 180)) * sin(0.6010514667026994 * ($2 + 96) * pi / 180))',
y = '50.0 + 1.6155950752393982 * 124.03149777329222 * ( 0.02613325650382181 - (1.3236744353715044 - (1.9694462586094064 - ($1 * pi / 180)) * cos(0.6010514667026994 * ($2 + 96) * pi / 180)))',
image = 'Usa edcp location map.svg',
image1 = 'Usa edcp relief location map.png'
}
omeidj06s1rkgvgxe87f9nu423e3wd2
10608
10607
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Location_map/data/USA]]
10607
Scribunto
text/plain
return {
name = 'the United States',
x = '50.0 + 124.03149777329222 * ((1.9694462586094064-($1 * pi / 180)) * sin(0.6010514667026994 * ($2 + 96) * pi / 180))',
y = '50.0 + 1.6155950752393982 * 124.03149777329222 * ( 0.02613325650382181 - (1.3236744353715044 - (1.9694462586094064 - ($1 * pi / 180)) * cos(0.6010514667026994 * ($2 + 96) * pi / 180)))',
image = 'Usa edcp location map.svg',
image1 = 'Usa edcp relief location map.png'
}
omeidj06s1rkgvgxe87f9nu423e3wd2
Tempilet:Nbhyph
10
1299
10609
2024-01-12T17:59:51Z
en>MusikBot II
0
Changed protection settings for "[[Template:Nbhyph]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 190521 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite))
10609
wikitext
text/x-wiki
#REDIRECT [[Template:Non breaking hyphen]]
{{R from move}}
kg6i68ziq8xqj7eo7aie66dhvnfffmi
10610
10609
2026-08-25T23:33:44Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Nbhyph]]
10609
wikitext
text/x-wiki
#REDIRECT [[Template:Non breaking hyphen]]
{{R from move}}
kg6i68ziq8xqj7eo7aie66dhvnfffmi
Tempilet:Kbd
10
1300
10611
2024-06-03T15:51:34Z
en>Jonesey95
0
Fix [[Special:LintErrors|Linter]] errors.
10611
wikitext
text/x-wiki
<templatestyles src="Kbd/styles.css"></templatestyles><kbd class="{{{class|}}} mw-tmpl-kbd" {{#if:{{{id|}}}|id="{{{id}}}"}} style="{{#if:{{{spacing|}}}| padding-left:{{{padding|0.2em}}}; padding-right:{{{padding|0.2em}}};| letter-spacing:0.05em; padding-left:0.25em; padding-right:0.2em;}}{{#if:{{{style|}}}|{{{style}}}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1|user input}}}</kbd><noinclude>
<!--Categories go near the bottom of the /doc page.-->
{{Documentation}}
</noinclude>
2ckjrmjacnm8dk3nrbnhm5ab97rp0z7
10612
10611
2026-08-25T23:33:45Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Kbd]]
10611
wikitext
text/x-wiki
<templatestyles src="Kbd/styles.css"></templatestyles><kbd class="{{{class|}}} mw-tmpl-kbd" {{#if:{{{id|}}}|id="{{{id}}}"}} style="{{#if:{{{spacing|}}}| padding-left:{{{padding|0.2em}}}; padding-right:{{{padding|0.2em}}};| letter-spacing:0.05em; padding-left:0.25em; padding-right:0.2em;}}{{#if:{{{style|}}}|{{{style}}}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1|user input}}}</kbd><noinclude>
<!--Categories go near the bottom of the /doc page.-->
{{Documentation}}
</noinclude>
2ckjrmjacnm8dk3nrbnhm5ab97rp0z7
Tempilet:Tld
10
1301
10613
2020-11-20T18:52:18Z
en>Primefac
0
avoid redir
10613
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
m8isvw3phvjr9rfkupy4uef5yqajks7
10614
10613
2026-08-25T23:33:45Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Tld]]
10613
wikitext
text/x-wiki
#REDIRECT [[Template:Template link code]]
m8isvw3phvjr9rfkupy4uef5yqajks7
Tempilet:Tl2
10
1302
10615
2026-01-27T13:27:40Z
en>Paine Ellsworth
0
add [[WP:RCAT|rcat template]]
10615
wikitext
text/x-wiki
#REDIRECT [[Template:Template link interwiki]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
}}
1oi7jh94ehbfehrbm4tq3tjo1smasrs
10616
10615
2026-08-25T23:33:45Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Tl2]]
10615
wikitext
text/x-wiki
#REDIRECT [[Template:Template link interwiki]]
{{Redirect category shell|
{{R from move}}
{{R from template shortcut}}
}}
1oi7jh94ehbfehrbm4tq3tjo1smasrs
Module:Transclusion count/data/L
828
1303
10617
2026-08-23T05:09:15Z
en>Ahechtbot
0
[[Wikipedia:BOT|Bot]]: Updated page.
10617
Scribunto
text/plain
return {
["LASTYEAR"] = 846000,
["LAT"] = 4100,
["LCAuth"] = 3300,
["LCCN"] = 2300,
["LKA"] = 2100,
["LTU"] = 4900,
["LUX"] = 2500,
["LVA"] = 4700,
["La"] = 518000,
["LaPreferente"] = 2300,
["Label"] = 42000,
["Lafc"] = 7000,
["Lang"] = 457000,
["Lang-ka"] = 5900,
["Lang-sr-Cyrl"] = 13000,
["Lang-sr-cyr"] = 3300,
["Lang-sr-cyrl"] = 2400,
["Lang-zh"] = 84000,
["Lang2iso"] = 4500,
["Lang_unset_italics"] = 2400,
["Langnf"] = 2700,
["Langr"] = 2300,
["Language_with_name"] = 7800,
["Language_with_name/for"] = 3300,
["Languages"] = 2700,
["Langx"] = 671000,
["Large"] = 506000,
["Large_category_TOC"] = 11000,
["Last_edited_by"] = 62000,
["Last_word"] = 41000,
["LaunchesByYear_footer"] = 3600,
["LaunchesByYear_header"] = 3600,
["Law_sidebar_style/styles.css"] = 2200,
["Lc"] = 9900,
["Lead_too_short"] = 11000,
["League_icon"] = 3600,
["Leagueicon"] = 3500,
["Leave_feedback/link"] = 86000,
["Left"] = 10000,
["Left-pointing_double_angles"] = 2900,
["Left_angles"] = 2900,
["Leftlegend"] = 2000,
["Legend"] = 35000,
["Legend/styles.css"] = 152000,
["Legend0"] = 13000,
["Legend2"] = 23000,
["Legend_inline"] = 28000,
["LepIndex"] = 12000,
["Letter-NumberCombDisambig"] = 3500,
["Letter–number_combination_disambiguation"] = 4900,
["Lgtext"] = 3900,
["Libera.Chat"] = 11000,
["Library_link_about"] = 4000,
["Library_of_Congress_Control_Number"] = 2400,
["Library_resources_box"] = 4200,
["Librivox_author"] = 7300,
["Librivox_book"] = 4000,
["LicenseTagFairUseQualifier"] = 12000,
["License_migration"] = 45000,
["License_migration_complete"] = 19000,
["License_migration_not_eligible"] = 6800,
["License_migration_redundant"] = 19000,
["Lichengloss"] = 3100,
["Like"] = 2600,
["Likely"] = 5400,
["Line_link"] = 15000,
["Linear-gradient_text"] = 9200,
["Linescore_Amfootball"] = 2400,
["LinkCatIfExists2"] = 16000,
["LinkStatusLocal"] = 45000,
["LinkSummary"] = 249000,
["LinkSummaryLive"] = 9800,
["Link_if_exists"] = 298000,
["Link_note"] = 75000,
["Link_summary"] = 263000,
["Link_target"] = 34000,
["Linkcolor"] = 2600,
["Linkless_exists"] = 26000,
["Linksearch"] = 2800,
["Linksummarylive"] = 5600,
["Linktext"] = 15000,
["List-Class"] = 17000,
["Listen"] = 17000,
["Listen_live"] = 4800,
["Listenlive"] = 3800,
["Lists_of_people_editnotice"] = 2600,
["Lit"] = 17000,
["Literal_translation"] = 26000,
["Lnl"] = 11000,
["LoMP"] = 4800,
["Location_map"] = 51000,
["Location_map+"] = 31000,
["Location_map_data_documentation"] = 6800,
["Location_map_many"] = 4800,
["Location_map~"] = 30000,
["Location_mark"] = 2700,
["Location_mark+"] = 2700,
["Location_mark~"] = 2700,
["Log"] = 3700,
["Logo_fur"] = 64000,
["Logo_requested"] = 6600,
["London_Gazette"] = 36000,
["Long_plot"] = 4000,
["Longitem"] = 2070000,
["Longlink"] = 5300,
["Look_from"] = 11000,
["Lookfrom"] = 5500,
["Loop"] = 102000,
["Loss"] = 4100,
["Low-Class"] = 15000,
["Low-importance"] = 16000,
["Lower"] = 8400,
["Lowercase"] = 4600,
["Lowercase_title"] = 18000,
["Lowercasetitle"] = 2500,
["Lpsn"] = 2200,
["Lt"] = 2500,
["Lua"] = 12000,
["Lua_escape"] = 5700,
["Module:LCCN"] = 2400,
["Module:Labelled_list_hatnote"] = 635000,
["Module:Lang"] = 1720000,
["Module:Lang-zh"] = 85000,
["Module:Lang/ISO_639_synonyms"] = 1720000,
["Module:Lang/configuration"] = 1720000,
["Module:Lang/data"] = 1720000,
["Module:Lang/data/iana_languages"] = 1720000,
["Module:Lang/data/iana_regions"] = 1720000,
["Module:Lang/data/iana_scripts"] = 1720000,
["Module:Lang/data/iana_suppressed_scripts"] = 1720000,
["Module:Lang/data/iana_variants"] = 1720000,
["Module:Lang/data/is_latn_data"] = 1720000,
["Module:Lang/documentor_tool"] = 4100,
["Module:Lang/langx"] = 691000,
["Module:Lang/tag_from_name"] = 7500,
["Module:Language_with_name/for"] = 3300,
["Module:Large_category_TOC"] = 12000,
["Module:Large_category_TOC/styles.css"] = 12000,
["Module:Latin"] = 9000,
["Module:Librivox_book"] = 4000,
["Module:Lighthouse_tracking"] = 2600,
["Module:Link_if_exists"] = 307000,
["Module:Link_summary"] = 263000,
["Module:List"] = 2630000,
["Module:Listen"] = 17000,
["Module:Listen/styles.css"] = 16000,
["Module:Location_map"] = 1160000,
["Module:Location_map/data/Antarctica"] = 2700,
["Module:Location_map/data/Arkansas"] = 3400,
["Module:Location_map/data/Australia"] = 3400,
["Module:Location_map/data/Australia_New_South_Wales"] = 3700,
["Module:Location_map/data/Australia_Queensland"] = 6000,
["Module:Location_map/data/Australia_South_Australia"] = 2200,
["Module:Location_map/data/Austria"] = 3500,
["Module:Location_map/data/Azerbaijan"] = 4900,
["Module:Location_map/data/Bangladesh"] = 2300,
["Module:Location_map/data/Belgium"] = 2000,
["Module:Location_map/data/Bosnia_and_Herzegovina"] = 5500,
["Module:Location_map/data/Brazil"] = 5300,
["Module:Location_map/data/Bulgaria"] = 3400,
["Module:Location_map/data/California"] = 6200,
["Module:Location_map/data/Canada"] = 5000,
["Module:Location_map/data/Canada_Alberta"] = 2200,
["Module:Location_map/data/Canada_British_Columbia"] = 3500,
["Module:Location_map/data/Canada_Ontario"] = 2000,
["Module:Location_map/data/China"] = 3900,
["Module:Location_map/data/Croatia"] = 4300,
["Module:Location_map/data/Czech_Republic"] = 6900,
["Module:Location_map/data/Estonia"] = 3100,
["Module:Location_map/data/Europe"] = 4400,
["Module:Location_map/data/Florida"] = 2700,
["Module:Location_map/data/France"] = 40000,
["Module:Location_map/data/France_Auvergne-Rhône-Alpes"] = 4400,
["Module:Location_map/data/France_Bourgogne-Franche-Comté"] = 4000,
["Module:Location_map/data/France_Grand_Est"] = 5300,
["Module:Location_map/data/France_Hauts-de-France"] = 3900,
["Module:Location_map/data/France_Normandy"] = 3400,
["Module:Location_map/data/France_Nouvelle-Aquitaine"] = 4800,
["Module:Location_map/data/France_Occitanie"] = 4800,
["Module:Location_map/data/Germany"] = 17000,
["Module:Location_map/data/Germany_Bavaria"] = 2900,
["Module:Location_map/data/Germany_Rhineland-Palatinate"] = 2600,
["Module:Location_map/data/Greece"] = 5000,
["Module:Location_map/data/Hungary"] = 2900,
["Module:Location_map/data/Illinois"] = 3500,
["Module:Location_map/data/India"] = 24000,
["Module:Location_map/data/India3"] = 2900,
["Module:Location_map/data/India_Andhra_Pradesh"] = 2900,
["Module:Location_map/data/India_Karnataka"] = 2200,
["Module:Location_map/data/India_Kerala"] = 2900,
["Module:Location_map/data/India_Maharashtra"] = 3100,
["Module:Location_map/data/India_Punjab"] = 2300,
["Module:Location_map/data/India_Tamil_Nadu"] = 3300,
["Module:Location_map/data/India_Uttar_Pradesh"] = 3600,
["Module:Location_map/data/India_West_Bengal"] = 3000,
["Module:Location_map/data/Indiana"] = 3200,
["Module:Location_map/data/Iowa"] = 3000,
["Module:Location_map/data/Iran"] = 51000,
["Module:Location_map/data/Ireland"] = 4000,
["Module:Location_map/data/Italy"] = 12000,
["Module:Location_map/data/Japan"] = 15000,
["Module:Location_map/data/Maine"] = 2100,
["Module:Location_map/data/Maryland"] = 2100,
["Module:Location_map/data/Massachusetts"] = 4700,
["Module:Location_map/data/Mexico"] = 3900,
["Module:Location_map/data/Michigan"] = 3900,
["Module:Location_map/data/Minnesota"] = 4600,
["Module:Location_map/data/Nepal"] = 4800,
["Module:Location_map/data/Netherlands"] = 3100,
["Module:Location_map/data/New_York"] = 8100,
["Module:Location_map/data/North_Carolina"] = 3700,
["Module:Location_map/data/Norway"] = 2100,
["Module:Location_map/data/Ohio"] = 2700,
["Module:Location_map/data/Pakistan"] = 3100,
["Module:Location_map/data/Pennsylvania"] = 6100,
["Module:Location_map/data/Peru"] = 2900,
["Module:Location_map/data/Philippines"] = 3800,
["Module:Location_map/data/Poland"] = 54000,
["Module:Location_map/data/Queensland"] = 2500,
["Module:Location_map/data/Romania"] = 6000,
["Module:Location_map/data/Russia"] = 29000,
["Module:Location_map/data/Russia_Bashkortostan"] = 4500,
["Module:Location_map/data/Russia_Vladimir_Oblast"] = 2200,
["Module:Location_map/data/Russia_Vologda_Oblast"] = 4800,
["Module:Location_map/data/Serbia"] = 4400,
["Module:Location_map/data/Slovakia"] = 3300,
["Module:Location_map/data/Slovenia"] = 6800,
["Module:Location_map/data/South_Africa"] = 3300,
["Module:Location_map/data/Spain"] = 8700,
["Module:Location_map/data/Sweden"] = 2900,
["Module:Location_map/data/Switzerland"] = 6100,
["Module:Location_map/data/Syria"] = 2800,
["Module:Location_map/data/Texas"] = 3900,
["Module:Location_map/data/Turkey"] = 22000,
["Module:Location_map/data/Turkey_Central_Anatolia"] = 2100,
["Module:Location_map/data/Turkey_Marmara"] = 2300,
["Module:Location_map/data/USA"] = 115000,
["Module:Location_map/data/USA_Alabama"] = 2200,
["Module:Location_map/data/USA_Alaska"] = 2400,
["Module:Location_map/data/USA_Arizona"] = 2200,
["Module:Location_map/data/USA_Arkansas"] = 3500,
["Module:Location_map/data/USA_California"] = 8100,
["Module:Location_map/data/USA_Colorado"] = 2400,
["Module:Location_map/data/USA_Florida"] = 3400,
["Module:Location_map/data/USA_Georgia"] = 2100,
["Module:Location_map/data/USA_Illinois"] = 3800,
["Module:Location_map/data/USA_Indiana"] = 3400,
["Module:Location_map/data/USA_Iowa"] = 3200,
["Module:Location_map/data/USA_Kentucky"] = 3300,
["Module:Location_map/data/USA_Maine"] = 2300,
["Module:Location_map/data/USA_Maryland"] = 2600,
["Module:Location_map/data/USA_Massachusetts"] = 5000,
["Module:Location_map/data/USA_Michigan"] = 4300,
["Module:Location_map/data/USA_Minnesota"] = 5000,
["Module:Location_map/data/USA_Missouri"] = 2200,
["Module:Location_map/data/USA_New_Jersey"] = 3000,
["Module:Location_map/data/USA_New_York"] = 9100,
["Module:Location_map/data/USA_North_Carolina"] = 4500,
["Module:Location_map/data/USA_Ohio"] = 3000,
["Module:Location_map/data/USA_Oregon"] = 2600,
["Module:Location_map/data/USA_Pennsylvania"] = 7300,
["Module:Location_map/data/USA_Tennessee"] = 2200,
["Module:Location_map/data/USA_Texas"] = 4400,
["Module:Location_map/data/USA_Virginia"] = 5100,
["Module:Location_map/data/USA_Washington"] = 3200,
["Module:Location_map/data/USA_West_Virginia"] = 4400,
["Module:Location_map/data/USA_Wisconsin"] = 3000,
["Module:Location_map/data/Ukraine"] = 4100,
["Module:Location_map/data/United_States"] = 2600,
["Module:Location_map/data/Virginia"] = 4000,
["Module:Location_map/data/Washington"] = 2400,
["Module:Location_map/data/West_Virginia"] = 4100,
["Module:Location_map/data/Wisconsin"] = 2600,
["Module:Location_map/data/doc"] = 6700,
["Module:Location_map/info"] = 6800,
["Module:Location_map/multi"] = 35000,
["Module:Location_map/styles.css"] = 786000,
["Module:London_Gazette_util"] = 36000,
["Module:Lua_banner"] = 12000,
}
py0cl07pbkafa3iuohgs0sqpajpe0nh
10618
10617
2026-08-25T23:33:45Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Transclusion_count/data/L]]
10617
Scribunto
text/plain
return {
["LASTYEAR"] = 846000,
["LAT"] = 4100,
["LCAuth"] = 3300,
["LCCN"] = 2300,
["LKA"] = 2100,
["LTU"] = 4900,
["LUX"] = 2500,
["LVA"] = 4700,
["La"] = 518000,
["LaPreferente"] = 2300,
["Label"] = 42000,
["Lafc"] = 7000,
["Lang"] = 457000,
["Lang-ka"] = 5900,
["Lang-sr-Cyrl"] = 13000,
["Lang-sr-cyr"] = 3300,
["Lang-sr-cyrl"] = 2400,
["Lang-zh"] = 84000,
["Lang2iso"] = 4500,
["Lang_unset_italics"] = 2400,
["Langnf"] = 2700,
["Langr"] = 2300,
["Language_with_name"] = 7800,
["Language_with_name/for"] = 3300,
["Languages"] = 2700,
["Langx"] = 671000,
["Large"] = 506000,
["Large_category_TOC"] = 11000,
["Last_edited_by"] = 62000,
["Last_word"] = 41000,
["LaunchesByYear_footer"] = 3600,
["LaunchesByYear_header"] = 3600,
["Law_sidebar_style/styles.css"] = 2200,
["Lc"] = 9900,
["Lead_too_short"] = 11000,
["League_icon"] = 3600,
["Leagueicon"] = 3500,
["Leave_feedback/link"] = 86000,
["Left"] = 10000,
["Left-pointing_double_angles"] = 2900,
["Left_angles"] = 2900,
["Leftlegend"] = 2000,
["Legend"] = 35000,
["Legend/styles.css"] = 152000,
["Legend0"] = 13000,
["Legend2"] = 23000,
["Legend_inline"] = 28000,
["LepIndex"] = 12000,
["Letter-NumberCombDisambig"] = 3500,
["Letter–number_combination_disambiguation"] = 4900,
["Lgtext"] = 3900,
["Libera.Chat"] = 11000,
["Library_link_about"] = 4000,
["Library_of_Congress_Control_Number"] = 2400,
["Library_resources_box"] = 4200,
["Librivox_author"] = 7300,
["Librivox_book"] = 4000,
["LicenseTagFairUseQualifier"] = 12000,
["License_migration"] = 45000,
["License_migration_complete"] = 19000,
["License_migration_not_eligible"] = 6800,
["License_migration_redundant"] = 19000,
["Lichengloss"] = 3100,
["Like"] = 2600,
["Likely"] = 5400,
["Line_link"] = 15000,
["Linear-gradient_text"] = 9200,
["Linescore_Amfootball"] = 2400,
["LinkCatIfExists2"] = 16000,
["LinkStatusLocal"] = 45000,
["LinkSummary"] = 249000,
["LinkSummaryLive"] = 9800,
["Link_if_exists"] = 298000,
["Link_note"] = 75000,
["Link_summary"] = 263000,
["Link_target"] = 34000,
["Linkcolor"] = 2600,
["Linkless_exists"] = 26000,
["Linksearch"] = 2800,
["Linksummarylive"] = 5600,
["Linktext"] = 15000,
["List-Class"] = 17000,
["Listen"] = 17000,
["Listen_live"] = 4800,
["Listenlive"] = 3800,
["Lists_of_people_editnotice"] = 2600,
["Lit"] = 17000,
["Literal_translation"] = 26000,
["Lnl"] = 11000,
["LoMP"] = 4800,
["Location_map"] = 51000,
["Location_map+"] = 31000,
["Location_map_data_documentation"] = 6800,
["Location_map_many"] = 4800,
["Location_map~"] = 30000,
["Location_mark"] = 2700,
["Location_mark+"] = 2700,
["Location_mark~"] = 2700,
["Log"] = 3700,
["Logo_fur"] = 64000,
["Logo_requested"] = 6600,
["London_Gazette"] = 36000,
["Long_plot"] = 4000,
["Longitem"] = 2070000,
["Longlink"] = 5300,
["Look_from"] = 11000,
["Lookfrom"] = 5500,
["Loop"] = 102000,
["Loss"] = 4100,
["Low-Class"] = 15000,
["Low-importance"] = 16000,
["Lower"] = 8400,
["Lowercase"] = 4600,
["Lowercase_title"] = 18000,
["Lowercasetitle"] = 2500,
["Lpsn"] = 2200,
["Lt"] = 2500,
["Lua"] = 12000,
["Lua_escape"] = 5700,
["Module:LCCN"] = 2400,
["Module:Labelled_list_hatnote"] = 635000,
["Module:Lang"] = 1720000,
["Module:Lang-zh"] = 85000,
["Module:Lang/ISO_639_synonyms"] = 1720000,
["Module:Lang/configuration"] = 1720000,
["Module:Lang/data"] = 1720000,
["Module:Lang/data/iana_languages"] = 1720000,
["Module:Lang/data/iana_regions"] = 1720000,
["Module:Lang/data/iana_scripts"] = 1720000,
["Module:Lang/data/iana_suppressed_scripts"] = 1720000,
["Module:Lang/data/iana_variants"] = 1720000,
["Module:Lang/data/is_latn_data"] = 1720000,
["Module:Lang/documentor_tool"] = 4100,
["Module:Lang/langx"] = 691000,
["Module:Lang/tag_from_name"] = 7500,
["Module:Language_with_name/for"] = 3300,
["Module:Large_category_TOC"] = 12000,
["Module:Large_category_TOC/styles.css"] = 12000,
["Module:Latin"] = 9000,
["Module:Librivox_book"] = 4000,
["Module:Lighthouse_tracking"] = 2600,
["Module:Link_if_exists"] = 307000,
["Module:Link_summary"] = 263000,
["Module:List"] = 2630000,
["Module:Listen"] = 17000,
["Module:Listen/styles.css"] = 16000,
["Module:Location_map"] = 1160000,
["Module:Location_map/data/Antarctica"] = 2700,
["Module:Location_map/data/Arkansas"] = 3400,
["Module:Location_map/data/Australia"] = 3400,
["Module:Location_map/data/Australia_New_South_Wales"] = 3700,
["Module:Location_map/data/Australia_Queensland"] = 6000,
["Module:Location_map/data/Australia_South_Australia"] = 2200,
["Module:Location_map/data/Austria"] = 3500,
["Module:Location_map/data/Azerbaijan"] = 4900,
["Module:Location_map/data/Bangladesh"] = 2300,
["Module:Location_map/data/Belgium"] = 2000,
["Module:Location_map/data/Bosnia_and_Herzegovina"] = 5500,
["Module:Location_map/data/Brazil"] = 5300,
["Module:Location_map/data/Bulgaria"] = 3400,
["Module:Location_map/data/California"] = 6200,
["Module:Location_map/data/Canada"] = 5000,
["Module:Location_map/data/Canada_Alberta"] = 2200,
["Module:Location_map/data/Canada_British_Columbia"] = 3500,
["Module:Location_map/data/Canada_Ontario"] = 2000,
["Module:Location_map/data/China"] = 3900,
["Module:Location_map/data/Croatia"] = 4300,
["Module:Location_map/data/Czech_Republic"] = 6900,
["Module:Location_map/data/Estonia"] = 3100,
["Module:Location_map/data/Europe"] = 4400,
["Module:Location_map/data/Florida"] = 2700,
["Module:Location_map/data/France"] = 40000,
["Module:Location_map/data/France_Auvergne-Rhône-Alpes"] = 4400,
["Module:Location_map/data/France_Bourgogne-Franche-Comté"] = 4000,
["Module:Location_map/data/France_Grand_Est"] = 5300,
["Module:Location_map/data/France_Hauts-de-France"] = 3900,
["Module:Location_map/data/France_Normandy"] = 3400,
["Module:Location_map/data/France_Nouvelle-Aquitaine"] = 4800,
["Module:Location_map/data/France_Occitanie"] = 4800,
["Module:Location_map/data/Germany"] = 17000,
["Module:Location_map/data/Germany_Bavaria"] = 2900,
["Module:Location_map/data/Germany_Rhineland-Palatinate"] = 2600,
["Module:Location_map/data/Greece"] = 5000,
["Module:Location_map/data/Hungary"] = 2900,
["Module:Location_map/data/Illinois"] = 3500,
["Module:Location_map/data/India"] = 24000,
["Module:Location_map/data/India3"] = 2900,
["Module:Location_map/data/India_Andhra_Pradesh"] = 2900,
["Module:Location_map/data/India_Karnataka"] = 2200,
["Module:Location_map/data/India_Kerala"] = 2900,
["Module:Location_map/data/India_Maharashtra"] = 3100,
["Module:Location_map/data/India_Punjab"] = 2300,
["Module:Location_map/data/India_Tamil_Nadu"] = 3300,
["Module:Location_map/data/India_Uttar_Pradesh"] = 3600,
["Module:Location_map/data/India_West_Bengal"] = 3000,
["Module:Location_map/data/Indiana"] = 3200,
["Module:Location_map/data/Iowa"] = 3000,
["Module:Location_map/data/Iran"] = 51000,
["Module:Location_map/data/Ireland"] = 4000,
["Module:Location_map/data/Italy"] = 12000,
["Module:Location_map/data/Japan"] = 15000,
["Module:Location_map/data/Maine"] = 2100,
["Module:Location_map/data/Maryland"] = 2100,
["Module:Location_map/data/Massachusetts"] = 4700,
["Module:Location_map/data/Mexico"] = 3900,
["Module:Location_map/data/Michigan"] = 3900,
["Module:Location_map/data/Minnesota"] = 4600,
["Module:Location_map/data/Nepal"] = 4800,
["Module:Location_map/data/Netherlands"] = 3100,
["Module:Location_map/data/New_York"] = 8100,
["Module:Location_map/data/North_Carolina"] = 3700,
["Module:Location_map/data/Norway"] = 2100,
["Module:Location_map/data/Ohio"] = 2700,
["Module:Location_map/data/Pakistan"] = 3100,
["Module:Location_map/data/Pennsylvania"] = 6100,
["Module:Location_map/data/Peru"] = 2900,
["Module:Location_map/data/Philippines"] = 3800,
["Module:Location_map/data/Poland"] = 54000,
["Module:Location_map/data/Queensland"] = 2500,
["Module:Location_map/data/Romania"] = 6000,
["Module:Location_map/data/Russia"] = 29000,
["Module:Location_map/data/Russia_Bashkortostan"] = 4500,
["Module:Location_map/data/Russia_Vladimir_Oblast"] = 2200,
["Module:Location_map/data/Russia_Vologda_Oblast"] = 4800,
["Module:Location_map/data/Serbia"] = 4400,
["Module:Location_map/data/Slovakia"] = 3300,
["Module:Location_map/data/Slovenia"] = 6800,
["Module:Location_map/data/South_Africa"] = 3300,
["Module:Location_map/data/Spain"] = 8700,
["Module:Location_map/data/Sweden"] = 2900,
["Module:Location_map/data/Switzerland"] = 6100,
["Module:Location_map/data/Syria"] = 2800,
["Module:Location_map/data/Texas"] = 3900,
["Module:Location_map/data/Turkey"] = 22000,
["Module:Location_map/data/Turkey_Central_Anatolia"] = 2100,
["Module:Location_map/data/Turkey_Marmara"] = 2300,
["Module:Location_map/data/USA"] = 115000,
["Module:Location_map/data/USA_Alabama"] = 2200,
["Module:Location_map/data/USA_Alaska"] = 2400,
["Module:Location_map/data/USA_Arizona"] = 2200,
["Module:Location_map/data/USA_Arkansas"] = 3500,
["Module:Location_map/data/USA_California"] = 8100,
["Module:Location_map/data/USA_Colorado"] = 2400,
["Module:Location_map/data/USA_Florida"] = 3400,
["Module:Location_map/data/USA_Georgia"] = 2100,
["Module:Location_map/data/USA_Illinois"] = 3800,
["Module:Location_map/data/USA_Indiana"] = 3400,
["Module:Location_map/data/USA_Iowa"] = 3200,
["Module:Location_map/data/USA_Kentucky"] = 3300,
["Module:Location_map/data/USA_Maine"] = 2300,
["Module:Location_map/data/USA_Maryland"] = 2600,
["Module:Location_map/data/USA_Massachusetts"] = 5000,
["Module:Location_map/data/USA_Michigan"] = 4300,
["Module:Location_map/data/USA_Minnesota"] = 5000,
["Module:Location_map/data/USA_Missouri"] = 2200,
["Module:Location_map/data/USA_New_Jersey"] = 3000,
["Module:Location_map/data/USA_New_York"] = 9100,
["Module:Location_map/data/USA_North_Carolina"] = 4500,
["Module:Location_map/data/USA_Ohio"] = 3000,
["Module:Location_map/data/USA_Oregon"] = 2600,
["Module:Location_map/data/USA_Pennsylvania"] = 7300,
["Module:Location_map/data/USA_Tennessee"] = 2200,
["Module:Location_map/data/USA_Texas"] = 4400,
["Module:Location_map/data/USA_Virginia"] = 5100,
["Module:Location_map/data/USA_Washington"] = 3200,
["Module:Location_map/data/USA_West_Virginia"] = 4400,
["Module:Location_map/data/USA_Wisconsin"] = 3000,
["Module:Location_map/data/Ukraine"] = 4100,
["Module:Location_map/data/United_States"] = 2600,
["Module:Location_map/data/Virginia"] = 4000,
["Module:Location_map/data/Washington"] = 2400,
["Module:Location_map/data/West_Virginia"] = 4100,
["Module:Location_map/data/Wisconsin"] = 2600,
["Module:Location_map/data/doc"] = 6700,
["Module:Location_map/info"] = 6800,
["Module:Location_map/multi"] = 35000,
["Module:Location_map/styles.css"] = 786000,
["Module:London_Gazette_util"] = 36000,
["Module:Lua_banner"] = 12000,
}
py0cl07pbkafa3iuohgs0sqpajpe0nh
Tempilet:Location map+/doc
10
1304
10619
2025-07-14T21:09:31Z
en>Zinnober9
0
Removed extra }}.
10619
wikitext
text/x-wiki
{{Documentation subpage}}
{{high-use| 15079 }}
{{Lua|{{#ifeq:{{BASEPAGENAME}}|Location map~|Module:Location map|Module:Location map/multi}}}}
<!-- EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE -->
{{Location map+|England|width=300|AlternativeMap=England_locator_map_with_North_East_England_highlighted.svg|alt=Map of England showing the locations of towns and battles. Bosworth is in the centre, northwest of London.|float=right|caption=[[File:Battle icon active (crossed swords).svg|16px|link=]] [[Battle of Bosworth Field]] [[File:Battle icon (crossed swords).svg|14px|link=]] other battles |places=
{{Location map~ |England |label='''[[Battle of Bosworth Field|Bosworth]]''' |position=right |lat=52.591265 |long=-1.410327 |mark=Battle_icon_active_(crossed_swords).svg |marksize=18 |link=Battle of Bosworth Field}}
{{Location map~ |England |label=[[Battle of Blore Heath|Blore Heath]] |position=top |lat=52.913611 |long=-2.424722 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Blore Heath}}
{{Location map~ |England |label=[[Battle of Barnet|Barnet]] |position=top |lat=51.662233 |long=-0.200039 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Barnet}}
{{Location map~ |England |label=[[Battle of Stoke Field|East Stoke]] |position=top |lat=53.029058 |long=-0.892586 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Stoke Field}}
{{Location map~ |England |label=[[Battle of Tewkesbury|Tewkesbury]] |position=top |lat=51.986389 |long=-2.161389 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Tewkesbury}}
{{Location map~ |England |label=Berwick |position=bottom |lat=55.771 |long=-2.007 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=London |position=bottom |lat=51.507778 |long=-0.128056 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=York |position=bottom |lat=53.958333 |long=-1.096667 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Plymouth |position=bottom |lat=50.371397 |long=-4.142431 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Poole |position=bottom |lat=50.71942 |long=-1.98113 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Wem |position=left |lat=52.8555 |long=-2.7211 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Northumberland |position=right |lat=55.1 |long=-1.68 |mark=Steel pog.svg |marksize=1}}
{{Location map~ |England |label=Shrewsbury |position=bottom |lat=52.7077 |long=-2.7541 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Milford Haven |position=bottom |lat=51.71418 |long=-5.04274 |mark=Steel pog.svg |marksize=6}}
}}
{{tl2|Location map+}} places one or more location marks on a map, with optional labels. It is in the same family of templates as the [[Template:Location map|Location map]] template and the documentation for that template might be helpful.
Template:Location map+ uses a helper template, {{tl2|Location map~}}, one or more times to generate a mark for each location.
{{clear}}
== Usage ==
{| class="wikitable"
! rowspan=2 | Main template (one per map) !! colspan=3 | Helper template (one per location to be marked)
|-
! colspan=3 | Multi-line style
|- style="vertical-align:top"
| rowspan=4 | <syntaxhighlight lang="wikitext" style="width:14em; margin-right:2em;">
{{Location map+
| {{{1}}}
| width =
| float =
| border =
| caption =
| alt =
| maplink =
| relief =
| AlternativeMap =
| overlay_image =
| places =
}}</syntaxhighlight>
|- style="vertical-align:top"
|<syntaxhighlight lang="wikitext" style="width:12em;">
{{Location map~
| {{{1}}}
| label =
| label_size =
| label_width =
| position =
| background =
| mark =
| marksize =
| link =
| lat_deg =
| lon_deg =
}}</syntaxhighlight>
|<syntaxhighlight lang="wikitext" style="width:12em;">
{{Location map~
| {{{1}}}
| label =
| label_size =
| label_width =
| position =
| background =
| mark =
| marksize =
| link =
| lat_deg =
| lat_min =
| lat_sec =
| lat_dir =
| lon_deg =
| lon_min =
| lon_sec =
| lon_dir =
}}</syntaxhighlight>
|<syntaxhighlight lang="wikitext" style="width:12em;">
{{Location map~
| {{{1}}}
| label =
| label_size =
| label_width =
| position =
| background =
| mark =
| marksize =
| link =
| coordinates =
}}</syntaxhighlight>
|- style="vertical-align:top"
! colspan=3 | Single-line style
|- style="vertical-align:top"
| colspan=3 |<!--
--><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lon_deg= |position= |label= |link=}}</syntaxhighlight>
<!--
--><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lat_min= |lat_sec= |lat_dir= |lon_deg= |lon_min= |lon_sec= |lon_dir= |position= |label= |link=}}</syntaxhighlight><!--
--><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |coordinates= |position= |label= |link=}}</syntaxhighlight>
'''Note''': in single-line style, parameters order is chosen so that it's easier to maintain vertical alignment in subsequent {{t|Location map~}} calls (which improves wikicode readability). Parameters that are rarely given values, or those whose values (usually) have constant or only slightly varying lengths (in characters), are placed first; parameters whose values frequently have very different lengths are placed last. See an [[#single-line Location map~|example]] below (note the alignment of {{para|marksize}} and {{para|position}} parameters in the wiki mark-up).
|}
{{clear}}
== Parameters ==
{| class="wikitable" style="width:100%;"
|+ Parameters for Location map+
! Parameter
! Description
|-
| <code>{{{1}}}</code>
| Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below or [[Special:PrefixIndex/Module:Location_map/data/|all subpages]].
|-
| <code>width</code>
| Determines the width of the map in [[pixel]]s, overriding any default values. Do not include <code>px</code>: for example, use <code>width=300</code>, not <code>width=300px</code>.
|-
| <code>default_width</code>
| Determines the default width of the map in pixels, intended for use by templates e.g. place infoboxes. The default value is 240. Do not include <code>px</code>. This value will be multiplied by the <code>defaultscale</code> parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps. For example, if <code>default_width=200</code> is given, a map of Thailand will be displayed with a width of 200×0.57 = 114 pixels (as specified in [[Module:Location map/data/Thailand]]).
|-
| <code>float</code>
| Specifies the position of the map on the page. Valid values are <code>left</code>, <code>right</code>, <code>center</code> and <code>none</code>. The default is <code>right</code>.
|-
| <code>border</code>
| Specifies the color of the 1px map border. The default is ''lightgrey'' (see [[web colors]]). If set to <code>none</code>, no border will be generated. This parameter is seldom used. Special value: {{code|infobox}}.
|-
| <code>caption</code>
| The text of a caption to be displayed below the map. Specifying a caption will cause the map to be displayed with a frame. If <code>caption</code> is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If <code>caption</code> is not defined, the map will not be framed and a default caption will be generated. The default caption is created from the <code>label</code> parameter (or the current page name if label not defined) and the <code>name</code> parameter from map definition template. See the [[#Examples|examples]] below.
|-
| <code>alt</code>
| Alt text for map; used by [[screen reader]]s, see [[WP:ALT]].
|-
| <code>maplink</code>
| Specifies a [[Wiki markup|wikilink]] that will be followed when clicking the map, by default to the map source file. Can be deactivated with <code>maplink =</code>, which can be useful to avoid mis-clicks if there are links associated with markers and labels.
|-
| <code>relief</code>
| Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as <code>image1</code>, which is usually a [[Relief mapping (computer graphics)|relief map]]. See the example at [[Template:Location map+/relief|Location map+/relief]]. Other numerical values such as {{code|2}} or {{code|3}} will display {{code|image2}} or {{code|image3}}, if those images are defined.
|-
| <code>AlternativeMap</code>
| Allows the use of an alternative map. The image must have the same edge coordinates as the location map template. See the example at [[Template:Location map+/AlternativeMap|Location map+/AlternativeMap]].
|-
| <code>overlay_image</code>
| Allows an overlay to be superimposed on the map. This parameter is seldom used. See the example at [[Template:Location map+/overlay|Location map+/overlay]].
|-
| <code>places</code>
| Specifies one or more place markers using {{tl|Location map~}}.
|}
{| class="wikitable" style="width:100%;"
|+ Parameters for Location map~
! Parameter
! colspan="2" |Description
|-
| <code>{{{1}}}</code>
| colspan="2" |Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below.
|-
| colspan="3" |'''Label'''
|-
| <code>label</code>
| colspan="2" |The text of the label to display next to the mark. A [[Wiki markup|wikilink]] can be used. The default if not specified is no label, just the marker. {{red|Do not use {{tag|div}} tags to attempt to position the label; use {{para|label_size}} and {{para|position}} instead.}}
|-
| <code>label_size</code>
| colspan="2" |The font size to use for the label, given as a percentage of the label's (already reduced) normal font size (<100 = smaller, >100 = larger). The default is 91; obey [[MOS:FONTSIZE]] if setting to a lower value. Do not include <code>%</code>: for example, use <code>label_size=95</code>, not <code>label_size=95%</code>. If set to 0, the label is displayed only when the user hovers over the mark.
|-
| <code>label_width</code>
| colspan="2" |The width to use for the label, given as an [[Em (typography)#CSS|em size]]; the default width is 6. Do not include {{kbd|em}}: for example, use {{para|label_width|7}}, not {{para|label_width|7em}}.
|-
| <code>position</code>
| colspan="2" |The position of the label relative to the mark. Valid values are <code>left</code>, <code>right</code>, <code>top</code> and <code>bottom</code>. The default is <code>right</code>.
|-
| <code>background</code>
| colspan="2" |The background color to use for the label. See [[Web colors]]. The default is no background color, which shows the map image behind the label.
|-
| colspan="3" |'''Mark'''
|-
| <code>mark</code>
| colspan="2" |The name of an image to display as the mark. The default is [[:File:Red pog.svg|Red pog.svg]] ([[File:Red pog.svg|8px]]). More mark images are available, in particular, at [[Commons:Location markers]] and [[Commons:Category:Map icons]].
|-
| <code>marksize</code>
| colspan="2" |The size of the mark in [[pixel]]s. The default is 8. Do not include <code>px</code>: for example, use <code>marksize=10</code>, not <code>marksize=10px</code>.
|-
| <code>link</code>
| colspan="2" |Specifies a [[Wiki markup|wikilink]] which will be followed if the reader clicks on the mark. Do not include <code>[[]]</code>: for example, use <code>link=Yellowstone National Park</code>, not <code>link=[[Yellowstone National Park]]</code>. Do not use external (https:) links.
|-
| colspan="3" |'''Coordinates'''
|-
|<code>lat_deg</code>
| rowspan="2" |Usual
|Required. The degrees of [[latitude]], using [[decimal degrees]]. Logically, use negative number for southern latitude.
|-
|<code>lon_deg</code>
|Required. The degrees of [[longitude]], using decimal degrees. Logically, use negative number for western longitude.
|-
|<code>lat_deg</code>
| rowspan="8" |Detailed
| Required. The degrees of [[latitude]]. The minutes and, probably, the seconds must be specified.<ref group="Note" name="precision" />
|-
| <code>lat_min</code>
| The minutes of latitude.<ref group=Note name="precision" /> The sign should match that of lat_deg.
|-
| <code>lat_sec</code>
| The seconds of latitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lat_deg.
|-
| <code>lat_dir</code>
| N if north (default value) or S for south of the [[Equator]]. Other values will be disregarded.
|-
| <code>lon_deg</code>
| Required. The degrees of [[longitude]]. The minutes and, probably, the seconds must be specified.<ref group=Note name="precision" />
|-
| <code>lon_min</code>
| The minutes of longitude.<ref group=Note name="precision" /> The sign should match that of lon_deg.
|-
| <code>lon_sec</code>
| The seconds of longitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lon_deg.
|-
| <code>lon_dir</code>
| E for east (default value) or W for west of the [[IERS Reference Meridian|Prime Meridian]]. Other values will be disregarded.
|-
| <code>coordinates</code>
|Alternative
|The coordinates using {{tl|Coord}} template, e.g. <code><nowiki>{{coord|48.067|-2.863}}</nowiki></code>.
|}
Notes:
{{Reflist
| group = Note
| refs =
<ref group=Note name="precision">Appropriate precision should be used. For example, the whole US map, with a 1000{{nbhyph}}pixel width, has a resolution of about 5 km/pixel. Only 2 decimal places of precision in decimal degrees format (≈1 km), or whole minutes (≈1.7 km) in DMS format, are required.</ref>
}}
== Available maps ==
Location maps can be found using these sources:
:[[Special:PrefixIndex/Module:Location map/data/]] - checked before a map template is searched for. New maps should be created here rather than creating new templates.
:[[Template:Location map/List|List of templates]] - 1050 templates were available when the list was generated.
:[[:Category:Location map modules]] - templates sorted by category.
:[[Special:WhatLinksHere/Template:Location map/Info]] - a search that might help.
:[[Special:Prefixindex/Template:Location map]] - another search that might help.
== Examples ==
This example does not designate the <code>caption</code> parameter. It demonstrates the use of the defaults. Notice that the default caption is the page name followed by the map name in parenthesis and that the label position is automatically adjusted if it is too close to an edge.
{{Location map+ | Australia
| places =
{{Location map~ | Australia
| label = Sydney
| lat_deg = -33.86
| lon_deg = 151.21 }}
{{Location map~ | Australia
| label = Melbourne
| coordinates = {{coord|-37.81|144.96}}
}}
}}
<syntaxhighlight lang="wikitext" style="width:35em;">
{{Location map+ | Australia
| places =
{{Location map~ | Australia
| label = Sydney
| lat_deg = -33.86
| lon_deg = 151.21 }}
{{Location map~ | Australia
| label = Melbourne
| coordinates = {{coord|-37.81|144.96}}
}}
}}
</syntaxhighlight>
{{clear}}
{{anchor|single-line Location map~}}This example uses a designated but empty <code>caption</code>. It demonstrates coordinates using [[decimal degrees]], a 10px mark with a link, and {{tl|Location map~}} entries listed in single-line style.
{{Location map+ | France
| caption =
| places =
{{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }}
{{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}}
}}
<syntaxhighlight lang="wikitext" style="width:75em;">
{{Location map+ | France
| caption =
| places =
{{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }}
{{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}}
}}
</syntaxhighlight>
{{clear}}
This example uses <code>caption</code> with an assigned value. It demonstrates coordinates in degree, minute, second format, a relief map, label background color and linked labels.
{{Location map+ | USA
| width = 300
| caption = Some cites in the United States
| relief = 1
| places =
{{Location map~ | USA
| label = [[New York City|New York]]
| position =
| background = white
| mark = Cyan pog.svg
| alt = alt text for New York City
| link = New York City
| lat_deg = 40 | lat_min = 43 | lat_dir = N
| lon_deg = 74 | lon_min = 0 | lon_dir = W
}}
{{Location map~| USA
| label = [[San Francisco]]
| position =
| background = white
| mark = Purple pog.svg
| alt = alt text for San Francisco
| link = San Francisco
| lat_deg = 37 | lat_min = 46 | lat_dir = N
| lon_deg = 122 | lon_min = 25 | lon_dir = W
}}
}}
<syntaxhighlight lang="wikitext" style="width:35em;">
{{Location map+ | USA
| width = 300
| caption = Some cites in the United States
| relief = 1
| places =
{{Location map~ | USA
| label = [[New York City|New York]]
| position =
| background = white
| mark = Cyan pog.svg
| alt = alt text for New York City
| link = New York City
| lat_deg = 40 | lat_min = 43 | lat_dir = N
| lon_deg = 74 | lon_min = 0 | lon_dir = W
}}
{{Location map~| USA
| label = [[San Francisco]]
| position =
| background = white
| mark = Purple pog.svg
| alt = alt text for San Francisco
| link = San Francisco
| lat_deg = 37 | lat_min = 46 | lat_dir = N
| lon_deg = 122 | lon_min = 25 | lon_dir = W
}}
}}
</syntaxhighlight>
Also see the examples for {{tl|Location map}} and {{tl|Location map many}}, as well as:
* [[Template:Location map+/relief]], an example using the ''relief'' parameter
* [[Template:Location map+/AlternativeMap]], an example using the ''AlternativeMap'' parameter
* [[Template:Location map+/overlay]], an example using the ''overlay_image'' parameter
== Template data ==
{{Collapse top|[[Wikipedia:TemplateData|TemplateData]] documentation used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools}}
{{TemplateData header|noheader=1}}
<templatedata>
{
"description": "This template places one or more location marks on a map.",
"params": {
"1": {
"label": "Map name",
"type": "string",
"required": true,
"description": "The name of the map to be used"
},
"width": {
"label": "Map width",
"type": "number",
"description": "Determines the width of the map in pixels, overriding any default values. Do not include \"px\", for example: \"300\", not \"300px\"."
},
"default_width": {
"label": "Default width",
"type": "number",
"description": "Determines the default width of the map in pixels, intended for use by templates such as infoboxes. The default value is 240. Do not include \"px\". This value will be multiplied by the defaultscale parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps."
},
"float": {
"label": "Position",
"type": "string",
"description": "Specifies the position of the map on the page. Valid values are left, right, center and none. The default is right."
},
"border": {
"label": "Frame style",
"type": "string",
"description": "Specifies the color of the map frame when the parameter caption is used. If set to none, no border will be generated. ",
"suggestedvalues": [
"none",
"infobox",
"LightGray"
]
},
"caption": {
"label": "Map caption",
"type": "string",
"description": "The text of a caption to be displayed below the map. If caption is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If caption is not defined, the map will not be framed and a default caption will be generated."
},
"alt": {
"label": "Alt text",
"type": "string",
"description": "Alt text for map; used by screen readers."
},
"relief": {
"label": "Alternative map from template",
"type": "string",
"description": "Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as image1, which is usually a relief map. If more than one relief map is defined, \"2\" will display \"image2\", and so on."
},
"AlternativeMap": {
"label": "Alternative map not from template",
"type": "string",
"description": "Allows the use of an alternative map. The image must have the same edge coordinates as the map template."
},
"overlay_image": {
"label": "Overlay image",
"type": "string",
"description": "Allows an overlay to be superimposed on the map. This parameter is seldom used."
},
"places": {
"label": "Place markers",
"type": "string",
"required": true,
"description": "Specifies one or more place markers using Location map~."
}
}
}
</templatedata>
{{Collapse bottom}}
== See also ==
* [[Wikipedia:Maps for Wikipedia]] - A list of mapping tools available on Wikipedia
* {{tl|Location map}} - For displaying one mark using latitude and longitude.
* {{tl|Location map many}} - For displaying multiple marks using latitude and longitude.
* [[:Commons:Category:Map pointers]] - List of the many Wikimedia Commons pointer symbols.
* {{tl|OSM Location map}} - OpenStreetMap map with an "interactive fullscreen" version. Allows for labels, numbered dots, a heading, caption, mini-locator map and overlays.
* {{tl|Overlay}} - Allows image numbered, textual number, or color tag overlays to be positioned over an image to indicate particular features in the image.
* {{tl|CSS crop}} - Wrapper template that allows cropping the map.
<includeonly>{{Sandbox other|
| <!--Categories below this line, please; interwikis at Wikidata-->
[[Category:Location map templates| ]]
[[Category:Graphics templates]]
}}</includeonly>
6k1rflp1vykn0960qajs5wy3wkfnpwp
10620
10619
2026-08-25T23:33:45Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Location_map+/doc]]
10619
wikitext
text/x-wiki
{{Documentation subpage}}
{{high-use| 15079 }}
{{Lua|{{#ifeq:{{BASEPAGENAME}}|Location map~|Module:Location map|Module:Location map/multi}}}}
<!-- EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE -->
{{Location map+|England|width=300|AlternativeMap=England_locator_map_with_North_East_England_highlighted.svg|alt=Map of England showing the locations of towns and battles. Bosworth is in the centre, northwest of London.|float=right|caption=[[File:Battle icon active (crossed swords).svg|16px|link=]] [[Battle of Bosworth Field]] [[File:Battle icon (crossed swords).svg|14px|link=]] other battles |places=
{{Location map~ |England |label='''[[Battle of Bosworth Field|Bosworth]]''' |position=right |lat=52.591265 |long=-1.410327 |mark=Battle_icon_active_(crossed_swords).svg |marksize=18 |link=Battle of Bosworth Field}}
{{Location map~ |England |label=[[Battle of Blore Heath|Blore Heath]] |position=top |lat=52.913611 |long=-2.424722 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Blore Heath}}
{{Location map~ |England |label=[[Battle of Barnet|Barnet]] |position=top |lat=51.662233 |long=-0.200039 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Barnet}}
{{Location map~ |England |label=[[Battle of Stoke Field|East Stoke]] |position=top |lat=53.029058 |long=-0.892586 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Stoke Field}}
{{Location map~ |England |label=[[Battle of Tewkesbury|Tewkesbury]] |position=top |lat=51.986389 |long=-2.161389 |mark=Battle_icon_(crossed_swords).svg |marksize=16 |link=Battle of Tewkesbury}}
{{Location map~ |England |label=Berwick |position=bottom |lat=55.771 |long=-2.007 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=London |position=bottom |lat=51.507778 |long=-0.128056 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=York |position=bottom |lat=53.958333 |long=-1.096667 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Plymouth |position=bottom |lat=50.371397 |long=-4.142431 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Poole |position=bottom |lat=50.71942 |long=-1.98113 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Wem |position=left |lat=52.8555 |long=-2.7211 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Northumberland |position=right |lat=55.1 |long=-1.68 |mark=Steel pog.svg |marksize=1}}
{{Location map~ |England |label=Shrewsbury |position=bottom |lat=52.7077 |long=-2.7541 |mark=Steel pog.svg |marksize=6}}
{{Location map~ |England |label=Milford Haven |position=bottom |lat=51.71418 |long=-5.04274 |mark=Steel pog.svg |marksize=6}}
}}
{{tl2|Location map+}} places one or more location marks on a map, with optional labels. It is in the same family of templates as the [[Template:Location map|Location map]] template and the documentation for that template might be helpful.
Template:Location map+ uses a helper template, {{tl2|Location map~}}, one or more times to generate a mark for each location.
{{clear}}
== Usage ==
{| class="wikitable"
! rowspan=2 | Main template (one per map) !! colspan=3 | Helper template (one per location to be marked)
|-
! colspan=3 | Multi-line style
|- style="vertical-align:top"
| rowspan=4 | <syntaxhighlight lang="wikitext" style="width:14em; margin-right:2em;">
{{Location map+
| {{{1}}}
| width =
| float =
| border =
| caption =
| alt =
| maplink =
| relief =
| AlternativeMap =
| overlay_image =
| places =
}}</syntaxhighlight>
|- style="vertical-align:top"
|<syntaxhighlight lang="wikitext" style="width:12em;">
{{Location map~
| {{{1}}}
| label =
| label_size =
| label_width =
| position =
| background =
| mark =
| marksize =
| link =
| lat_deg =
| lon_deg =
}}</syntaxhighlight>
|<syntaxhighlight lang="wikitext" style="width:12em;">
{{Location map~
| {{{1}}}
| label =
| label_size =
| label_width =
| position =
| background =
| mark =
| marksize =
| link =
| lat_deg =
| lat_min =
| lat_sec =
| lat_dir =
| lon_deg =
| lon_min =
| lon_sec =
| lon_dir =
}}</syntaxhighlight>
|<syntaxhighlight lang="wikitext" style="width:12em;">
{{Location map~
| {{{1}}}
| label =
| label_size =
| label_width =
| position =
| background =
| mark =
| marksize =
| link =
| coordinates =
}}</syntaxhighlight>
|- style="vertical-align:top"
! colspan=3 | Single-line style
|- style="vertical-align:top"
| colspan=3 |<!--
--><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lon_deg= |position= |label= |link=}}</syntaxhighlight>
<!--
--><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |lat_deg= |lat_min= |lat_sec= |lat_dir= |lon_deg= |lon_min= |lon_sec= |lon_dir= |position= |label= |link=}}</syntaxhighlight><!--
--><syntaxhighlight lang="wikitext">{{Location map~ |{{{1}}} |label_size= |label_width= |background= |marksize= |mark= |coordinates= |position= |label= |link=}}</syntaxhighlight>
'''Note''': in single-line style, parameters order is chosen so that it's easier to maintain vertical alignment in subsequent {{t|Location map~}} calls (which improves wikicode readability). Parameters that are rarely given values, or those whose values (usually) have constant or only slightly varying lengths (in characters), are placed first; parameters whose values frequently have very different lengths are placed last. See an [[#single-line Location map~|example]] below (note the alignment of {{para|marksize}} and {{para|position}} parameters in the wiki mark-up).
|}
{{clear}}
== Parameters ==
{| class="wikitable" style="width:100%;"
|+ Parameters for Location map+
! Parameter
! Description
|-
| <code>{{{1}}}</code>
| Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below or [[Special:PrefixIndex/Module:Location_map/data/|all subpages]].
|-
| <code>width</code>
| Determines the width of the map in [[pixel]]s, overriding any default values. Do not include <code>px</code>: for example, use <code>width=300</code>, not <code>width=300px</code>.
|-
| <code>default_width</code>
| Determines the default width of the map in pixels, intended for use by templates e.g. place infoboxes. The default value is 240. Do not include <code>px</code>. This value will be multiplied by the <code>defaultscale</code> parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps. For example, if <code>default_width=200</code> is given, a map of Thailand will be displayed with a width of 200×0.57 = 114 pixels (as specified in [[Module:Location map/data/Thailand]]).
|-
| <code>float</code>
| Specifies the position of the map on the page. Valid values are <code>left</code>, <code>right</code>, <code>center</code> and <code>none</code>. The default is <code>right</code>.
|-
| <code>border</code>
| Specifies the color of the 1px map border. The default is ''lightgrey'' (see [[web colors]]). If set to <code>none</code>, no border will be generated. This parameter is seldom used. Special value: {{code|infobox}}.
|-
| <code>caption</code>
| The text of a caption to be displayed below the map. Specifying a caption will cause the map to be displayed with a frame. If <code>caption</code> is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If <code>caption</code> is not defined, the map will not be framed and a default caption will be generated. The default caption is created from the <code>label</code> parameter (or the current page name if label not defined) and the <code>name</code> parameter from map definition template. See the [[#Examples|examples]] below.
|-
| <code>alt</code>
| Alt text for map; used by [[screen reader]]s, see [[WP:ALT]].
|-
| <code>maplink</code>
| Specifies a [[Wiki markup|wikilink]] that will be followed when clicking the map, by default to the map source file. Can be deactivated with <code>maplink =</code>, which can be useful to avoid mis-clicks if there are links associated with markers and labels.
|-
| <code>relief</code>
| Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as <code>image1</code>, which is usually a [[Relief mapping (computer graphics)|relief map]]. See the example at [[Template:Location map+/relief|Location map+/relief]]. Other numerical values such as {{code|2}} or {{code|3}} will display {{code|image2}} or {{code|image3}}, if those images are defined.
|-
| <code>AlternativeMap</code>
| Allows the use of an alternative map. The image must have the same edge coordinates as the location map template. See the example at [[Template:Location map+/AlternativeMap|Location map+/AlternativeMap]].
|-
| <code>overlay_image</code>
| Allows an overlay to be superimposed on the map. This parameter is seldom used. See the example at [[Template:Location map+/overlay|Location map+/overlay]].
|-
| <code>places</code>
| Specifies one or more place markers using {{tl|Location map~}}.
|}
{| class="wikitable" style="width:100%;"
|+ Parameters for Location map~
! Parameter
! colspan="2" |Description
|-
| <code>{{{1}}}</code>
| colspan="2" |Required. Use the name of the map as the first unnamed parameter. For example, specifying ''England'' will use the values for England in [[Module:Location map/data/England]] if it exists, or {{tld|Location map England}} otherwise. See the [[#Examples|examples]] below.
|-
| colspan="3" |'''Label'''
|-
| <code>label</code>
| colspan="2" |The text of the label to display next to the mark. A [[Wiki markup|wikilink]] can be used. The default if not specified is no label, just the marker. {{red|Do not use {{tag|div}} tags to attempt to position the label; use {{para|label_size}} and {{para|position}} instead.}}
|-
| <code>label_size</code>
| colspan="2" |The font size to use for the label, given as a percentage of the label's (already reduced) normal font size (<100 = smaller, >100 = larger). The default is 91; obey [[MOS:FONTSIZE]] if setting to a lower value. Do not include <code>%</code>: for example, use <code>label_size=95</code>, not <code>label_size=95%</code>. If set to 0, the label is displayed only when the user hovers over the mark.
|-
| <code>label_width</code>
| colspan="2" |The width to use for the label, given as an [[Em (typography)#CSS|em size]]; the default width is 6. Do not include {{kbd|em}}: for example, use {{para|label_width|7}}, not {{para|label_width|7em}}.
|-
| <code>position</code>
| colspan="2" |The position of the label relative to the mark. Valid values are <code>left</code>, <code>right</code>, <code>top</code> and <code>bottom</code>. The default is <code>right</code>.
|-
| <code>background</code>
| colspan="2" |The background color to use for the label. See [[Web colors]]. The default is no background color, which shows the map image behind the label.
|-
| colspan="3" |'''Mark'''
|-
| <code>mark</code>
| colspan="2" |The name of an image to display as the mark. The default is [[:File:Red pog.svg|Red pog.svg]] ([[File:Red pog.svg|8px]]). More mark images are available, in particular, at [[Commons:Location markers]] and [[Commons:Category:Map icons]].
|-
| <code>marksize</code>
| colspan="2" |The size of the mark in [[pixel]]s. The default is 8. Do not include <code>px</code>: for example, use <code>marksize=10</code>, not <code>marksize=10px</code>.
|-
| <code>link</code>
| colspan="2" |Specifies a [[Wiki markup|wikilink]] which will be followed if the reader clicks on the mark. Do not include <code>[[]]</code>: for example, use <code>link=Yellowstone National Park</code>, not <code>link=[[Yellowstone National Park]]</code>. Do not use external (https:) links.
|-
| colspan="3" |'''Coordinates'''
|-
|<code>lat_deg</code>
| rowspan="2" |Usual
|Required. The degrees of [[latitude]], using [[decimal degrees]]. Logically, use negative number for southern latitude.
|-
|<code>lon_deg</code>
|Required. The degrees of [[longitude]], using decimal degrees. Logically, use negative number for western longitude.
|-
|<code>lat_deg</code>
| rowspan="8" |Detailed
| Required. The degrees of [[latitude]]. The minutes and, probably, the seconds must be specified.<ref group="Note" name="precision" />
|-
| <code>lat_min</code>
| The minutes of latitude.<ref group=Note name="precision" /> The sign should match that of lat_deg.
|-
| <code>lat_sec</code>
| The seconds of latitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lat_deg.
|-
| <code>lat_dir</code>
| N if north (default value) or S for south of the [[Equator]]. Other values will be disregarded.
|-
| <code>lon_deg</code>
| Required. The degrees of [[longitude]]. The minutes and, probably, the seconds must be specified.<ref group=Note name="precision" />
|-
| <code>lon_min</code>
| The minutes of longitude.<ref group=Note name="precision" /> The sign should match that of lon_deg.
|-
| <code>lon_sec</code>
| The seconds of longitude. Usually not necessary.<ref group=Note name="precision" /> The sign should match that of lon_deg.
|-
| <code>lon_dir</code>
| E for east (default value) or W for west of the [[IERS Reference Meridian|Prime Meridian]]. Other values will be disregarded.
|-
| <code>coordinates</code>
|Alternative
|The coordinates using {{tl|Coord}} template, e.g. <code><nowiki>{{coord|48.067|-2.863}}</nowiki></code>.
|}
Notes:
{{Reflist
| group = Note
| refs =
<ref group=Note name="precision">Appropriate precision should be used. For example, the whole US map, with a 1000{{nbhyph}}pixel width, has a resolution of about 5 km/pixel. Only 2 decimal places of precision in decimal degrees format (≈1 km), or whole minutes (≈1.7 km) in DMS format, are required.</ref>
}}
== Available maps ==
Location maps can be found using these sources:
:[[Special:PrefixIndex/Module:Location map/data/]] - checked before a map template is searched for. New maps should be created here rather than creating new templates.
:[[Template:Location map/List|List of templates]] - 1050 templates were available when the list was generated.
:[[:Category:Location map modules]] - templates sorted by category.
:[[Special:WhatLinksHere/Template:Location map/Info]] - a search that might help.
:[[Special:Prefixindex/Template:Location map]] - another search that might help.
== Examples ==
This example does not designate the <code>caption</code> parameter. It demonstrates the use of the defaults. Notice that the default caption is the page name followed by the map name in parenthesis and that the label position is automatically adjusted if it is too close to an edge.
{{Location map+ | Australia
| places =
{{Location map~ | Australia
| label = Sydney
| lat_deg = -33.86
| lon_deg = 151.21 }}
{{Location map~ | Australia
| label = Melbourne
| coordinates = {{coord|-37.81|144.96}}
}}
}}
<syntaxhighlight lang="wikitext" style="width:35em;">
{{Location map+ | Australia
| places =
{{Location map~ | Australia
| label = Sydney
| lat_deg = -33.86
| lon_deg = 151.21 }}
{{Location map~ | Australia
| label = Melbourne
| coordinates = {{coord|-37.81|144.96}}
}}
}}
</syntaxhighlight>
{{clear}}
{{anchor|single-line Location map~}}This example uses a designated but empty <code>caption</code>. It demonstrates coordinates using [[decimal degrees]], a 10px mark with a link, and {{tl|Location map~}} entries listed in single-line style.
{{Location map+ | France
| caption =
| places =
{{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }}
{{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}}
}}
<syntaxhighlight lang="wikitext" style="width:75em;">
{{Location map+ | France
| caption =
| places =
{{Location map~ |France |marksize=10 |lat_deg=48.8567 |lon_deg=2.3508 |position=top |label=Paris |link=Paris }}
{{Location map~ |France |marksize= 9 |lat_deg=43.2964 |lon_deg=5.3610 |position=bottom |label=Marseille |link=Marseille}}
}}
</syntaxhighlight>
{{clear}}
This example uses <code>caption</code> with an assigned value. It demonstrates coordinates in degree, minute, second format, a relief map, label background color and linked labels.
{{Location map+ | USA
| width = 300
| caption = Some cites in the United States
| relief = 1
| places =
{{Location map~ | USA
| label = [[New York City|New York]]
| position =
| background = white
| mark = Cyan pog.svg
| alt = alt text for New York City
| link = New York City
| lat_deg = 40 | lat_min = 43 | lat_dir = N
| lon_deg = 74 | lon_min = 0 | lon_dir = W
}}
{{Location map~| USA
| label = [[San Francisco]]
| position =
| background = white
| mark = Purple pog.svg
| alt = alt text for San Francisco
| link = San Francisco
| lat_deg = 37 | lat_min = 46 | lat_dir = N
| lon_deg = 122 | lon_min = 25 | lon_dir = W
}}
}}
<syntaxhighlight lang="wikitext" style="width:35em;">
{{Location map+ | USA
| width = 300
| caption = Some cites in the United States
| relief = 1
| places =
{{Location map~ | USA
| label = [[New York City|New York]]
| position =
| background = white
| mark = Cyan pog.svg
| alt = alt text for New York City
| link = New York City
| lat_deg = 40 | lat_min = 43 | lat_dir = N
| lon_deg = 74 | lon_min = 0 | lon_dir = W
}}
{{Location map~| USA
| label = [[San Francisco]]
| position =
| background = white
| mark = Purple pog.svg
| alt = alt text for San Francisco
| link = San Francisco
| lat_deg = 37 | lat_min = 46 | lat_dir = N
| lon_deg = 122 | lon_min = 25 | lon_dir = W
}}
}}
</syntaxhighlight>
Also see the examples for {{tl|Location map}} and {{tl|Location map many}}, as well as:
* [[Template:Location map+/relief]], an example using the ''relief'' parameter
* [[Template:Location map+/AlternativeMap]], an example using the ''AlternativeMap'' parameter
* [[Template:Location map+/overlay]], an example using the ''overlay_image'' parameter
== Template data ==
{{Collapse top|[[Wikipedia:TemplateData|TemplateData]] documentation used by [[Wikipedia:VisualEditor|VisualEditor]] and other tools}}
{{TemplateData header|noheader=1}}
<templatedata>
{
"description": "This template places one or more location marks on a map.",
"params": {
"1": {
"label": "Map name",
"type": "string",
"required": true,
"description": "The name of the map to be used"
},
"width": {
"label": "Map width",
"type": "number",
"description": "Determines the width of the map in pixels, overriding any default values. Do not include \"px\", for example: \"300\", not \"300px\"."
},
"default_width": {
"label": "Default width",
"type": "number",
"description": "Determines the default width of the map in pixels, intended for use by templates such as infoboxes. The default value is 240. Do not include \"px\". This value will be multiplied by the defaultscale parameter specified in individual map templates, if it exists, in order to achieve an appropriate size for vertical maps."
},
"float": {
"label": "Position",
"type": "string",
"description": "Specifies the position of the map on the page. Valid values are left, right, center and none. The default is right."
},
"border": {
"label": "Frame style",
"type": "string",
"description": "Specifies the color of the map frame when the parameter caption is used. If set to none, no border will be generated. ",
"suggestedvalues": [
"none",
"infobox",
"LightGray"
]
},
"caption": {
"label": "Map caption",
"type": "string",
"description": "The text of a caption to be displayed below the map. If caption is defined but is not assigned a value, the map will not be framed and no caption will be displayed. If caption is not defined, the map will not be framed and a default caption will be generated."
},
"alt": {
"label": "Alt text",
"type": "string",
"description": "Alt text for map; used by screen readers."
},
"relief": {
"label": "Alternative map from template",
"type": "string",
"description": "Any non-blank value (1, yes, etc.) will cause the template to display the map specified in the map definition template as image1, which is usually a relief map. If more than one relief map is defined, \"2\" will display \"image2\", and so on."
},
"AlternativeMap": {
"label": "Alternative map not from template",
"type": "string",
"description": "Allows the use of an alternative map. The image must have the same edge coordinates as the map template."
},
"overlay_image": {
"label": "Overlay image",
"type": "string",
"description": "Allows an overlay to be superimposed on the map. This parameter is seldom used."
},
"places": {
"label": "Place markers",
"type": "string",
"required": true,
"description": "Specifies one or more place markers using Location map~."
}
}
}
</templatedata>
{{Collapse bottom}}
== See also ==
* [[Wikipedia:Maps for Wikipedia]] - A list of mapping tools available on Wikipedia
* {{tl|Location map}} - For displaying one mark using latitude and longitude.
* {{tl|Location map many}} - For displaying multiple marks using latitude and longitude.
* [[:Commons:Category:Map pointers]] - List of the many Wikimedia Commons pointer symbols.
* {{tl|OSM Location map}} - OpenStreetMap map with an "interactive fullscreen" version. Allows for labels, numbered dots, a heading, caption, mini-locator map and overlays.
* {{tl|Overlay}} - Allows image numbered, textual number, or color tag overlays to be positioned over an image to indicate particular features in the image.
* {{tl|CSS crop}} - Wrapper template that allows cropping the map.
<includeonly>{{Sandbox other|
| <!--Categories below this line, please; interwikis at Wikidata-->
[[Category:Location map templates| ]]
[[Category:Graphics templates]]
}}</includeonly>
6k1rflp1vykn0960qajs5wy3wkfnpwp
Tempilet:Kbd/styles.css
10
1305
10621
2024-08-08T18:11:36Z
en>Jon (WMF)
0
Fixes [[phab:T369874]]. Please see talk page and do not revert without discussion. See also [[meta:User:Jon_(WMF)/Edit_for_dark_mode_support]]
10621
sanitized-css
text/css
/* {{pp-template}} */
.mw-tmpl-kbd {
background: #EEE;
color: var(--color-base);
}
@media screen {
html.skin-theme-clientpref-night .mw-tmpl-kbd {
background: #171a1d;
}
}
@media screen and ( prefers-color-scheme: dark ) {
html.skin-theme-clientpref-os .mw-tmpl-kbd {
background: #171a1d;
}
}
dxlcnl1iygay3brsqqnplmpgishklaz
10622
10621
2026-08-25T23:33:45Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Kbd/styles.css]]
10621
sanitized-css
text/css
/* {{pp-template}} */
.mw-tmpl-kbd {
background: #EEE;
color: var(--color-base);
}
@media screen {
html.skin-theme-clientpref-night .mw-tmpl-kbd {
background: #171a1d;
}
}
@media screen and ( prefers-color-scheme: dark ) {
html.skin-theme-clientpref-os .mw-tmpl-kbd {
background: #171a1d;
}
}
dxlcnl1iygay3brsqqnplmpgishklaz
Tempilet:Template link interwiki
10
1306
10623
2026-02-26T19:40:12Z
en>Pppery
0
Close
10623
wikitext
text/x-wiki
<!-- Subst of {{Tl2}} follows --><code><nowiki>{{</nowiki>[[:{{ safesubst:<noinclude/>#if: {{{sister|}}} | {{{sister}}}: }}{{ safesubst:<noinclude/>#if: {{{lang|}}} | {{{lang}}}: }}{{ safesubst:<noinclude/>ns:Template }}:{{{1}}}|{{{1}}}]]{{ safesubst:<noinclude/>#if: {{{2|}}} | |{{{2}}} }}{{ safesubst:<noinclude/>#if: {{{3|}}} | |{{{3}}} }}{{ safesubst:<noinclude/>#if: {{{4|}}} | |{{{4}}} }}{{ safesubst:<noinclude/>#if: {{{5|}}} | |{{{5}}} }}{{ safesubst:<noinclude/>#if: {{{6|}}} | |{{{6}}} }}{{ safesubst:<noinclude/>#if: {{{7|}}} | |{{{7}}} }}{{ safesubst:<noinclude/>#if: {{{8|}}} | |{{{8}}} }}{{ safesubst:<noinclude/>#if: {{{9|}}} | |{{{9}}} }}<nowiki>}}</nowiki></code><!-- Subst of {{Tl2}} ends --><noinclude>
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
{{documentation}}
</noinclude>
pvl9s5nv2clt2oy6mk5bjxv36zincca
10624
10623
2026-08-25T23:33:45Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Template_link_interwiki]]
10623
wikitext
text/x-wiki
<!-- Subst of {{Tl2}} follows --><code><nowiki>{{</nowiki>[[:{{ safesubst:<noinclude/>#if: {{{sister|}}} | {{{sister}}}: }}{{ safesubst:<noinclude/>#if: {{{lang|}}} | {{{lang}}}: }}{{ safesubst:<noinclude/>ns:Template }}:{{{1}}}|{{{1}}}]]{{ safesubst:<noinclude/>#if: {{{2|}}} | |{{{2}}} }}{{ safesubst:<noinclude/>#if: {{{3|}}} | |{{{3}}} }}{{ safesubst:<noinclude/>#if: {{{4|}}} | |{{{4}}} }}{{ safesubst:<noinclude/>#if: {{{5|}}} | |{{{5}}} }}{{ safesubst:<noinclude/>#if: {{{6|}}} | |{{{6}}} }}{{ safesubst:<noinclude/>#if: {{{7|}}} | |{{{7}}} }}{{ safesubst:<noinclude/>#if: {{{8|}}} | |{{{8}}} }}{{ safesubst:<noinclude/>#if: {{{9|}}} | |{{{9}}} }}<nowiki>}}</nowiki></code><!-- Subst of {{Tl2}} ends --><noinclude>
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! -->
{{documentation}}
</noinclude>
pvl9s5nv2clt2oy6mk5bjxv36zincca
Tempilet:Igen
10
1307
10625
2021-07-10T16:41:19Z
commons>CptViraj
0
Protected "[[Template:Igen]]": [[Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10625
wikitext
text/x-wiki
#REDIRECT [[Template:Image generation]] [[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]]
f15hn7uhl1b1b59qgin2qo8a9yy0ju7
10626
10625
2026-08-25T23:38:03Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Igen]]
10625
wikitext
text/x-wiki
#REDIRECT [[Template:Image generation]] [[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]]
f15hn7uhl1b1b59qgin2qo8a9yy0ju7
Tempilet:Image generation
10
1308
10627
2024-07-24T03:58:41Z
commons>Shizhao
0
dark mode fix
10627
wikitext
text/x-wiki
<onlyinclude>{{#if:{{{C|{{{Cl|}}}}}}|{{{T0|{{{t0|}}}}}}{{Tincture|{{{C|{{{Cl}}}}}}|tc={{{Ct|}}}|cat={{#switch:{{{Cc|}}}|=|n|-|=-|{{{Cc}}}}}<!--
-->|+={{#if:{{{Cl|{{{cl|}}}}}}|{{{Cl|{{{cl|}}}}}}|<!-- default is "+"
-->{{#switch:{{{C+|{{{c+|}}}}}}|={{#switch:{{{Cf|{{{cf|}}}}}}|n|-|=|+}}|+=+|n|-|=|{{{C+|{{{c+}}}}}}}}}}<!--
-->|ss={{#switch:{{{Css|{{{ss|}}}}}}||=0|d9|D9=Δ9|{{{Css|{{{ss}}}}}}}}|s={{{s|{{{w|}}}}}}|k={{{k|}}}}}}}<!--
-->{{#if:{{{cb|{{{Cb|}}}}}}|{{#invoke:Igenmod|split|{{#switch:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|+|e=|+{{#ifeq:{{{s}}}|f<!--
-->|=Flag colors}}{{#ifeq:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|#|//<!--
-->|{{#ifeq:{{padleft:|2|{{{cb|{{{Cb|}}}}}}}}|/#|/}}}}}}{{{cb|{{{Cb|}}}}}}|Igen/cbx}}{{{cbx|}}}}}<!-- like "Legend"
==start of template==
-->{{{{#if:{{{fn|}}}|Information field|{{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=Information field|Nil2}}}}<!--
-->|1={{#switch:{{{fn|}}}<!--
-->|+|={{#invoke:Igenmod|exttext}}{{I18n/COA|development}}<!-- "+", " "
-->|-=<!--
-->|{{{fn}}}}}<!--
-->|2={{#if:{{{T1|}}}|{{clr}}{{{T1}}}|{{{t1|}}}}}<!--
--><div style="vertical-align:middle"><!--
-->{{{p|{{{P|}}}}}}{{#if:{{{P|}}}|{{clr}}}}<!--
«#ifeq:{{{10}}}» SimplSVG when: either 10=S/S&/S*/S-, 1=S-/T-, or (sb= and sa=)
-->{{#if:{{#switch:{{{10}}}|S|S&|S-=1}}{{#ifeq:{{{1}}}|T-|1}}{{#if:{{{sb|}}}|{{#if:{{{sa|}}}|1}}}}<!--
-->{{#switch:S |{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T
-->{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T
-->{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}<!-- ???
-->{{#switch:S-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!--
T1 -->|{{SimplSVG|{{#ifeq:{{{1}}}|T-|T|{{{1|}}}}}|{{{sb|{{{2|}}}}}}|{{{sa|{{{3|}}}}}}<!-- (par#4 can be substituted by "s")
T4 -->|{{#switch:{{{4}}}|a|b|bi|c|ch|d|e|em|f|g|h|i|jc|je|k|l|m|o|p|r|s|t|u|v|y|7|♫|α|?={{{4}}}<!-- valid topic ?
-->|#default={{#if:{{{s|}}}|{{{s}}}}}}}<!--
T5 -->|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}<!-- T 5...9
T10-->|{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=&<!-- + rd
-->|{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}}}<!-- ???
-->|style=<nowiki/><!-- 10=+
-->|topic={{#if:{{{s:|}}}|{{lcfirst:{{{s:}}}}}<!--
-->|{{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!--
-->|{{#if:{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s|}}}}}}}}}}}}}}}}}}<!--
-->|{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s}}}}}}}}}}}}}}}}}}}}}}}}<!--
-->|ni={{{←|}}}{{{←s|}}}{{{←t|}}}|ns={{{ns|}}}|pu={{{pu|}}}<!-- ni=nomsg ns=nosub pu=previous user
-->|vs={{#switch:{{{vs|{{{vstyle|}}}}}}||none=-|=fl|{{{vs|{{{vstyle}}}}}}}}<!-- n=n, -=-
-->|sub={{#if:{{{sub-|}}}|-{{{sub-}}}{{{sd|}}}<!-- complicated:
-->|{{#switch:{{{sub|}}}<!--
-->|none|n=|-=-|so=-stripes only<!--
-->||={{#switch:S-|{{{10}}}|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=-|{{#ifeq:{{{1}}}|T-|-}}<!--
-->|#default={{#switch:{{{4}}}|jc=-Japanese crests|je=-Japanese emblems<!--
-->|{{#invoke:Igenmod|subst|{{{sub|}}}}}}}}}}}}}<!--
-->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for SimplSVG/Text editor
-->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}<!-- text editor
-->{{#if:{{{s:| {{{su:|}}}}}}|:{{ucfirst:{{Igen/sub|{{{s:|{{{su:}}}}}}}}s}}<!--
-->|{{#if:{{{Vs|}}}| {{{Vs|}}}|{{#if:{{{vsub|}}}|{{#invoke:Igenmod|subst|{{{vsub}}}{{{sd|}}}}}}}}}}}<!--
-->|sdif={{{sd|}}}|key={{{k|}}}<!--
-->|user={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|}}}}}}}}<!--
|code ={{{code|{{{c1|}}}}}}
{{#if:{{{c1|}}}{{{c2|}}}{{{code|}}}|{{Igen/cat|Valid SVG created with Text Editor code}}}}-->}}<!--
«not #ifeq:{{{10}}} → SimplSVG »
-->|{{{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!-- 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
-->|IMPORTANT={{#switch:{{lc:{{{1}}}}}|im|ims=<!--
-->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|no|yes}}}}<!-- all the processing would be done by "Inkscape"
-->|Optimized={{#switch:{{lc:{{{1}}}}}|iz|izs=yes}}<!--
{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}||yes}}}} all the processing would be done by "Inkscape"
-->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|{{#switch:{{lc:{{{1}}}}}|im|ims=<!--
-->…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]]}}}}<!--
-->|{{#if:{{{U|}}}|{{U|{{{U}}}}}|{{#if:{{{u|{{{user|}}}}}}|{{{u|{{{user|}}}}}}|<!-- parm (1)
-->{{#if:{{{by|}}}|{{#switch:{{padleft:|1|{{{by}}}}}|[|{={{{by}}}|{{u|{{{by}}}}}}}}}}}}}<!--
-->|{{#switch:{{{2|}}}|v=v|/|s=/|t=t|#default={{#switch:{{{1|}}}|/=/<!-- "n" only checked:
-->|#default={{#ifeq:{{#invoke:Igenmod|extcode}}|s|v|n}}}}}}<!-- parm (2)
-->|err={{#switch:{{{err|{{{e|}}}}}}|=0|-=|={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|2}}}}|{{{err|{{{e|}}}}}}}}<!--
-->|name={{#if:{{{N|}}}| {{{N}}}|{{{n|{{{name|{{#if:{{{cw|}}}|{{W|{{{cw}}}}}}}}}}}}}}}<!--
-->|more={{{lnk|}}} {{#switch:{{lc:{{{1}}}}}<!-- test
-->|ia|ai={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}}}}}}}}}|, }}<!--
-->|i|im|is|ims={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}}}}}}}}}|. }}<!-- corr Stang's chng
-->|#default={{#if:{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}|{{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}}}}}}}}}|, }}}}<!--
-->|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}|}}}}}}}}}}<!-- |.
-->|source={{{source|}}}<!--
-->|13={{#ifeq:{{lc:{{{1}}}}}|t|{{{M|{{{m}}}}}}}}<!-- test parm (13) "m" [ don´t set "logo" ]
-->|code ={{{code |{{{c1|}}}}}}<!--
-->|subc={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' (for sll except SimplSVG & Inkscape-hand)
-->{{#ifeq:{{{1}}}|H||{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!--
-->|sub={{#switch:{{{sub|}}}<!--
-->|n|-={{#if:{{{sd|}}}|{{{sd}}}}}<!-- "-" when coded "n"/"-"
-->|={{#if:{{{sd|}}}|{{{sd}}}}}-<!-- empty 'sub=' gives also "-" [[Category:Commons:Maint:Igen:esub]]
-->||∅={{#if:{{{S|}}}| {{Igen/sub|{{{S}}}}}{{{sd|}}}<!-- when missing or ∅:
-->|{{#if:{{{sub-|}}}|-{{{sub-}}}{{{sd|}}}<!--
-->|{{#if:{{{sub:|}}}|:{{{sub:}}}{{{sd|}}}<!--
-->|{{#if:{{{Sub:|}}}|: {{{Sub:}}}{{{sd|}}}<!--
-->|{{#if:{{{s:|}}}|:{{ucfirst:{{Igen/sub|{{{s:}}}}}s<!-- {{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}} -->{{{sd|}}}}}<!--
-->|{{#if:{{{S:|}}}|: {{ucfirst:{{Igen/sub|{{{S:}}}}}s{{{sd|}}}}}<!--
-->|{{#if:{{{su:|}}}|:{{ucfirst:{{Igen/sub|{{{su:}}}}}s{{{sd|}}}}}<!--
-->|{{#if:{{{s-|}}}|-{{ucfirst:{{Igen/sub|{{{s-}}}}}s{{{sd|}}}}}<!--
-->|{{#if:{{{s|}}}|{{Igen/sub|{{{s}}}|t={{{1}}}|u={{{u|}}}}}<!--
-->{{#ifeq:{{{2}}}|n|{{{sd|}}}|{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}}<!-- no sd when ce,eh but csd
-->|{{#switch:{{lc:{{{1}}}}}|a$|i$|=-Commonist}}<!--
-->|{{#if:{{{sd|}}}|{{{sd}}}}}}}}}}}}}}}}}}}}}}}<!--
-->|#default={{#invoke:Igenmod|subst|{{{sub}}}}}{{#if:{{{sd|}}}|{{{sd}}}}}}}<!--
-->|cat={{#switch:{{{cat|{{{c|{{{category|}}}}}}}}}|none|n|-|=-<!--
-->|={{#if:{{{cw|}}}|Created with {{{cw}}}}}|∅=|{{{cat|{{{c|{{{category|}}}}}}}}}}}<!--
-->|cni={{#switch:{{{cni|}}}|n|-=-|=|{{{cni}}}}}<!-- ("-"; empty; cat)
-->|c_text={{{ct|{{{c_t|{{{c_text|}}}}}}}}}<!--
-->|key={{#switch:{{{k|}}}|n|-=-|=~|{{{key|{{{k|{{#if:{{{K|}}}| {{{K}}}}}}}}}}}}}|lang={{{lang|}}}<!--
-->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for Inkscape-hand/Text editor
-->{{#ifeq:{{{1}}}|H|{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!--
-->{{#switch:{{{vsub|{{{Vs|}}}}}}|=|n|-|=|{{#if:{{{Vs|}}}| }}{{Igen/sub|{{{vsub|{{{Vs|}}}}}}}}}}<!--
V4-->|vstyle={{{vs|{{{vstyle|fl}}}}}}<!-- n=n
V5-->|vwidth={{{vw|{{{vwidth|}}}}}}<!-- width
V6-->|vtxt={{#if:{{{V|}}}| {{{V}}}|{{{vt|{{{vtxt|{{#switch:{{{v|}}}|n|-|=-|=}}}}}}}}}}<!--
V7-->|vo={{{vo|{{{opt|{{{vopt|{{{o|{{#if:{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{>|{{{>c|}}}}}}|>}}}}}}}}}}}}}}<!-- >
V8 = topic
V9-->|vcat={{{vc|{{{vcat|}}}}}}<!-- ¿HandSVG?
-->|vc={{#switch:{{{>c|}}}|n|-|=-|{{{>c}}}}}<!-- cat:Large SVG files
-->|topic={{#switch:{{{topic|{{{what|{{{w|}}}}}}}}}<!-- "topic" for text diff with (Igen/top) in (created with/)
-->|n|-|=-<!--
-->|={{#switch:{{{s|}}}<!--
-->||n|-|={{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!--
-->|{{{{#ifeq:{{{sc|}}}|u|u|l}}cfirst:{{{s:|{{{s-|{{{S:|{{#if:{{{sub:|}}}|''{{{sub:}}}''}}}}}}}}}}}}}}}<!--
-->|{{{s|}}}}}<!--
-->|{{#switch:{{#if:{{{topic|}}}|1|{{#if:{{{what|}}}|2|{{#if:{{{w|}}}|3}}}}}}<!-- unnested
-->|1={{{topic}}}<!--
-->|2={{{what}}}<!--
-->|3={{{w}}}<!--
-->}}}}<!--
-->|other={{lc:{{padleft:|1|{{{1}}}}}}}<!-- to differ between "O" and "U"
-->|item={{{item|{{{i|{{#if:{{{I|}}}|{{w{{{I}}}}}}}}}}}}}<!--
-->|type={{{type|}}}|par1={{{par1|}}}|par2={{{par2|}}}|mode={{{mode|}}}<!--
-->|style=float:left;vertical-align:middle<!--
-->|logo={{{logo|{{#if:{{{cw|}}}|{{{cw}}} logo.svg}}}}}<!-- {{{logo|}}} test
-->}}}}<!-- «end #ifeq:{{{10}}}»
into the same line:
-->{{#ifeq:{{{1}}}|IA|{{Igen/amp|I|A|||topic={{{&s|{{{s|{{{w|}}}}}}}}}}}<!--
-->|{{#if:{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}<!-- any one of these triggers
-->{{#switch:{{{&c|↓}}}|↓=|1}}{{#switch:{{{&l|↓}}}|↓=|1}}{{#switch:{{{&s|↓}}}|↓=|1}}<!-- if defined, empty or with value
-->{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/amp|1={{#switch:Q|{{{&|Q}}}|{{padleft:|1|{{uc:{{{&}}}}}}}=QGIS|{{{&}}}}}<!--
-->|2={{{&&|{{#switch:{{lc:{{{1}}}}}|a|adobe|illustrator|adobe illustrator|adobe illustrator$|a$|av|ia=Adobe<!--
-->|i|inkscape|ic|ii|im|io|is|iz|i$|ai=Inkscape|?}}|}}}<!--
-->|3={{{1|}}}<!--
-->|&c={{#switch:{{{&c|}}}|=|n|-|=-|{{{&c}}}}}<!-- ?-?
-->|&l={{#switch:{{{&l|}}}|=|n|-|=-|{{{&l}}}}}<!--
-->|&s={{#switch:{{{&s|}}}|=|n|-|=-|{{{&s}}}}}<!--
-->|&k={{{&k|}}} }}}}}}<!--
-->{{#switch:S&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- S&: Simpl + rd
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}=<!-- {{Igen/sni|&}} --><!-- 35
-->|{{#switch:S*|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!--
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni}}<!--
-->|{{#if:{{#switch:{{{rd|-}}}|-=|1}}{{#switch:rd|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{35}}}=1}}|{{Redrawn with Text Editor|{{{rd|}}}}}}}}}}}<!--35
-->{{#ifeq:{{lc:{{{1}}}}}|ic|{{Igen/amp|svgc|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IC"
-->{{#ifeq:{{lc:{{{1}}}}}|io|{{Igen/amp|svgo|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IO"
-->{{#ifeq:{{lc:{{{1}}}}}|is|{{Igen/amp|sopt|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IS"
others need the categorizing:
-->{{#ifeq:{{lc:{{{1}}}}}|ii|{{Igen/amp|heraldicon|I|&c=Created with Heraldicon|&k=ZZZ|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!--
if also same line required:
-->{{#if:{{{1c|}}}|{{1color|{{{1cc|}}}|{{{1c}}}}}}}<!--
-->{{#switch:{{{%}}}|vv|vs|vf|f={{Igen/emb|{{{%}}}|f<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#switch:%f|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb|vf|f<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}}}}}<!--
-->{{#switch:{{{<}}}|vf|vl|vn|vs|vv={{Igen/ptx|f|sub=vv|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|s2={{{<|}}}|{{#ifeq:{{{<}}}|vl|l}}}}}}<!--
-->{{#if:{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{#switch:tl|{{{s}}}|{{{w}}}={{Igen/ptx|f|sub=vv|s=tl|l}}}}}}<!-- Text Logo
-->{{#switch:%C|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!--
-->|{{{11}}}|{{{12}}}={{Igen/swv|s={{{s|{{{w|}}}}}}}}}}<!-- switch-controlled variations
-->{{#if:{{{T2|}}}|{{clr}}{{{T2}}}|{{{t2|}}}}}<!--
-->{{#if:{{#switch:{{lc:{{{1}}}}}|a$|i$=1}}<!-- and Commonist (parameters "$ " and "c ")
-->{{#switch:$|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- «$» Commonist
-->{{#if:{{{$m|{{{cm|}}}}}}{{{$u|{{{cu|}}}}}}{{{$w|}}}|1}}<!--
-->{{#switch:{{{$c|↓<!-- {{{cc|}}} -->}}}|↓=|1}}{{#switch:{{{$f|{{{cf|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value
-->{{#switch:{{{$l|{{{cl|↓}}}}}}|↓=|1}}{{#switch:{{{$s|{{{cs|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value
-->|{{#switch:{{{$f|{{{cf|}}}}}}||none|n|-|=|br=<br>|clr={{clr}}|{{{$f|{{{cf|}}}}}}}}<!-- linefeed before
-->{{Commonist|{{{$u|{{{cu|}}}}}}|more={{{$m|{{{cm|}}}}}}<!--
-->|logo={{#switch:{{{$l|{{{cl|}}}}}}|=Commonist.svg|none|n|-|=-|{{{$l|{{{cl|}}}}}}}}<!--
-->|category={{#switch:{{{$c|<!-- {{{cc|}}} -->}}}|=|none|n|-|=-|{{{$c|<!-- {{{cc|}}} -->}}}}}<!--
-->|sub={{#switch:{{{$s|{{{cs|}}}}}}||none|n|-|=|{{#invoke:Igenmod|subst|{{{$s|{{{cs|}}}}}}}}}}<!--
-->|user={{{U|}}}<!-- for possible subcategorizing
-->|topic={{#if:{{{$w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}<!--
-->|{{{$w|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}<!--
-->|size={{#if:{{{>|}}}{{#switch:><!--
-->|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}<!--
-->|err={{#if:{{{e|{{{err|}}}}}}|{{{e|{{{err}}}}}}<!-- Commonist with err ?
-->|{{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|3}}}}}}}}}}<!--
-->{{#if:{{{T3|}}}|{{clr}}{{{T3}}}|{{{t3|}}}}}<!--
-->{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{#ifeq:{{{%}}}|s|1}}<!--
-->|{{#if:{{{tr|}}}||{{Igen/emb|switch=s|1={{{%s|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}}}<!--
-->|{{#if:{{{%a|}}}|{{Igen/emb|switch=S|1={{{%a|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%S|}}}{{#switch:%S|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|switch=S|1={{{%S|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%|}}}{{#switch:%|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:embedded|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|1={{{%|}}}|2=s|v={{#ifeq:{{{1}}}|Wpdc|n|{{#switch:{{{%}}}|r|v|V|i|n|-={{{%}}}}}}}<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!--
-->|{{#if:{{{%v|}}}{{#switch:%v|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|s={{{w|{{{s|}}}}}}|v={{{%v|v}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%i|}}}{{#switch:%i|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|i|v={{{%i|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%I|}}}{{#switch:%I|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|i|v={{{%I|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->{{Convert to multilang}}<!--
-->|{{#if:{{#switch:%n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#ifeq:{{{1}}}|Wpdc|1}}|{{Igen/emb|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|v=n|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!--
-->|{{#switch:%r|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%r|r}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#switch:%m|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%m|r}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!--
-->|{{#switch:%M|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%M|v}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!--
-->|{{#switch:%t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%t|t}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#switch:%u|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%u|u}}}|q={{{4|}}}|z={{{10|}}}}} }}}}}}}} }}}}}}}}}}<!--
-->|{{#if:{{{%V|}}}|{{Igen/emb|s={{{w|{{{s|}}}}}}|v= {{{%V}}}|q={{{4|}}}|z={{{10|}}}}}}}}}}}}}}}<!-- ///
-->{{#switch:%a|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{15}}}={{Add languages}}}}<!-- 15=
-->{{#switch:%w|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{17}}}={{Invtext<!-- 17
-->|s={{{s|{{{w|}}}}}}|e={{#switch:{{{err|{{{e|}}}}}}|=0|-=|={{#if:{{Igen/par|{{{2|}}}<!--
-->|{{Igen/par|{{{2|}}}}}|0}}}}}}|3={{{%sc|{{{u|}}}}}}}}}}<!--
-->{{#switch:S+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!--
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni|1={{{%p|+}}}}}}}<!-- after %
-->{{#if:{{{T4|}}}|{{clr}}{{{T4}}}|{{{t4|}}}}}<!-- Graphic Lab: parameter "gs" (nl, sx) defaulted with "nl"
-->{{#if:{{{glc|}}}|{{Igen/glc|{{{glc|}}}|{{{err|{{{e|{{{2|}}}}}}}}}|3={{{lang|}}}|4={{{nat|}}}<!-- Graphic Lab CoA
-->|s={{{s|{{{w|}}}}}}|gc={{{gc|}}}|sd={{{sd|}}}|gt={{{1}}}|U={{{U|}}}|u={{{u|}}}|vs={{{vs|}}}<!--
-->|sub={{{sub|}}}|cat={{{cat2|}}}|gk={{{gk|{{{k|}}}}}}|gs={{{gs|nl}}}|gr={{{gr|}}}|gt2={{{gt|}}}}}<!--
while e.g. "g=de" or "gd" is for Graphic Lab_de, "glc=.." is for all the indiv. Graphic CoA Labs
-->|{{#if:{{{gl|{{{g|}}}}}}|{{Igen/lab|{{{gl|{{{g|}}}}}}|{{#if:{{{gl|}}}|gl|g}}|s={{{s|{{{w|}}}}}}<!--
-->|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{gt|}}}}}}}<!--
-->{{#switch:gl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/lab|en|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gc|}}}{{#switch:gc|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|Commons|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gc|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gb|}}}{{#switch:gb|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|bn|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gb|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gB|}}}{{#switch:gB|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|eu|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gB|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gd|}}}{{#switch:gd|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|de|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gd|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{lc|}}}}}}}<!--
-->{{#if:{{{ge|}}}{{#switch:ge|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|es|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{ge|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gf|}}}{{#switch:gf|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|fr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gf|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gi|}}}{{#switch:gi|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|it|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gi|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gH|}}}{{#switch:gH|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|ch|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gH|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gj|}}}{{#switch:gj|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|he|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gj|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gr|}}}{{#switch:gr|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|ru|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gr|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gP|}}}{{#switch:gP|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|pl|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gP|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gs|}}}{{#switch:gs|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|sv|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gs|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gt|}}}{{#switch:gt|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|tr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gt|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gw|}}}{{#switch:gw|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|w|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gw|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}} }}<!--
-->{{#if:{{#switch:fw|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{fwc|{{{fwe|{{{fwo|{{{fwl|{{{fwt|{{{fws|}}}}}}}}}}}}}}}}}}<!-- any one of these (with value) triggers "Fotowerkstatt"
-->|{{clr}}{{Fotowerkstatt|changes={{{fwc|}}}|editor={{{fwe|}}}|orig={{{fwo|}}}|orig-lang={{{fwl|}}}<!--
-->|topic={{{fwt|{{{w|{{{s|}}}}}}}}}|style={{{fws|margin:0}}}}}}}<!--
-->{{#if:{{{sd|}}}|{{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh={{Igen/csd|{{{e|{{{err|{{{2|0}}}}}}}}}|{{{1}}}|{{{sd}}}}}}}}}}}<!--
-->{{#if:{{{T5|}}}|{{clr}}{{{T5}}}|{{{t5|}}}}}<!--
-->{{#if:{{{^|}}}{{#switch:^|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{^s|{{{^t|{{{^p|{{{^c|}}}}}}}}}}}}<!-- any one of these (with value) triggers "Valued image"
-->|{{Igen/qui|{{{1|}}}|{{{2|}}}|{{{e|{{{err|}}}}}}|type={{{^|}}}<!-- (via "Quality image" stub)
-->|scope={{{^s|}}}|time={{{^t|}}}|page={{{^p|}}}|cat={{{^c|}}}|top={{{^w|{{{w|{{{s|}}}}}}}}}|by={{{^b|}}}}}}}<!--
-->{{#if:{{{\+|}}}{{{\+r|}}}{{{\+l|}}}{{{\+t|}}}{{{\+u|}}}{{#switch:\+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Supersedes|{{{\+|}}}|{{{\+r|{{{\r|}}}}}}|{{{\+u|{{{\u|}}}}}}|lang={{{\+l|{{{\l|}}}}}}<!--
-->|{{#switch:{{{\+t|{{{\t|}}}}}}|={{{w|{{{s|}}}}}}|n|-|=|{{{\+t}}}}}|q=i}}}}<!-- other file inferior
-->{{#if:{{{f|}}}|{{Igen/fif|{{{f}}}|cat={{{fc|}}}|topic={{{ft|{{{w|{{{s|}}}}}}}}}}}}}<!--
-->{{#if:{{{T6|}}}|{{clr}}{{{T6}}}|{{{t6|}}}}}<!--
disadvantages:
-->{{#switch:{{{~}}}||-|n|=|{{#if:{{{~|{{{Cdata|}}}{{{~k|{{{~u|{{{~U|}}}}}}}}}}}}{{#switch:{{{~|}}}|n|-|=1}}<!--💩
-->{{#switch:~|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Cdata|style=margin:0|sub={{#switch:{{{~|{{{Cdata|}}}}}}|n|-|=-<!--
-->|{{#if:{{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}|: {{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}}}|{{{~|}}}}}<!--
-->|user={{#if:{{{U|{{{~U|}}}}}}|{{U|{{{U|{{{~U}}}}}}}}|{{{~u|{{{u|}}}}}}}}|U={{{U|{{{~U|}}}}}}|key={{{~k|}}}<!--
-->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}<!--
-->|bad={{#if:{{{!|}}}{{#switch:!|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--💩
-->|{{#ifeq:{{{!}}}|t||also}}}}}}}}}}<!--
-->{{#if:{{{!|}}}{{#switch:{{{!s|↓}}}|↓=|1}}{{#switch:{{{!c|↓}}}|↓=|1}}<!-- when one of these is defined, empty or with value
-->{{#switch:!|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{ {{#switch:{{{!}}}|f|x=Fake|r|t=Topo|#default=Bad}}SVG<!--
-->|1={{{!|}}}|2={{#switch:{{{1}}}|A|a|Illustrator|Adobe Illustrator|A$|a$|IA=Adobe-}}<!--
-->|style={{{style|{{#switch:{{{!}}}|t|f|r|x=|width:100%;border:2px red solid;margin:0}}}}}<!--
-->|subcat={{#switch:{{{!s|{{{subcat|}}}}}}|=|n|-|=-|{{#invoke:Igenmod|subst|{{{!s|{{{subcat|}}}}}}}}}}<!--
-->|category={{#switch:{{{!c|}}}|=|n|-|=-|{{{!c}}}}}<!--
-->|key={{{!k|}}}<!--
-->|badcat={{{U|{{{u|}}}}}}|vsub={{{vsub|}}}|topic={{{w|{{{s|}}}}}}<!--
-->|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}}}}}<!--
-->{{#if:{{{?|}}}{{{??|}}}{{#switch:{{{?s|↓}}}|↓=|1}}<!-- when subcat ?s is defined, empty or with value
-->{{{?b|}}}{{{?c|}}}{{{?d|}}}{{{?f|}}}{{{?o|}}}{{{?r|}}}{{{?u|}}}<!--
-->{{{?s|}}}{{{?w|}}}{{{?t|}}}{{{?k|}}}{{{?n|}}}{{{?p|}}}{{{?x|}}}<!--
-->{{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Rsvg bug|3={{{?b|}}}|4={{{?c|}}}|5={{{?d|}}}|6={{{?f|}}}|7={{{?o|}}}|8={{{?r|}}}|9={{{?u|}}}<!--
-->|2={{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-}}<!--
-->|1={{{??|{{{?|{{#if:{{{?p|}}}|{{#invoke:Igenmod|split|{{{?p}}}|Igenbug}}}} }}}}}}<!--
-->|topic={{{?w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}|name={{{?n|}}}<!--
-->|tool={{{?t|{{{1|}}}}}}|sub={{#switch:{{{?s|}}}|=|n|-|=-|{{{?s}}}}}|key={{{?k|}}}}}}}<!-- ?-?
-->{{#switch:?x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!--
-->|{{{11}}}|{{{12}}}|{{{13}}}|{{{21}}}|={{Rsvg bug|-|11=x}}}}<!-- flowRoot eXception
-->{{#if:{{{<|{{{<s|}}}}}}{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/ptx|s|sub={{{<|{{#switch:tl|{{{s}}}|{{{w}}}=vv}}}}}<!--
-->|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}|s={{{<s|{{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|{{{vsub|}}}}}}<!--
-->|source={{{source|}}}|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}|cat={{#switch:{{{>c|}}}|=|n|-|=-|{{{>c|}}}}}}}<!--
-->|{{#switch:<n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=n<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}<!--
-->|{{#switch:<v|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=v<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}<!--
-->|{{#switch:<i|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|sub=i|s={{{<s|{{{w|{{{s|}}}}}}}}}|v=i<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}}}<!--
-->|{{#switch:<h|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|sub=|s=h|v=<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}}}<!--
-->|{{#switch:<l|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|sub=|s=l|v=l<!-- standard: no cat
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}}} }}}}}}<!--
-->{{#switch:<x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}{{{17}}}={{ShouldBeText}}}}<!-- 17=
-->{{#if:{{{tw|}}}|{{Igen/twt|{{{tw|}}}<!-- Taken with
-->|tc={{#switch:{{{tc|}}}|=|n|-|=-|{{{tc}}}}}<!--
-->|tl={{#switch:{{{tl|}}}|=|n|-|=-|{{{tl}}}}}<!--
-->|tx={{#switch:{{{tx|}}}||n|-|=-|{{{tx}}}}}<!--
-->|tu={{#switch:{{{tu|}}}|n|-|=-|={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|-}}}}}}}}|{{{tu}}}}}<!--
-->|+={{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=+}}}}}}<!--
-->{{#if:{{{§|{{{§s|}}}}}}{{#switch:§|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{TracedSVG|{{{§|}}}|sub={{{§s|}}}|style=width:100%}}}}<!-- File generation description: 11=
-->{{#if:{{{×|}}}{{#switch:×|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}=1}}<!--
-->{{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×c|}}}<!--
-->{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×n|}}}<!--
-->{{#switch:×t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×t|}}}<!--
-->{{#switch:{{{×c|}}}|n|-|=1}}{{#switch:{{{×n|}}}|n|-|=1}}{{#switch:{{{×t|}}}|n|-|=1}}<!--
-->|{{-}}{{SimplSVG|3=000|4={{{×|{{{×n|}}}}}}|5={{{×d|{{#if:{{{×|}}}|16x16}}}}}|6={{{×t|{{{w|{{{s|}}}}}}}}}<!--
-->|7={{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!-- category
-->|{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!--
-->|{{#if:{{#switch:{{{×c|}}}|n|-|=1}}{{#switch:{{{×n|}}}|n|-|=1}}|-<!--
-->|{{#switch:{{{×t|{{{w|{{{s|}}}}}}}}}|bi=:BSicons{{#if:{{{×n|}}}|-unused}}|c|eh=:CoAs<!-- subcat
-->|d=:Diagrams|f=:Flags|i=:Icons|l|tl=:Logos|y|p|s=:Symbols|jc=:Crests<!--
-->|je|e|em=:Emblems|m=:Maps|n|-|=|&default={{{×t}}}}}}}}}}}{{{×s|}}}<!--
-->|8={{#switch:{{{×t|}}}|n|-|=||{{Igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}|2=file|lang=en}}}}<!--
-->|9={{#switch:{{{err|{{{e|}}}}}}|=|={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}}}}}|{{{err|{{{e|???}}}}}}}}<!--
-->|10={{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:{{{×n|}}}|n|-|=1}}{{{×n|}}}|⛔ '''''nowhere'' used''' ⛔}}<!--
-->|11={{{×k|}}}|12={{{×r|}}}|13={{{×q|}}}<!--
-->|style=margin:0}}}}<!--{{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}
{{#switch:{{{×n|}}}|n|-|=1}}|⛔ This {{igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}}} is ''nowhere'' used ⛔}}
{{#switch:××|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}{{{12}}}{{{13}}}={{UseXML}}}}<!--
-->{{#if:{{{××|}}}{{#switch:××|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!--
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=1}}|{{UseXML|{{{××|}}}|style=margin:0}}}}<!--
-->{{#if:{{{R|}}}|{{clr}}}}{{#if:{{{editor|}}}{{{editoff|}}}{{{orig|}}}{{{origoff|}}}<!--
-->{{#switch:{{{R|?↓}}}|?↓=|1}}{{#switch:{{{r|↓}}}|↓=|1}}<!-- when defined, empty or with value
-->|{{Retouched picture|{{#ifeq:{{{r}}}|-||{{{R|{{{r|}}}}}}}}|editor={{{editor|}}}|orig={{{orig|}}}<!--
-->|editoff={{{editoff|}}}|origoff={{{origoff|}}}<!--
-->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}}<!--
-->{{#if:{{{\|}}}{{{\-|}}}{{{\-r|}}}{{{\-l|}}}{{{\x|}}}{{{\-x|}}}{{#switch:\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|{{Superseded|{{{\|{{{\-|}}}}}}|{{{\-r|{{{\r|}}}}}}|lang={{{\-l|{{{\l|}}}}}}<!--
-->|ext={{{\-x|{{{\x|{{#if:{{{\|}}}{{{\-|}}}||png}}}}}}}}<!--
-->|topic={{{\-t|{{{\-w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}|q=s}}<!-- other file supersedes
-->{{#ifeq:{{{!}}}|f|[[Category:Fake SVG with raster version available|{{PAGENAME}}]]}}}}<!-- File generation description: 13=
-->{{#if:{{{\\|}}}{{{\\r|}}}{{{\\l|}}}{{{\\q|}}}{{#switch:\\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!--
-->|{{Vector version available|{{{\\|}}}|q={{{\\q|{{{\q|}}}}}}|r={{{\\r|{{{\r|}}}}}}|lang={{{\\l|{{{\l|}}}}}}<!-- SupersededSVG
-->|topic={{{\\t|{{{\\w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}}}}}<!--
-->{{#if:{{{\#|}}}{{#switch:\#|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!-- 13=
-->|{{PDF version available|{{{\#|}}}}}}}<!-- PDF file
-->{{#if:{{{T7|}}}|{{clr}}{{{T7}}}|{{{t7|}}}}}<!--
more special character parameters
-->{{#switch:{{padleft:|1|{{{1}}}}}|*|@|(|)|_={{Igen/2nd|{{{1}}}|p=1}}}}<!--
-->{{#switch:{{padleft:|1|{{{2}}}}}|*|@|(|)|_={{Igen/2nd|{{{2}}}|p=2}}}}<!--
-->{{#switch:{{padleft:|1|{{{3}}}}}|*|@|(|)|_={{Igen/2nd|{{{3}}}|p=3}}}}<!--
-->{{#switch:{{padleft:|1|{{{4}}}}}|*|@|(|)|_={{Igen/2nd|{{{4}}}|p=4}}}}<!--
-->{{#switch:{{padleft:|1|{{{5}}}}}|*|@|(|)|_={{Igen/2nd|{{{5}}}|p=5}}}}<!--
-->{{#switch:{{padleft:|1|{{{6}}}}}|*|@|(|)|_={{Igen/2nd|{{{6}}}|p=6}}}}<!--
-->{{#switch:{{padleft:|1|{{{7}}}}}|*|@|(|)|_={{Igen/2nd|{{{7}}}|p=7}}}}<!--
-->{{#switch:{{padleft:|1|{{{8}}}}}|*|@|(|)|_={{Igen/2nd|{{{8}}}|p=8}}}}<!--
-->{{#switch:{{padleft:|1|{{{9}}}}}|*|@|(|)|_={{Igen/2nd|{{{9}}}|p=9}}}}<!--
-->{{#switch:{{padleft:|1|{{{10}}}}}|*|@|(|)|_={{Igen/2nd|{{{10}}}|p=10}}}}<!--
-->{{#switch:{{padleft:|1|{{{11}}}}}|*|@|(|)|_={{Igen/2nd|{{{11}}}|p=11}}}}<!--
-->{{#switch:{{padleft:|1|{{{12}}}}}|*|@|(|)|_={{Igen/2nd|{{{12}}}|p=12}}}}<!--
---{{#switch:{{padleft:|1|{{{13}}}}}|*|@|(|)|_={{Igen/2nd|{{{13}}}|p=13}}}}-!--
---{{#switch:{{padleft:|1|{{{14}}}}}|*|@|(|)|_={{Igen/2nd|{{{14}}}|p=14}}}}-!--
---{{#switch:{{padleft:|1|{{{15}}}}}|*|@|(|)|_={{Igen/2nd|{{{15}}}|p=15}}}}-!--
-->{{#if:{{{*|}}}|{{Igen/2nd|{{{*}}}|c=*}}}}<!--
-->{{#if:{{{@|}}}|{{Igen/2nd|{{{@}}}|c=@}}}}<!--
-->{{#if:{{{(|}}}|{{Igen/2nd|{{{(}}}|c=(}}}}<!--
-->{{#if:{{{)|}}}|{{Igen/2nd|{{{)}}}|c=)}}}}<!--
-->{{#if:{{{_|}}}|{{Igen/2nd|{{{_}}}|c=_}}}}<!--
-->{{#if:{{{T8|}}}|{{clr}}{{{T8}}}|{{{t8|}}}}}<!--
-->{{#if:{{{→|}}}{{#switch:→|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!-- 12=
-->|{{SVG|{{#if:{{{→|}}}|{{{→}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}}}<!--File generation description:
-->|{{#if:{{{⇒|}}}{{#switch:⇒|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!--
-->|{{SVG|{{#if:{{{⇒|}}}|{{{⇒}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}|simple}} }}}}<!--
final tags: message boxes
-->{{#if:{{#switch:{{{nu|-}}}|-=|1}}{{#switch:nu|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm ?
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{21}}}=1}}|{{clr}}{{NoUpdate|{{{nu|}}}|{{{nu2|}}}}}}}<!--
-->{{#if:{{#switch:{{{re|-}}}|-=|1}}{{#switch:re|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{22}}}=1}}|{{clr}}{{Recent<!--
-->|style=width:auto;border:thin solid var(--border-color-progressive--active,#009);margin:0|iconsize=33x22|{{{re|}}}}}}}<!--
-->{{#if:{{#switch:{{{rs|-}}}|-=|1}}{{#switch:rs|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{38}}}=1}}|{{clr}}{{Restoration|style=margin:0}}}}<!--
-->{{#if:{{#switch:{{{up|-}}}|-=|1}}{{#switch:up|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{23}}}=1}}|{{clr}}{{Update<!--
-->|style=width:auto;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48|{{{up|}}}}}}}<!--
-->{{#if:{{#switch:{{{lh|-}}}|-=|1}}{{#switch:lh|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{24}}}=1}}|<!--
{{clr}} -->{{Logo history|{{{lh}}}|style=margin:0;border:2px solid var(--border-color-content-added,#ccf)}}}}<!--
-->{{#if:{{#switch:{{{ci|-}}}|-=|1}}{{#switch:ci|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{25}}}=1}}|{{Current<!-- /i18n
-->|style=width:auto;border:thin solid var(--border-color-notice,#333);margin:0|iconsize=40|s={{{w|{{{s|}}}}}}|{{{ci}}}|{{{ci2|}}}}}}}<!--
-->{{#if:{{#switch:{{{ov|-}}}|-=|1}}{{#switch:ov|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{26}}}=1}}|{{clr}}{{Overlay<!--
-->|iconsize=36|style=margin:0;padding:0;border:2px solid var(--border-color-interactive,#88a);|{{{ov|}}}}}}}<!--
-->{{#if:{{#switch:{{{oq|-}}}|-=|1}}{{#switch:oq|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{27}}}=1}}|{{Opaque|1={{{s|{{{w|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{tr|-}}}|-=|1}}{{#switch:tr|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{28}}}=1}}|{{Translate|switch={{{tr|}}}|style=margin:0<!--
-->|topic={{#if:{{{tr|{{{w|{{{s|}}}}}}}}}|{{Igen/top|{{{tr|{{{w|{{{s|}}}}}}}}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{in|-}}}|-=|1}}{{#switch:in|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{29}}}=1}}|{{Convert to international|{{Igen/top|{{{w|{{{s|}}}}}}}}<!--
-->|style=margin:0;width:auto}}}}<!--
-->{{#if:{{#switch:{{{ml|-}}}|-=|1}}{{#switch:ml|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{30}}}=1}}|{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{wc|-}}}|-=|1}}{{#switch:wc|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{31}}}=1}}|{{Convert to wikichart|{{Igen/top|{{{w|{{{s|}}}}}}}}-->chart
-->|style=margin:0;width:auto}}}}<!--
-->{{#if:{{#switch:{{{wt|-}}}|-=|1}}{{#switch:wt|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{32}}}=1}}|{{Convert to wikitable|{{Igen/top|{{{w|{{{s|}}}}}}}}<!--table
-->|style=width:auto;border:thin solid var(--border-color-content-removed,#f4c430);margin:0}}}}<!--
-->{{#if:{{#switch:{{{bl|-}}}|-=|1}}{{#switch:bl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{33}}}=1}}|{{Colour blind|{{{s|{{{w|}}}}}}|{{{bl|}}}}}}}<!--
-->{{#if:{{#switch:{{{ff|-}}}|-=|1}}{{#switch:ff|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{34}}}=1}}|{{Fictitious flag|{{{ff|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{fi|-}}}|-=|1}}{{#switch:fi|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{36}}}=1}}|{{Fake flag|{{{fi|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{ob|-}}}|-=|1}}{{#switch:ob|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{41}}}=1}}|{{Out of borders|{{{ob|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{ar|-}}}|-=|1}}{{#switch:ar|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{42}}}=1}}|{{Artifacts|{{{ar|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{bf|-}}}|-=|1}}{{#switch:bf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{37}}}=1}}|{{Broken file|description={{{bf|}}}<!--
-->|filetype={{#invoke:Igenmod|exttext}}|topic={{{s|{{{w|}}}}}}|cat={{{bfc|}}}}}}}<!--
-->{{#if:{{#switch:{{{dm|-}}}|-=|1}}{{#switch:dm|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{43}}}=1}}|{{Inaccurate-map-disputed|{{{dm|}}}<!--
-->|style=width:64%;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48<!--
-->|imageright=[[File:Ambox globe content.svg|40px]]}}}}<!-- border:1px solid red;margin:0;background-color:#FFFAFA
-->{{#switch:cb|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{43}}}={{Coablazon}}}}<!--
-->{{#switch:rf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{44}}}={{COAref}}}}<!--
tw...imageright=[[File:Ambox globe content.svg|60px|link=]]
-->{{#if:{{#switch:{{{zf|-}}}|-=|1}}{{#switch:zf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{39}}}=1}}|{{User:ZooFari/Template:SVG|topic={{{s|}}}}}}}<!--
-->{{#if:{{#switch:{{{ni|←}}}|←=|1}}{{#switch:ni|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}|{{clr}}{{NoInkscape|{{{ni|{{{←|}}}}}}|style=margin:0}}}}<!--
-->{{#if:{{{←|}}}{{#switch:←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}<!--
-->{{{←s|}}}{{{←t|}}}|{{NoInkscape|1={{{←|{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|+}}}}}|style={{#switch:{{{←s}}}|0=margin:0;border:1px solid var(--border-color-notice,#333)<!--
-->|h=background:var(--background-color-error-subtle,#FDA);color: inherit;margin-bottom:0|t=width:auto;margin:0;border:{{#if:{{{tr|}}}|4px double|2px solid}} var(--border-color-warning,#633)<!--
-->|0h|h0=margin:0;background:var(--background-color-warning-subtle,#FED);color: inherit;border:var(--border-color-content-removed,#EC9) solid|#default={{{←s|}}}}}|topic={{{←t|{{{w|{{{s|}}}}}}}}}}}}}<!--
-->{{#if:{{{←←|}}}{{#switch:←←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{14}}}=1}}<!-- ←←
-->|{{Igen/sni|{{{←←|-}}}}}}}<!--
-->{{#switch:1.2|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{16}}}={{SVG 1.2<!-- 16=
-->|style=margin:0;border-left:2px solid var(--border-color-content-removed,#F4C430)|topic={{{w|}}}}}}}<!-- (? flowRoot exception)
-->{{#if:{{{°|}}}{{#switch:°|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Easy-border|1={{{w|{{{s|}}}}}}|pixel={{{°|}}}}}}}<!--
-->{{#switch:—|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{18}}}<!-- 18=
-->=[[Category:Unused SVG images]]}}<!--
-->{{#if:{{{T9|}}}|{{clr}}{{{T9}}}|{{{t9|}}}}}<!--
-->{{#if:{{{msg|}}}|{{Igen/msg|{{{msg}}}}}}}<!-- more message boxes
-->{{#if:{{{T|}}}|{{clr}}{{{T}}}|{{{t|}}}}}</div><!-- final trail
-->{{#switch:{{{cc|y}}}|n|-|=|{{#if:{{{c4|{{{c5|{{{c6|}}}}}}}}}<!-- not when "cc=", "cc-n", "cc=-"
-->|{{Igen/cat|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#if:{{Igen/par|{{{2|}}}}}|Inv|V}}alid SVG<!--
-->|{{#invoke:Igenmod|exttext}}}} created with different tools code}}}}}}<!--
-->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|}}}}}}}}}}}}}}}}}}|{{Created with code<!--
-->|+={{{+c|}}}|nt={{#switch:{{{nt|}}}|=××}}|cc={{{cc|}}}<!--
-->|c1={{{c1|{{{code|{{{source|{{{script|}}}}}}}}}}}}<!--
-->|h1={{#if:{{{h1|{{{title|}}}}}}|{{{h1|{{{title|}}}}}}|{{#if:{{{p1|}}}<!--
-->|Suggested ''preferable'' SVG |{{Igen/cod|{{{1|}}}|H1|{{{l1|}}}}}}}}}<!--
-->|l1={{#if:{{{l1|{{{syntax|}}}}}}|{{{l1|{{{syntax|}}}}}}|{{Igen/cod|{{{1|}}}|L1}}}}<!--
-->|n1={{#if:{{{n1|}}}|{{{n1}}}|{{#if:{{{p1|}}}| '''''this'' code''' needs {{{p1}}} bytes.}}}}<!--
-->|e1={{{e1|}}}|d1={{{d1|}}}|f1={{{f1|{{{format|}}}}}}|g1={{{g1|}}}|s1={{{s1|{{{collapse|}}}}}}<!--
-->|c2={{{c2|{{{code2|{{{c5|}}}}}}}}}|h2={{{h2|{{{title2|{{Igen/cod|{{{1|}}}|H2}}}}}}}}<!--
-->|l2={{#if:{{{l2|{{{syntax2|}}}}}}|{{{l2|{{{syntax2|}}}}}}|{{Igen/cod|{{{1|}}}|L2}}}}|n2={{{n2|}}}<!--
-->|e2={{{e2|}}}|d2={{{d2|}}}|f2={{{f2|{{{format2|}}}}}}|g2={{{g2|}}}|s2={{{s2|{{{collapse2|}}}}}}<!--
-->|c3={{{c3|{{{code3|{{{c6|}}}}}}}}}|h3={{{h3|{{{title3|{{Igen/cod|{{{1|}}}|H3}}}}}}}}<!--
-->|l3={{#if:{{{l3|{{{syntax3|}}}}}}|{{{l3|{{{syntax3|}}}}}}|{{Igen/cod|{{{1|}}}|L3}}}}|n3={{{n3|}}}<!--
-->|e3={{{e3|}}}|d3={{{d3|}}}|f3={{{f3|{{{format3|}}}}}}|g3={{{g3|}}}|s3={{{s3|{{{collapse3|}}}}}}<!--
-->}}}}<!--
-->}}<!-- ==end of template==
-->{{#if:{{{cat2|}}}|{{Igen/cat|{{{cat2}}}}}}}<!-- required 2nd cat
-->{{#if:{{{cat3|}}}|{{Igen/cat|{{{cat3}}}}}}}<!-- required 3rd cat
-->{{#if:{{{cat4|}}}|{{Igen/cat|{{{cat4}}}}}}}<!-- required 4th cat
-->{{#if:{{{U|{{{u|{{{user|}}}}}}}}}|{{Igen/usr<!-- required user treatment
-->|{{{topic|{{{s|{{{topic|{{{w|{{{what|{{{vsub|{{{Vs|}}}}}}}}}}}}}}}}}}}}}|{{{U|{{{u|{{{user|}}}}}}}}}}}}}<!--
-->{{#switch:-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{-}}}}<!--
{{#switch:€|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}= ?? }}
future additional categorizings: {{#if:{{{_|}}}|{{Igen/cat|{{{_}}}}}}}
derivativeFX, LrMediaWiki, Open Access Media Importer, VicuñaUploader,
-->{{#if:{{{l|{{{L|}}}}}}|{{Igen/upl|{{{l|{{{L}}}}}}}}}}<!-- maintanance categories:
-->{{#if:{{{T|}}}|{{Igen/cat|Commons:Maint:Igen:T}}}}<!--
-->{{#switch:{{lc:{{{1|<noinclude>A</noinclude>}}}}}
|a|a$|ai|adobe|illustrator
|ah|ai|b|c|d|e|f|g|gimp|h
|i|ia|ib|ic|ih|ii|i$|im|ims|inkscape|io|is|itb
|j|k|l|m|matlab|n|ne|o|p|ps|q|r|s|sodipodi
|t|text editor|t-|s-
|u|v|vfpt|vm|w|wpdc|x|=|{{#ifexist:Template:{{Igen/cwt|{{{1|}}}<!--
-->|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!--
-->|{{Igen/2nd|<!-- [[Category:Igen 2nd check]] -->}}|[[Category:Igen tool notfd]]<!--
-->{{error|Igen tool "{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}" notfd}}}}}}<!--
--></onlyinclude><noinclude>
{{Protected}}
{{documentation}}
</noinclude>
lxxzpim0hmtpjo0aa3esgmce2eiluzn
10628
10627
2026-08-25T23:38:25Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Image_generation]]
10627
wikitext
text/x-wiki
<onlyinclude>{{#if:{{{C|{{{Cl|}}}}}}|{{{T0|{{{t0|}}}}}}{{Tincture|{{{C|{{{Cl}}}}}}|tc={{{Ct|}}}|cat={{#switch:{{{Cc|}}}|=|n|-|=-|{{{Cc}}}}}<!--
-->|+={{#if:{{{Cl|{{{cl|}}}}}}|{{{Cl|{{{cl|}}}}}}|<!-- default is "+"
-->{{#switch:{{{C+|{{{c+|}}}}}}|={{#switch:{{{Cf|{{{cf|}}}}}}|n|-|=|+}}|+=+|n|-|=|{{{C+|{{{c+}}}}}}}}}}<!--
-->|ss={{#switch:{{{Css|{{{ss|}}}}}}||=0|d9|D9=Δ9|{{{Css|{{{ss}}}}}}}}|s={{{s|{{{w|}}}}}}|k={{{k|}}}}}}}<!--
-->{{#if:{{{cb|{{{Cb|}}}}}}|{{#invoke:Igenmod|split|{{#switch:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|+|e=|+{{#ifeq:{{{s}}}|f<!--
-->|=Flag colors}}{{#ifeq:{{padleft:|1|{{{cb|{{{Cb|}}}}}}}}|#|//<!--
-->|{{#ifeq:{{padleft:|2|{{{cb|{{{Cb|}}}}}}}}|/#|/}}}}}}{{{cb|{{{Cb|}}}}}}|Igen/cbx}}{{{cbx|}}}}}<!-- like "Legend"
==start of template==
-->{{{{#if:{{{fn|}}}|Information field|{{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=Information field|Nil2}}}}<!--
-->|1={{#switch:{{{fn|}}}<!--
-->|+|={{#invoke:Igenmod|exttext}}{{I18n/COA|development}}<!-- "+", " "
-->|-=<!--
-->|{{{fn}}}}}<!--
-->|2={{#if:{{{T1|}}}|{{clr}}{{{T1}}}|{{{t1|}}}}}<!--
--><div style="vertical-align:middle"><!--
-->{{{p|{{{P|}}}}}}{{#if:{{{P|}}}|{{clr}}}}<!--
«#ifeq:{{{10}}}» SimplSVG when: either 10=S/S&/S*/S-, 1=S-/T-, or (sb= and sa=)
-->{{#if:{{#switch:{{{10}}}|S|S&|S-=1}}{{#ifeq:{{{1}}}|T-|1}}{{#if:{{{sb|}}}|{{#if:{{{sa|}}}|1}}}}<!--
-->{{#switch:S |{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T
-->{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!-- 1=T
-->{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}<!-- ???
-->{{#switch:S-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}=1}}<!--
T1 -->|{{SimplSVG|{{#ifeq:{{{1}}}|T-|T|{{{1|}}}}}|{{{sb|{{{2|}}}}}}|{{{sa|{{{3|}}}}}}<!-- (par#4 can be substituted by "s")
T4 -->|{{#switch:{{{4}}}|a|b|bi|c|ch|d|e|em|f|g|h|i|jc|je|k|l|m|o|p|r|s|t|u|v|y|7|♫|α|?={{{4}}}<!-- valid topic ?
-->|#default={{#if:{{{s|}}}|{{{s}}}}}}}<!--
T5 -->|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|{{{9|}}}<!-- T 5...9
T10-->|{{#switch:S&|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=&<!-- + rd
-->|{{#switch:S*|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}=}}}}<!-- ???
-->|style=<nowiki/><!-- 10=+
-->|topic={{#if:{{{s:|}}}|{{lcfirst:{{{s:}}}}}<!--
-->|{{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!--
-->|{{#if:{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s|}}}}}}}}}}}}}}}}}}<!--
-->|{{{topic|{{{what|{{{w|{{{vsub|{{{Vs|{{{s}}}}}}}}}}}}}}}}}}}}}}}}<!--
-->|ni={{{←|}}}{{{←s|}}}{{{←t|}}}|ns={{{ns|}}}|pu={{{pu|}}}<!-- ni=nomsg ns=nosub pu=previous user
-->|vs={{#switch:{{{vs|{{{vstyle|}}}}}}||none=-|=fl|{{{vs|{{{vstyle}}}}}}}}<!-- n=n, -=-
-->|sub={{#if:{{{sub-|}}}|-{{{sub-}}}{{{sd|}}}<!-- complicated:
-->|{{#switch:{{{sub|}}}<!--
-->|none|n=|-=-|so=-stripes only<!--
-->||={{#switch:S-|{{{10}}}|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=-|{{#ifeq:{{{1}}}|T-|-}}<!--
-->|#default={{#switch:{{{4}}}|jc=-Japanese crests|je=-Japanese emblems<!--
-->|{{#invoke:Igenmod|subst|{{{sub|}}}}}}}}}}}}}<!--
-->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for SimplSVG/Text editor
-->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}<!-- text editor
-->{{#if:{{{s:| {{{su:|}}}}}}|:{{ucfirst:{{Igen/sub|{{{s:|{{{su:}}}}}}}}s}}<!--
-->|{{#if:{{{Vs|}}}| {{{Vs|}}}|{{#if:{{{vsub|}}}|{{#invoke:Igenmod|subst|{{{vsub}}}{{{sd|}}}}}}}}}}}<!--
-->|sdif={{{sd|}}}|key={{{k|}}}<!--
-->|user={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|}}}}}}}}<!--
|code ={{{code|{{{c1|}}}}}}
{{#if:{{{c1|}}}{{{c2|}}}{{{code|}}}|{{Igen/cat|Valid SVG created with Text Editor code}}}}-->}}<!--
«not #ifeq:{{{10}}} → SimplSVG »
-->|{{{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!-- 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
-->|IMPORTANT={{#switch:{{lc:{{{1}}}}}|im|ims=<!--
-->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|no|yes}}}}<!-- all the processing would be done by "Inkscape"
-->|Optimized={{#switch:{{lc:{{{1}}}}}|iz|izs=yes}}<!--
{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}||yes}}}} all the processing would be done by "Inkscape"
-->{{#if:{{{U|{{{u|{{{user|{{{by|}}}}}}}}}}}}|{{#switch:{{lc:{{{1}}}}}|im|ims=<!--
-->…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]]}}}}<!--
-->|{{#if:{{{U|}}}|{{U|{{{U}}}}}|{{#if:{{{u|{{{user|}}}}}}|{{{u|{{{user|}}}}}}|<!-- parm (1)
-->{{#if:{{{by|}}}|{{#switch:{{padleft:|1|{{{by}}}}}|[|{={{{by}}}|{{u|{{{by}}}}}}}}}}}}}<!--
-->|{{#switch:{{{2|}}}|v=v|/|s=/|t=t|#default={{#switch:{{{1|}}}|/=/<!-- "n" only checked:
-->|#default={{#ifeq:{{#invoke:Igenmod|extcode}}|s|v|n}}}}}}<!-- parm (2)
-->|err={{#switch:{{{err|{{{e|}}}}}}|=0|-=|={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|2}}}}|{{{err|{{{e|}}}}}}}}<!--
-->|name={{#if:{{{N|}}}| {{{N}}}|{{{n|{{{name|{{#if:{{{cw|}}}|{{W|{{{cw}}}}}}}}}}}}}}}<!--
-->|more={{{lnk|}}} {{#switch:{{lc:{{{1}}}}}<!-- test
-->|ia|ai={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}}}}}}}}}|, }}<!--
-->|i|im|is|ims={{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}}}}}}}}}|. }}<!-- corr Stang's chng
-->|#default={{#if:{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}|{{#if:{{{m|{{{M||{{{more|}}}}}}}}}|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}}}}}}}}}|, }}}}<!--
-->|{{{m|{{{more|{{#if:{{{M|}}}| {{{M}}}|}}}}}}}}}}<!-- |.
-->|source={{{source|}}}<!--
-->|13={{#ifeq:{{lc:{{{1}}}}}|t|{{{M|{{{m}}}}}}}}<!-- test parm (13) "m" [ don´t set "logo" ]
-->|code ={{{code |{{{c1|}}}}}}<!--
-->|subc={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' (for sll except SimplSVG & Inkscape-hand)
-->{{#ifeq:{{{1}}}|H||{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!--
-->|sub={{#switch:{{{sub|}}}<!--
-->|n|-={{#if:{{{sd|}}}|{{{sd}}}}}<!-- "-" when coded "n"/"-"
-->|={{#if:{{{sd|}}}|{{{sd}}}}}-<!-- empty 'sub=' gives also "-" [[Category:Commons:Maint:Igen:esub]]
-->||∅={{#if:{{{S|}}}| {{Igen/sub|{{{S}}}}}{{{sd|}}}<!-- when missing or ∅:
-->|{{#if:{{{sub-|}}}|-{{{sub-}}}{{{sd|}}}<!--
-->|{{#if:{{{sub:|}}}|:{{{sub:}}}{{{sd|}}}<!--
-->|{{#if:{{{Sub:|}}}|: {{{Sub:}}}{{{sd|}}}<!--
-->|{{#if:{{{s:|}}}|:{{ucfirst:{{Igen/sub|{{{s:}}}}}s<!-- {{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}} -->{{{sd|}}}}}<!--
-->|{{#if:{{{S:|}}}|: {{ucfirst:{{Igen/sub|{{{S:}}}}}s{{{sd|}}}}}<!--
-->|{{#if:{{{su:|}}}|:{{ucfirst:{{Igen/sub|{{{su:}}}}}s{{{sd|}}}}}<!--
-->|{{#if:{{{s-|}}}|-{{ucfirst:{{Igen/sub|{{{s-}}}}}s{{{sd|}}}}}<!--
-->|{{#if:{{{s|}}}|{{Igen/sub|{{{s}}}|t={{{1}}}|u={{{u|}}}}}<!--
-->{{#ifeq:{{{2}}}|n|{{{sd|}}}|{{#switch:{{{s}}}|ce|ee|eh=|{{{sd|}}}}}}}<!-- no sd when ce,eh but csd
-->|{{#switch:{{lc:{{{1}}}}}|a$|i$|=-Commonist}}<!--
-->|{{#if:{{{sd|}}}|{{{sd}}}}}}}}}}}}}}}}}}}}}}}<!--
-->|#default={{#invoke:Igenmod|subst|{{{sub}}}}}{{#if:{{{sd|}}}|{{{sd}}}}}}}<!--
-->|cat={{#switch:{{{cat|{{{c|{{{category|}}}}}}}}}|none|n|-|=-<!--
-->|={{#if:{{{cw|}}}|Created with {{{cw}}}}}|∅=|{{{cat|{{{c|{{{category|}}}}}}}}}}}<!--
-->|cni={{#switch:{{{cni|}}}|n|-=-|=|{{{cni}}}}}<!-- ("-"; empty; cat)
-->|c_text={{{ct|{{{c_t|{{{c_text|}}}}}}}}}<!--
-->|key={{#switch:{{{k|}}}|n|-=-|=~|{{{key|{{{k|{{#if:{{{K|}}}| {{{K}}}}}}}}}}}}}|lang={{{lang|}}}<!--
-->|vsub={{#switch:{{{cc|y}}}|n|-|=|<!-- when "cc=", "cc-n", "cc=-" : not ' code' for Inkscape-hand/Text editor
-->{{#ifeq:{{{1}}}|H|{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|{{{c7|}}}}}}}}}}}}}}}}}}}}}|_code}}}}}}<!--
-->{{#switch:{{{vsub|{{{Vs|}}}}}}|=|n|-|=|{{#if:{{{Vs|}}}| }}{{Igen/sub|{{{vsub|{{{Vs|}}}}}}}}}}<!--
V4-->|vstyle={{{vs|{{{vstyle|fl}}}}}}<!-- n=n
V5-->|vwidth={{{vw|{{{vwidth|}}}}}}<!-- width
V6-->|vtxt={{#if:{{{V|}}}| {{{V}}}|{{{vt|{{{vtxt|{{#switch:{{{v|}}}|n|-|=-|=}}}}}}}}}}<!--
V7-->|vo={{{vo|{{{opt|{{{vopt|{{{o|{{#if:{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{>|{{{>c|}}}}}}|>}}}}}}}}}}}}}}<!-- >
V8 = topic
V9-->|vcat={{{vc|{{{vcat|}}}}}}<!-- ¿HandSVG?
-->|vc={{#switch:{{{>c|}}}|n|-|=-|{{{>c}}}}}<!-- cat:Large SVG files
-->|topic={{#switch:{{{topic|{{{what|{{{w|}}}}}}}}}<!-- "topic" for text diff with (Igen/top) in (created with/)
-->|n|-|=-<!--
-->|={{#switch:{{{s|}}}<!--
-->||n|-|={{#if:{{{su:|}}}|{{ucfirst:{{{su:}}}}}<!--
-->|{{{{#ifeq:{{{sc|}}}|u|u|l}}cfirst:{{{s:|{{{s-|{{{S:|{{#if:{{{sub:|}}}|''{{{sub:}}}''}}}}}}}}}}}}}}}<!--
-->|{{{s|}}}}}<!--
-->|{{#switch:{{#if:{{{topic|}}}|1|{{#if:{{{what|}}}|2|{{#if:{{{w|}}}|3}}}}}}<!-- unnested
-->|1={{{topic}}}<!--
-->|2={{{what}}}<!--
-->|3={{{w}}}<!--
-->}}}}<!--
-->|other={{lc:{{padleft:|1|{{{1}}}}}}}<!-- to differ between "O" and "U"
-->|item={{{item|{{{i|{{#if:{{{I|}}}|{{w{{{I}}}}}}}}}}}}}<!--
-->|type={{{type|}}}|par1={{{par1|}}}|par2={{{par2|}}}|mode={{{mode|}}}<!--
-->|style=float:left;vertical-align:middle<!--
-->|logo={{{logo|{{#if:{{{cw|}}}|{{{cw}}} logo.svg}}}}}<!-- {{{logo|}}} test
-->}}}}<!-- «end #ifeq:{{{10}}}»
into the same line:
-->{{#ifeq:{{{1}}}|IA|{{Igen/amp|I|A|||topic={{{&s|{{{s|{{{w|}}}}}}}}}}}<!--
-->|{{#if:{{{&|{{{&&|{{{&k|{{{&m|}}}}}}}}}}}}<!-- any one of these triggers
-->{{#switch:{{{&c|↓}}}|↓=|1}}{{#switch:{{{&l|↓}}}|↓=|1}}{{#switch:{{{&s|↓}}}|↓=|1}}<!-- if defined, empty or with value
-->{{#switch:&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/amp|1={{#switch:Q|{{{&|Q}}}|{{padleft:|1|{{uc:{{{&}}}}}}}=QGIS|{{{&}}}}}<!--
-->|2={{{&&|{{#switch:{{lc:{{{1}}}}}|a|adobe|illustrator|adobe illustrator|adobe illustrator$|a$|av|ia=Adobe<!--
-->|i|inkscape|ic|ii|im|io|is|iz|i$|ai=Inkscape|?}}|}}}<!--
-->|3={{{1|}}}<!--
-->|&c={{#switch:{{{&c|}}}|=|n|-|=-|{{{&c}}}}}<!-- ?-?
-->|&l={{#switch:{{{&l|}}}|=|n|-|=-|{{{&l}}}}}<!--
-->|&s={{#switch:{{{&s|}}}|=|n|-|=-|{{{&s}}}}}<!--
-->|&k={{{&k|}}} }}}}}}<!--
-->{{#switch:S&|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!-- S&: Simpl + rd
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}=<!-- {{Igen/sni|&}} --><!-- 35
-->|{{#switch:S*|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!--
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni}}<!--
-->|{{#if:{{#switch:{{{rd|-}}}|-=|1}}{{#switch:rd|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{35}}}=1}}|{{Redrawn with Text Editor|{{{rd|}}}}}}}}}}}<!--35
-->{{#ifeq:{{lc:{{{1}}}}}|ic|{{Igen/amp|svgc|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IC"
-->{{#ifeq:{{lc:{{{1}}}}}|io|{{Igen/amp|svgo|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IO"
-->{{#ifeq:{{lc:{{{1}}}}}|is|{{Igen/amp|sopt|I|&c={{{&c|-}}}|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!-- Tool "IS"
others need the categorizing:
-->{{#ifeq:{{lc:{{{1}}}}}|ii|{{Igen/amp|heraldicon|I|&c=Created with Heraldicon|&k=ZZZ|topic={{{&s|{{{s|{{{w|}}}}}}}}}}} }}<!--
if also same line required:
-->{{#if:{{{1c|}}}|{{1color|{{{1cc|}}}|{{{1c}}}}}}}<!--
-->{{#switch:{{{%}}}|vv|vs|vf|f={{Igen/emb|{{{%}}}|f<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#switch:%f|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb|vf|f<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}}}}}}}<!--
-->{{#switch:{{{<}}}|vf|vl|vn|vs|vv={{Igen/ptx|f|sub=vv|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|s2={{{<|}}}|{{#ifeq:{{{<}}}|vl|l}}}}}}<!--
-->{{#if:{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{#switch:tl|{{{s}}}|{{{w}}}={{Igen/ptx|f|sub=vv|s=tl|l}}}}}}<!-- Text Logo
-->{{#switch:%C|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!--
-->|{{{11}}}|{{{12}}}={{Igen/swv|s={{{s|{{{w|}}}}}}}}}}<!-- switch-controlled variations
-->{{#if:{{{T2|}}}|{{clr}}{{{T2}}}|{{{t2|}}}}}<!--
-->{{#if:{{#switch:{{lc:{{{1}}}}}|a$|i$=1}}<!-- and Commonist (parameters "$ " and "c ")
-->{{#switch:$|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!-- «$» Commonist
-->{{#if:{{{$m|{{{cm|}}}}}}{{{$u|{{{cu|}}}}}}{{{$w|}}}|1}}<!--
-->{{#switch:{{{$c|↓<!-- {{{cc|}}} -->}}}|↓=|1}}{{#switch:{{{$f|{{{cf|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value
-->{{#switch:{{{$l|{{{cl|↓}}}}}}|↓=|1}}{{#switch:{{{$s|{{{cs|↓}}}}}}|↓=|1}}<!-- if defined, empty or with value
-->|{{#switch:{{{$f|{{{cf|}}}}}}||none|n|-|=|br=<br>|clr={{clr}}|{{{$f|{{{cf|}}}}}}}}<!-- linefeed before
-->{{Commonist|{{{$u|{{{cu|}}}}}}|more={{{$m|{{{cm|}}}}}}<!--
-->|logo={{#switch:{{{$l|{{{cl|}}}}}}|=Commonist.svg|none|n|-|=-|{{{$l|{{{cl|}}}}}}}}<!--
-->|category={{#switch:{{{$c|<!-- {{{cc|}}} -->}}}|=|none|n|-|=-|{{{$c|<!-- {{{cc|}}} -->}}}}}<!--
-->|sub={{#switch:{{{$s|{{{cs|}}}}}}||none|n|-|=|{{#invoke:Igenmod|subst|{{{$s|{{{cs|}}}}}}}}}}<!--
-->|user={{{U|}}}<!-- for possible subcategorizing
-->|topic={{#if:{{{$w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}<!--
-->|{{{$w|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}<!--
-->|size={{#if:{{{>|}}}{{#switch:><!--
-->|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}<!--
-->|err={{#if:{{{e|{{{err|}}}}}}|{{{e|{{{err}}}}}}<!-- Commonist with err ?
-->|{{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}|3}}}}}}}}}}<!--
-->{{#if:{{{T3|}}}|{{clr}}{{{T3}}}|{{{t3|}}}}}<!--
-->{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{#ifeq:{{{%}}}|s|1}}<!--
-->|{{#if:{{{tr|}}}||{{Igen/emb|switch=s|1={{{%s|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}}}<!--
-->|{{#if:{{{%a|}}}|{{Igen/emb|switch=S|1={{{%a|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%S|}}}{{#switch:%S|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|switch=S|1={{{%S|s}}}|s={{{w|{{{s|}}}}}}|v={{{%v|}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%|}}}{{#switch:%|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:embedded|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|1={{{%|}}}|2=s|v={{#ifeq:{{{1}}}|Wpdc|n|{{#switch:{{{%}}}|r|v|V|i|n|-={{{%}}}}}}}<!--
-->|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!--
-->|{{#if:{{{%v|}}}{{#switch:%v|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|s={{{w|{{{s|}}}}}}|v={{{%v|v}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%i|}}}{{#switch:%i|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|i|v={{{%i|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#if:{{{%I|}}}{{#switch:%I|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/emb|i|v={{{%I|i}}}|s={{{w|{{{s|}}}}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->{{Convert to multilang}}<!--
-->|{{#if:{{#switch:%n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#ifeq:{{{1}}}|Wpdc|1}}|{{Igen/emb|s={{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|v=n|q={{{4|}}}|z={{{10|}}}|t={{{1|}}}}}<!--
-->|{{#switch:%r|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%r|r}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#switch:%m|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%m|r}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!--
-->|{{#switch:%M|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%M|v}}}|q={{{4|}}}|z={{{10|}}}}}{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}<!--
-->|{{#switch:%t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%t|t}}}|q={{{4|}}}|z={{{10|}}}}}<!--
-->|{{#switch:%u|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{Igen/emb<!--
-->|s={{{w|{{{s|}}}}}}|v={{{%u|u}}}|q={{{4|}}}|z={{{10|}}}}} }}}}}}}} }}}}}}}}}}<!--
-->|{{#if:{{{%V|}}}|{{Igen/emb|s={{{w|{{{s|}}}}}}|v= {{{%V}}}|q={{{4|}}}|z={{{10|}}}}}}}}}}}}}}}<!-- ///
-->{{#switch:%a|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{15}}}={{Add languages}}}}<!-- 15=
-->{{#switch:%w|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{17}}}={{Invtext<!-- 17
-->|s={{{s|{{{w|}}}}}}|e={{#switch:{{{err|{{{e|}}}}}}|=0|-=|={{#if:{{Igen/par|{{{2|}}}<!--
-->|{{Igen/par|{{{2|}}}}}|0}}}}}}|3={{{%sc|{{{u|}}}}}}}}}}<!--
-->{{#switch:S+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!--
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{35}}}={{Igen/sni|1={{{%p|+}}}}}}}<!-- after %
-->{{#if:{{{T4|}}}|{{clr}}{{{T4}}}|{{{t4|}}}}}<!-- Graphic Lab: parameter "gs" (nl, sx) defaulted with "nl"
-->{{#if:{{{glc|}}}|{{Igen/glc|{{{glc|}}}|{{{err|{{{e|{{{2|}}}}}}}}}|3={{{lang|}}}|4={{{nat|}}}<!-- Graphic Lab CoA
-->|s={{{s|{{{w|}}}}}}|gc={{{gc|}}}|sd={{{sd|}}}|gt={{{1}}}|U={{{U|}}}|u={{{u|}}}|vs={{{vs|}}}<!--
-->|sub={{{sub|}}}|cat={{{cat2|}}}|gk={{{gk|{{{k|}}}}}}|gs={{{gs|nl}}}|gr={{{gr|}}}|gt2={{{gt|}}}}}<!--
while e.g. "g=de" or "gd" is for Graphic Lab_de, "glc=.." is for all the indiv. Graphic CoA Labs
-->|{{#if:{{{gl|{{{g|}}}}}}|{{Igen/lab|{{{gl|{{{g|}}}}}}|{{#if:{{{gl|}}}|gl|g}}|s={{{s|{{{w|}}}}}}<!--
-->|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{gt|}}}}}}}<!--
-->{{#switch:gl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/lab|en|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gc|}}}{{#switch:gc|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|Commons|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gc|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gb|}}}{{#switch:gb|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|bn|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gb|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gB|}}}{{#switch:gB|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|eu|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gB|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gd|}}}{{#switch:gd|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|de|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gd|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}|6={{{lc|}}}}}}}<!--
-->{{#if:{{{ge|}}}{{#switch:ge|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|es|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{ge|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gf|}}}{{#switch:gf|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|fr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gf|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gi|}}}{{#switch:gi|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|it|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gi|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gH|}}}{{#switch:gH|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|ch|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gH|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gj|}}}{{#switch:gj|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|he|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gj|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gr|}}}{{#switch:gr|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|ru|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gr|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gP|}}}{{#switch:gP|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|pl|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gP|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gs|}}}{{#switch:gs|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|sv|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gs|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gt|}}}{{#switch:gt|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|tr|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gt|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}}<!--
-->{{#if:{{{gw|}}}{{#switch:gw|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|<!--
-->{{Igen/lab|w|s={{{w|{{{s|}}}}}}|k={{{gk|{{{k|}}}}}}|u={{{gw|{{{u|}}}}}}<!--
-->|3={{{gs|nl}}}|4={{{err|{{{e|{{{2|}}}}}}}}}|5={{{gc|}}}}}}} }}<!--
-->{{#if:{{#switch:fw|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{fwc|{{{fwe|{{{fwo|{{{fwl|{{{fwt|{{{fws|}}}}}}}}}}}}}}}}}}<!-- any one of these (with value) triggers "Fotowerkstatt"
-->|{{clr}}{{Fotowerkstatt|changes={{{fwc|}}}|editor={{{fwe|}}}|orig={{{fwo|}}}|orig-lang={{{fwl|}}}<!--
-->|topic={{{fwt|{{{w|{{{s|}}}}}}}}}|style={{{fws|margin:0}}}}}}}<!--
-->{{#if:{{{sd|}}}|{{#ifeq:{{{2}}}|n||{{#switch:{{{s}}}|ce|ee|eh={{Igen/csd|{{{e|{{{err|{{{2|0}}}}}}}}}|{{{1}}}|{{{sd}}}}}}}}}}}<!--
-->{{#if:{{{T5|}}}|{{clr}}{{{T5}}}|{{{t5|}}}}}<!--
-->{{#if:{{{^|}}}{{#switch:^|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{{^s|{{{^t|{{{^p|{{{^c|}}}}}}}}}}}}<!-- any one of these (with value) triggers "Valued image"
-->|{{Igen/qui|{{{1|}}}|{{{2|}}}|{{{e|{{{err|}}}}}}|type={{{^|}}}<!-- (via "Quality image" stub)
-->|scope={{{^s|}}}|time={{{^t|}}}|page={{{^p|}}}|cat={{{^c|}}}|top={{{^w|{{{w|{{{s|}}}}}}}}}|by={{{^b|}}}}}}}<!--
-->{{#if:{{{\+|}}}{{{\+r|}}}{{{\+l|}}}{{{\+t|}}}{{{\+u|}}}{{#switch:\+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Supersedes|{{{\+|}}}|{{{\+r|{{{\r|}}}}}}|{{{\+u|{{{\u|}}}}}}|lang={{{\+l|{{{\l|}}}}}}<!--
-->|{{#switch:{{{\+t|{{{\t|}}}}}}|={{{w|{{{s|}}}}}}|n|-|=|{{{\+t}}}}}|q=i}}}}<!-- other file inferior
-->{{#if:{{{f|}}}|{{Igen/fif|{{{f}}}|cat={{{fc|}}}|topic={{{ft|{{{w|{{{s|}}}}}}}}}}}}}<!--
-->{{#if:{{{T6|}}}|{{clr}}{{{T6}}}|{{{t6|}}}}}<!--
disadvantages:
-->{{#switch:{{{~}}}||-|n|=|{{#if:{{{~|{{{Cdata|}}}{{{~k|{{{~u|{{{~U|}}}}}}}}}}}}{{#switch:{{{~|}}}|n|-|=1}}<!--💩
-->{{#switch:~|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Cdata|style=margin:0|sub={{#switch:{{{~|{{{Cdata|}}}}}}|n|-|=-<!--
-->|{{#if:{{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}|: {{{~u|{{{~U|{{{u|{{{U|}}}}}}}}}}}}}}|{{{~|}}}}}<!--
-->|user={{#if:{{{U|{{{~U|}}}}}}|{{U|{{{U|{{{~U}}}}}}}}|{{{~u|{{{u|}}}}}}}}|U={{{U|{{{~U|}}}}}}|key={{{~k|}}}<!--
-->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}<!--
-->|bad={{#if:{{{!|}}}{{#switch:!|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--💩
-->|{{#ifeq:{{{!}}}|t||also}}}}}}}}}}<!--
-->{{#if:{{{!|}}}{{#switch:{{{!s|↓}}}|↓=|1}}{{#switch:{{{!c|↓}}}|↓=|1}}<!-- when one of these is defined, empty or with value
-->{{#switch:!|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{ {{#switch:{{{!}}}|f|x=Fake|r|t=Topo|#default=Bad}}SVG<!--
-->|1={{{!|}}}|2={{#switch:{{{1}}}|A|a|Illustrator|Adobe Illustrator|A$|a$|IA=Adobe-}}<!--
-->|style={{{style|{{#switch:{{{!}}}|t|f|r|x=|width:100%;border:2px red solid;margin:0}}}}}<!--
-->|subcat={{#switch:{{{!s|{{{subcat|}}}}}}|=|n|-|=-|{{#invoke:Igenmod|subst|{{{!s|{{{subcat|}}}}}}}}}}<!--
-->|category={{#switch:{{{!c|}}}|=|n|-|=-|{{{!c}}}}}<!--
-->|key={{{!k|}}}<!--
-->|badcat={{{U|{{{u|}}}}}}|vsub={{{vsub|}}}|topic={{{w|{{{s|}}}}}}<!--
-->|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}}}}}<!--
-->{{#if:{{{?|}}}{{{??|}}}{{#switch:{{{?s|↓}}}|↓=|1}}<!-- when subcat ?s is defined, empty or with value
-->{{{?b|}}}{{{?c|}}}{{{?d|}}}{{{?f|}}}{{{?o|}}}{{{?r|}}}{{{?u|}}}<!--
-->{{{?s|}}}{{{?w|}}}{{{?t|}}}{{{?k|}}}{{{?n|}}}{{{?p|}}}{{{?x|}}}<!--
-->{{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Rsvg bug|3={{{?b|}}}|4={{{?c|}}}|5={{{?d|}}}|6={{{?f|}}}|7={{{?o|}}}|8={{{?r|}}}|9={{{?u|}}}<!--
-->|2={{#switch:?|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-}}<!--
-->|1={{{??|{{{?|{{#if:{{{?p|}}}|{{#invoke:Igenmod|split|{{{?p}}}|Igenbug}}}} }}}}}}<!--
-->|topic={{{?w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}|name={{{?n|}}}<!--
-->|tool={{{?t|{{{1|}}}}}}|sub={{#switch:{{{?s|}}}|=|n|-|=-|{{{?s}}}}}|key={{{?k|}}}}}}}<!-- ?-?
-->{{#switch:?x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}<!--
-->|{{{11}}}|{{{12}}}|{{{13}}}|{{{21}}}|={{Rsvg bug|-|11=x}}}}<!-- flowRoot eXception
-->{{#if:{{{<|{{{<s|}}}}}}{{#switch:<|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:pathtext|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Igen/ptx|s|sub={{{<|{{#switch:tl|{{{s}}}|{{{w}}}=vv}}}}}<!--
-->|v={{{<v|{{#ifeq:{{{s}}}|v|v}}}}}|s={{{<s|{{Igen/csf|{{{1}}}|{{{w|{{{s|}}}}}}}}|{{{vsub|}}}}}}<!--
-->|source={{{source|}}}|size={{#if:{{{>|}}}{{#switch:>|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|big}}|cat={{#switch:{{{>c|}}}|=|n|-|=-|{{{>c|}}}}}}}<!--
-->|{{#switch:<n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=n<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}<!--
-->|{{#switch:<v|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|s={{Igen/csf|{{{1}}}|{{{<s|{{{w|{{{s|}}}}}}}}}}}|v=v<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}<!--
-->|{{#switch:<i|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|sub=i|s={{{<s|{{{w|{{{s|}}}}}}}}}|v=i<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}}}<!--
-->|{{#switch:<h|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|sub=|s=h|v=<!--
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}}}<!--
-->|{{#switch:<l|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=<!--
-->{{Igen/ptx|sub=|s=l|v=l<!-- standard: no cat
-->|cat={{#switch:{{{<c|}}}|=|n|-|=-|{{{<c|}}}}}}}}} }}}}}}<!--
-->{{#switch:<x|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}{{{17}}}={{ShouldBeText}}}}<!-- 17=
-->{{#if:{{{tw|}}}|{{Igen/twt|{{{tw|}}}<!-- Taken with
-->|tc={{#switch:{{{tc|}}}|=|n|-|=-|{{{tc}}}}}<!--
-->|tl={{#switch:{{{tl|}}}|=|n|-|=-|{{{tl}}}}}<!--
-->|tx={{#switch:{{{tx|}}}||n|-|=-|{{{tx}}}}}<!--
-->|tu={{#switch:{{{tu|}}}|n|-|=-|={{#if:{{{U|}}}|{{U|{{{U}}}}}|{{{u|{{{user|-}}}}}}}}|{{{tu}}}}}<!--
-->|+={{#switch:+|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=+}}}}}}<!--
-->{{#if:{{{§|{{{§s|}}}}}}{{#switch:§|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{TracedSVG|{{{§|}}}|sub={{{§s|}}}|style=width:100%}}}}<!-- File generation description: 11=
-->{{#if:{{{×|}}}{{#switch:×|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}=1}}<!--
-->{{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×c|}}}<!--
-->{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×n|}}}<!--
-->{{#switch:×t|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}{{{×t|}}}<!--
-->{{#switch:{{{×c|}}}|n|-|=1}}{{#switch:{{{×n|}}}|n|-|=1}}{{#switch:{{{×t|}}}|n|-|=1}}<!--
-->|{{-}}{{SimplSVG|3=000|4={{{×|{{{×n|}}}}}}|5={{{×d|{{#if:{{{×|}}}|16x16}}}}}|6={{{×t|{{{w|{{{s|}}}}}}}}}<!--
-->|7={{#switch:×c|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!-- category
-->|{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=-<!--
-->|{{#if:{{#switch:{{{×c|}}}|n|-|=1}}{{#switch:{{{×n|}}}|n|-|=1}}|-<!--
-->|{{#switch:{{{×t|{{{w|{{{s|}}}}}}}}}|bi=:BSicons{{#if:{{{×n|}}}|-unused}}|c|eh=:CoAs<!-- subcat
-->|d=:Diagrams|f=:Flags|i=:Icons|l|tl=:Logos|y|p|s=:Symbols|jc=:Crests<!--
-->|je|e|em=:Emblems|m=:Maps|n|-|=|&default={{{×t}}}}}}}}}}}{{{×s|}}}<!--
-->|8={{#switch:{{{×t|}}}|n|-|=||{{Igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}|2=file|lang=en}}}}<!--
-->|9={{#switch:{{{err|{{{e|}}}}}}|=|={{#ifeq:{{{2}}}|-1|-1|{{Igen/par|{{{2|}}}}}}}|{{{err|{{{e|???}}}}}}}}<!--
-->|10={{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->{{#switch:{{{×n|}}}|n|-|=1}}{{{×n|}}}|⛔ '''''nowhere'' used''' ⛔}}<!--
-->|11={{{×k|}}}|12={{{×r|}}}|13={{{×q|}}}<!--
-->|style=margin:0}}}}<!--{{#if:{{#switch:×n|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}
{{#switch:{{{×n|}}}|n|-|=1}}|⛔ This {{igen/top|{{{×t|{{{w|{{{s|}}}}}}}}}}} is ''nowhere'' used ⛔}}
{{#switch:××|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{11}}}{{{12}}}{{{13}}}={{UseXML}}}}<!--
-->{{#if:{{{××|}}}{{#switch:××|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}<!--
-->|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}=1}}|{{UseXML|{{{××|}}}|style=margin:0}}}}<!--
-->{{#if:{{{R|}}}|{{clr}}}}{{#if:{{{editor|}}}{{{editoff|}}}{{{orig|}}}{{{origoff|}}}<!--
-->{{#switch:{{{R|?↓}}}|?↓=|1}}{{#switch:{{{r|↓}}}|↓=|1}}<!-- when defined, empty or with value
-->|{{Retouched picture|{{#ifeq:{{{r}}}|-||{{{R|{{{r|}}}}}}}}|editor={{{editor|}}}|orig={{{orig|}}}<!--
-->|editoff={{{editoff|}}}|origoff={{{origoff|}}}<!--
-->|topic={{#if:{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}|{{{topic|{{{what|{{{w|{{{s}}}}}}}}}}}}}}}}}}<!--
-->{{#if:{{{\|}}}{{{\-|}}}{{{\-r|}}}{{{\-l|}}}{{{\x|}}}{{{\-x|}}}{{#switch:\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|{{Superseded|{{{\|{{{\-|}}}}}}|{{{\-r|{{{\r|}}}}}}|lang={{{\-l|{{{\l|}}}}}}<!--
-->|ext={{{\-x|{{{\x|{{#if:{{{\|}}}{{{\-|}}}||png}}}}}}}}<!--
-->|topic={{{\-t|{{{\-w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}|q=s}}<!-- other file supersedes
-->{{#ifeq:{{{!}}}|f|[[Category:Fake SVG with raster version available|{{PAGENAME}}]]}}}}<!-- File generation description: 13=
-->{{#if:{{{\\|}}}{{{\\r|}}}{{{\\l|}}}{{{\\q|}}}{{#switch:\\|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!--
-->|{{Vector version available|{{{\\|}}}|q={{{\\q|{{{\q|}}}}}}|r={{{\\r|{{{\r|}}}}}}|lang={{{\\l|{{{\l|}}}}}}<!-- SupersededSVG
-->|topic={{{\\t|{{{\\w|{{{\t|{{{\w|{{{topic|{{{what|{{{w|{{{s|}}}}}}}}}}}}}}}}}}}}}}}}}}}}<!--
-->{{#if:{{{\#|}}}{{#switch:\#|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{13}}}=1}}<!-- 13=
-->|{{PDF version available|{{{\#|}}}}}}}<!-- PDF file
-->{{#if:{{{T7|}}}|{{clr}}{{{T7}}}|{{{t7|}}}}}<!--
more special character parameters
-->{{#switch:{{padleft:|1|{{{1}}}}}|*|@|(|)|_={{Igen/2nd|{{{1}}}|p=1}}}}<!--
-->{{#switch:{{padleft:|1|{{{2}}}}}|*|@|(|)|_={{Igen/2nd|{{{2}}}|p=2}}}}<!--
-->{{#switch:{{padleft:|1|{{{3}}}}}|*|@|(|)|_={{Igen/2nd|{{{3}}}|p=3}}}}<!--
-->{{#switch:{{padleft:|1|{{{4}}}}}|*|@|(|)|_={{Igen/2nd|{{{4}}}|p=4}}}}<!--
-->{{#switch:{{padleft:|1|{{{5}}}}}|*|@|(|)|_={{Igen/2nd|{{{5}}}|p=5}}}}<!--
-->{{#switch:{{padleft:|1|{{{6}}}}}|*|@|(|)|_={{Igen/2nd|{{{6}}}|p=6}}}}<!--
-->{{#switch:{{padleft:|1|{{{7}}}}}|*|@|(|)|_={{Igen/2nd|{{{7}}}|p=7}}}}<!--
-->{{#switch:{{padleft:|1|{{{8}}}}}|*|@|(|)|_={{Igen/2nd|{{{8}}}|p=8}}}}<!--
-->{{#switch:{{padleft:|1|{{{9}}}}}|*|@|(|)|_={{Igen/2nd|{{{9}}}|p=9}}}}<!--
-->{{#switch:{{padleft:|1|{{{10}}}}}|*|@|(|)|_={{Igen/2nd|{{{10}}}|p=10}}}}<!--
-->{{#switch:{{padleft:|1|{{{11}}}}}|*|@|(|)|_={{Igen/2nd|{{{11}}}|p=11}}}}<!--
-->{{#switch:{{padleft:|1|{{{12}}}}}|*|@|(|)|_={{Igen/2nd|{{{12}}}|p=12}}}}<!--
---{{#switch:{{padleft:|1|{{{13}}}}}|*|@|(|)|_={{Igen/2nd|{{{13}}}|p=13}}}}-!--
---{{#switch:{{padleft:|1|{{{14}}}}}|*|@|(|)|_={{Igen/2nd|{{{14}}}|p=14}}}}-!--
---{{#switch:{{padleft:|1|{{{15}}}}}|*|@|(|)|_={{Igen/2nd|{{{15}}}|p=15}}}}-!--
-->{{#if:{{{*|}}}|{{Igen/2nd|{{{*}}}|c=*}}}}<!--
-->{{#if:{{{@|}}}|{{Igen/2nd|{{{@}}}|c=@}}}}<!--
-->{{#if:{{{(|}}}|{{Igen/2nd|{{{(}}}|c=(}}}}<!--
-->{{#if:{{{)|}}}|{{Igen/2nd|{{{)}}}|c=)}}}}<!--
-->{{#if:{{{_|}}}|{{Igen/2nd|{{{_}}}|c=_}}}}<!--
-->{{#if:{{{T8|}}}|{{clr}}{{{T8}}}|{{{t8|}}}}}<!--
-->{{#if:{{{→|}}}{{#switch:→|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!-- 12=
-->|{{SVG|{{#if:{{{→|}}}|{{{→}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}}}<!--File generation description:
-->|{{#if:{{{⇒|}}}{{#switch:⇒|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{12}}}=1}}<!--
-->|{{SVG|{{#if:{{{⇒|}}}|{{{⇒}}}|{{#if:{{{w|{{{s|}}}}}}|{{Igen/top|{{{w|{{{s}}}}}}}}}}}}|simple}} }}}}<!--
final tags: message boxes
-->{{#if:{{#switch:{{{nu|-}}}|-=|1}}{{#switch:nu|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm ?
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{21}}}=1}}|{{clr}}{{NoUpdate|{{{nu|}}}|{{{nu2|}}}}}}}<!--
-->{{#if:{{#switch:{{{re|-}}}|-=|1}}{{#switch:re|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{22}}}=1}}|{{clr}}{{Recent<!--
-->|style=width:auto;border:thin solid var(--border-color-progressive--active,#009);margin:0|iconsize=33x22|{{{re|}}}}}}}<!--
-->{{#if:{{#switch:{{{rs|-}}}|-=|1}}{{#switch:rs|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{38}}}=1}}|{{clr}}{{Restoration|style=margin:0}}}}<!--
-->{{#if:{{#switch:{{{up|-}}}|-=|1}}{{#switch:up|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{23}}}=1}}|{{clr}}{{Update<!--
-->|style=width:auto;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48|{{{up|}}}}}}}<!--
-->{{#if:{{#switch:{{{lh|-}}}|-=|1}}{{#switch:lh|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{24}}}=1}}|<!--
{{clr}} -->{{Logo history|{{{lh}}}|style=margin:0;border:2px solid var(--border-color-content-added,#ccf)}}}}<!--
-->{{#if:{{#switch:{{{ci|-}}}|-=|1}}{{#switch:ci|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{25}}}=1}}|{{Current<!-- /i18n
-->|style=width:auto;border:thin solid var(--border-color-notice,#333);margin:0|iconsize=40|s={{{w|{{{s|}}}}}}|{{{ci}}}|{{{ci2|}}}}}}}<!--
-->{{#if:{{#switch:{{{ov|-}}}|-=|1}}{{#switch:ov|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{26}}}=1}}|{{clr}}{{Overlay<!--
-->|iconsize=36|style=margin:0;padding:0;border:2px solid var(--border-color-interactive,#88a);|{{{ov|}}}}}}}<!--
-->{{#if:{{#switch:{{{oq|-}}}|-=|1}}{{#switch:oq|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{27}}}=1}}|{{Opaque|1={{{s|{{{w|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{tr|-}}}|-=|1}}{{#switch:tr|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{28}}}=1}}|{{Translate|switch={{{tr|}}}|style=margin:0<!--
-->|topic={{#if:{{{tr|{{{w|{{{s|}}}}}}}}}|{{Igen/top|{{{tr|{{{w|{{{s|}}}}}}}}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{in|-}}}|-=|1}}{{#switch:in|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{29}}}=1}}|{{Convert to international|{{Igen/top|{{{w|{{{s|}}}}}}}}<!--
-->|style=margin:0;width:auto}}}}<!--
-->{{#if:{{#switch:{{{ml|-}}}|-=|1}}{{#switch:ml|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{30}}}=1}}|{{Convert to multilang|{{Igen/top|{{{w|{{{s|}}}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{wc|-}}}|-=|1}}{{#switch:wc|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{31}}}=1}}|{{Convert to wikichart|{{Igen/top|{{{w|{{{s|}}}}}}}}-->chart
-->|style=margin:0;width:auto}}}}<!--
-->{{#if:{{#switch:{{{wt|-}}}|-=|1}}{{#switch:wt|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{32}}}=1}}|{{Convert to wikitable|{{Igen/top|{{{w|{{{s|}}}}}}}}<!--table
-->|style=width:auto;border:thin solid var(--border-color-content-removed,#f4c430);margin:0}}}}<!--
-->{{#if:{{#switch:{{{bl|-}}}|-=|1}}{{#switch:bl|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{33}}}=1}}|{{Colour blind|{{{s|{{{w|}}}}}}|{{{bl|}}}}}}}<!--
-->{{#if:{{#switch:{{{ff|-}}}|-=|1}}{{#switch:ff|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{34}}}=1}}|{{Fictitious flag|{{{ff|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{fi|-}}}|-=|1}}{{#switch:fi|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{36}}}=1}}|{{Fake flag|{{{fi|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{ob|-}}}|-=|1}}{{#switch:ob|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{41}}}=1}}|{{Out of borders|{{{ob|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{ar|-}}}|-=|1}}{{#switch:ar|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{42}}}=1}}|{{Artifacts|{{{ar|{{{s|}}}}}}}}}}<!--
-->{{#if:{{#switch:{{{bf|-}}}|-=|1}}{{#switch:bf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{37}}}=1}}|{{Broken file|description={{{bf|}}}<!--
-->|filetype={{#invoke:Igenmod|exttext}}|topic={{{s|{{{w|}}}}}}|cat={{{bfc|}}}}}}}<!--
-->{{#if:{{#switch:{{{dm|-}}}|-=|1}}{{#switch:dm|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{43}}}=1}}|{{Inaccurate-map-disputed|{{{dm|}}}<!--
-->|style=width:64%;border:thin solid var(--border-color-warning,#966);margin:0|iconsize=48<!--
-->|imageright=[[File:Ambox globe content.svg|40px]]}}}}<!-- border:1px solid red;margin:0;background-color:#FFFAFA
-->{{#switch:cb|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{43}}}={{Coablazon}}}}<!--
-->{{#switch:rf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{13}}}|{{{14}}}|{{{44}}}={{COAref}}}}<!--
tw...imageright=[[File:Ambox globe content.svg|60px|link=]]
-->{{#if:{{#switch:{{{zf|-}}}|-=|1}}{{#switch:zf|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{39}}}=1}}|{{User:ZooFari/Template:SVG|topic={{{s|}}}}}}}<!--
-->{{#if:{{#switch:{{{ni|←}}}|←=|1}}{{#switch:ni|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!-- parm
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}|{{clr}}{{NoInkscape|{{{ni|{{{←|}}}}}}|style=margin:0}}}}<!--
-->{{#if:{{{←|}}}{{#switch:←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}<!--
-->|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{12}}}|{{{14}}}=1}}<!--
-->{{{←s|}}}{{{←t|}}}|{{NoInkscape|1={{{←|{{#if:{{{%s|}}}{{#switch:%s|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}<!--
-->|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}|+}}}}}|style={{#switch:{{{←s}}}|0=margin:0;border:1px solid var(--border-color-notice,#333)<!--
-->|h=background:var(--background-color-error-subtle,#FDA);color: inherit;margin-bottom:0|t=width:auto;margin:0;border:{{#if:{{{tr|}}}|4px double|2px solid}} var(--border-color-warning,#633)<!--
-->|0h|h0=margin:0;background:var(--background-color-warning-subtle,#FED);color: inherit;border:var(--border-color-content-removed,#EC9) solid|#default={{{←s|}}}}}|topic={{{←t|{{{w|{{{s|}}}}}}}}}}}}}<!--
-->{{#if:{{{←←|}}}{{#switch:←←|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{14}}}=1}}<!-- ←←
-->|{{Igen/sni|{{{←←|-}}}}}}}<!--
-->{{#switch:1.2|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{16}}}={{SVG 1.2<!-- 16=
-->|style=margin:0;border-left:2px solid var(--border-color-content-removed,#F4C430)|topic={{{w|}}}}}}}<!-- (? flowRoot exception)
-->{{#if:{{{°|}}}{{#switch:°|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}=1}}<!--
-->|{{Easy-border|1={{{w|{{{s|}}}}}}|pixel={{{°|}}}}}}}<!--
-->{{#switch:—|{{{1|}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}|{{{10}}}|{{{11}}}|{{{18}}}<!-- 18=
-->=[[Category:Unused SVG images]]}}<!--
-->{{#if:{{{T9|}}}|{{clr}}{{{T9}}}|{{{t9|}}}}}<!--
-->{{#if:{{{msg|}}}|{{Igen/msg|{{{msg}}}}}}}<!-- more message boxes
-->{{#if:{{{T|}}}|{{clr}}{{{T}}}|{{{t|}}}}}</div><!-- final trail
-->{{#switch:{{{cc|y}}}|n|-|=|{{#if:{{{c4|{{{c5|{{{c6|}}}}}}}}}<!-- not when "cc=", "cc-n", "cc=-"
-->|{{Igen/cat|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#if:{{Igen/par|{{{2|}}}}}|Inv|V}}alid SVG<!--
-->|{{#invoke:Igenmod|exttext}}}} created with different tools code}}}}}}<!--
-->{{#if:{{{c1|{{{code|{{{source|{{{script|{{{c2|{{{c3|}}}}}}}}}}}}}}}}}}|{{Created with code<!--
-->|+={{{+c|}}}|nt={{#switch:{{{nt|}}}|=××}}|cc={{{cc|}}}<!--
-->|c1={{{c1|{{{code|{{{source|{{{script|}}}}}}}}}}}}<!--
-->|h1={{#if:{{{h1|{{{title|}}}}}}|{{{h1|{{{title|}}}}}}|{{#if:{{{p1|}}}<!--
-->|Suggested ''preferable'' SVG |{{Igen/cod|{{{1|}}}|H1|{{{l1|}}}}}}}}}<!--
-->|l1={{#if:{{{l1|{{{syntax|}}}}}}|{{{l1|{{{syntax|}}}}}}|{{Igen/cod|{{{1|}}}|L1}}}}<!--
-->|n1={{#if:{{{n1|}}}|{{{n1}}}|{{#if:{{{p1|}}}| '''''this'' code''' needs {{{p1}}} bytes.}}}}<!--
-->|e1={{{e1|}}}|d1={{{d1|}}}|f1={{{f1|{{{format|}}}}}}|g1={{{g1|}}}|s1={{{s1|{{{collapse|}}}}}}<!--
-->|c2={{{c2|{{{code2|{{{c5|}}}}}}}}}|h2={{{h2|{{{title2|{{Igen/cod|{{{1|}}}|H2}}}}}}}}<!--
-->|l2={{#if:{{{l2|{{{syntax2|}}}}}}|{{{l2|{{{syntax2|}}}}}}|{{Igen/cod|{{{1|}}}|L2}}}}|n2={{{n2|}}}<!--
-->|e2={{{e2|}}}|d2={{{d2|}}}|f2={{{f2|{{{format2|}}}}}}|g2={{{g2|}}}|s2={{{s2|{{{collapse2|}}}}}}<!--
-->|c3={{{c3|{{{code3|{{{c6|}}}}}}}}}|h3={{{h3|{{{title3|{{Igen/cod|{{{1|}}}|H3}}}}}}}}<!--
-->|l3={{#if:{{{l3|{{{syntax3|}}}}}}|{{{l3|{{{syntax3|}}}}}}|{{Igen/cod|{{{1|}}}|L3}}}}|n3={{{n3|}}}<!--
-->|e3={{{e3|}}}|d3={{{d3|}}}|f3={{{f3|{{{format3|}}}}}}|g3={{{g3|}}}|s3={{{s3|{{{collapse3|}}}}}}<!--
-->}}}}<!--
-->}}<!-- ==end of template==
-->{{#if:{{{cat2|}}}|{{Igen/cat|{{{cat2}}}}}}}<!-- required 2nd cat
-->{{#if:{{{cat3|}}}|{{Igen/cat|{{{cat3}}}}}}}<!-- required 3rd cat
-->{{#if:{{{cat4|}}}|{{Igen/cat|{{{cat4}}}}}}}<!-- required 4th cat
-->{{#if:{{{U|{{{u|{{{user|}}}}}}}}}|{{Igen/usr<!-- required user treatment
-->|{{{topic|{{{s|{{{topic|{{{w|{{{what|{{{vsub|{{{Vs|}}}}}}}}}}}}}}}}}}}}}|{{{U|{{{u|{{{user|}}}}}}}}}}}}}<!--
-->{{#switch:-|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}={{-}}}}<!--
{{#switch:€|{{{1}}}|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8}}}|{{{9}}}= ?? }}
future additional categorizings: {{#if:{{{_|}}}|{{Igen/cat|{{{_}}}}}}}
derivativeFX, LrMediaWiki, Open Access Media Importer, VicuñaUploader,
-->{{#if:{{{l|{{{L|}}}}}}|{{Igen/upl|{{{l|{{{L}}}}}}}}}}<!-- maintanance categories:
-->{{#if:{{{T|}}}|{{Igen/cat|Commons:Maint:Igen:T}}}}<!--
-->{{#switch:{{lc:{{{1|<noinclude>A</noinclude>}}}}}
|a|a$|ai|adobe|illustrator
|ah|ai|b|c|d|e|f|g|gimp|h
|i|ia|ib|ic|ih|ii|i$|im|ims|inkscape|io|is|itb
|j|k|l|m|matlab|n|ne|o|p|ps|q|r|s|sodipodi
|t|text editor|t-|s-
|u|v|vfpt|vm|w|wpdc|x|=|{{#ifexist:Template:{{Igen/cwt|{{{1|}}}<!--
-->|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}<!--
-->|{{Igen/2nd|<!-- [[Category:Igen 2nd check]] -->}}|[[Category:Igen tool notfd]]<!--
-->{{error|Igen tool "{{Igen/cwt|{{{1|}}}|{{{e|{{{err|{{{2}}}}}}}}}|{{{n|{{{N|{{{name|}}}}}}}}}}}" notfd}}}}}}<!--
--></onlyinclude><noinclude>
{{Protected}}
{{documentation}}
</noinclude>
lxxzpim0hmtpjo0aa3esgmce2eiluzn
Tempilet:Information field
10
1309
10631
2025-01-06T21:35:37Z
commons>Mdaniels5757
0
Have "Creator" field set id so the file doesn't end up in [[:Category:Files with no machine-readable author]]. Using the id parameter would be better, but there are already millions of files that need this, but don't use it.
10631
wikitext
text/x-wiki
<noinclude><table class="toccolours" style="width: 100%"></noinclude><tr style="vertical-align: top"><!--
=== Left side: name field ===
--><td style="{{{style|}}}" class="fileinfo-paramfield {{{class|}}}" {{#if:{{{id|}}}|id="{{{id|}}}"|{{#ifeq:{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}|Creator|id = "fileinfotpl_aut"|}}}}><!--
-->{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}<div style="display: none;">InfoField</div><!--
--></td><!--
=== Right side: value field ===
--><td style="{{{stylevalue|}}}" ><!--
-->{{#if:{{{stylevalue|}}}{{{classvalue|}}}{{{style|}}}{{{class|}}}{{{id|}}}|[[Category:Information field template with formatting]]}}<!--
-->{{#if:{{{classvalue|}}}<!--
-->|<span class="{{{classvalue|}}}"> {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}</span><!--
-->| {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}<!--
-->}}<!--
--></td>
</tr><noinclude></table>
{{documentation}}
</noinclude>
gx463m9oahud8uaoo29abw5ht5fsc1n
10632
10631
2026-08-25T23:38:25Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Information_field]]
10631
wikitext
text/x-wiki
<noinclude><table class="toccolours" style="width: 100%"></noinclude><tr style="vertical-align: top"><!--
=== Left side: name field ===
--><td style="{{{style|}}}" class="fileinfo-paramfield {{{class|}}}" {{#if:{{{id|}}}|id="{{{id|}}}"|{{#ifeq:{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}|Creator|id = "fileinfotpl_aut"|}}}}><!--
-->{{{name|{{{Name|{{{1|<noinclude>{{{name}}}</noinclude>}}}}}}}}}<div style="display: none;">InfoField</div><!--
--></td><!--
=== Right side: value field ===
--><td style="{{{stylevalue|}}}" ><!--
-->{{#if:{{{stylevalue|}}}{{{classvalue|}}}{{{style|}}}{{{class|}}}{{{id|}}}|[[Category:Information field template with formatting]]}}<!--
-->{{#if:{{{classvalue|}}}<!--
-->|<span class="{{{classvalue|}}}"> {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}</span><!--
-->| {{{value|{{{Value|{{{2|<noinclude>{{{value}}}</noinclude>}}}}}}}}}<!--
-->}}<!--
--></td>
</tr><noinclude></table>
{{documentation}}
</noinclude>
gx463m9oahud8uaoo29abw5ht5fsc1n
Tempilet:Created with/layout
10
1310
10633
2025-10-15T18:42:35Z
commons>Lucas Werkmeister
0
fulfilling edit request by [[User:Derbeth]] – replace [[Template:lang]] (which adds an inappropriate "description" class) with direct lang= and dir= attributes (and also use {{USERLANGUAGE}} instead of {{int:lang}} while we’re at it, see [[phabricator:T4085|T4085]]); previously tested on the sandbox at [[Special:Diff/1098484891]]
10633
wikitext
text/x-wiki
{{#tag:div|{{#switch:{{{logo|-}}}|-|=|#default=<!-- when there is a logo, it can be a file - or a Unicode codepoint
-->{{#if:{{#switch:{{padleft:|2|{{{logo}}}}}|U+|&#=1}}{{#switch:{{{iconsize|}}}|0|-|=|1}}<!-
-->|{{#invoke:Logoform|format|{{{logo}}}|{{#switch:{{{iconsize|}}}|0|-|=0|{{{iconsize}}}}}|{{{ustyle|-}}}}}<!--
-->|[[File:{{{logo}}}|33x22px]]}} }} <!--
-->{{{text|empty}}}<!--
-->{{#if:{{{more|}}}|{{{more}}}}}<!--
-->|{{#if:{{{text|}}}|lang={{#bcp47:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!--
-->|{{#if:{{{text|}}}|dir={{#dir:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!--
-->|style=display:table;width:{{{width|auto}}};vertical-align:middle;<!--
-->direction:{{#dir:{{{lang|{{int:lang}}}}}}};float:{{#ifeq:{{#dir:{{{lang|{{int:lang}}}}}}}|rtl|right|left}}<!-- }}
-->;line-height:{{{h|2}}}2px;height:{{{h|2}}}4px;font-size:.96em;<!-- modify these attributes:
-->margin:0px;padding:2px 4px 2px 6px;color:var(--color-base,#000);background:var(--background-color-neutral-subtle,#F8F9FA);border:1px solid #BAB;border-collapse:separate;border-spacing:0px;<!--
-->{{{style|}}}<!-- class=createdwithtemplate;layouttemplate -->}}<noinclude>
{{Documentation|{{ifsandbox|doc}}}}
</noinclude>
83ymdvewkanm1jb8k8ouli6rrbgdr1z
10634
10633
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with/layout]]
10633
wikitext
text/x-wiki
{{#tag:div|{{#switch:{{{logo|-}}}|-|=|#default=<!-- when there is a logo, it can be a file - or a Unicode codepoint
-->{{#if:{{#switch:{{padleft:|2|{{{logo}}}}}|U+|&#=1}}{{#switch:{{{iconsize|}}}|0|-|=|1}}<!-
-->|{{#invoke:Logoform|format|{{{logo}}}|{{#switch:{{{iconsize|}}}|0|-|=0|{{{iconsize}}}}}|{{{ustyle|-}}}}}<!--
-->|[[File:{{{logo}}}|33x22px]]}} }} <!--
-->{{{text|empty}}}<!--
-->{{#if:{{{more|}}}|{{{more}}}}}<!--
-->|{{#if:{{{text|}}}|lang={{#bcp47:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!--
-->|{{#if:{{{text|}}}|dir={{#dir:{{{lang|{{USERLANGUAGE}}}}}}}|}}<!--
-->|style=display:table;width:{{{width|auto}}};vertical-align:middle;<!--
-->direction:{{#dir:{{{lang|{{int:lang}}}}}}};float:{{#ifeq:{{#dir:{{{lang|{{int:lang}}}}}}}|rtl|right|left}}<!-- }}
-->;line-height:{{{h|2}}}2px;height:{{{h|2}}}4px;font-size:.96em;<!-- modify these attributes:
-->margin:0px;padding:2px 4px 2px 6px;color:var(--color-base,#000);background:var(--background-color-neutral-subtle,#F8F9FA);border:1px solid #BAB;border-collapse:separate;border-spacing:0px;<!--
-->{{{style|}}}<!-- class=createdwithtemplate;layouttemplate -->}}<noinclude>
{{Documentation|{{ifsandbox|doc}}}}
</noinclude>
83ymdvewkanm1jb8k8ouli6rrbgdr1z
Module:ISOdate
828
1311
10635
2024-07-29T00:52:40Z
commons>Jarekt
0
10635
Scribunto
text/plain
--[[
__ __ _ _ ___ ____ ___ _ _
| \/ | ___ __| |_ _| | ___ _|_ _/ ___| / _ \ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_)| |\___ \| | | |/ _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ | | ___) | |_| | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)___|____/ \___/ \__,_|\__,_|\__\___|
This module is intended for processing of date strings.
Please do not modify this code without applying the changes first at Module:ISOdate/sandbox and testing
at Module:ISOdate/sandbox/testcases and Module talk:ISOdate/sandbox/testcases.
Authors and maintainers:
* User:Parent5446 - original version of the function mimicking template:ISOdate
* User:Jarekt - original version of the functions mimicking template:Date and template:ISOyear
]]
-- =======================================
-- === Dependencies ======================
-- =======================================
local Date = require('Module:DateI18n')._Date
-- =======================================
-- === Local Functions ===================
-- =======================================
local function parse_ISOdate(datestr)
-- Core function of this module, which splits "datestr" contining date in ISO format into Year, month, day, ... components
-- Output is "datevec" array with numbers representing date components. We also return "tail" storing text following the date
-- pattern: regexp - regular expresion to test; dlen - number of date elements; tail = which element is a "tail" if any
-- regexp hints:
-- 1) Strings starting with "^" and ending with "$" indicate whole string match
-- 2) optional tail part copied as-is and following the main parsed part of the date have to be separated from the date by a whitespace, so "(\s.+)?"
local patterns = {
-- strings starting with YYYY-MM-DD HH:MM:SS. Year 4 digits (if we know seconds than it was within the last 100 years), the rest 1-2
-- date and time can be separated by space or "T" and there could be a "Z" on the end indicating "Zulu" time zone
{dlen=6, tail=7, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?(%s.*)"},
{dlen=6, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?$"},
-- strings starting with YYYY-MM-DD HH:MM. Year 4 digits, the rest 1-2
-- (if one knows hour and minute than it was probably after a year 1000)
{dlen=5, tail=6, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)(%s.+)"},
{dlen=5, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)$"},
-- strings starting with YYYY-MM-DD. Year 1-4 digits, the rest 1-2
{dlen=3, tail=4, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)(%s.+)"},
{dlen=3, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)$"},
-- strings starting with YYYY-MM. Year 3-4 digits, month 2 digits
-- (want to avoit converting to dates strings like 10-5 = 5
{dlen=2, tail=3, regexp="^+?(%d%d%d%d?)-(%d%d)(%s.+)"},
-- if whole string is in YYYY-MM form: If Year 1-4 digits, month 1-2 digits
{dlen=2, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)$"},
-- string starts with a number -> it has to be 3 or 4 digit long to be a year
{dlen=1, tail=2, regexp="^+?(%d%d%d%d?)(%s.+)"},
-- if whole string is a number (1-4 digit long) than it will be interpreted as a year
{dlen=1, tail=0, regexp="^+?(%d%d?%d?%d?)$"},
}
-- create datevec based on which variables are provided
local datevec = {}
local tail = ''
for i, pat in ipairs( patterns ) do
local vec = {datestr:match( pat.regexp )}
if vec and vec[1]~=nil then
for j=1, pat.dlen do
datevec[j] = vec[j]
end
if pat.tail>0 and vec[pat.tail]~=nil then
tail = mw.ustring.gsub(' ' .. vec[pat.tail], ' +', ' ')
end
break
end
end
if not datevec[1] or datevec[1]=='' then
-- quickly return if datestr does not look like date (it could be a template)
return nil, nil
end
return datevec, tail
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
function p._ISOyear( datestr )
-- if empty string then return it
datestr = mw.text.trim(datestr or '' )
if datestr == '' then
return ''
end
-- if number then return it
if tonumber( datestr ) then
return mw.ustring.format( '%04i', datestr )
end
-- otherwise use regular expression match
datestr = mw.ustring.match( datestr, '^+?(-?%d%d?%d?%d?)-' )
if datestr and tonumber( datestr ) then
return mw.ustring.format( '%04i', datestr )
else
return ''
end
end
function p._ISOdate(datestr, lang, case, class, trim_year)
datestr = mw.text.trim(datestr or '' )
local datevec, tail = parse_ISOdate(datestr)
if not datevec then
return datestr, false -- quickly return if datestr does not look like date (it could be a template)
end
-- call p._Date function to format date string
local datestr2 = Date(datevec, lang, case, class, trim_year)
if datestr2~='' then
return mw.text.trim( datestr2 .. tail), true
else -- in case of errors return the original string
return datestr, false
end
end
-- ===========================================================================
-- === Versions of the function to be called from template namespace
-- ===========================================================================
--[[
ISOdate
This function is the core part of the ISOdate template.
Usage:
{{#invoke:ISOdate|ISOdate|target_string|lang=}}
Parameters:
1: The date string
lang: The language to display it in
form: Language format (genitive, etc.) for some languages
class: CSS class for the <time> node
Error Handling:
If the string does not look like it contain the proper ISO date than the function will return the original string.
That is the preferred treatment for the template:Information (and similar templates) which calling it.
]]
function p.ISOdate(frame)
local args = {}
for name, value in pairs( frame.args ) do
if value ~= '' then -- nuke empty strings
if type(name)=='string' then
name = string.gsub( string.lower(name), ' ', '_')
end
args[name] = value
end
end
local datestr, succeded = p._ISOdate(
args[1] or '',
args.lang, -- language
args.case, -- allows to specify grammatical case for the month for languages that use them
args.class or 'dtstart', -- allows to set the html class of the time node where the date is included.
args.trim_year or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is
)
return datestr
end
--[[
ISOyear
This function returns year part of date string.
Usage:
{{#invoke:ISOdate|ISOyear|target_string}}
Parameters
1: The date string
Error Handling:
If the string does not look like it contain the year than the function will not return anything.
That is the preferred treatment for the template:Creator which is the main (only?) template calling it.
]]
function p.ISOyear( frame )
return p._ISOyear( frame.args[1] )
end
--[[
ISOdate_part
This function returns any part of the date string (if present)
Usage:
{{#invoke:ISOdate|ISOdate_part|target_string|part number}}
Parameters
1: The date string
2: part number: 1-year, 2-month, 3-day, 4-hour, 5-minute, 6-second
]]
function p.ISOdate_part(frame)
local date_str = mw.text.trim(frame.args[1] or '' )
local part_num = tonumber(frame.args[2] or '1')
local datevec, tail = parse_ISOdate(date_str)
return tonumber(datevec[part_num] or '0')
end
return p
j51gno421zkjvrao1w2p9mbv5i3kbic
10636
10635
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:ISOdate]]
10635
Scribunto
text/plain
--[[
__ __ _ _ ___ ____ ___ _ _
| \/ | ___ __| |_ _| | ___ _|_ _/ ___| / _ \ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_)| |\___ \| | | |/ _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ | | ___) | |_| | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)___|____/ \___/ \__,_|\__,_|\__\___|
This module is intended for processing of date strings.
Please do not modify this code without applying the changes first at Module:ISOdate/sandbox and testing
at Module:ISOdate/sandbox/testcases and Module talk:ISOdate/sandbox/testcases.
Authors and maintainers:
* User:Parent5446 - original version of the function mimicking template:ISOdate
* User:Jarekt - original version of the functions mimicking template:Date and template:ISOyear
]]
-- =======================================
-- === Dependencies ======================
-- =======================================
local Date = require('Module:DateI18n')._Date
-- =======================================
-- === Local Functions ===================
-- =======================================
local function parse_ISOdate(datestr)
-- Core function of this module, which splits "datestr" contining date in ISO format into Year, month, day, ... components
-- Output is "datevec" array with numbers representing date components. We also return "tail" storing text following the date
-- pattern: regexp - regular expresion to test; dlen - number of date elements; tail = which element is a "tail" if any
-- regexp hints:
-- 1) Strings starting with "^" and ending with "$" indicate whole string match
-- 2) optional tail part copied as-is and following the main parsed part of the date have to be separated from the date by a whitespace, so "(\s.+)?"
local patterns = {
-- strings starting with YYYY-MM-DD HH:MM:SS. Year 4 digits (if we know seconds than it was within the last 100 years), the rest 1-2
-- date and time can be separated by space or "T" and there could be a "Z" on the end indicating "Zulu" time zone
{dlen=6, tail=7, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?(%s.*)"},
{dlen=6, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?):(%d%d?)Z?$"},
-- strings starting with YYYY-MM-DD HH:MM. Year 4 digits, the rest 1-2
-- (if one knows hour and minute than it was probably after a year 1000)
{dlen=5, tail=6, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)(%s.+)"},
{dlen=5, tail=0, regexp="^+?(%d%d%d%d)-(%d%d?)-(%d%d?)[ T](%d%d?):(%d%d?)$"},
-- strings starting with YYYY-MM-DD. Year 1-4 digits, the rest 1-2
{dlen=3, tail=4, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)(%s.+)"},
{dlen=3, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)-(%d%d?)$"},
-- strings starting with YYYY-MM. Year 3-4 digits, month 2 digits
-- (want to avoit converting to dates strings like 10-5 = 5
{dlen=2, tail=3, regexp="^+?(%d%d%d%d?)-(%d%d)(%s.+)"},
-- if whole string is in YYYY-MM form: If Year 1-4 digits, month 1-2 digits
{dlen=2, tail=0, regexp="^+?(%d%d?%d?%d?)-(%d%d?)$"},
-- string starts with a number -> it has to be 3 or 4 digit long to be a year
{dlen=1, tail=2, regexp="^+?(%d%d%d%d?)(%s.+)"},
-- if whole string is a number (1-4 digit long) than it will be interpreted as a year
{dlen=1, tail=0, regexp="^+?(%d%d?%d?%d?)$"},
}
-- create datevec based on which variables are provided
local datevec = {}
local tail = ''
for i, pat in ipairs( patterns ) do
local vec = {datestr:match( pat.regexp )}
if vec and vec[1]~=nil then
for j=1, pat.dlen do
datevec[j] = vec[j]
end
if pat.tail>0 and vec[pat.tail]~=nil then
tail = mw.ustring.gsub(' ' .. vec[pat.tail], ' +', ' ')
end
break
end
end
if not datevec[1] or datevec[1]=='' then
-- quickly return if datestr does not look like date (it could be a template)
return nil, nil
end
return datevec, tail
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
function p._ISOyear( datestr )
-- if empty string then return it
datestr = mw.text.trim(datestr or '' )
if datestr == '' then
return ''
end
-- if number then return it
if tonumber( datestr ) then
return mw.ustring.format( '%04i', datestr )
end
-- otherwise use regular expression match
datestr = mw.ustring.match( datestr, '^+?(-?%d%d?%d?%d?)-' )
if datestr and tonumber( datestr ) then
return mw.ustring.format( '%04i', datestr )
else
return ''
end
end
function p._ISOdate(datestr, lang, case, class, trim_year)
datestr = mw.text.trim(datestr or '' )
local datevec, tail = parse_ISOdate(datestr)
if not datevec then
return datestr, false -- quickly return if datestr does not look like date (it could be a template)
end
-- call p._Date function to format date string
local datestr2 = Date(datevec, lang, case, class, trim_year)
if datestr2~='' then
return mw.text.trim( datestr2 .. tail), true
else -- in case of errors return the original string
return datestr, false
end
end
-- ===========================================================================
-- === Versions of the function to be called from template namespace
-- ===========================================================================
--[[
ISOdate
This function is the core part of the ISOdate template.
Usage:
{{#invoke:ISOdate|ISOdate|target_string|lang=}}
Parameters:
1: The date string
lang: The language to display it in
form: Language format (genitive, etc.) for some languages
class: CSS class for the <time> node
Error Handling:
If the string does not look like it contain the proper ISO date than the function will return the original string.
That is the preferred treatment for the template:Information (and similar templates) which calling it.
]]
function p.ISOdate(frame)
local args = {}
for name, value in pairs( frame.args ) do
if value ~= '' then -- nuke empty strings
if type(name)=='string' then
name = string.gsub( string.lower(name), ' ', '_')
end
args[name] = value
end
end
local datestr, succeded = p._ISOdate(
args[1] or '',
args.lang, -- language
args.case, -- allows to specify grammatical case for the month for languages that use them
args.class or 'dtstart', -- allows to set the html class of the time node where the date is included.
args.trim_year or '100-999' -- by default pad one and 2 digit years to be 4 digit long, while keeping 3 digit years as is
)
return datestr
end
--[[
ISOyear
This function returns year part of date string.
Usage:
{{#invoke:ISOdate|ISOyear|target_string}}
Parameters
1: The date string
Error Handling:
If the string does not look like it contain the year than the function will not return anything.
That is the preferred treatment for the template:Creator which is the main (only?) template calling it.
]]
function p.ISOyear( frame )
return p._ISOyear( frame.args[1] )
end
--[[
ISOdate_part
This function returns any part of the date string (if present)
Usage:
{{#invoke:ISOdate|ISOdate_part|target_string|part number}}
Parameters
1: The date string
2: part number: 1-year, 2-month, 3-day, 4-hour, 5-minute, 6-second
]]
function p.ISOdate_part(frame)
local date_str = mw.text.trim(frame.args[1] or '' )
local part_num = tonumber(frame.args[2] or '1')
local datevec, tail = parse_ISOdate(date_str)
return tonumber(datevec[part_num] or '0')
end
return p
j51gno421zkjvrao1w2p9mbv5i3kbic
Module:DateI18n
828
1312
10637
2023-12-24T23:40:08Z
commons>Jarekt
0
Fulfilling [[Template:Edit request|edit request]] by [[User:CalendulaAsteraceae|CalendulaAsteraceae]].
10637
Scribunto
text/plain
--[[
__ __ _ _ ____ _ ___ _ ___
| \/ | ___ __| |_ _| | ___ _| _ \ __ _| |_ ___|_ _/ |( _ ) _ __
| |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| '_ \
| | | | (_) | (_| | |_| | | __/_| |_| | (_| | || __/| || | (_) | | | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|
This module is intended for processing of date strings.
Please do not modify this code without applying the changes first at Module:DateI18n/sandbox
and testing at Module:DateI18n/sandbox/testcases and Module talk:DateI18n/sandbox/testcases.
Authors and maintainers:
* User:Parent5446 - original version of the function mimicking Template:ISOdate
* User:Jarekt - original version of the functions mimicking Template:Date
]]
-- =======================================
-- === Dependencies ======================
-- =======================================
require('strict')
-- =======================================
-- === Local Functions ===================
-- =======================================
------------------------------------------------------------------------------
--[[ (copied from Module:Core)
Function allowing for consistent treatment of boolean-like wikitext input.
Inputs:
1) val - value to be evaluated, outputs as a function of values:
true : true (boolean), 1 (number), or strings: "yes", "y", "true", "1"
false : false (boolean), 0 (number), or strings: "no", "n", "false", "0"
2) default - value to return otherwise
See Also: It works similarly to Module:Yesno
]]
local function yesno(val, default)
if type(val) == 'boolean' then
return val
elseif type(val) == 'number' then
val = tostring(val)
end
if type(val) == 'string' then
local LUT = {
yes=true , y=true , ['true'] =true , t=true , ['1']=true , on =true,
no =false, n=false, ['false']=false, f=false, ['0']=false, off=false }
val = LUT[mw.ustring.lower(val)] -- put in lower case
if (val~=nil) then
return val
end
end
return default
end
---------------------------------------------------------------------------------------
-- trim leading zeros in years prior to year 1000
-- INPUT:
-- * datestr - translated date string
-- * lang - language of translation
-- OUTPUT:
-- * datestr - updated date string
local function trimYear(datestr, year, lang)
local yearStr0, yearStr1, yearStr2, zeroStr
yearStr0 = string.format('%04i', year ) -- 4 digit year in standard form "0123"
yearStr1 = mw.language.new(lang):formatDate( 'Y', yearStr0) -- same as calling {{#time}} parser function
--yearStr1 = mw.getCurrentFrame():callParserFunction( "#time", { 'Y', yearStr0, lang } ) -- translate to a language
if yearStr0==yearStr1 then -- most of languages use standard form of year
yearStr2 = tostring(year)
else -- some languages use different characters for numbers
yearStr2 = yearStr1
zeroStr = mw.ustring.sub(yearStr1,1,1) -- get "0" in whatever language
for i=1,3 do -- trim leading zeros
if mw.ustring.sub(yearStr2,1,1)==zeroStr then
yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)
else
break
end
end
end
return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one
end
---------------------------------------------------------------------------------------
-- Look up proper format string to be passed to {{#time}} parser function
-- INPUTS:
-- * datecode: YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, or M
-- * day : Number between 1 and 31 (not needed for most languages)
-- * lang : language
-- OUTPUT:
-- * dFormat : input to {{#time}} function
local function getDateFormat(datecode, day, lang)
local function parseFormat(dFormat, day)
if dFormat:find('default') and #dFormat>10 then
-- Special (and messy) case of dFormat code depending on a day number, where data is a
-- JSON-encoded table {”default”:”*”,”dDD”:”*”} including fields for specific 2-digit days.
-- Change curly double quotes (possibly used for easier editing in tabular data) in dFormat
-- to straight ASCII double quotes (required for parsing of this JSON-encoded table).
local D = mw.text.jsonDecode(mw.ustring.gsub(dFormat, '[„“‟”]', '"')) --com = mw.dumpObject(D)
-- If the desired day is not in that JSON table, then use its "default" case.
dFormat = D[string.format('d%02i', day)] or D.default
-- Change ASCII single quotes to ASCII double quotes used for {{#time}} marking.
-- Apostrophes needed in plain-text must not use ASCII single quotes but curly apostrophe
-- e.g. { ‟default”: ‟j”, ‟d01”: ‟j’'o'” }, not { ‟default”: ‟j”, ‟d01”: ‟j''o'” }.
end
dFormat = dFormat:gsub("'", '"')
return dFormat
end
local T = {}
local tab = mw.ext.data.get('DateI18n.tab', lang)
for _, row in pairs(tab.data) do -- convert the output into a dictionary table
local id, _, msg = unpack(row)
T[id] = msg
end
-- Compatibility of legacy data using 'HMS' or 'HM', where 'M' is ambiguous
T.YMDhms = T.YMDhms or T.YMDHMS
T.YMDhm = T.YMDhm or T.YMDHM
datecode = datecode == 'YMDHMS' and 'YMDhms' or datecode == 'YMDHM' and 'YMDhm' or datecode
local dFormat = T[datecode]
if dFormat == 'default' and (datecode == 'YMDhms' or datecode == 'YMDhm') then
-- For most languages adding hour:minute:second is done by adding ", HH:ii:ss to the
-- day precission date, those languages are skipped in DateI18n.tab and default to
-- English which stores word "default"
dFormat = parseFormat(T['YMD'], day).. ', H:i'
if datecode == 'YMDhms' then
dFormat = dFormat .. ':s'
end
else
dFormat = parseFormat(dFormat, day)
end
return dFormat
end
---------------------------------------------------------------------------------------
-- Look up proper format string to be passed to {{#time}} parser function
-- INPUTS:
-- * month : month number
-- * case : gramatic case abbriviation, like "ins", "loc"
-- * lang : language
-- OUTPUT:
-- * dFormat : input to {{#time}} function
local function MonthCase(month, case, lang)
if month == nil or case == nil then
return nil
end
local T = {{},{},{},{},{},{},{},{},{},{},{},{}}
local tab = mw.ext.data.get('I18n/MonthCases.tab', lang)
for _, row in pairs(tab.data) do
local mth, cs, msg = unpack(row)
T[mth][cs] = msg
end
return T[month][case]
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- ===========================================================================
-- === Functions accesible from the outside to allow unit-testing
-- === Please do not use directly as they could change in the future
-- ===========================================================================
---------------------------------------------------------------------------------------
-- Single string replacement that ignores part of the string in "..."
function p.strReplace(String, old, new)
if String:find('"') then
local T={}
for i, str in ipairs(mw.text.split( String, '"', true )) do
if i%2==1 then
str = str:gsub(old, new, 1)
end
table.insert(T, str)
end
return table.concat(T,'"')
else
return String:gsub(old, new, 1)
end
end
---------------------------------------------------------------------------------------
-- process datevec
-- INPUT:
-- * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken
-- down date-time component strings or numbers
-- OUTPUT:
-- * datenum - same array but holding only numbers or nuls
function p.clean_datevec(datevec)
-- create datecode based on which variables are provided and check for out-of-bound values
-- check special case of month provided as a name
local month = datevec[2]
if type(month) == 'string' and month ~= '' and not tonumber(month) then
-- When the month is not a number, check if it's a month name in the project's language.
datevec[2] = mw.getContentLanguage():formatDate('n', month)
end
-- check bounds
local maxval = { 1/0, 12, 31, 23, 59, 59, 23, 59 } -- max values (or 1/0=+inf) for year, month, day, hour, minute, second, tzhour, tzmin
local minval = { -1/0, 01, 01, 00, 00, 00, -23, 00 } -- min values (or -1/0=-inf) for year, month, ...
local datenum = {} -- date-time encoded as a vector = [year, month, ... , second, tzhour, tzmin]
for i = 1, 8 do
local val = tonumber(datevec[i])
if val and val >= minval[i] and val <= maxval[i] then -- These tests work with infinite min/max values.
datenum[i] = val
end
end
-- leap second
if tonumber(datevec[6]) == 60 then -- leap second '60' is valid only at end of 23:59 UTC, on 30 June or 31 December of specific years
-- datenum[6] = 60
local MDhm = table.concat({unpack(datenum,2,5)}, ',')
if (MDhm == table.concat({6, 30, 23, 59}, ',')) or (MDhm == table.concat({12, 31, 23, 59}, ',')) then
datenum[6] = 60
end
end
return datenum
end
---------------------------------------------------------------------------------------
-- process datevec
-- INPUT:
-- * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls
-- OUTPUT:
-- * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} parser function
-- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate
-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
-- * datecode - a code specifying content of the array where Y' is year, 'M' is month,
-- 'D' is day, 'h' is hour, 'm' minute, 's' is second.
-- Output has to be one of YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, M.
function p.getTimestamp(datenum)
-- create datecode based on datenum
local codes = { 'Y', 'M', 'D', 'h', 'm', 's'}
local datecode = '' -- a string signifying which combination of variables was provided
for i, c in ipairs(codes) do
datecode = datecode .. (datenum[i] and c or '') -- if datenum[i] than append codes[i] to datecode
end
-- create timestamp string (for example 2000-02-20 02:20:20) based on which variables were provided
local timeStamp
-- date starting by a year
if datecode == 'YMDhms' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )
elseif datecode == 'YMDhm' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] )
elseif datecode:sub(1,3)=='YMD' then
timeStamp = string.format('%04i-%02i-%02i', datenum[1], datenum[2], datenum[3] )
datecode = 'YMD' -- 'YMDhms', 'YMDhm' and 'YMD' are the only supported format starting with 'YMD'; all others will be converted to 'YMD'.
elseif datecode:sub(1,2) == 'YM' then
timeStamp = string.format('%04i-%02i', datenum[1], datenum[2] )
datecode = 'YM'
elseif datecode:sub(1,1)=='Y' then
timeStamp = string.format('%04i', datenum[1] )
datecode = 'Y'
-- date starting by a month (the implied year is 2000)
elseif datecode== 'MDhms' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )
elseif datecode == 'MDhm' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5] )
elseif datecode:sub(1,2) == 'MD' then
timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], datenum[3] )
datecode = 'MD' -- 'MDhms', 'MDhm' and 'MD' are the only supported format starting with 'MD'; all others will be converted to 'MD'
elseif datecode:sub(1,1) == 'M' then -- Ambiguous: could mean minutes, but here means month (when parsed as a name/abbrev, not as a number).
timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], 1 )
datecode = 'M'
-- other possible but unrecognized formats (e.g. 'DHis', 'DHi', 'D', 'His', 'Hi');
-- note that 'Dh', 'D', 'h', 's' may eventually work, but not 'm' for minute only, which is ambiguous with 'M' for month only.
else
timeStamp = nil -- format not supported
end
return timeStamp, datecode
end
local function isValidLangCode(lang)
if not lang then
return false
end
lang = mw.text.trim(lang)
return lang ~= '' and lang ~= '⧼Lang⧽' and mw.language.isValidCode(lang)
end
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
--[[ ========================================================================================
Date
This function is the core part of the ISOdate template.
Usage:
local Date = require('Module:DateI18n')._Date
local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang)
Parameters:
* {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers
tzhour, tzmin are timezone offsets from UTC, hours and minutes
* lang: The language to display it in
* case: Language format (genitive, etc.) for some languages
* class: CSS class for the <time> node, use "" for no metadata at all
]]
function p._Date(datevec, lang, case, class, trim_year)
-- make sure inputs are in the right format
-- set language
if not isValidLangCode(lang) then
-- get user's chosen language
-- equivalent to {{int:lang}}
lang = mw.getCurrentFrame():callParserFunction("int", "lang")
if not isValidLangCode(lang) then
-- if that doesn't work, use the project language
-- this is useful on projects which import this module from Commons
lang = mw.language.getContentLanguage().code
if not isValidLangCode(lang) then
-- if that doesn't work, use English
lang = "en"
end
end
end
if lang == 'be-tarask' then
lang = 'be-x-old'
end
-- process datevec and extract timeStamp and datecode strings as well as numeric datenum array
local datenum = p.clean_datevec(datevec)
local year, month, day = datenum[1], datenum[2], datenum[3]
local timeStamp, datecode = p.getTimestamp(datenum)
if not timeStamp then -- something went wrong in parserDatevec
return ''
end
-- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent
-- languages and datecodes (specifying year-month-day or just year of month-day, etc)
-- Look up country specific format input to {{#time}} function
local dFormat = getDateFormat(datecode, day, lang)
-- By default the gramatical case is not specified (case=='') allowing the format to be specified
-- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by
-- specifying "case" variable. This is needed mostly by Slavic languages to create more complex
-- phrases as it is done in [[c:Module:Complex date]]
case = case or ''
if (lang=='qu' or lang=='qug') and case=='nom' then
-- Special case related to Quechua and Kichwa languages. The form in the I18n is
-- Genitive case with suffix "pi" added to month names provided by {#time}}
-- in Nominative case that "pi" should be removed
-- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014
dFormat = dFormat:gsub('F"pi"', 'F')
elseif case == 'gen' then
dFormat = p.strReplace(dFormat, "F", "xg")
elseif case == 'nom' then
dFormat = p.strReplace(dFormat, "xg", "F")
elseif case ~= '' and month ~= nil then
-- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month
-- in specific gramatic case in desired language. If we have it than replace
-- "F" and xg" in dFormat
local monthMsg = MonthCase(month, case, lang)
if monthMsg and monthMsg ~= '' then -- make sure it exists
dFormat = p.strReplace(dFormat, 'F', '"'..monthMsg..'"') -- replace default month with month name we already looked up
dFormat = p.strReplace(dFormat, 'xg', '"'..monthMsg..'"')
end
end
-- Translate the date using specified format.
-- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and
-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format
local langObj = mw.language.new(lang)
local datestr = langObj:formatDate(dFormat, timeStamp) -- same as using {{#time}} parser function
-- Special case related to Thai solar calendar: prior to 1940 new-year was at different time of year,
-- so just year (datecode == 'Y') is ambiguous and is replaced by "YYYY or YYYY" phrase
if lang=='th' and datecode=='Y' and year<=1940 then
datestr = string.format('%04i หรือ %04i', year+542, year+543 )
end
-- If year < 1000 than either keep the date padded to the length of 4 digits or trim it.
-- Decide if the year will stay padded with zeros (for years in 0-999 range).
if year and year < 1000 then
trim_year = yesno(trim_year, trim_year or '100-999')
if type(trim_year) == 'string' then
-- If `trim_year` not a simple boolean, then it's a range of dates.
-- For example '100-999' means to pad 1-or-2-digit years to be 4-digit long, while keeping 3-digit years as is.
local YMin, YMax = trim_year:match( '(%d+)-(%d+)' )
trim_year = YMin and year >= tonumber(YMin) and year <= tonumber(YMax)
end
if trim_year then
datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one
end
end
-- Append a timezone if present (after the hour and minute of the day).
if datenum[7] and (datecode:sub(1, 5) == 'YMDhm' or datecode:sub(1, 4) == 'MDhm') then
-- Use {{#time}} parser function to create timezone string, so that we use the correct character set.
local sign = (datenum[7]<0) and '−' or '+'
timeStamp = string.format("2000-01-01 %02i:%02i:00", math.abs(datenum[7]), datenum[8] or 0)
local timezone = langObj:formatDate('H:i', timeStamp) -- same as using {{#time}} parser function
datestr = string.format("%s %s%s", datestr, sign, timezone )
end
-- HTML formating of date string and tagging for microformats (only for absolute dates with a year).
if class and class ~= '' and class ~= '-' and datecode:sub(1,1) == 'Y' then
local pat = '<time class="%s" datetime="%s" lang="%s" dir="%s" style="white-space:nowrap">%s</time>'
datestr = pat:format(class, timeStamp, lang, langObj:getDir(), datestr)
end
return datestr
end
-- ===========================================================================
-- === Version of the function to be called from template namespace
-- ===========================================================================
--[[ ========================================================================================
Date
This function is the core part of the ISOdate template.
Usage:
{{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}}
Parameters:
* year, month, day, hour, minute, second: broken down date-time component strings
* tzhour, tzmin: timezone offset from UTC, hours and minutes
* lang: The language to display it in
* case: Language format (genitive, etc.) for some languages
* class: CSS class for the <time> node, use "" for no metadata at all
]]
function p.Date(frame)
-- get args
local args = {}
for key, value in pairs(frame.args) do
local trimmed_key = string.gsub(string.lower(mw.text.trim(key)), ' ', '_')
local trimmed_value = mw.text.trim(value)
if trimmed_key ~= 'class' and trimmed_value == '' then
trimmed_value = nil
end
args[trimmed_key] = trimmed_value
end
-- default values
-- Allows to set the html class of the time node where the date is included. This is useful for microformats.
args.class = args.class or '-'
if args.class == '' then
args.class = 'dtstart'
end
-- By default, pad one- and two-digit years to be 4 digits long, while keeping three-digit years as-is.
args.trim_year = args.trim_year or '100-999'
return p._Date(
{args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin},
args.lang,
args.case,
args.class,
args.trim_year
)
end
return p
k4zfn7arsiowlh6vv8aqwu7z9baxrc0
10638
10637
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:DateI18n]]
10637
Scribunto
text/plain
--[[
__ __ _ _ ____ _ ___ _ ___
| \/ | ___ __| |_ _| | ___ _| _ \ __ _| |_ ___|_ _/ |( _ ) _ __
| |\/| |/ _ \ / _` | | | | |/ _ (_) | | |/ _` | __/ _ \| || |/ _ \| '_ \
| | | | (_) | (_| | |_| | | __/_| |_| | (_| | || __/| || | (_) | | | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)____/ \__,_|\__\___|___|_|\___/|_| |_|
This module is intended for processing of date strings.
Please do not modify this code without applying the changes first at Module:DateI18n/sandbox
and testing at Module:DateI18n/sandbox/testcases and Module talk:DateI18n/sandbox/testcases.
Authors and maintainers:
* User:Parent5446 - original version of the function mimicking Template:ISOdate
* User:Jarekt - original version of the functions mimicking Template:Date
]]
-- =======================================
-- === Dependencies ======================
-- =======================================
require('strict')
-- =======================================
-- === Local Functions ===================
-- =======================================
------------------------------------------------------------------------------
--[[ (copied from Module:Core)
Function allowing for consistent treatment of boolean-like wikitext input.
Inputs:
1) val - value to be evaluated, outputs as a function of values:
true : true (boolean), 1 (number), or strings: "yes", "y", "true", "1"
false : false (boolean), 0 (number), or strings: "no", "n", "false", "0"
2) default - value to return otherwise
See Also: It works similarly to Module:Yesno
]]
local function yesno(val, default)
if type(val) == 'boolean' then
return val
elseif type(val) == 'number' then
val = tostring(val)
end
if type(val) == 'string' then
local LUT = {
yes=true , y=true , ['true'] =true , t=true , ['1']=true , on =true,
no =false, n=false, ['false']=false, f=false, ['0']=false, off=false }
val = LUT[mw.ustring.lower(val)] -- put in lower case
if (val~=nil) then
return val
end
end
return default
end
---------------------------------------------------------------------------------------
-- trim leading zeros in years prior to year 1000
-- INPUT:
-- * datestr - translated date string
-- * lang - language of translation
-- OUTPUT:
-- * datestr - updated date string
local function trimYear(datestr, year, lang)
local yearStr0, yearStr1, yearStr2, zeroStr
yearStr0 = string.format('%04i', year ) -- 4 digit year in standard form "0123"
yearStr1 = mw.language.new(lang):formatDate( 'Y', yearStr0) -- same as calling {{#time}} parser function
--yearStr1 = mw.getCurrentFrame():callParserFunction( "#time", { 'Y', yearStr0, lang } ) -- translate to a language
if yearStr0==yearStr1 then -- most of languages use standard form of year
yearStr2 = tostring(year)
else -- some languages use different characters for numbers
yearStr2 = yearStr1
zeroStr = mw.ustring.sub(yearStr1,1,1) -- get "0" in whatever language
for i=1,3 do -- trim leading zeros
if mw.ustring.sub(yearStr2,1,1)==zeroStr then
yearStr2 = mw.ustring.sub(yearStr2, 2, 5-i)
else
break
end
end
end
return string.gsub(datestr, yearStr1, yearStr2 ) -- in datestr replace long year with trimmed one
end
---------------------------------------------------------------------------------------
-- Look up proper format string to be passed to {{#time}} parser function
-- INPUTS:
-- * datecode: YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, or M
-- * day : Number between 1 and 31 (not needed for most languages)
-- * lang : language
-- OUTPUT:
-- * dFormat : input to {{#time}} function
local function getDateFormat(datecode, day, lang)
local function parseFormat(dFormat, day)
if dFormat:find('default') and #dFormat>10 then
-- Special (and messy) case of dFormat code depending on a day number, where data is a
-- JSON-encoded table {”default”:”*”,”dDD”:”*”} including fields for specific 2-digit days.
-- Change curly double quotes (possibly used for easier editing in tabular data) in dFormat
-- to straight ASCII double quotes (required for parsing of this JSON-encoded table).
local D = mw.text.jsonDecode(mw.ustring.gsub(dFormat, '[„“‟”]', '"')) --com = mw.dumpObject(D)
-- If the desired day is not in that JSON table, then use its "default" case.
dFormat = D[string.format('d%02i', day)] or D.default
-- Change ASCII single quotes to ASCII double quotes used for {{#time}} marking.
-- Apostrophes needed in plain-text must not use ASCII single quotes but curly apostrophe
-- e.g. { ‟default”: ‟j”, ‟d01”: ‟j’'o'” }, not { ‟default”: ‟j”, ‟d01”: ‟j''o'” }.
end
dFormat = dFormat:gsub("'", '"')
return dFormat
end
local T = {}
local tab = mw.ext.data.get('DateI18n.tab', lang)
for _, row in pairs(tab.data) do -- convert the output into a dictionary table
local id, _, msg = unpack(row)
T[id] = msg
end
-- Compatibility of legacy data using 'HMS' or 'HM', where 'M' is ambiguous
T.YMDhms = T.YMDhms or T.YMDHMS
T.YMDhm = T.YMDhm or T.YMDHM
datecode = datecode == 'YMDHMS' and 'YMDhms' or datecode == 'YMDHM' and 'YMDhm' or datecode
local dFormat = T[datecode]
if dFormat == 'default' and (datecode == 'YMDhms' or datecode == 'YMDhm') then
-- For most languages adding hour:minute:second is done by adding ", HH:ii:ss to the
-- day precission date, those languages are skipped in DateI18n.tab and default to
-- English which stores word "default"
dFormat = parseFormat(T['YMD'], day).. ', H:i'
if datecode == 'YMDhms' then
dFormat = dFormat .. ':s'
end
else
dFormat = parseFormat(dFormat, day)
end
return dFormat
end
---------------------------------------------------------------------------------------
-- Look up proper format string to be passed to {{#time}} parser function
-- INPUTS:
-- * month : month number
-- * case : gramatic case abbriviation, like "ins", "loc"
-- * lang : language
-- OUTPUT:
-- * dFormat : input to {{#time}} function
local function MonthCase(month, case, lang)
if month == nil or case == nil then
return nil
end
local T = {{},{},{},{},{},{},{},{},{},{},{},{}}
local tab = mw.ext.data.get('I18n/MonthCases.tab', lang)
for _, row in pairs(tab.data) do
local mth, cs, msg = unpack(row)
T[mth][cs] = msg
end
return T[month][case]
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- ===========================================================================
-- === Functions accesible from the outside to allow unit-testing
-- === Please do not use directly as they could change in the future
-- ===========================================================================
---------------------------------------------------------------------------------------
-- Single string replacement that ignores part of the string in "..."
function p.strReplace(String, old, new)
if String:find('"') then
local T={}
for i, str in ipairs(mw.text.split( String, '"', true )) do
if i%2==1 then
str = str:gsub(old, new, 1)
end
table.insert(T, str)
end
return table.concat(T,'"')
else
return String:gsub(old, new, 1)
end
end
---------------------------------------------------------------------------------------
-- process datevec
-- INPUT:
-- * datevec - Array of {year,month,day,hour,minute,second, tzhour, tzmin} containing broken
-- down date-time component strings or numbers
-- OUTPUT:
-- * datenum - same array but holding only numbers or nuls
function p.clean_datevec(datevec)
-- create datecode based on which variables are provided and check for out-of-bound values
-- check special case of month provided as a name
local month = datevec[2]
if type(month) == 'string' and month ~= '' and not tonumber(month) then
-- When the month is not a number, check if it's a month name in the project's language.
datevec[2] = mw.getContentLanguage():formatDate('n', month)
end
-- check bounds
local maxval = { 1/0, 12, 31, 23, 59, 59, 23, 59 } -- max values (or 1/0=+inf) for year, month, day, hour, minute, second, tzhour, tzmin
local minval = { -1/0, 01, 01, 00, 00, 00, -23, 00 } -- min values (or -1/0=-inf) for year, month, ...
local datenum = {} -- date-time encoded as a vector = [year, month, ... , second, tzhour, tzmin]
for i = 1, 8 do
local val = tonumber(datevec[i])
if val and val >= minval[i] and val <= maxval[i] then -- These tests work with infinite min/max values.
datenum[i] = val
end
end
-- leap second
if tonumber(datevec[6]) == 60 then -- leap second '60' is valid only at end of 23:59 UTC, on 30 June or 31 December of specific years
-- datenum[6] = 60
local MDhm = table.concat({unpack(datenum,2,5)}, ',')
if (MDhm == table.concat({6, 30, 23, 59}, ',')) or (MDhm == table.concat({12, 31, 23, 59}, ',')) then
datenum[6] = 60
end
end
return datenum
end
---------------------------------------------------------------------------------------
-- process datevec
-- INPUT:
-- * datenum - Array of {year,month,day,hour,minute,second, tzhour, tzmin} as numbers or nuls
-- OUTPUT:
-- * timeStamp - date string in the format taken by mw.language:formatDate lua function and {{#time}} parser function
-- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate
-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions#.23time
-- * datecode - a code specifying content of the array where Y' is year, 'M' is month,
-- 'D' is day, 'h' is hour, 'm' minute, 's' is second.
-- Output has to be one of YMDhms, YMDhm, YMD, YM, Y, MDhms, MDhm, MD, M.
function p.getTimestamp(datenum)
-- create datecode based on datenum
local codes = { 'Y', 'M', 'D', 'h', 'm', 's'}
local datecode = '' -- a string signifying which combination of variables was provided
for i, c in ipairs(codes) do
datecode = datecode .. (datenum[i] and c or '') -- if datenum[i] than append codes[i] to datecode
end
-- create timestamp string (for example 2000-02-20 02:20:20) based on which variables were provided
local timeStamp
-- date starting by a year
if datecode == 'YMDhms' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )
elseif datecode == 'YMDhm' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i', datenum[1], datenum[2], datenum[3], datenum[4], datenum[5] )
elseif datecode:sub(1,3)=='YMD' then
timeStamp = string.format('%04i-%02i-%02i', datenum[1], datenum[2], datenum[3] )
datecode = 'YMD' -- 'YMDhms', 'YMDhm' and 'YMD' are the only supported format starting with 'YMD'; all others will be converted to 'YMD'.
elseif datecode:sub(1,2) == 'YM' then
timeStamp = string.format('%04i-%02i', datenum[1], datenum[2] )
datecode = 'YM'
elseif datecode:sub(1,1)=='Y' then
timeStamp = string.format('%04i', datenum[1] )
datecode = 'Y'
-- date starting by a month (the implied year is 2000)
elseif datecode== 'MDhms' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5], datenum[6] )
elseif datecode == 'MDhm' then
timeStamp = string.format('%04i-%02i-%02i %02i:%02i', 2000, datenum[2], datenum[3], datenum[4], datenum[5] )
elseif datecode:sub(1,2) == 'MD' then
timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], datenum[3] )
datecode = 'MD' -- 'MDhms', 'MDhm' and 'MD' are the only supported format starting with 'MD'; all others will be converted to 'MD'
elseif datecode:sub(1,1) == 'M' then -- Ambiguous: could mean minutes, but here means month (when parsed as a name/abbrev, not as a number).
timeStamp = string.format('%04i-%02i-%02i', 2000, datenum[2], 1 )
datecode = 'M'
-- other possible but unrecognized formats (e.g. 'DHis', 'DHi', 'D', 'His', 'Hi');
-- note that 'Dh', 'D', 'h', 's' may eventually work, but not 'm' for minute only, which is ambiguous with 'M' for month only.
else
timeStamp = nil -- format not supported
end
return timeStamp, datecode
end
local function isValidLangCode(lang)
if not lang then
return false
end
lang = mw.text.trim(lang)
return lang ~= '' and lang ~= '⧼Lang⧽' and mw.language.isValidCode(lang)
end
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
--[[ ========================================================================================
Date
This function is the core part of the ISOdate template.
Usage:
local Date = require('Module:DateI18n')._Date
local dateStr = Date({2020, 12, 30, 12, 20, 11}, lang)
Parameters:
* {year,month,day,hour,minute,second, tzhour, tzmin}: broken down date-time component strings or numbers
tzhour, tzmin are timezone offsets from UTC, hours and minutes
* lang: The language to display it in
* case: Language format (genitive, etc.) for some languages
* class: CSS class for the <time> node, use "" for no metadata at all
]]
function p._Date(datevec, lang, case, class, trim_year)
-- make sure inputs are in the right format
-- set language
if not isValidLangCode(lang) then
-- get user's chosen language
-- equivalent to {{int:lang}}
lang = mw.getCurrentFrame():callParserFunction("int", "lang")
if not isValidLangCode(lang) then
-- if that doesn't work, use the project language
-- this is useful on projects which import this module from Commons
lang = mw.language.getContentLanguage().code
if not isValidLangCode(lang) then
-- if that doesn't work, use English
lang = "en"
end
end
end
if lang == 'be-tarask' then
lang = 'be-x-old'
end
-- process datevec and extract timeStamp and datecode strings as well as numeric datenum array
local datenum = p.clean_datevec(datevec)
local year, month, day = datenum[1], datenum[2], datenum[3]
local timeStamp, datecode = p.getTimestamp(datenum)
if not timeStamp then -- something went wrong in parserDatevec
return ''
end
-- Commons [[Data:DateI18n.tab]] page stores prefered formats for diferent
-- languages and datecodes (specifying year-month-day or just year of month-day, etc)
-- Look up country specific format input to {{#time}} function
local dFormat = getDateFormat(datecode, day, lang)
-- By default the gramatical case is not specified (case=='') allowing the format to be specified
-- in [[Data:DateI18n.tab]]. You can overwrite the default grammatical case of the month by
-- specifying "case" variable. This is needed mostly by Slavic languages to create more complex
-- phrases as it is done in [[c:Module:Complex date]]
case = case or ''
if (lang=='qu' or lang=='qug') and case=='nom' then
-- Special case related to Quechua and Kichwa languages. The form in the I18n is
-- Genitive case with suffix "pi" added to month names provided by {#time}}
-- in Nominative case that "pi" should be removed
-- see https://commons.wikimedia.org/wiki/Template_talk:Date#Quechua from 2014
dFormat = dFormat:gsub('F"pi"', 'F')
elseif case == 'gen' then
dFormat = p.strReplace(dFormat, "F", "xg")
elseif case == 'nom' then
dFormat = p.strReplace(dFormat, "xg", "F")
elseif case ~= '' and month ~= nil then
-- see is page [[Data:I18n/MonthCases.tab]] on Commons have name of the month
-- in specific gramatic case in desired language. If we have it than replace
-- "F" and xg" in dFormat
local monthMsg = MonthCase(month, case, lang)
if monthMsg and monthMsg ~= '' then -- make sure it exists
dFormat = p.strReplace(dFormat, 'F', '"'..monthMsg..'"') -- replace default month with month name we already looked up
dFormat = p.strReplace(dFormat, 'xg', '"'..monthMsg..'"')
end
end
-- Translate the date using specified format.
-- See https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#mw.language:formatDate and
-- https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time for explanation of the format
local langObj = mw.language.new(lang)
local datestr = langObj:formatDate(dFormat, timeStamp) -- same as using {{#time}} parser function
-- Special case related to Thai solar calendar: prior to 1940 new-year was at different time of year,
-- so just year (datecode == 'Y') is ambiguous and is replaced by "YYYY or YYYY" phrase
if lang=='th' and datecode=='Y' and year<=1940 then
datestr = string.format('%04i หรือ %04i', year+542, year+543 )
end
-- If year < 1000 than either keep the date padded to the length of 4 digits or trim it.
-- Decide if the year will stay padded with zeros (for years in 0-999 range).
if year and year < 1000 then
trim_year = yesno(trim_year, trim_year or '100-999')
if type(trim_year) == 'string' then
-- If `trim_year` not a simple boolean, then it's a range of dates.
-- For example '100-999' means to pad 1-or-2-digit years to be 4-digit long, while keeping 3-digit years as is.
local YMin, YMax = trim_year:match( '(%d+)-(%d+)' )
trim_year = YMin and year >= tonumber(YMin) and year <= tonumber(YMax)
end
if trim_year then
datestr = trimYear(datestr, year, lang) -- in datestr replace long year with trimmed one
end
end
-- Append a timezone if present (after the hour and minute of the day).
if datenum[7] and (datecode:sub(1, 5) == 'YMDhm' or datecode:sub(1, 4) == 'MDhm') then
-- Use {{#time}} parser function to create timezone string, so that we use the correct character set.
local sign = (datenum[7]<0) and '−' or '+'
timeStamp = string.format("2000-01-01 %02i:%02i:00", math.abs(datenum[7]), datenum[8] or 0)
local timezone = langObj:formatDate('H:i', timeStamp) -- same as using {{#time}} parser function
datestr = string.format("%s %s%s", datestr, sign, timezone )
end
-- HTML formating of date string and tagging for microformats (only for absolute dates with a year).
if class and class ~= '' and class ~= '-' and datecode:sub(1,1) == 'Y' then
local pat = '<time class="%s" datetime="%s" lang="%s" dir="%s" style="white-space:nowrap">%s</time>'
datestr = pat:format(class, timeStamp, lang, langObj:getDir(), datestr)
end
return datestr
end
-- ===========================================================================
-- === Version of the function to be called from template namespace
-- ===========================================================================
--[[ ========================================================================================
Date
This function is the core part of the ISOdate template.
Usage:
{{#invoke:DateI18n|Date|year=|month=|day=|hour=|minute=|second=|tzhour=|tzmin=|lang=en}}
Parameters:
* year, month, day, hour, minute, second: broken down date-time component strings
* tzhour, tzmin: timezone offset from UTC, hours and minutes
* lang: The language to display it in
* case: Language format (genitive, etc.) for some languages
* class: CSS class for the <time> node, use "" for no metadata at all
]]
function p.Date(frame)
-- get args
local args = {}
for key, value in pairs(frame.args) do
local trimmed_key = string.gsub(string.lower(mw.text.trim(key)), ' ', '_')
local trimmed_value = mw.text.trim(value)
if trimmed_key ~= 'class' and trimmed_value == '' then
trimmed_value = nil
end
args[trimmed_key] = trimmed_value
end
-- default values
-- Allows to set the html class of the time node where the date is included. This is useful for microformats.
args.class = args.class or '-'
if args.class == '' then
args.class = 'dtstart'
end
-- By default, pad one- and two-digit years to be 4 digits long, while keeping three-digit years as-is.
args.trim_year = args.trim_year or '100-999'
return p._Date(
{args.year, args.month, args.day, args.hour, args.minute, args.second, args.tzhour, args.tzmin},
args.lang,
args.case,
args.class,
args.trim_year
)
end
return p
k4zfn7arsiowlh6vv8aqwu7z9baxrc0
Module:Autotranslate
828
1313
10639
2024-04-18T13:29:34Z
commons>Jarekt
0
rewrite proposed by [[User:Tacsipacsi]] using more efficient test for existence of language subtemplate
10639
Scribunto
text/plain
--[[
__ __ _ _ _ _ _ _ _
| \/ | ___ __| |_ _| | ___ _ / \ _ _| |_ ___ | |_ _ __ __ _ _ __ ___| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) / _ \| | | | __/ _ \| __| '__/ _` | '_ \/ __| |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ / ___ \ |_| | || (_) | |_| | | (_| | | | \__ \ | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)_/ \_\__,_|\__\___/ \__|_| \__,_|_| |_|___/_|\__,_|\__\___|
Authors and maintainers:
* User:Zolo - original version
* User:Jarekt
]]
-- local function to help normalize input arguments
local function normalize_input_args(input_args, output_args)
for name, value in pairs( input_args ) do
if value ~= '' then -- nuke empty strings
if type(name)=='string' then name=string.lower(name) end -- convert to lower case
output_args[name] = value
end
end
return output_args
end
-- initialize object to be returned
local p = {}
--[[
autotranslate
This function is the core part of the Autotranslate template.
Usage from a template:
{{#invoke:autotranslate|autotranslate|base=|lang= }}
Parameters:
frame.args.base - base page name
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.autotranslate(frame)
-- switch to lowercase parameters to make them case independent
local args = {}
args = normalize_input_args(frame:getParent().args, args)
args = normalize_input_args(frame.args, args)
-- get language fallback list
if not args.lang or not mw.language.isSupportedLanguage(args.lang) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local langList = mw.language.getFallbacksFor(args.lang)
table.insert(langList,1,args.lang) -- user's language will be the first one to check
-- find base page
local base = args.base
args.base = nil -- blank it so it is not passed to language sub-templates
assert(base and #base>0, 'Base page not provided for autotranslate' )
-- Local function for expanding a template that can be pcall()ed: call the template
-- with the same template arguments as the ones passed to {{autotranslate}} template.
local function expandTemplate(title)
return frame:expandTemplate{ title = title, args = args }
end
-- find base template language subpage
local success, res
for _, language in ipairs(langList) do
success, res = pcall(expandTemplate, base .. '/' .. language)
if success then
break
end
end
local err_msg = 'No fallback page found for autotranslate (base=[[:%s]], lang=%s)'
if (not success) then
assert(args.default, string.format(err_msg, base, args.lang))
success, res = pcall(expandTemplate, args.default)
assert(success, string.format(err_msg, base, args.default))
end
-- If this if the base page being translateda
if (mw.title.getCurrentTitle().fullText==base) then
-- English language is the last fallback language for most languages, if
-- nothing else there should be at least an english subpage
local en_exist = mw.title.new(base .. '/en').exists
assert(en_exist, string.format(err_msg, base, 'en'))
if (mw.site.siteName=='Wikimedia Commons') then
res = res .. '\n[[Category:Autotranslated templates|' .. base .. ']]'
end
end
return res
end
return p
qmsw5ejudkg5q9vfj4h9vr37ae36450
10640
10639
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Autotranslate]]
10639
Scribunto
text/plain
--[[
__ __ _ _ _ _ _ _ _
| \/ | ___ __| |_ _| | ___ _ / \ _ _| |_ ___ | |_ _ __ __ _ _ __ ___| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) / _ \| | | | __/ _ \| __| '__/ _` | '_ \/ __| |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ / ___ \ |_| | || (_) | |_| | | (_| | | | \__ \ | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)_/ \_\__,_|\__\___/ \__|_| \__,_|_| |_|___/_|\__,_|\__\___|
Authors and maintainers:
* User:Zolo - original version
* User:Jarekt
]]
-- local function to help normalize input arguments
local function normalize_input_args(input_args, output_args)
for name, value in pairs( input_args ) do
if value ~= '' then -- nuke empty strings
if type(name)=='string' then name=string.lower(name) end -- convert to lower case
output_args[name] = value
end
end
return output_args
end
-- initialize object to be returned
local p = {}
--[[
autotranslate
This function is the core part of the Autotranslate template.
Usage from a template:
{{#invoke:autotranslate|autotranslate|base=|lang= }}
Parameters:
frame.args.base - base page name
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.autotranslate(frame)
-- switch to lowercase parameters to make them case independent
local args = {}
args = normalize_input_args(frame:getParent().args, args)
args = normalize_input_args(frame.args, args)
-- get language fallback list
if not args.lang or not mw.language.isSupportedLanguage(args.lang) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local langList = mw.language.getFallbacksFor(args.lang)
table.insert(langList,1,args.lang) -- user's language will be the first one to check
-- find base page
local base = args.base
args.base = nil -- blank it so it is not passed to language sub-templates
assert(base and #base>0, 'Base page not provided for autotranslate' )
-- Local function for expanding a template that can be pcall()ed: call the template
-- with the same template arguments as the ones passed to {{autotranslate}} template.
local function expandTemplate(title)
return frame:expandTemplate{ title = title, args = args }
end
-- find base template language subpage
local success, res
for _, language in ipairs(langList) do
success, res = pcall(expandTemplate, base .. '/' .. language)
if success then
break
end
end
local err_msg = 'No fallback page found for autotranslate (base=[[:%s]], lang=%s)'
if (not success) then
assert(args.default, string.format(err_msg, base, args.lang))
success, res = pcall(expandTemplate, args.default)
assert(success, string.format(err_msg, base, args.default))
end
-- If this if the base page being translateda
if (mw.title.getCurrentTitle().fullText==base) then
-- English language is the last fallback language for most languages, if
-- nothing else there should be at least an english subpage
local en_exist = mw.title.new(base .. '/en').exists
assert(en_exist, string.format(err_msg, base, 'en'))
if (mw.site.siteName=='Wikimedia Commons') then
res = res .. '\n[[Category:Autotranslated templates|' .. base .. ']]'
end
end
return res
end
return p
qmsw5ejudkg5q9vfj4h9vr37ae36450
Module:Logoform
828
1314
10641
2025-07-02T11:22:51Z
commons>Kontributor 2K
0
Undo revision 1051453348 by [[Special:Contributions/187.161.18.9|187.161.18.9]] ([[User talk:187.161.18.9|talk]]) vandalism
10641
Scribunto
text/plain
-- Module for: Formatting Logo
local p = {}
local concat = table.concat
local split = mw.text.split
local trim = mw.text.trim
local upper = mw.ustring.upper
local sub = mw.ustring.sub
local function ucfirst(s)
return upper(sub(s, 1, 1)) .. sub(s, 2)
end
function p.format(frame)
local gpar = frame.args -- global
local fname = ucfirst(trim(gpar[1] or ''))
if fname == '' then return '' end -- if file name is "unspecified"
local size = trim(gpar[2] or '') -- or '0' for "unspecified"
if size:sub(-2) == 'px' then size = size:sub(1, -3) end -- discard 'px' unit if present
size = split(size, 'x') -- {width, height} or {height}
size = size[2] and size[2] or size[1] -- keep only the specified height (in px)
local style = trim(gpar[3] or '') -- or '-' for "unspecified"
if style == '-' then style = '' end
local title = trim(gpar[4] or '') -- or '' for "unspecified"
local what = split(fname, '.', true--[[plain, not regexp]]) --[[detect a filename extension]]
--[[if there's a non-empty part before a supported extension, with 1 to 4 characters: 'jpg', 'jpeg', 'gif', 'png', 'svg', 'webp', 'djvu', 'tif', 'tiff'...]]
if #what > 1 and #(what[#what]) > 0 and #(what[#what]) < 5 then
if title == '' then
title = concat(what, '.', 1, -2):gsub('_', ' ') --[[default title from fname without this extension, underscores replaced by spaces]]
end
what = 'F' -- displaying a file
if size == '' or size == '0' then
size = '36' -- default file size (in px)
end
elseif fname:sub(1, 2) == 'U+' or fname:sub(1, 2) == '&#' then
what = 'U' -- displaying an Unicode code point instead of a file
if size == '' or size == '0' then
size = '15' -- Unicode default font-size (in px)
end
if title == '' then
title = fname--[[default title]]
end
title = trim(title
:gsub('U%+([0-9A-Fa-f]+) ?', function(x) return 'U+' .. upper(x) .. ' ' end)
:gsub('&#([0-9A-Fa-f]+);?', function(x) return 'U+' .. upper(x) .. ' ' end))
fname = fname
:gsub('&#([0-9A-Fa-f]+);?', function(x) return '&#x' .. upper(x) .. ';' end)
:gsub('U%+([0-9A-Fa-f]+) ?', function(x) return '&#x' .. upper(x) .. ';' end) .. '️'--[[Emoji-style variation selector 16]]
end
if what == 'F' then -- displaying a file
if style ~= '' then
style = '|' .. style
end
if title ~= '' then
title = '|' .. title
:gsub('%[', '[')
:gsub('%]', ']')
:gsub('%|', '{')
end
return concat{ '[[File:', fname, '|', size, 'x22px', style--[[allow linking]], title, ']]' }
else -- displaying an Unicode code point
if title ~= '' then
title = concat{ ' title="', title:gsub('"', '"'), '"' }
end
return concat{ '<div style="display:inline-block;position:relative;font-size:', size, 'px;line-height:22px;vertical-align:middle;top:-1px', style, '"', title, '>', fname, '</div>' }
end
end -- function format
return p
b3pbgwb9t6bfigjxsdgl4xjcafbdjmj
10642
10641
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Logoform]]
10641
Scribunto
text/plain
-- Module for: Formatting Logo
local p = {}
local concat = table.concat
local split = mw.text.split
local trim = mw.text.trim
local upper = mw.ustring.upper
local sub = mw.ustring.sub
local function ucfirst(s)
return upper(sub(s, 1, 1)) .. sub(s, 2)
end
function p.format(frame)
local gpar = frame.args -- global
local fname = ucfirst(trim(gpar[1] or ''))
if fname == '' then return '' end -- if file name is "unspecified"
local size = trim(gpar[2] or '') -- or '0' for "unspecified"
if size:sub(-2) == 'px' then size = size:sub(1, -3) end -- discard 'px' unit if present
size = split(size, 'x') -- {width, height} or {height}
size = size[2] and size[2] or size[1] -- keep only the specified height (in px)
local style = trim(gpar[3] or '') -- or '-' for "unspecified"
if style == '-' then style = '' end
local title = trim(gpar[4] or '') -- or '' for "unspecified"
local what = split(fname, '.', true--[[plain, not regexp]]) --[[detect a filename extension]]
--[[if there's a non-empty part before a supported extension, with 1 to 4 characters: 'jpg', 'jpeg', 'gif', 'png', 'svg', 'webp', 'djvu', 'tif', 'tiff'...]]
if #what > 1 and #(what[#what]) > 0 and #(what[#what]) < 5 then
if title == '' then
title = concat(what, '.', 1, -2):gsub('_', ' ') --[[default title from fname without this extension, underscores replaced by spaces]]
end
what = 'F' -- displaying a file
if size == '' or size == '0' then
size = '36' -- default file size (in px)
end
elseif fname:sub(1, 2) == 'U+' or fname:sub(1, 2) == '&#' then
what = 'U' -- displaying an Unicode code point instead of a file
if size == '' or size == '0' then
size = '15' -- Unicode default font-size (in px)
end
if title == '' then
title = fname--[[default title]]
end
title = trim(title
:gsub('U%+([0-9A-Fa-f]+) ?', function(x) return 'U+' .. upper(x) .. ' ' end)
:gsub('&#([0-9A-Fa-f]+);?', function(x) return 'U+' .. upper(x) .. ' ' end))
fname = fname
:gsub('&#([0-9A-Fa-f]+);?', function(x) return '&#x' .. upper(x) .. ';' end)
:gsub('U%+([0-9A-Fa-f]+) ?', function(x) return '&#x' .. upper(x) .. ';' end) .. '️'--[[Emoji-style variation selector 16]]
end
if what == 'F' then -- displaying a file
if style ~= '' then
style = '|' .. style
end
if title ~= '' then
title = '|' .. title
:gsub('%[', '[')
:gsub('%]', ']')
:gsub('%|', '{')
end
return concat{ '[[File:', fname, '|', size, 'x22px', style--[[allow linking]], title, ']]' }
else -- displaying an Unicode code point
if title ~= '' then
title = concat{ ' title="', title:gsub('"', '"'), '"' }
end
return concat{ '<div style="display:inline-block;position:relative;font-size:', size, 'px;line-height:22px;vertical-align:middle;top:-1px', style, '"', title, '>', fname, '</div>' }
end
end -- function format
return p
b3pbgwb9t6bfigjxsdgl4xjcafbdjmj
Module:Dir
828
1315
10643
2024-08-11T03:21:56Z
commons>Ebrahim
0
change the documentation, as this isn't used apparently but let's don't remove the function right now
10643
Scribunto
text/plain
--[==[
This module implements [[Template:Dir]].
Enter this to run tests in the Lua console:
=getmetatable(p).quickTests()
--]==]
local rtlOverrides = require('Module:Dir/RTL overrides')
local p = {}
local function trim(s)
if s and s ~= '' then s = tostring(s):match('^%s*(.-)%s*$') end
if s == '' then return nil end
return s
end
function p.rtlLangs(isRTL)
if isRTL == nil then isRTL = true end
return rtlOverrides[isRTL] or {}
end
function p.isRTL(code)
if type(code) ~= 'string' then return nil end
local v = rtlOverrides[code] -- very fast and not limited in the number of supported languages
if v ~= nil then return v end -- return it if mapped, otherwise use MediaWiki library:
local success, ret = pcall(function ()
return mw.language.new(code):isRTL() -- expensive and limited to 20 languages per MediaWiki instance
end)
return success and ret
end
function p.select(code, rtl, ltr)
if p.isRTL(code) then
return rtl
else
return ltr
end
end
-- The 3 parameters are automatically trimmed:
-- Parameter 1 takes the default value from {{Int:Lang}} if it's empty or not specified.
-- Parameter 2 can be named rtl, may be explicitly empty, otherwise takes the default value 'rtl' only if it's not specified.
-- Parameter 3 can be named ltr, may be explicitly empty, otherwise takes the default value 'ltr' only if it's not specified.
function p.main(frame)
local args = frame:getParent().args -- Parameters used to transclude Template:Dir
local code = trim(args[1]) or frame:callParserFunction('Int', 'Lang')
local rtl = trim(args.rtl or args[2] or 'rtl')
local ltr = trim(args.ltr or args[3] or 'ltr')
return p.select(code, rtl, ltr)
end
setmetatable(p, { quickTests = function ()
local rtlLangs = p.rtlLangs(true)
local ltrLangs = p.rtlLangs(false)
-- Basic check of data format
local function checkLangs(name, langs)
for k, lang in pairs(langs) do
assert(type(k) == 'number' and k == math.floor(k)
and type(lang) == 'string' and #lang >= 2 and #lang <= 16
and lang:find('^[a-z][%-0-9a-z]*[0-9a-z]$') == 1,
": Invalid sequence of language codes, " .. name .. "['" .. k .. "'] = '" .. lang .. "'")
end
return true
end
local ok, msg
ok, msg = pcall(checkLangs, 'rtlLangs', rtlLangs)
if not ok then return false, msg end
ok, msg = pcall(checkLangs, 'ltrLangs', ltrLangs)
if not ok then return false, msg end
-- Build inverse maps of languages having each direction
local isrtl, isltr = {}, {}
for _, lang in ipairs(rtlLangs) do isrtl[lang] = true end
for _, lang in ipairs(ltrLangs) do isltr[lang] = true end
-- Check conflicts using the two inverse maps
for _, lang in ipairs(rtlLangs) do
if isltr[lang] then return false, ": Direction conflict for '" .. lang .. "'" end
end
for _, lang in ipairs(ltrLangs) do
if isrtl[lang] then return false, ": Direction conflict for '" .. lang .. "'" end
end
-- Log missing languages (allows filling the tables above) according to MediaWiki internal data
local knownLangs, isKnownLang = mw.language.fetchLanguageNames(), {}
for lang, _ in pairs(knownLangs) do
isKnownLang[lang] = true
if rtlOverrides[lang] == nil then -- only if we still don't have data for this language
-- Note: we cannot check more than 20 languages at once, then MediaWiki raises an error.
-- So this test only runs on the Lua console, where you can update the tables at top.
-- This also means we cannot compare what MediaWiki returns with the direction we map here for all languages.
ok, value = pcall(function() return tostring(mw.language.new(lang):isRTL()) end)
mw.log("Warning: missing direction for language '" .. lang .. "', MediaWiki returns '" .. value .. "'")
end
end
-- utility: reverse order iterator on sequences
local function revipairs(t)
return function(t, i)
i = i - 1
local v = t[i]
if v == nil then return nil end
return i, v
end, t, #t + 1
end
-- Sort and deduplicate language code values (by scanning backward) for data cleanup
-- Also log languages having a direction mapping in this module but still not known by MediaWiki
table.sort(rtlLangs)
table.sort(ltrLangs)
for i, lang in revipairs(rtlLangs) do
if rtlLangs[i - 1] == rtlLangs[i] then table.remove(rtlLangs, i) end
if isKnownLang[lang] == nil then
mw.log("RTL language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)")
end
end
for i, lang in revipairs(ltrLangs) do
if ltrLangs[i - 1] == ltrLangs[i] then table.remove(ltrLangs, i) end
if isKnownLang[lang] == nil then
mw.log("LTR language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)")
end
end
-- Final presentation of current lists, sorted and deduplicated
mw.log("----")
mw.log("local rtlLangs = { '" .. table.concat(rtlLangs, "', '") .. "' }")
mw.log("local ltrLangs = { '" .. table.concat(ltrLangs, "', '") .. "' }")
return true
end })
return p
nhnicty79ta41krljhwvk2ecmrvwisu
10644
10643
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Dir]]
10643
Scribunto
text/plain
--[==[
This module implements [[Template:Dir]].
Enter this to run tests in the Lua console:
=getmetatable(p).quickTests()
--]==]
local rtlOverrides = require('Module:Dir/RTL overrides')
local p = {}
local function trim(s)
if s and s ~= '' then s = tostring(s):match('^%s*(.-)%s*$') end
if s == '' then return nil end
return s
end
function p.rtlLangs(isRTL)
if isRTL == nil then isRTL = true end
return rtlOverrides[isRTL] or {}
end
function p.isRTL(code)
if type(code) ~= 'string' then return nil end
local v = rtlOverrides[code] -- very fast and not limited in the number of supported languages
if v ~= nil then return v end -- return it if mapped, otherwise use MediaWiki library:
local success, ret = pcall(function ()
return mw.language.new(code):isRTL() -- expensive and limited to 20 languages per MediaWiki instance
end)
return success and ret
end
function p.select(code, rtl, ltr)
if p.isRTL(code) then
return rtl
else
return ltr
end
end
-- The 3 parameters are automatically trimmed:
-- Parameter 1 takes the default value from {{Int:Lang}} if it's empty or not specified.
-- Parameter 2 can be named rtl, may be explicitly empty, otherwise takes the default value 'rtl' only if it's not specified.
-- Parameter 3 can be named ltr, may be explicitly empty, otherwise takes the default value 'ltr' only if it's not specified.
function p.main(frame)
local args = frame:getParent().args -- Parameters used to transclude Template:Dir
local code = trim(args[1]) or frame:callParserFunction('Int', 'Lang')
local rtl = trim(args.rtl or args[2] or 'rtl')
local ltr = trim(args.ltr or args[3] or 'ltr')
return p.select(code, rtl, ltr)
end
setmetatable(p, { quickTests = function ()
local rtlLangs = p.rtlLangs(true)
local ltrLangs = p.rtlLangs(false)
-- Basic check of data format
local function checkLangs(name, langs)
for k, lang in pairs(langs) do
assert(type(k) == 'number' and k == math.floor(k)
and type(lang) == 'string' and #lang >= 2 and #lang <= 16
and lang:find('^[a-z][%-0-9a-z]*[0-9a-z]$') == 1,
": Invalid sequence of language codes, " .. name .. "['" .. k .. "'] = '" .. lang .. "'")
end
return true
end
local ok, msg
ok, msg = pcall(checkLangs, 'rtlLangs', rtlLangs)
if not ok then return false, msg end
ok, msg = pcall(checkLangs, 'ltrLangs', ltrLangs)
if not ok then return false, msg end
-- Build inverse maps of languages having each direction
local isrtl, isltr = {}, {}
for _, lang in ipairs(rtlLangs) do isrtl[lang] = true end
for _, lang in ipairs(ltrLangs) do isltr[lang] = true end
-- Check conflicts using the two inverse maps
for _, lang in ipairs(rtlLangs) do
if isltr[lang] then return false, ": Direction conflict for '" .. lang .. "'" end
end
for _, lang in ipairs(ltrLangs) do
if isrtl[lang] then return false, ": Direction conflict for '" .. lang .. "'" end
end
-- Log missing languages (allows filling the tables above) according to MediaWiki internal data
local knownLangs, isKnownLang = mw.language.fetchLanguageNames(), {}
for lang, _ in pairs(knownLangs) do
isKnownLang[lang] = true
if rtlOverrides[lang] == nil then -- only if we still don't have data for this language
-- Note: we cannot check more than 20 languages at once, then MediaWiki raises an error.
-- So this test only runs on the Lua console, where you can update the tables at top.
-- This also means we cannot compare what MediaWiki returns with the direction we map here for all languages.
ok, value = pcall(function() return tostring(mw.language.new(lang):isRTL()) end)
mw.log("Warning: missing direction for language '" .. lang .. "', MediaWiki returns '" .. value .. "'")
end
end
-- utility: reverse order iterator on sequences
local function revipairs(t)
return function(t, i)
i = i - 1
local v = t[i]
if v == nil then return nil end
return i, v
end, t, #t + 1
end
-- Sort and deduplicate language code values (by scanning backward) for data cleanup
-- Also log languages having a direction mapping in this module but still not known by MediaWiki
table.sort(rtlLangs)
table.sort(ltrLangs)
for i, lang in revipairs(rtlLangs) do
if rtlLangs[i - 1] == rtlLangs[i] then table.remove(rtlLangs, i) end
if isKnownLang[lang] == nil then
mw.log("RTL language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)")
end
end
for i, lang in revipairs(ltrLangs) do
if ltrLangs[i - 1] == ltrLangs[i] then table.remove(ltrLangs, i) end
if isKnownLang[lang] == nil then
mw.log("LTR language '" .. lang .. "' still not known by Mediawiki (could be a missing alias or variant)")
end
end
-- Final presentation of current lists, sorted and deduplicated
mw.log("----")
mw.log("local rtlLangs = { '" .. table.concat(rtlLangs, "', '") .. "' }")
mw.log("local ltrLangs = { '" .. table.concat(ltrLangs, "', '") .. "' }")
return true
end })
return p
nhnicty79ta41krljhwvk2ecmrvwisu
Module:Dir/RTL overrides
828
1316
10645
2022-10-27T23:30:55Z
commons>Magog the Ogre
0
additions requested by [[User:Verdy_p|Verdy_p]] ([[Special:Permalink/699751110#Updating Module:Dir/RTL overrides and Template:Dir]])
10645
Scribunto
text/plain
local p = {}
--[==[
Basic input sequences: relative order or duplicates does not matter here (but the end of the self test displays them sorted and deduplicated),
but codes must be valid and belong to only one of the two sequences).
Any missing language code will be checked with mw.language.new(code):isRTL(), which is costly
in loaded resources (it can only check 20 languages at most including the content language)
So it is best to map all languages that are the most likely to be used.
--]==]
local rtlLangs = { 'aaf-arab', 'aao', 'abh', 'abq-arab', 'abv', 'ace-arab', 'acm', 'acq', 'acw', 'acx', 'acy-arab', 'adf', 'ady-arab', 'aeb', 'aeb-arab', 'aec', 'afb', 'ajp', 'apc', 'apd', 'ar', 'arb', 'arc', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'az-arab', 'azb', 'bal', 'bbz', 'bcc', 'bej-arab', 'ber-arab', 'bft', 'bgn', 'bgp', 'bqi', 'bjm', 'bjn-arab', 'bms-arab', 'brh-arab', 'bsk', 'cja-arab', 'cjm-arab', 'ckb', 'crh-arab', 'deh', 'dgo-arab', 'dng-arab', 'doi-arab', 'dv', 'dyu-arab', 'fa', 'fa-af', 'ff-arab', 'ffm-arab', 'fub-arab', 'fuc-arab', 'fuf-arab', 'fuh-arab', 'fui-arab', 'fuv-arab', 'gda', 'glk', 'gwc', 'gbz-arab', 'gju-arab', 'ha-arab', 'hac', 'he', 'hnd', 'hno', 'jat', 'kbd-arab', 'kbl-arab', 'kby-arab', 'kcn', 'kfr', 'khw', 'kk-arab', 'kk-cn', 'kls-arab', 'kmr-arab', 'knc-arab', 'kr-arab', 'krt-arab', 'ks-arab', 'ktl', 'ku-arab', 'ky-arab', 'lah', 'lki', 'lrc', 'lrk', 'luz', 'mad-arab', 'man-arab', 'mge-arab', 'mhj', 'mki-arab', 'mne-arab', 'mnk-arab', 'mrt-arab', 'ms-arab', 'mve', 'mvy', 'mwr-arab', 'mzb', 'mzn', 'nqo', 'ota', 'pa-arab', 'pga', 'pbt', 'pbu', 'phl', 'phn', 'phr', 'phv', 'pnb', 'prd', 'prs', 'ps', 'pst', 'raj-arab', 'rif-arab', 'rmt-arab', 'scl', 'sd', 'sdb', 'sdf', 'sdh', 'shi-arab', 'shu', 'shy-arab', 'skr', 'skr-arab', 'sqr', 'ssh', 'su-arab', 'sw-arab', 'swh', 'tg-arab', 'tig-arab', 'tk-arab', 'tly-arab', 'tt-arab', 'trw', 'txj-arab', 'ug', 'ug-arab', 'ur', 'uz-arab', 'uzs', 'wbl', 'wlc-arab', 'wne', 'wni-arab', 'wo-arab', 'xhe', 'xng-arab', 'xpu', 'ydd', 'ydg', 'yhd-arab', 'yi', 'yih', 'zdj-arab' }
local ltrLangs = { 'aa', 'aaq', 'ab', 'abe', 'abs', 'ace', 'acf', 'ady', 'ady-cyrl', 'aeb-latn', 'af', 'agq', 'ak', 'akz', 'ale', 'aln', 'alq', 'als', 'alt', 'am', 'ami', 'an', 'ang', 'ann', 'anp', 'arn', 'as', 'asb', 'ase', 'ast', 'atj', 'aut', 'av', 'avk', 'awa', 'ay', 'az', 'azj', 'ba', 'bag', 'ban', 'ban-bali', 'bar', 'bas', 'bat-smg', 'bax', 'bbc', 'bbc-latn', 'bbj', 'bci', 'bcl', 'be', 'be-tarask', 'be-x-old', 'ber', 'bfd', 'bg', 'bh', 'bho', 'bi', 'bjn', 'bkc', 'bkh', 'bkm', 'blc', 'blk', 'bm', 'bn', 'bnm', 'bo', 'bpy', 'bqz', 'br', 'brh', 'brx', 'bs', 'btm', 'bto', 'bu', 'buc', 'bug', 'bxr', 'byv', 'bzj', 'ca', 'cak', 'cbk-zam', 'ccp', 'cdo', 'ce', 'ceb', 'ch', 'chc', 'cho', 'chr', 'chy', 'cic', 'ciw', 'cku', 'cnh', 'co', 'coc', 'cok', 'cop', 'cps', 'cr', 'crh', 'crh-cyrl', 'crh-latn', 'crj', 'crk', 'crl', 'crm', 'cro', 'crs', 'cs', 'csb', 'csw', 'cu', 'cv', 'cwd', 'cy', 'da', 'dag', 'dak', 'de', 'de-at', 'de-ch', 'de-formal', 'dgo', 'dhd', 'din', 'diq', 'doi', 'dsb', 'dtp', 'dty', 'dua', 'dum', 'dz', 'ee', 'egl', 'el', 'eml', 'en', 'en-ca', 'en-gb', 'en-ie', 'en-us', 'eo', 'es', 'es-419', 'es-formal', 'esu', 'et', 'eto', 'etu', 'eu', 'ewo', 'ext', 'fak', 'fan', 'fat', 'ff', 'fi', 'fil', 'fit', 'fiu-vro', 'fj', 'fkv', 'fmp', 'fo', 'fon', 'fr', 'frc', 'frm', 'fro', 'frp', 'frr', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fur', 'fuv', 'fy', 'ga', 'gaa', 'gag', 'gan', 'gan-hans', 'gan-hant', 'gcf', 'gcr', 'gd', 'geh', 'gl', 'gld', 'gn', 'gom', 'gom-deva', 'gom-latn', 'gor', 'got', 'gpe', 'grc', 'grt', 'gsw', 'gu', 'guc', 'gur', 'guw', 'gv', 'gwi', 'gya', 'ha', 'hak', 'haw', 'hi', 'hid', 'hif', 'hif-deva', 'hif-latn', 'hil', 'hmn', 'hne', 'ho', 'hoc', 'hr', 'hrx', 'hsb', 'hsn', 'ht', 'hu', 'hu-formal', 'hy', 'hyw', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ike-cans', 'ike-latn', 'ikt', 'ilo', 'inh', 'io', 'is', 'isu', 'it', 'iu', 'ja', 'jam', 'jbo', 'jut', 'jv', 'ka', 'kaa', 'kab', 'kbd', 'kbd-cyrl', 'kbd-latn', 'kbp', 'kcg', 'kea', 'ker', 'kg', 'kha', 'khn', 'ki', 'kiu', 'kj', 'kjp', 'kk', 'kk-cyrl', 'kk-kz', 'kk-latn', 'kk-tr', 'kl', 'km', 'kmb', 'kmr', 'kmr-cyrl', 'kmr-latn', 'kmw', 'kn', 'ko', 'ko-kp', 'ko-kr', 'koi', 'kr', 'krc', 'kri', 'krj', 'krl', 'kru', 'ks', 'ks-deva', 'ksf', 'ksh', 'ksw', 'ku', 'ku-latn', 'kum', 'kv', 'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lem', 'lep', 'lez', 'lfn', 'lg', 'li', 'lif', 'lij', 'liv', 'lkt', 'lld', 'lmo', 'ln', 'lns', 'lo', 'loz', 'lt', 'ltg', 'lu', 'lus', 'lv', 'lzh', 'lzz', 'mad', 'mag', 'mai', 'map-bms', 'mcn', 'mcp', 'mdf', 'mfe', 'mg', 'mgp', 'mh', 'mhr', 'mhv', 'mi', 'mic', 'mik', 'min', 'mk', 'ml', 'mn', 'mni', 'mnw', 'mo', 'moe', 'mos', 'mqm', 'mr', 'mrh', 'mrj', 'mrq', 'mrv', 'ms', 'mt', 'mtr', 'mua', 'mus', 'mwl', 'mwr', 'my', 'myv', 'na', 'nah', 'nan', 'nan-hani', 'nap', 'nb', 'nds', 'nds-nl', 'ne', 'new', 'ng', 'nge', 'nia', 'niu', 'njo', 'nl', 'nl-informal', 'nla', 'nmg', 'nmz', 'nn', 'nnh', 'nnz', 'no', 'nod', 'non', 'nov', 'nrf', 'nrf-fr', 'nrf-gg', 'nrf-je', 'nrm', 'nsk', 'nso', 'nv', 'ny', 'nyn', 'nys', 'oc', 'ojb', 'ojc', 'ojg', 'ojs', 'ojw', 'oka', 'olo', 'om', 'oma', 'or', 'os', 'osa', 'osa-latn', 'otw', 'pa', 'pag', 'pam', 'pap', 'pap-aw', 'pcd', 'pcm', 'pdc', 'pdt', 'pfl', 'pi', 'pih', 'pl', 'pms', 'pmt', 'pnt', 'prg', 'pt', 'pt-br', 'pt-cv', 'pt-pt', 'pwn', 'qu', 'quc', 'qug', 'ray', 'rcf', 'rgn', 'rif', 'rki', 'rkt', 'rm', 'rmc', 'rme', 'rmf', 'rmo', 'rmq', 'rmy', 'rmz', 'rn', 'ro', 'roa-rup', 'roa-tara', 'rsk', 'ru', 'rue', 'rup', 'ruq', 'ruq-cyrl', 'ruq-latn', 'rw', 'rwr', 'ryu', 'sa', 'sah', 'sak', 'sat', 'sc', 'scd', 'scn', 'sco', 'sdc', 'se', 'se-fi', 'se-no', 'se-se', 'sei', 'ses', 'sg', 'sgs', 'sh', 'sh-cyrl', 'sh-latn', 'shi', 'shi-latn', 'shi-tfng', 'shn', 'shy', 'shy-latn', 'si', 'simple', 'sip', 'sjd', 'sje', 'sju', 'sk', 'sl', 'sli', 'sm', 'sma', 'smj', 'smn', 'sms', 'sn', 'so', 'sq', 'sr', 'sr-cyrl', 'sr-ec', 'sr-el', 'sr-latn', 'srn', 'sro', 'srq', 'ss', 'st', 'sto', 'stq', 'sty', 'su', 'suz', 'sv', 'sw', 'swb', 'swv', 'syl', 'szl', 'szy', 'ta', 'tay', 'tcy', 'tdd', 'te', 'tet', 'tg', 'tg-cyrl', 'tg-latn', 'th', 'thl', 'ti', 'tk', 'tl', 'tly', 'tly-cyrl', 'tn', 'to', 'tokipona', 'tpi', 'tr', 'trp', 'tru', 'trv', 'ts', 'tt', 'tt-cyrl', 'tt-latn', 'tum', 'tun', 'tvu', 'tw', 'ty', 'tyv', 'tzl', 'tzm', 'udm', 'ug-latn', 'uk', 'umb', 'uve', 'uz', 'uz-cyrl', 'uz-latn', 've', 'vec', 'vep', 'vi', 'vic', 'vls', 'vmf', 'vmw', 'vo', 'vot', 'vro', 'vut', 'wa', 'war', 'wes', 'win', 'wlc', 'wls', 'wni', 'wo', 'wry', 'wuu', 'wya', 'xac', 'xal', 'xh', 'xmf', 'xnr', 'xpq', 'xsy', 'xtg', 'yas', 'yat', 'yav', 'ybb', 'yo', 'yrl', 'yue', 'za', 'zdj', 'zea', 'zgh', 'zh', 'zh-classical', 'zh-cn', 'zh-hans', 'zh-hant', 'zh-hk', 'zh-min-nan', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw', 'zh-wuu', 'zh-yue', 'zu', 'zun' }
-- Build the inverted map of languages to direction returned by this data module (fast, but collisions are not checked: run the test module).
for _, lang in ipairs(rtlLangs) do p[lang] = true end
for _, lang in ipairs(ltrLangs) do p[lang] = false end
-- Also store the two lists (at boolean indice), used by the test module to check the inverted map.
p[true] = rtlLangs
p[false] = ltrLangs
return p
50sfjepbbiks7cx9gmdiwhoy2oofqf7
10646
10645
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Dir/RTL_overrides]]
10645
Scribunto
text/plain
local p = {}
--[==[
Basic input sequences: relative order or duplicates does not matter here (but the end of the self test displays them sorted and deduplicated),
but codes must be valid and belong to only one of the two sequences).
Any missing language code will be checked with mw.language.new(code):isRTL(), which is costly
in loaded resources (it can only check 20 languages at most including the content language)
So it is best to map all languages that are the most likely to be used.
--]==]
local rtlLangs = { 'aaf-arab', 'aao', 'abh', 'abq-arab', 'abv', 'ace-arab', 'acm', 'acq', 'acw', 'acx', 'acy-arab', 'adf', 'ady-arab', 'aeb', 'aeb-arab', 'aec', 'afb', 'ajp', 'apc', 'apd', 'ar', 'arb', 'arc', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'az-arab', 'azb', 'bal', 'bbz', 'bcc', 'bej-arab', 'ber-arab', 'bft', 'bgn', 'bgp', 'bqi', 'bjm', 'bjn-arab', 'bms-arab', 'brh-arab', 'bsk', 'cja-arab', 'cjm-arab', 'ckb', 'crh-arab', 'deh', 'dgo-arab', 'dng-arab', 'doi-arab', 'dv', 'dyu-arab', 'fa', 'fa-af', 'ff-arab', 'ffm-arab', 'fub-arab', 'fuc-arab', 'fuf-arab', 'fuh-arab', 'fui-arab', 'fuv-arab', 'gda', 'glk', 'gwc', 'gbz-arab', 'gju-arab', 'ha-arab', 'hac', 'he', 'hnd', 'hno', 'jat', 'kbd-arab', 'kbl-arab', 'kby-arab', 'kcn', 'kfr', 'khw', 'kk-arab', 'kk-cn', 'kls-arab', 'kmr-arab', 'knc-arab', 'kr-arab', 'krt-arab', 'ks-arab', 'ktl', 'ku-arab', 'ky-arab', 'lah', 'lki', 'lrc', 'lrk', 'luz', 'mad-arab', 'man-arab', 'mge-arab', 'mhj', 'mki-arab', 'mne-arab', 'mnk-arab', 'mrt-arab', 'ms-arab', 'mve', 'mvy', 'mwr-arab', 'mzb', 'mzn', 'nqo', 'ota', 'pa-arab', 'pga', 'pbt', 'pbu', 'phl', 'phn', 'phr', 'phv', 'pnb', 'prd', 'prs', 'ps', 'pst', 'raj-arab', 'rif-arab', 'rmt-arab', 'scl', 'sd', 'sdb', 'sdf', 'sdh', 'shi-arab', 'shu', 'shy-arab', 'skr', 'skr-arab', 'sqr', 'ssh', 'su-arab', 'sw-arab', 'swh', 'tg-arab', 'tig-arab', 'tk-arab', 'tly-arab', 'tt-arab', 'trw', 'txj-arab', 'ug', 'ug-arab', 'ur', 'uz-arab', 'uzs', 'wbl', 'wlc-arab', 'wne', 'wni-arab', 'wo-arab', 'xhe', 'xng-arab', 'xpu', 'ydd', 'ydg', 'yhd-arab', 'yi', 'yih', 'zdj-arab' }
local ltrLangs = { 'aa', 'aaq', 'ab', 'abe', 'abs', 'ace', 'acf', 'ady', 'ady-cyrl', 'aeb-latn', 'af', 'agq', 'ak', 'akz', 'ale', 'aln', 'alq', 'als', 'alt', 'am', 'ami', 'an', 'ang', 'ann', 'anp', 'arn', 'as', 'asb', 'ase', 'ast', 'atj', 'aut', 'av', 'avk', 'awa', 'ay', 'az', 'azj', 'ba', 'bag', 'ban', 'ban-bali', 'bar', 'bas', 'bat-smg', 'bax', 'bbc', 'bbc-latn', 'bbj', 'bci', 'bcl', 'be', 'be-tarask', 'be-x-old', 'ber', 'bfd', 'bg', 'bh', 'bho', 'bi', 'bjn', 'bkc', 'bkh', 'bkm', 'blc', 'blk', 'bm', 'bn', 'bnm', 'bo', 'bpy', 'bqz', 'br', 'brh', 'brx', 'bs', 'btm', 'bto', 'bu', 'buc', 'bug', 'bxr', 'byv', 'bzj', 'ca', 'cak', 'cbk-zam', 'ccp', 'cdo', 'ce', 'ceb', 'ch', 'chc', 'cho', 'chr', 'chy', 'cic', 'ciw', 'cku', 'cnh', 'co', 'coc', 'cok', 'cop', 'cps', 'cr', 'crh', 'crh-cyrl', 'crh-latn', 'crj', 'crk', 'crl', 'crm', 'cro', 'crs', 'cs', 'csb', 'csw', 'cu', 'cv', 'cwd', 'cy', 'da', 'dag', 'dak', 'de', 'de-at', 'de-ch', 'de-formal', 'dgo', 'dhd', 'din', 'diq', 'doi', 'dsb', 'dtp', 'dty', 'dua', 'dum', 'dz', 'ee', 'egl', 'el', 'eml', 'en', 'en-ca', 'en-gb', 'en-ie', 'en-us', 'eo', 'es', 'es-419', 'es-formal', 'esu', 'et', 'eto', 'etu', 'eu', 'ewo', 'ext', 'fak', 'fan', 'fat', 'ff', 'fi', 'fil', 'fit', 'fiu-vro', 'fj', 'fkv', 'fmp', 'fo', 'fon', 'fr', 'frc', 'frm', 'fro', 'frp', 'frr', 'fub', 'fuc', 'fud', 'fue', 'fuf', 'fuh', 'fui', 'fur', 'fuv', 'fy', 'ga', 'gaa', 'gag', 'gan', 'gan-hans', 'gan-hant', 'gcf', 'gcr', 'gd', 'geh', 'gl', 'gld', 'gn', 'gom', 'gom-deva', 'gom-latn', 'gor', 'got', 'gpe', 'grc', 'grt', 'gsw', 'gu', 'guc', 'gur', 'guw', 'gv', 'gwi', 'gya', 'ha', 'hak', 'haw', 'hi', 'hid', 'hif', 'hif-deva', 'hif-latn', 'hil', 'hmn', 'hne', 'ho', 'hoc', 'hr', 'hrx', 'hsb', 'hsn', 'ht', 'hu', 'hu-formal', 'hy', 'hyw', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'ike-cans', 'ike-latn', 'ikt', 'ilo', 'inh', 'io', 'is', 'isu', 'it', 'iu', 'ja', 'jam', 'jbo', 'jut', 'jv', 'ka', 'kaa', 'kab', 'kbd', 'kbd-cyrl', 'kbd-latn', 'kbp', 'kcg', 'kea', 'ker', 'kg', 'kha', 'khn', 'ki', 'kiu', 'kj', 'kjp', 'kk', 'kk-cyrl', 'kk-kz', 'kk-latn', 'kk-tr', 'kl', 'km', 'kmb', 'kmr', 'kmr-cyrl', 'kmr-latn', 'kmw', 'kn', 'ko', 'ko-kp', 'ko-kr', 'koi', 'kr', 'krc', 'kri', 'krj', 'krl', 'kru', 'ks', 'ks-deva', 'ksf', 'ksh', 'ksw', 'ku', 'ku-latn', 'kum', 'kv', 'kw', 'ky', 'la', 'lad', 'lb', 'lbe', 'lem', 'lep', 'lez', 'lfn', 'lg', 'li', 'lif', 'lij', 'liv', 'lkt', 'lld', 'lmo', 'ln', 'lns', 'lo', 'loz', 'lt', 'ltg', 'lu', 'lus', 'lv', 'lzh', 'lzz', 'mad', 'mag', 'mai', 'map-bms', 'mcn', 'mcp', 'mdf', 'mfe', 'mg', 'mgp', 'mh', 'mhr', 'mhv', 'mi', 'mic', 'mik', 'min', 'mk', 'ml', 'mn', 'mni', 'mnw', 'mo', 'moe', 'mos', 'mqm', 'mr', 'mrh', 'mrj', 'mrq', 'mrv', 'ms', 'mt', 'mtr', 'mua', 'mus', 'mwl', 'mwr', 'my', 'myv', 'na', 'nah', 'nan', 'nan-hani', 'nap', 'nb', 'nds', 'nds-nl', 'ne', 'new', 'ng', 'nge', 'nia', 'niu', 'njo', 'nl', 'nl-informal', 'nla', 'nmg', 'nmz', 'nn', 'nnh', 'nnz', 'no', 'nod', 'non', 'nov', 'nrf', 'nrf-fr', 'nrf-gg', 'nrf-je', 'nrm', 'nsk', 'nso', 'nv', 'ny', 'nyn', 'nys', 'oc', 'ojb', 'ojc', 'ojg', 'ojs', 'ojw', 'oka', 'olo', 'om', 'oma', 'or', 'os', 'osa', 'osa-latn', 'otw', 'pa', 'pag', 'pam', 'pap', 'pap-aw', 'pcd', 'pcm', 'pdc', 'pdt', 'pfl', 'pi', 'pih', 'pl', 'pms', 'pmt', 'pnt', 'prg', 'pt', 'pt-br', 'pt-cv', 'pt-pt', 'pwn', 'qu', 'quc', 'qug', 'ray', 'rcf', 'rgn', 'rif', 'rki', 'rkt', 'rm', 'rmc', 'rme', 'rmf', 'rmo', 'rmq', 'rmy', 'rmz', 'rn', 'ro', 'roa-rup', 'roa-tara', 'rsk', 'ru', 'rue', 'rup', 'ruq', 'ruq-cyrl', 'ruq-latn', 'rw', 'rwr', 'ryu', 'sa', 'sah', 'sak', 'sat', 'sc', 'scd', 'scn', 'sco', 'sdc', 'se', 'se-fi', 'se-no', 'se-se', 'sei', 'ses', 'sg', 'sgs', 'sh', 'sh-cyrl', 'sh-latn', 'shi', 'shi-latn', 'shi-tfng', 'shn', 'shy', 'shy-latn', 'si', 'simple', 'sip', 'sjd', 'sje', 'sju', 'sk', 'sl', 'sli', 'sm', 'sma', 'smj', 'smn', 'sms', 'sn', 'so', 'sq', 'sr', 'sr-cyrl', 'sr-ec', 'sr-el', 'sr-latn', 'srn', 'sro', 'srq', 'ss', 'st', 'sto', 'stq', 'sty', 'su', 'suz', 'sv', 'sw', 'swb', 'swv', 'syl', 'szl', 'szy', 'ta', 'tay', 'tcy', 'tdd', 'te', 'tet', 'tg', 'tg-cyrl', 'tg-latn', 'th', 'thl', 'ti', 'tk', 'tl', 'tly', 'tly-cyrl', 'tn', 'to', 'tokipona', 'tpi', 'tr', 'trp', 'tru', 'trv', 'ts', 'tt', 'tt-cyrl', 'tt-latn', 'tum', 'tun', 'tvu', 'tw', 'ty', 'tyv', 'tzl', 'tzm', 'udm', 'ug-latn', 'uk', 'umb', 'uve', 'uz', 'uz-cyrl', 'uz-latn', 've', 'vec', 'vep', 'vi', 'vic', 'vls', 'vmf', 'vmw', 'vo', 'vot', 'vro', 'vut', 'wa', 'war', 'wes', 'win', 'wlc', 'wls', 'wni', 'wo', 'wry', 'wuu', 'wya', 'xac', 'xal', 'xh', 'xmf', 'xnr', 'xpq', 'xsy', 'xtg', 'yas', 'yat', 'yav', 'ybb', 'yo', 'yrl', 'yue', 'za', 'zdj', 'zea', 'zgh', 'zh', 'zh-classical', 'zh-cn', 'zh-hans', 'zh-hant', 'zh-hk', 'zh-min-nan', 'zh-mo', 'zh-my', 'zh-sg', 'zh-tw', 'zh-wuu', 'zh-yue', 'zu', 'zun' }
-- Build the inverted map of languages to direction returned by this data module (fast, but collisions are not checked: run the test module).
for _, lang in ipairs(rtlLangs) do p[lang] = true end
for _, lang in ipairs(ltrLangs) do p[lang] = false end
-- Also store the two lists (at boolean indice), used by the test module to check the inverted map.
p[true] = rtlLangs
p[false] = ltrLangs
return p
50sfjepbbiks7cx9gmdiwhoy2oofqf7
Tempilet:LangSwitch
10
1317
10647
2018-06-04T12:13:39Z
commons>Jarekt
0
Switch to [[Module:LangSwitch]]; allow multiple languages to map to a single value
10647
wikitext
text/x-wiki
<includeonly>{{#invoke:LangSwitch|langSwitch}}</includeonly><noinclude>
{{heavily used template}}
{{Documentation}}
</noinclude>
7wgvi7d3m9ku5n15qjrkwqgxnln0j1p
10648
10647
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:LangSwitch]]
10647
wikitext
text/x-wiki
<includeonly>{{#invoke:LangSwitch|langSwitch}}</includeonly><noinclude>
{{heavily used template}}
{{Documentation}}
</noinclude>
7wgvi7d3m9ku5n15qjrkwqgxnln0j1p
Module:Complex date
828
1318
10651
2024-07-15T14:14:40Z
commons>Jarekt
0
use Module:TagQS to add QS tags
10651
Scribunto
text/plain
--[[
__ __ _ _ ____ _ _
| \/ | ___ __| |_ _| | ___ _ / ___|___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_| |__| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)\____\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___|
|_|
This module is intended for creation of complex date phrases in variety of languages.
Once deployed, please do not modify this code without applying the changes first at Module:Complex date/sandbox and testing
at Module:Complex date/sandbox/testcases.
Authors and maintainers:
* User:Sn1per - first draft of the original version
* User:Jarekt - corrections and expansion of the original version
]]
-- List of external modules and functions
local p = {Error = nil}
local i18n = require('Module:i18n/complex date') -- used for translations of date related phrases
local ISOdate = require('Module:ISOdate')._ISOdate -- used for parsing dates in YYYY-MM-DD and related formats
local TagQS = require('Module:TagQS')
local Calendar -- loaded lazily
-- ==================================================
-- === Internal functions ===========================
-- ==================================================
local function langSwitch(list,lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
table.insert(langList,math.max(#langList,2),'default')
for i,language in ipairs(langList) do
if list[language] then
return list[language]
end
end
end
-- ==================================================
local function formatnum1(numStr, lang)
-- mostly require('Module:Formatnum').formatNum function used to translate a number to use different numeral characters,
-- except that it it does not call that function unless the language is on the list "LList"
local LList = {bn=1,bpy=1,kn=1,hi=1,mr=1,new=1,pa=1,gu=1,fa=1,glk=1,mzn=1,ur=1,ar=1,ckb=1,ks=1,lo=1,['or']=1,bo=1,['ml-old']=1,mn=1,te=1,th=1}
if LList[lang] then -- call only when the language is on the list
numStr = require('Module:Formatnum').formatNum(numStr, lang, 1)
end
return numStr
end
-- ==================================================
local function getISODate(datestr, datetype, lang, num, case)
-- translate dates in the format YYYY, YYYY-MM, and YYYY-MM-DD
if not case and i18n.Translations[datetype] then
-- look up the grammatical case needed and call ISOdate module
local rec = langSwitch(i18n.Translations[datetype], lang)
if type(rec)=='table' then
case = rec.case[num]
end
end
return ISOdate(datestr, lang, case, '', 1)
end
-- =======================================================================
local function translatePhrase(date1, date2, operation, lang, state)
-- use tables in Module:i18n/complex date to translate a phrase
if not i18n.Translations[operation] then
p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: input parameter "%s" is not recognized.</span>', operation or 'nil')
return ''
end
local dateStr = langSwitch(i18n.Translations[operation], lang)
if type(dateStr)=='table' then
dateStr = dateStr[1]
end
if type(dateStr)=='function' then
local dateFunc = dateStr
local nDates = i18n.Translations[operation]['nDates']
if nDates==2 then -- 2 date phrase
dateStr = dateFunc(date1, date2, state)
else -- 1 date phrase
dateStr = dateFunc(date1, state)
end
end
if type(dateStr)=='string' then
-- replace parts of the string '$date1' and '$date2' with date1 and date2 strings
dateStr = mw.ustring.gsub(dateStr, '$date1', date1)
dateStr = mw.ustring.gsub(dateStr, '$date2', date2)
else
-- Special case of more complex phrases that can be build out of simple phrases
-- If complex case is not translated to "lang" than build it out of simpler ones
local x = dateStr
dateStr = p._complex_date(x.conj, x.adj1, date1, x.units1, x.era1, x.adj2, date2, x.units2, x.era2, lang, 2)
end
return dateStr
end
-- =======================================================================
local function oneDatePhrase(dateStr, adj, era, units, lang, num, case, state)
-- translate a single date phrase
if num==2 then
state.adj, state.era, state.units, state.precision = state.adj2, state.era2, state.units2, state.precision2
end
-- dateStr can have many forms: ISO date, year or a number for
-- decade, century or millennium
if units == '' then -- unit is "year", "month", "day"
dateStr = getISODate(dateStr, adj, lang, num, case)
else -- units is "decade", "century", "millennium''
dateStr = translatePhrase(dateStr, '', units, lang, state)
end
-- add adjective ("early", "mid", etc.) or preposition ("before", "after",
-- "circa", etc.) to the date
if adj ~= '' then
dateStr = translatePhrase(dateStr, '', adj, lang, state)
else -- only era?
dateStr = formatnum1(dateStr, lang)
end
-- add era
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
-- =======================================================================
local function twoDatePhrase(date1, date2, state, lang)
-- translate a double date phrase
local dateStr, case
local era=''
if state.era1 == state.era2 then
-- if both eras are the same than add it only once
era = state.era1
state.era1 = ''
state.era2 = ''
end
case = {nil, nil}
if i18n.Translations[state.conj] then
local rec = langSwitch(i18n.Translations[state.conj], lang)
if type(rec)=='table' then
case = rec.case
end
end
date1 = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, case[1], state)
date2 = oneDatePhrase(date2, state.adj2, state.era2, state.units2, lang, 2, case[2], state)
dateStr = translatePhrase(date1, date2, state.conj, lang, state)
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
-- =======================================================================
local function otherPhrases(date1, date2, operation, era, lang, state)
-- translate specialized phrases
local dateStr = ''
if operation == 'islamic' then
if date2=='' then date2 = mw.getCurrentFrame():callParserFunction('#time', 'xmY', date1) end
date1 = getISODate(date1, operation, lang, 1, nil)
date2 = getISODate(date2, operation, lang, 2, nil)
if era == '' then era = 'ad' end
dateStr = translatePhrase(date1, '', era, lang, state) .. ' (' .. translatePhrase(date2, '', 'ah', lang, state) .. ')'
era = ''
elseif operation == 'julian' then
if not date2 and date1 then -- Convert from Julian to Gregorian calendar date
if Calendar == nil then
Calendar = require("Module:Calendar") -- lazy loding (only if needed)
end
local JDN = Calendar._date2jdn(date1, 0)
if JDN then
date2 = date1 -- first date is assumed to be Julian
date1 = Calendar._jdn2date(JDN, 1)
end
end
date1 = getISODate(date1, operation, lang, 1, nil)
date2 = getISODate(date2, operation, lang, 2, nil)
dateStr = translatePhrase(date1, date2, operation, lang, state)
dateStr = mw.ustring.gsub(mw.ustring.gsub(dateStr, '%( ', '('), ' %)', ')') -- in case date2 is empty
elseif operation == 'turn of the year' or operation == 'turn of the decade' or operation == 'turn of the century' then
local dt = 1
if operation == 'turn of the decade' then dt=10 end
if not date2 or date2=='' then date2=tostring(tonumber(date1)-dt) end
if era~='bp' and era~='bc' then date1, date2 = date2, date1 end
if operation == 'turn of the year' then
date1 = ISOdate(date1, lang, '', '', 1)
date2 = ISOdate(date2, lang, '', '', 1)
else
date1 = formatnum1(date1, lang)
date2 = formatnum1(date2, lang)
end
dateStr = translatePhrase(date1, date2, operation, lang, state)
elseif operation == 'year unknown' then
dateStr = translatePhrase('', '', operation, lang, state)
elseif operation == 'unknown' then
dateStr = tostring(mw.message.new( "exif-unknowndate" ):inLanguage( lang ))
end
-- add era
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
-- =======================================================================
local function checkAliases(str1, str2, sType)
-- some inputs have many aliases - reconcile them and ensure string is playing a proper role
local out = ''
if str1 and str1~='' then
local a = i18n.Synonyms[str1] -- look up synonyms of "str1"
if a then
out = a[1]
else
p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: %s is not recognized.</span>', str1)
end
elseif str2 and str2~='' then -- if "str1" of type "sType" is empty than maybe ...
local a = i18n.Synonyms[str2] -- ..."str2" is of the same type and is not empty
if a and a[2]==sType then
out = a[1]
str2 = ''
end
end
return out, str2
end
-- =======================================================================
local function datePrecision(dateStr, units)
-- "in this module "Units" is a string like millennium, century, or decade
-- "precision" is wikibase compatible date precision number: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
-- based on string or numeric input calculate "Units" and "precision"
local precision
if type(units)=='number' then
precision = units
if precision>11 then precision=11 end -- clip the range of precision values
if precision==6 then units='millennium'
elseif precision==7 then units='century'
elseif precision==8 then units='decade'
else units = ''
end
elseif type(units)=='string' then
units = string.lower(units)
if units=='millennium' then precision=6
elseif units=='century' then precision=7
elseif units=='decade' then precision=8
else precision=9
end
end
if units=='' or precision==9 then
local sLen = mw.ustring.len(dateStr)
if sLen<= 4 then precision=9
elseif sLen== 7 then precision=10
elseif sLen>=10 then precision=11
end
units=''
end
if precision==6 and dateStr.match( dateStr, '%d000' )~=nil then
dateStr = tostring(math.floor(tonumber(dateStr)/1000) +1)
elseif precision==7 and mw.ustring.match( dateStr, '%d%d00' )~=nil then
dateStr = tostring(math.floor(tonumber(dateStr)/100) +1)
end
return dateStr, units, precision
end
-- =======================================================================
local function isodate2timestamp(dateStr, precision, era)
-- convert date string to timestamps used by Quick Statements
local tStamp = nil
if era == 'ah' or precision<6 then
return nil
elseif era ~= '' then
local eraLUT = {ad='+', bc='-', bp='-' }
era = eraLUT[era]
else
era='+'
end
-- convert isodate to timestamp used by quick statements
if precision>=9 then
if string.match(dateStr,"^%d%d%d%d$") then -- if YYYY format
tStamp = era .. dateStr .. '-00-00T00:00:00Z/9'
elseif string.match(dateStr,"^%d%d%d%d%-%d%d$") then -- if YYYY-MM format
tStamp = era .. dateStr .. '-00T00:00:00Z/10'
elseif string.match(dateStr,"^%d%d%d%d%-%d%d%-%d%d$") then -- if YYYY-MM-DD format
tStamp = era .. dateStr .. 'T00:00:00Z/11'
end
elseif precision==8 then -- decade
tStamp = era .. dateStr .. '-00-00T00:00:00Z/8'
elseif precision==7 then -- century
local d = tostring(tonumber(dateStr)-1)
tStamp = era .. d .. '50-00-00T00:00:00Z/7'
elseif precision==6 then
local d = tostring(tonumber(dateStr)-1)
tStamp = era .. d .. '500-00-00T00:00:00Z/6'
end
return tStamp
end
-- =======================================================================
local function oneDateQScode(dateStr, adj, era, precision)
-- create QuickStatements string for "one date" dates
local outputStr = ''
local d = isodate2timestamp(dateStr, precision, era)
if not d then
return ''
end
local rLUT = { early='Q40719727' , mid='Q40719748', late='Q40719766',
['1quarter']='Q40690303' , ['2quarter']='Q40719649' , ['3quarter']='Q40719662', ['4quarter']='Q40719674',
spring='Q40720559' , summer='Q40720564' , autumn='Q40720568' , winter='Q40720553',
firsthalf='Q40719687', secondhalf='Q40719707' }
local qLUT = {['from']='P580', ['until']='P582', ['after']='P1319', ['before']='P1326', ['by']='P1326'}
local refine = rLUT[adj]
local qualitier = qLUT[adj]
if adj=='' then
outputStr = d
elseif adj=='circa' then
outputStr = d..",P1480,Q5727902"
elseif refine then
outputStr = d..",P4241,"..refine
elseif precision>7 and qualitier then
local century = string.gsub(d, 'Z%/%d+', 'Z/7')
outputStr = century ..",".. qualitier ..","..d
end
return outputStr
end
-- =======================================================================
local function twoDateQScode(date1, date2, state)
-- create QuickStatements string for "two date" dates
if state.adj1~='' or state.adj2~='' or state.era1~=state.era2 then
return '' -- QuickStatements string are not generated for two date phrases with adjectives
end
local outputStr = ''
local d1 = isodate2timestamp(date1, state.precision1, state.era1)
local d2 = isodate2timestamp(date2, state.precision2, state.era2)
if (not d1) or (not d2) then
return ''
end
-- find date with lower precision in common to both dates
local cd
local year1 = tonumber(string.sub(d1,2,5))
local year2 = tonumber(string.sub(d2,2,5))
local k = 0
for i = 1,10,1 do
if string.sub(d1,1,i)==string.sub(d2,1,i) then
k = i -- find last matching letter
end
end
if k>=9 then -- same month, since "+YYYY-MM-" is in common
cd = isodate2timestamp(string.sub(d1,2,8), 10, state.era1)
elseif k>=6 and k<9 then -- same year, since "+YYYY-" is in common
cd = isodate2timestamp(tostring(year1), 9, state.era1)
elseif k==4 then -- same decade(k=4, precision=8), since "+YYY" is in common
cd = isodate2timestamp(tostring(year1), 8, state.era1)
elseif k==3 then -- same century(k=3, precision=7) since "+YY" is in common
local d = tostring(math.floor(year1/100) +1) -- convert 1999 -> 20
cd = isodate2timestamp( d, 7, state.era1)
elseif k==2 then -- same millennium (k=2, precision=6), since "+Y" is in common
local d = tostring(math.floor(year1/1000) +1) -- convert 1999 -> 2
cd = isodate2timestamp( d, 6, state.era1)
end
if not cd then
return ''
end
--if not cd then
-- return ' <br/>error: ' .. d1.." / " .. d2.." / ".. (cd or '') .." / ".. string.sub(d1,2,5).." / " .. string.sub(d2,2,5).." / " .. tostring(k)
--end
--
if (state.conj=='from-until') or (state.conj=='and' and year1==year2-1) then
outputStr = cd ..",P580,".. d1 ..",P582,".. d2
elseif (state.conj=='between') or (state.conj=='or' and year1==year2-1) then
outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2
elseif state.conj=='circa2' then
outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2 ..",P1480,Q5727902"
end
return outputStr
end
-- =======================================================================
local function processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr)
-- process inputs and save date in state array
local state = {}
state.conj = string.lower(conj or '')
state.adj1 = string.lower(adj1 or '')
state.adj2 = string.lower(adj2 or '')
state.era1 = string.lower(era1 or '')
state.era2 = string.lower(era2 or '')
state.units1 = string.lower(units1 or '')
state.units2 = string.lower(units2 or '')
-- if date 1 is missing but date 2 is provided than swap them
if date1 == '' and date2 ~= '' then
date1 = date2
date2 = ''
state = {adj1 = state.adj2, era1 = state.era2, units1 = state.units2,
adj2 = '', era2 = '', units2 = '', conj=state.conj, num=1}
end
if date2 ~= '' then state.nDates = 2
elseif date1 ~= '' then state.nDates = 1
else state.nDates = 0
end
-- reconcile alternative names for text inputs
local conj = checkAliases(state.conj ,'' ,'j')
state.adj1 ,conj = checkAliases(state.adj1 ,conj,'a')
state.units1,conj = checkAliases(state.units1,conj,'p')
state.era1 ,conj = checkAliases(state.era1 ,conj,'e')
state.special,conj = checkAliases('',conj,'c')
state.adj2 = checkAliases(state.adj2 ,'','a')
state.units2 = checkAliases(state.units2,'','p')
state.era2 = checkAliases(state.era2 ,'','e')
state.conj = conj
state.lang = lang
if p.Error~=nil then
return nil
end
-- calculate date precision value
date1, state.units1, state.precision1 = datePrecision(date1, state.units1)
date2, state.units2, state.precision2 = datePrecision(date2, state.units2)
-- Handle special cases
-- Some complex phrases can be created out of simpler ones. Therefore on pass # 1 we try to create
-- the phrase using complex phrase and if that is not found than on the second pass we try to build
-- the phrase out of the simpler ones
if passNr==1 then
if state.adj1=='circa' and state.nDates == 2 then
state.conj = 'circa2'
state.adj1 = ''
state.adj2 = ''
end
if state.nDates == 2 and state.adj1=='late' and state.adj2=='early' and state.conj=='and'
and state.units1==state.units2 and state.era1==state.era2 then
if state.units1=='century' then
state.conj='turn of the century'
elseif state.units1=='decade' then
state.conj='turn of the decade'
elseif state.units1=='' then
state.conj='turn of the year'
end
state.adj1 = ''
state.adj2 = ''
state.units1 = ''
state.units2 = ''
end
end
state.adj, state.era, state.units, state.precision = state.adj1, state.era1, state.units1, state.precision1
return date1, date2, state
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
function p.Era(frame)
-- process inputs
local dateStr
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local lang = args['lang']
local dateStr = args['date'] or ''
local eraType = string.lower(args['era'] or '')
dateStr = ISOdate(dateStr, lang, '', '', 1)
if eraType then
eraType = checkAliases(eraType ,'','e')
dateStr = translatePhrase(dateStr, '', eraType, lang, {})
end
return dateStr
end
-- =======================================================================
function p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr)
local Output=''
local state
-- process inputs and save date in state array
date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr)
if p.Error~=nil then
return nil
end
local errorStr = string.format(
'\n*conj=%s, adj1=%s, era1=%s, unit1=%s, prec1=%i, adj2=%s, era2=%s, unit2=%s, prec2=%i, special=%s',
state.conj, state.adj1, state.era1, state.units1, state.precision1,
state.adj2, state.era2, state.units2, state.precision2, state.special)
-- call specialized functions
local QScode = ''
if state.special~='' then
Output = otherPhrases(date1, date2, state.special, state.era1, lang, state)
elseif state.conj~='' then
QScode = twoDateQScode(date1, date2, state)
Output = twoDatePhrase(date1, date2, state, lang)
elseif state.adj1~='' or state.era1~='' or state.units1~='' then
Output = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, nil, state)
QScode = oneDateQScode(date1, state.adj1, state.era1, state.precision1)
elseif date1~='' then
Output = ISOdate(date1, lang, '', 'dtstart', '100-999')
end
if p.Error~=nil then
return errorStr
end
-- if there is any wikicode in the string than execute it
if mw.ustring.find(Output, '{') then
Output = mw.getCurrentFrame():preprocess(Output)
end
if QScode and #QScode>0 then
QScode = TagQS.createTag('date', 'P', QScode)
end
return Output .. QScode
end
-- =======================================================================
function p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang)
-- same as p._complex_date but with extra parameter for certainty: probably, possibly, presumably, etc.
local dateStr = p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1)
--certainty = checkAliases(certainty, conj, 'r')
local LUT = {probably='Q56644435', presumably='Q18122778', possibly='Q30230067', circa='Q5727902' }
if certainty and LUT[certainty] then
local state = {}
date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1)
dateStr = translatePhrase(dateStr, '', certainty, lang, state)
dateStr = TagQS.append2value(dateStr, 'date', 'P1480,' .. LUT[certainty])
end
return dateStr
end
-- =======================================================================
function p.complex_date(frame)
-- process inputs
local dateStr
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local date1 = args['date1'] or args['2'] or args['date'] or ''
local date2 = args['date2'] or args['3'] or ''
local conj = args['conj'] or args['1'] or ''
local adj1 = args['adj1'] or args['adj'] or ''
local adj2 = args['adj2'] or ''
local units1 = args['precision1'] or args['precision'] or ''
local units2 = args['precision2'] or args['precision'] or ''
local era1 = args['era1'] or args['era'] or ''
local era2 = args['era2'] or args['era'] or ''
local certainty = args['certainty']
local lang = args['lang']
dateStr = p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang)
if p.Error~=nil then
dateStr = p.Error .. '[[Category:Pages using Complex date template with incorrect parameter]]'
end
return dateStr
end
return p
tf0nv3i4i1tobqdj0fvzcimmm4xlxe7
10652
10651
2026-08-25T23:38:26Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Complex_date]]
10651
Scribunto
text/plain
--[[
__ __ _ _ ____ _ _
| \/ | ___ __| |_ _| | ___ _ / ___|___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_| |__| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)\____\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___|
|_|
This module is intended for creation of complex date phrases in variety of languages.
Once deployed, please do not modify this code without applying the changes first at Module:Complex date/sandbox and testing
at Module:Complex date/sandbox/testcases.
Authors and maintainers:
* User:Sn1per - first draft of the original version
* User:Jarekt - corrections and expansion of the original version
]]
-- List of external modules and functions
local p = {Error = nil}
local i18n = require('Module:i18n/complex date') -- used for translations of date related phrases
local ISOdate = require('Module:ISOdate')._ISOdate -- used for parsing dates in YYYY-MM-DD and related formats
local TagQS = require('Module:TagQS')
local Calendar -- loaded lazily
-- ==================================================
-- === Internal functions ===========================
-- ==================================================
local function langSwitch(list,lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
table.insert(langList,math.max(#langList,2),'default')
for i,language in ipairs(langList) do
if list[language] then
return list[language]
end
end
end
-- ==================================================
local function formatnum1(numStr, lang)
-- mostly require('Module:Formatnum').formatNum function used to translate a number to use different numeral characters,
-- except that it it does not call that function unless the language is on the list "LList"
local LList = {bn=1,bpy=1,kn=1,hi=1,mr=1,new=1,pa=1,gu=1,fa=1,glk=1,mzn=1,ur=1,ar=1,ckb=1,ks=1,lo=1,['or']=1,bo=1,['ml-old']=1,mn=1,te=1,th=1}
if LList[lang] then -- call only when the language is on the list
numStr = require('Module:Formatnum').formatNum(numStr, lang, 1)
end
return numStr
end
-- ==================================================
local function getISODate(datestr, datetype, lang, num, case)
-- translate dates in the format YYYY, YYYY-MM, and YYYY-MM-DD
if not case and i18n.Translations[datetype] then
-- look up the grammatical case needed and call ISOdate module
local rec = langSwitch(i18n.Translations[datetype], lang)
if type(rec)=='table' then
case = rec.case[num]
end
end
return ISOdate(datestr, lang, case, '', 1)
end
-- =======================================================================
local function translatePhrase(date1, date2, operation, lang, state)
-- use tables in Module:i18n/complex date to translate a phrase
if not i18n.Translations[operation] then
p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: input parameter "%s" is not recognized.</span>', operation or 'nil')
return ''
end
local dateStr = langSwitch(i18n.Translations[operation], lang)
if type(dateStr)=='table' then
dateStr = dateStr[1]
end
if type(dateStr)=='function' then
local dateFunc = dateStr
local nDates = i18n.Translations[operation]['nDates']
if nDates==2 then -- 2 date phrase
dateStr = dateFunc(date1, date2, state)
else -- 1 date phrase
dateStr = dateFunc(date1, state)
end
end
if type(dateStr)=='string' then
-- replace parts of the string '$date1' and '$date2' with date1 and date2 strings
dateStr = mw.ustring.gsub(dateStr, '$date1', date1)
dateStr = mw.ustring.gsub(dateStr, '$date2', date2)
else
-- Special case of more complex phrases that can be build out of simple phrases
-- If complex case is not translated to "lang" than build it out of simpler ones
local x = dateStr
dateStr = p._complex_date(x.conj, x.adj1, date1, x.units1, x.era1, x.adj2, date2, x.units2, x.era2, lang, 2)
end
return dateStr
end
-- =======================================================================
local function oneDatePhrase(dateStr, adj, era, units, lang, num, case, state)
-- translate a single date phrase
if num==2 then
state.adj, state.era, state.units, state.precision = state.adj2, state.era2, state.units2, state.precision2
end
-- dateStr can have many forms: ISO date, year or a number for
-- decade, century or millennium
if units == '' then -- unit is "year", "month", "day"
dateStr = getISODate(dateStr, adj, lang, num, case)
else -- units is "decade", "century", "millennium''
dateStr = translatePhrase(dateStr, '', units, lang, state)
end
-- add adjective ("early", "mid", etc.) or preposition ("before", "after",
-- "circa", etc.) to the date
if adj ~= '' then
dateStr = translatePhrase(dateStr, '', adj, lang, state)
else -- only era?
dateStr = formatnum1(dateStr, lang)
end
-- add era
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
-- =======================================================================
local function twoDatePhrase(date1, date2, state, lang)
-- translate a double date phrase
local dateStr, case
local era=''
if state.era1 == state.era2 then
-- if both eras are the same than add it only once
era = state.era1
state.era1 = ''
state.era2 = ''
end
case = {nil, nil}
if i18n.Translations[state.conj] then
local rec = langSwitch(i18n.Translations[state.conj], lang)
if type(rec)=='table' then
case = rec.case
end
end
date1 = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, case[1], state)
date2 = oneDatePhrase(date2, state.adj2, state.era2, state.units2, lang, 2, case[2], state)
dateStr = translatePhrase(date1, date2, state.conj, lang, state)
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
-- =======================================================================
local function otherPhrases(date1, date2, operation, era, lang, state)
-- translate specialized phrases
local dateStr = ''
if operation == 'islamic' then
if date2=='' then date2 = mw.getCurrentFrame():callParserFunction('#time', 'xmY', date1) end
date1 = getISODate(date1, operation, lang, 1, nil)
date2 = getISODate(date2, operation, lang, 2, nil)
if era == '' then era = 'ad' end
dateStr = translatePhrase(date1, '', era, lang, state) .. ' (' .. translatePhrase(date2, '', 'ah', lang, state) .. ')'
era = ''
elseif operation == 'julian' then
if not date2 and date1 then -- Convert from Julian to Gregorian calendar date
if Calendar == nil then
Calendar = require("Module:Calendar") -- lazy loding (only if needed)
end
local JDN = Calendar._date2jdn(date1, 0)
if JDN then
date2 = date1 -- first date is assumed to be Julian
date1 = Calendar._jdn2date(JDN, 1)
end
end
date1 = getISODate(date1, operation, lang, 1, nil)
date2 = getISODate(date2, operation, lang, 2, nil)
dateStr = translatePhrase(date1, date2, operation, lang, state)
dateStr = mw.ustring.gsub(mw.ustring.gsub(dateStr, '%( ', '('), ' %)', ')') -- in case date2 is empty
elseif operation == 'turn of the year' or operation == 'turn of the decade' or operation == 'turn of the century' then
local dt = 1
if operation == 'turn of the decade' then dt=10 end
if not date2 or date2=='' then date2=tostring(tonumber(date1)-dt) end
if era~='bp' and era~='bc' then date1, date2 = date2, date1 end
if operation == 'turn of the year' then
date1 = ISOdate(date1, lang, '', '', 1)
date2 = ISOdate(date2, lang, '', '', 1)
else
date1 = formatnum1(date1, lang)
date2 = formatnum1(date2, lang)
end
dateStr = translatePhrase(date1, date2, operation, lang, state)
elseif operation == 'year unknown' then
dateStr = translatePhrase('', '', operation, lang, state)
elseif operation == 'unknown' then
dateStr = tostring(mw.message.new( "exif-unknowndate" ):inLanguage( lang ))
end
-- add era
if era ~= '' then
dateStr = translatePhrase(dateStr, '', era, lang, state)
end
return dateStr
end
-- =======================================================================
local function checkAliases(str1, str2, sType)
-- some inputs have many aliases - reconcile them and ensure string is playing a proper role
local out = ''
if str1 and str1~='' then
local a = i18n.Synonyms[str1] -- look up synonyms of "str1"
if a then
out = a[1]
else
p.Error = string.format('<span style="background-color:red;">Error in [[Module:Complex date]]: %s is not recognized.</span>', str1)
end
elseif str2 and str2~='' then -- if "str1" of type "sType" is empty than maybe ...
local a = i18n.Synonyms[str2] -- ..."str2" is of the same type and is not empty
if a and a[2]==sType then
out = a[1]
str2 = ''
end
end
return out, str2
end
-- =======================================================================
local function datePrecision(dateStr, units)
-- "in this module "Units" is a string like millennium, century, or decade
-- "precision" is wikibase compatible date precision number: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
-- based on string or numeric input calculate "Units" and "precision"
local precision
if type(units)=='number' then
precision = units
if precision>11 then precision=11 end -- clip the range of precision values
if precision==6 then units='millennium'
elseif precision==7 then units='century'
elseif precision==8 then units='decade'
else units = ''
end
elseif type(units)=='string' then
units = string.lower(units)
if units=='millennium' then precision=6
elseif units=='century' then precision=7
elseif units=='decade' then precision=8
else precision=9
end
end
if units=='' or precision==9 then
local sLen = mw.ustring.len(dateStr)
if sLen<= 4 then precision=9
elseif sLen== 7 then precision=10
elseif sLen>=10 then precision=11
end
units=''
end
if precision==6 and dateStr.match( dateStr, '%d000' )~=nil then
dateStr = tostring(math.floor(tonumber(dateStr)/1000) +1)
elseif precision==7 and mw.ustring.match( dateStr, '%d%d00' )~=nil then
dateStr = tostring(math.floor(tonumber(dateStr)/100) +1)
end
return dateStr, units, precision
end
-- =======================================================================
local function isodate2timestamp(dateStr, precision, era)
-- convert date string to timestamps used by Quick Statements
local tStamp = nil
if era == 'ah' or precision<6 then
return nil
elseif era ~= '' then
local eraLUT = {ad='+', bc='-', bp='-' }
era = eraLUT[era]
else
era='+'
end
-- convert isodate to timestamp used by quick statements
if precision>=9 then
if string.match(dateStr,"^%d%d%d%d$") then -- if YYYY format
tStamp = era .. dateStr .. '-00-00T00:00:00Z/9'
elseif string.match(dateStr,"^%d%d%d%d%-%d%d$") then -- if YYYY-MM format
tStamp = era .. dateStr .. '-00T00:00:00Z/10'
elseif string.match(dateStr,"^%d%d%d%d%-%d%d%-%d%d$") then -- if YYYY-MM-DD format
tStamp = era .. dateStr .. 'T00:00:00Z/11'
end
elseif precision==8 then -- decade
tStamp = era .. dateStr .. '-00-00T00:00:00Z/8'
elseif precision==7 then -- century
local d = tostring(tonumber(dateStr)-1)
tStamp = era .. d .. '50-00-00T00:00:00Z/7'
elseif precision==6 then
local d = tostring(tonumber(dateStr)-1)
tStamp = era .. d .. '500-00-00T00:00:00Z/6'
end
return tStamp
end
-- =======================================================================
local function oneDateQScode(dateStr, adj, era, precision)
-- create QuickStatements string for "one date" dates
local outputStr = ''
local d = isodate2timestamp(dateStr, precision, era)
if not d then
return ''
end
local rLUT = { early='Q40719727' , mid='Q40719748', late='Q40719766',
['1quarter']='Q40690303' , ['2quarter']='Q40719649' , ['3quarter']='Q40719662', ['4quarter']='Q40719674',
spring='Q40720559' , summer='Q40720564' , autumn='Q40720568' , winter='Q40720553',
firsthalf='Q40719687', secondhalf='Q40719707' }
local qLUT = {['from']='P580', ['until']='P582', ['after']='P1319', ['before']='P1326', ['by']='P1326'}
local refine = rLUT[adj]
local qualitier = qLUT[adj]
if adj=='' then
outputStr = d
elseif adj=='circa' then
outputStr = d..",P1480,Q5727902"
elseif refine then
outputStr = d..",P4241,"..refine
elseif precision>7 and qualitier then
local century = string.gsub(d, 'Z%/%d+', 'Z/7')
outputStr = century ..",".. qualitier ..","..d
end
return outputStr
end
-- =======================================================================
local function twoDateQScode(date1, date2, state)
-- create QuickStatements string for "two date" dates
if state.adj1~='' or state.adj2~='' or state.era1~=state.era2 then
return '' -- QuickStatements string are not generated for two date phrases with adjectives
end
local outputStr = ''
local d1 = isodate2timestamp(date1, state.precision1, state.era1)
local d2 = isodate2timestamp(date2, state.precision2, state.era2)
if (not d1) or (not d2) then
return ''
end
-- find date with lower precision in common to both dates
local cd
local year1 = tonumber(string.sub(d1,2,5))
local year2 = tonumber(string.sub(d2,2,5))
local k = 0
for i = 1,10,1 do
if string.sub(d1,1,i)==string.sub(d2,1,i) then
k = i -- find last matching letter
end
end
if k>=9 then -- same month, since "+YYYY-MM-" is in common
cd = isodate2timestamp(string.sub(d1,2,8), 10, state.era1)
elseif k>=6 and k<9 then -- same year, since "+YYYY-" is in common
cd = isodate2timestamp(tostring(year1), 9, state.era1)
elseif k==4 then -- same decade(k=4, precision=8), since "+YYY" is in common
cd = isodate2timestamp(tostring(year1), 8, state.era1)
elseif k==3 then -- same century(k=3, precision=7) since "+YY" is in common
local d = tostring(math.floor(year1/100) +1) -- convert 1999 -> 20
cd = isodate2timestamp( d, 7, state.era1)
elseif k==2 then -- same millennium (k=2, precision=6), since "+Y" is in common
local d = tostring(math.floor(year1/1000) +1) -- convert 1999 -> 2
cd = isodate2timestamp( d, 6, state.era1)
end
if not cd then
return ''
end
--if not cd then
-- return ' <br/>error: ' .. d1.." / " .. d2.." / ".. (cd or '') .." / ".. string.sub(d1,2,5).." / " .. string.sub(d2,2,5).." / " .. tostring(k)
--end
--
if (state.conj=='from-until') or (state.conj=='and' and year1==year2-1) then
outputStr = cd ..",P580,".. d1 ..",P582,".. d2
elseif (state.conj=='between') or (state.conj=='or' and year1==year2-1) then
outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2
elseif state.conj=='circa2' then
outputStr = cd ..",P1319,".. d1 ..",P1326,".. d2 ..",P1480,Q5727902"
end
return outputStr
end
-- =======================================================================
local function processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr)
-- process inputs and save date in state array
local state = {}
state.conj = string.lower(conj or '')
state.adj1 = string.lower(adj1 or '')
state.adj2 = string.lower(adj2 or '')
state.era1 = string.lower(era1 or '')
state.era2 = string.lower(era2 or '')
state.units1 = string.lower(units1 or '')
state.units2 = string.lower(units2 or '')
-- if date 1 is missing but date 2 is provided than swap them
if date1 == '' and date2 ~= '' then
date1 = date2
date2 = ''
state = {adj1 = state.adj2, era1 = state.era2, units1 = state.units2,
adj2 = '', era2 = '', units2 = '', conj=state.conj, num=1}
end
if date2 ~= '' then state.nDates = 2
elseif date1 ~= '' then state.nDates = 1
else state.nDates = 0
end
-- reconcile alternative names for text inputs
local conj = checkAliases(state.conj ,'' ,'j')
state.adj1 ,conj = checkAliases(state.adj1 ,conj,'a')
state.units1,conj = checkAliases(state.units1,conj,'p')
state.era1 ,conj = checkAliases(state.era1 ,conj,'e')
state.special,conj = checkAliases('',conj,'c')
state.adj2 = checkAliases(state.adj2 ,'','a')
state.units2 = checkAliases(state.units2,'','p')
state.era2 = checkAliases(state.era2 ,'','e')
state.conj = conj
state.lang = lang
if p.Error~=nil then
return nil
end
-- calculate date precision value
date1, state.units1, state.precision1 = datePrecision(date1, state.units1)
date2, state.units2, state.precision2 = datePrecision(date2, state.units2)
-- Handle special cases
-- Some complex phrases can be created out of simpler ones. Therefore on pass # 1 we try to create
-- the phrase using complex phrase and if that is not found than on the second pass we try to build
-- the phrase out of the simpler ones
if passNr==1 then
if state.adj1=='circa' and state.nDates == 2 then
state.conj = 'circa2'
state.adj1 = ''
state.adj2 = ''
end
if state.nDates == 2 and state.adj1=='late' and state.adj2=='early' and state.conj=='and'
and state.units1==state.units2 and state.era1==state.era2 then
if state.units1=='century' then
state.conj='turn of the century'
elseif state.units1=='decade' then
state.conj='turn of the decade'
elseif state.units1=='' then
state.conj='turn of the year'
end
state.adj1 = ''
state.adj2 = ''
state.units1 = ''
state.units2 = ''
end
end
state.adj, state.era, state.units, state.precision = state.adj1, state.era1, state.units1, state.precision1
return date1, date2, state
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
function p.Era(frame)
-- process inputs
local dateStr
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local lang = args['lang']
local dateStr = args['date'] or ''
local eraType = string.lower(args['era'] or '')
dateStr = ISOdate(dateStr, lang, '', '', 1)
if eraType then
eraType = checkAliases(eraType ,'','e')
dateStr = translatePhrase(dateStr, '', eraType, lang, {})
end
return dateStr
end
-- =======================================================================
function p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr)
local Output=''
local state
-- process inputs and save date in state array
date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, passNr)
if p.Error~=nil then
return nil
end
local errorStr = string.format(
'\n*conj=%s, adj1=%s, era1=%s, unit1=%s, prec1=%i, adj2=%s, era2=%s, unit2=%s, prec2=%i, special=%s',
state.conj, state.adj1, state.era1, state.units1, state.precision1,
state.adj2, state.era2, state.units2, state.precision2, state.special)
-- call specialized functions
local QScode = ''
if state.special~='' then
Output = otherPhrases(date1, date2, state.special, state.era1, lang, state)
elseif state.conj~='' then
QScode = twoDateQScode(date1, date2, state)
Output = twoDatePhrase(date1, date2, state, lang)
elseif state.adj1~='' or state.era1~='' or state.units1~='' then
Output = oneDatePhrase(date1, state.adj1, state.era1, state.units1, lang, 1, nil, state)
QScode = oneDateQScode(date1, state.adj1, state.era1, state.precision1)
elseif date1~='' then
Output = ISOdate(date1, lang, '', 'dtstart', '100-999')
end
if p.Error~=nil then
return errorStr
end
-- if there is any wikicode in the string than execute it
if mw.ustring.find(Output, '{') then
Output = mw.getCurrentFrame():preprocess(Output)
end
if QScode and #QScode>0 then
QScode = TagQS.createTag('date', 'P', QScode)
end
return Output .. QScode
end
-- =======================================================================
function p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang)
-- same as p._complex_date but with extra parameter for certainty: probably, possibly, presumably, etc.
local dateStr = p._complex_date(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1)
--certainty = checkAliases(certainty, conj, 'r')
local LUT = {probably='Q56644435', presumably='Q18122778', possibly='Q30230067', circa='Q5727902' }
if certainty and LUT[certainty] then
local state = {}
date1, date2, state = processInputParams(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, lang, 1)
dateStr = translatePhrase(dateStr, '', certainty, lang, state)
dateStr = TagQS.append2value(dateStr, 'date', 'P1480,' .. LUT[certainty])
end
return dateStr
end
-- =======================================================================
function p.complex_date(frame)
-- process inputs
local dateStr
local args = frame.args
if not (args.lang and mw.language.isSupportedLanguage(args.lang)) then
args.lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
local date1 = args['date1'] or args['2'] or args['date'] or ''
local date2 = args['date2'] or args['3'] or ''
local conj = args['conj'] or args['1'] or ''
local adj1 = args['adj1'] or args['adj'] or ''
local adj2 = args['adj2'] or ''
local units1 = args['precision1'] or args['precision'] or ''
local units2 = args['precision2'] or args['precision'] or ''
local era1 = args['era1'] or args['era'] or ''
local era2 = args['era2'] or args['era'] or ''
local certainty = args['certainty']
local lang = args['lang']
dateStr = p._complex_date_cer(conj, adj1, date1, units1, era1, adj2, date2, units2, era2, certainty, lang)
if p.Error~=nil then
dateStr = p.Error .. '[[Category:Pages using Complex date template with incorrect parameter]]'
end
return dateStr
end
return p
tf0nv3i4i1tobqdj0fvzcimmm4xlxe7
Module:I18n/complex date
828
1319
10653
2026-05-12T18:22:08Z
commons>Lucas Werkmeister
0
fulfilling edit request by [[User:Namoroka]] – add and update Korean (ko) translations (sync from [[Special:Permalink/1208183742]])
10653
Scribunto
text/plain
--[[
__ __ _ _ ___ _ ___ __ _ _ _
| \/ | ___ __| |_ _| | ___ _|_ _/ |( _ ) _ __ / /__ ___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_)| || |/ _ \| '_ \ / / __/ _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ | || | (_) | | | |/ / (_| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)___|_|\___/|_| |_/_/ \___\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___|
|_|
This code was copied from Commons please request changes there.
Maintainers:
*Jarekt
]]
-- ==========================================================================
-- === External modules and functions (use Lazy loading) ===================
-- ==========================================================================
local function Ordinal(...)
-- Name of the Module:
-- * Module:Ordinal - on Commons and Wikidata
-- * Module:Ordinal-cd - on English Wikipedia
return require('Module:Ordinal')._Ordinal(...)
end
local function Roman(...)
-- Name of the Module:
-- * Module:Roman - on Commons and Wikidata
-- * Module:Roman-cd - on English Wikipedia
return require('Module:Roman')._Numeral(...)
end
local function linguistic_of(...)
return require('Module:Linguistic').of(...)
end
local function linguistic_conj(...)
return require('Module:Linguistic').conj(...)
end
-- ==========================================================================
-- === Local Helper functions ==============================================
-- ==========================================================================
-- form of French "of" based on "precision", which is wikibase compatible date precision format:
-- 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
-- 1 2 3 4 5 mill cent deca year month day
local frOf = {'du','du','du','du','du', 'du', 'du', 'de', 'de', 'de', 'du'}
local function decYear(state,lang,case)
--Declension of word "year" in several languages
if state.precision == 9 then
local yearCase = {
fi={xxx='vuosien', gen='vuoden', ill='vuoteen', ptv='vuotta', ela='vuodesta', ine='vuonna'},
sl={insD='letoma', insP='leti', ins='letom', gen='leta', loc='letu'},
hsb={insP='lětami', ins='lětom', gen='lěta', loc='lěće'}
}
return yearCase[lang][case] .. ' '
else
return ''
end
end
local function decCentury(lang,case)
--Declension of word "century" in several languages
local centuryCase = {
pl={nom='wiek', gen='wieku', ins='wiekiem', loc='wieku', default = 'wiek'},
hsb={nom='lětstotk', gen='lětstotka', ins='lětstotkom', loc='lětstotku', default = 'lětstotk'},
sl={nom='stoletje', gen='stoletja', dat='stoletju', acc='stoletje', ins='stoletju', loc='stoletju', default = 'stoletje'}
}
return centuryCase[lang][case] or centuryCase[lang]['default']
end
local function decMillennium(lang,case)
--Declension of word "century" in several languages
local millenniumCase = {
pl={nom='tysiąclecie', gen='tysiąclecia', ins='tysiącleciem', loc='tysiącleciu', default = 'tysiąclecie'},
hsb={nom='lěttysac', gen='lěttysaca', ins='lěttysacom', loc='lěttysacu', default = 'lěttysac'},
sl={nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletju', loc='tisočletjem', default = 'tisočletje'}
}
return millenniumCase[lang][case] or millenniumCase[lang]['default']
end
local plDeclension = { -- Polish Declensions of some terms
-- kto? co? (jest) kogo? czego?(brak) komu? czemu? kogo? co? (widzę) kim? czym? o kim? o czym? (mówię)
century = {nom='wiek', gen='wieku', dat='wiekowi', acc='wiek', ins='wiekiem', loc='wieku'},
millenium = {nom='tysiąclecie', gen='tysiąclecia', dat='tysiącleciu', acc='tysiąclecie', ins='tysiącleciem', loc='tysiącleciu'},
winter = {nom='zima', gen='zimy', dat='zimie', acc='zimę', ins='zimą', loc='zimie'},
spring = {nom='wiosna', gen='wiosny', dat='wiośnie', acc='wiosnę', ins='wiosną', loc='wiośnie'},
summer = {nom='lato', gen='lata', dat='latu', acc='lato', ins='latem', loc='lecie'},
autumn = {nom='jesień', gen='jesieni', dat='jesieni', acc='jesień', ins='jesienią', loc='jesieni'},
years = {nom='lata', gen='lat', dat='latom', acc='lata', ins='latami', loc='latach'}
}
local slDeclension = { -- Slovene declensions of some terms
-- kdo ali kaj? koga ali česa? komu ali čemu? koga ali kaj? (s) kom ali čim? (o) kom ali čem?
century = {nom='stoletje', gen='stoletja', dat='stoletjem', acc='stoletje', ins='stoletjem', loc='stoletju'},
millenium = {nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletjem', loc='tisčletju'},
winter = {nom='zima', gen='zime', dat='zimi', acc='zimi', ins='zimo', loc='zimi'},
spring = {nom='pomlad', gen='pomladi', dat='pomladi', acc='pomlad', ins='pomladjo', loc='pomladi'},
summer = {nom='leto', gen='poletja', dat='poletju', acc='poletje', ins='poletjem', loc='poletju'},
autumn = {nom='jesen', gen='jeseni', dat='jeseni', acc='jesen', ins='jesenjo', loc='jeseni'},
years = {nom='leta', gen='let', dat='letom', acc='leta', ins='leti', loc='letih'}
}
-- ==========================================================================
-- === Output data structure ===============================================
-- ==========================================================================
local p = {}
--[[
Multiple formats are possible:
1) string with key words "$date1" and "$date2" which will be replaced later by the date strings
2) function which can be used to create output string
* Function INPUTS:
- date1 and date2 string with date strings. "$date1" and "$date2" can also be used which will be replaced latter
- state is a table with full description of the phrase we are trying to construct. It includes state.precision1 (and 2)
which is wikibase compatible date precision format: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
3) table with following fields:
* table[1] is either string or a function
* table.case is a 2 element table with Grammatical cases used by given language to alter
month name or other adjective related to date # 1 and 2
]]
p.Translations = {
-- ==========================================
-- === Two date phrases =====================
-- ==========================================
['from-until'] = {
nDates = 2,
ar='من $date1 إلى $date2',
['be-tarask']={'з $date1 да $date2', case={'gen','gen'}},
bn='$date1 থেকে $date2 পর্যন্ত',
ca='$date1 fins $date2',
ckb='لە $date1 تاوەکوو $date2',
cs='$date1 až $date2',
da='fra $date1 til $date2',
de='$date1 bis $date2',
el='από $date1 έως $date2',
en='from $date1 until $date2',
['en-gb']='from $date1 until $date2',
['en-ca']='from $date1 until $date2',
eo='de $date1 al $date2',
es='de $date1 a $date2',
et='$date1 kuni $date2',
fa='از $date1 تا $date2',
fi='$date1–$date2', -- välisenä aikana
fr=function(date1, date2, state) -- could actually be better should be "d'octobre à mars 2013' not "de octore 2013 à mars 2013"
if state.precision > 10 then -- precision > month
return 'du $date1 au $date2'
else -- "DE septebmbre" / "D'octobre"
return linguistic_of(date1, 'fr') .. " à $date2"
end
end,
ga='ó $date1 go $date2',
gl='de $date1 a $date2', --Template:From until used 'desde $date1 ata $date2'
he='מ- $date1 עד $date2',
hr={'od $date1 do $date2', case={'gen','gen'}},
hsb={'wot $date1 do $date2', case={'gen','gen'}},
hu='$date1 – $date2',
it='dal $date1 al $date2',
ja='$date1から$date2まで',
ko='$date1부터 $date2까지',
mk='од $date1 до $date2',
ml='$date1 മുതൽ $date2 വരെ',
nb='fra $date1 til $date2',
nds='$date1 bet $date2',
nn='frå $date1 til $date2',
nl='$date1 tot $date2',
no='fra $date1 til $date2',
pl={'od $date1 do $date2', case={'gen','gen'}},
ro='din $date1 până în $date2',
pt='de $date1 a $date2',
qu="$date1 p'unchawmanta $date2 p\'unchawkama",
ru={'с $date1 по $date2', case={'gen','gen'}},
sk={'od $date1 do $date2', case={'gen','gen'}},
sl={'od $date1 do $date2', case={'gen','gen'}},
sr='од $date1 до $date2',
sv='från $date1 till $date2',
uk={'з $date1 до $date2', case={'gen','gen'}},
ur='از $date1 تا $date2',
vi='từ $date1 đến $date2',
['zh-hans']='从$date1到$date2',
['zh-hant']='從$date1到$date2',
default='<span style="color:red">$date1 - $date2</span>',
},
['between']={
nDates = 2,
ar='بين $date1 و $date2',
['be-tarask']={'між $date1 і $date2', case={'ins','ins'}},
bn='$date1 এবং $date2-এর মাঝামাঝি',
ca='entre $date1 i $date2',
ckb='لەنێوان $date1 و $date2',
cs={'mezi $date1 a $date2', case={'ins','ins'}},
da='mellem $date1 og $date2',
de='zwischen $date1 und $date2',
el='μεταξύ $date1 και $date2',
en='between $date1 and $date2',
['en-gb']='between $date1 and $date2',
['en-ca']='between $date1 and $date2',
eo='inter $date1 kaj $date2',
es='entre $date1 y $date2',
et='$date1 ja $date2 vahel',
fa='بین $date1 و $date2',
fi={function(date1, date2, state) return decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}},
fr = function(date1, date2, state)
-- prepend ‘le’ if precision > month
local prep1 = state.precision1 > 10 and 'le ' or ''
local prep2 = state.precision2 > 10 and 'le ' or ''
return 'entre ' .. prep1 .. '$date1 et ' .. prep2 .. '$date2'
end,
ga='idir $date1 agus $date2',
gl='entre $date1 e $date2',
he='בין $date1 ו- $date2',
hr={'između $date1 i $date2', case={'gen','gen'}},
hsb={'mjez $date1 a $date2', case={'ins','ins'}},
hu='$date1 és $date2 között',
hi='$date1 और $date2 के बीच',
it='tra il $date1 e il $date2',
ja='$date1と$date2の間',
ko='$date1에서 $date2 사이',
mk='помеѓу $date1 и $date2',
ml='$date1, $date2 എന്നിവയ്ക്കിടയ്ക്ക്',
nb='mellom $date1 og $date2',
nds='twischen $date1 un $date2',
nn='mellom $date1 og $date2',
nl='tussen $date1 en $date2',
no='mellom $date1 og $date2',
pl={'między $date1 a $date2', case={'ins','ins'}},
ro='între $date1 și $date2',
pt='entre $date1 e $date2',
qu="$date1 p'unchawpa $date2 p'unchawpapas chawpin",
ru={'между $date1 и $date2', case={'ins','ins'}},
sk={'medzi $date1 a $date2', case={'ins','ins'}},
sl={function(date1, date2, state) return 'med ' .. decYear(state,'sl','insP') .. '$date1 in $date2' end, case={'ins','ins'}},
sr='између $date1 и $date2',
sv='mellan $date1 och $date2',
uk={'між $date1 та $date2', case={'ins','ins'}},
ur='بین $date1 و $date2',
vec='tra el $date1 e el $date2',
vi='giữa $date1 và $date2',
['zh-hans']='在$date1到$date2之间',
['zh-hant']='在$date1到$date2之間',
default='<span style="color:red">$date1 - $date2</span>',
},
['or'] = {
nDates = 2,
ar='$date1 أو $date2',
['be-tarask']='$date1 ці $date2',
bn='$date1 অথবা $date2',
ca='$date1 o $date2',
ckb='$date1 یان $date2',
cs='$date1 nebo $date2',
da='$date1 eller $date2',
de='$date1 oder $date2',
el='$date1 ή $date2',
en='$date1 or $date2',
['en-gb']='$date1 or $date2',
['en-ca']='$date1 or $date2',
eo='$date1 aŭ $date2',
es='$date1 o $date2',
et='$date1 või $date2',
fa='$date1 یا $date2',
fi='$date1 tai $date2',
fr='$date1 ou $date2',
ga='$date1 nó $date2',
gl='$date1 ou $date2',
he='$date1 או $date2',
hr='$date1 ili $date2',
hsb='$date1 abo $date2',
hu='$date1 vagy $date2',
it='$date1 o $date2',
ja='$date1または$date2',
ko='$date1 또는 $date2까지',
mk='$date1 или $date2',
ml='$date1 അഥവാ $date2',
nb='$date1 eller $date2',
nn='$date1 eller $date2',
nds='$date1 oder $date2',
nl='$date1 of $date2',
no='$date1 eller $date2',
pl='$date1 lub $date2',
pt='$date1 ou $date2',
qu='$date1 icha $date2',
ro='$date1 sau $date2',
ru='$date1 или $date2',
sk='$date1 alebo $date2',
sl='$date1 ali $date2',
sr='$date1 или $date2',
sv='$date1 eller $date2',
uk='$date1 або $date2',
ur='$date1 یا $date2',
th='$date1 หรือ $date2',
vi='$date1 hoặc $date2',
['zh-hans']='$date1或$date2',
['zh-hant']='$date1或$date2',
default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'or') end,
},
['and'] = {
nDates = 2,
ar='$date1 و $date2',
['be-tarask']='$date1 і $date2',
bn='$date1 এবং $date2',
ca='$date1 i $date2',
ckb='$date1 و $date2',
cs='$date1 a $date2',
da='$date1 og $date2',
de='$date1 und $date2',
el='$date1 και $date2',
en='$date1 and $date2',
['en-gb']='$date1 and $date2',
['en-ca']='$date1 and $date2',
eo='$date1 kaj $date2',
es='$date1 y $date2',
et='$date1 ja $date2',
fa='$date1 و $date2',
fi='$date1 ja $date2',
fr='$date1 et $date2',
ga='$date1 agus $date2',
gl='$date1 e $date2',
he='$date1 ו- $date2',
hu='$date1 és $date2',
hsb='$date1 a $date2',
it='$date1 e $date2',
ja='$date1および$date2',
ko='$date1 및 $date2',
mk='$date1 и $date2',
ml='$date1 ഒപ്പം $date2',
nb='$date1 og $date2',
nn='$date1 og $date2',
nds='$date1 un $date2',
nl='$date1 en $date2',
no='$date1 og $date2',
pl='$date1 i $date2',
pt='$date1 e $date2',
qu='$date1wan $date2pas',
ro='$date1 și $date2',
ru='$date1 и $date2',
sk='$date1 a $date2',
sl='$date1 in $date2',
sr='$date1 и $date2',
sv='$date1 och $date2',
uk='$date1 та $date2',
ur='$date1 و $date2',
vi='$date1 và $date2',
['zh-hans']='$date1和$date2',
['zh-hant']='$date1和$date2',
default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'and') end,
},
-- ==========================================
-- === Prepositions =========================
-- ==========================================
['by'] = {
nDates = 1,
ar='بحلول $date1',
['be-tarask']={'да $date1', case={'gen',''}},
bn='$date1 কর্তৃক',
ca='vers $date1',
ckb='نزیکی $date1',
cs={'kolem $date1', case={'gen',''}},
da='mod $date1',
de='spätestens $date1',
el='έως $date1',
en='by $date1',
['en-gb']='by $date1',
['en-ca']='by $date1',
eo='ne post $date1',
es='para $date1',
et='hiljemalt $date1',
fa='توسط $date1',
fi={function(date1, state) return decYear(state,'fi','ill') .. '$date1 mennessä' end, case={'ill',''}},
fr='$date1 (au plus tard)',
ga='faoi $date1',
gl='cara a $date1',
he='עד $date1',
hr={'do $date1', case={'gen',''}},
hsb={'do $date1', case={'gen',''}},
it='entro il $date1',
ja='$date1まで',
ko='$date1까지',
mk='кон $date1',
ml='$date1-ൽ',
nb='innen $date1',
nn='innan $date1',
nds='$date1 oder vördem al',
nl='tegen $date1',
no='innen $date1',
pl={'przed $date1', case={'ins',''}},
pt='por $date1',
qu="$date1 p'unchawkama",
ro='de $date1',
ru={'к $date1', case={'dat',''}},
sk={'okolo $date1', case={'gen',''}},
sl={function(date1, state) return 'najpozneje ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='до $date1',
sv='senast $date1',
uk={'до $date1', case={'dat',''}},
ur='توسط $date1',
vi='vào $date1', -- need to insert "đã" somewhere later in the sentence -->
['zh-hans']='$date1前后',
['zh-hant']='$date1前後',
default='<span style="color:red">by $date1</span>',
},
['before'] = {
nDates = 1,
ar='قبل $date1',
['be-tarask']={'перад $date1', case={'ins',''}},
bn='$date1-এর আগে',
bg='Преди $date1',
ca='abans $date1',
ckb='پێش $date1',
cs={'před $date1', case={'ins',''}},
da='før $date1',
de='vor $date1',
el='πριν από $date1',
en='before $date1',
['en-gb']='before $date1',
['en-ca']='before $date1',
eo='antaŭ $date1',
es='antes de $date1',
et='enne $date1',
fa='پیش از $date1',
fi={function(date1, state) return 'ennen ' .. decYear(state,'fi','ptv') .. '$date1' end, case={'ptv',''}},
fr='avant $date1',
ga='roimh $date1',
gl='antes do $date1',
he='לפני $date1',
hr={'prije $date1', case={'gen',''}},
hsb={'do $date1', case={'gen',''}},
hu='$date1 előtt',
it='prima del $date1',
ja='$date1より前',
ko='$date1 전',
mk='пред $date1',
ml='$date1-നു മുമ്പ്',
nb='før $date1',
nn='før $date1',
nds='vör $date1',
nl='voor $date1',
no='før $date1',
pl={'przed $date1', case={'ins',''}},
pt='antes de $date1',
qu="$date1 p'unchaw ñawpan",
ro='înainte de $date1',
ru={'ранее $date1', case={'gen',''}},
sk={'pred $date1', case={'ins',''}},
sl={function(date1, state) return 'pred ' .. decYear(state,'sl','ins') .. ' $date1' end, case={'ins',''}},
sr='пре $date1',
sv='före $date1',
uk={'до $date1', case={'gen',''}},
ur='قبل $date1',
vi='trước $date1',
['zh-hans']='在$date1之前',
['zh-hant']='在$date1之前',
default='<span style="color:red">before $date1</span>',
},
['from'] = {
nDates = 1,
ar='من $date1',
['be-tarask']={'з $date1', case={'gen',''}},
bn='$date1 থেকে',
ckb='لە $date1',
cs={'od $date1', case={'gen',''}},
de='seit $date1',
el='από $date1',
en='from $date1',
['en-gb']='from $date1',
['en-ca']='from $date1',
eo='ekde $date1',
es='desde $date1',
et='alates $date1',
fa='از $date1',
fi={function(date1, state) return decYear(state,'fi','ela') .. '$date1 alkaen' end, case={'ela',''}},
fr= function(date1, state) return 'à partir '.. frOf[state.precision] ..' $date1' end,
ga='as $date1',
gl='desde o $date1',
he='מ- $date1',
hr={'od $date1', case={'gen',''}},
hsb={'wot $date1', case={'gen',''}},
it='dal $date1',
ja='$date1から',
ko='$date1부터',
nds='vonaf $date1',
mk='од $date1',
nb='fra $date1',
nn='frå $date1',
ml='$date1 മുതൽ',
nl='vanaf $date1',
no='fra $date1',
pl={'od $date1', case={'gen',''}},
pt='desde $date1',
qu="$date1 p'unchawmanta",
ro='din $date1',
ru={'С $date1', case={'gen',''}},
sk={'od $date1', case={'gen',''}},
sl={function(date1, state) return 'od ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='од $date1',
sv='från $date1',
uk={'з $date1', case={'gen',''}},
ur='از $date1',
vi='từ $date1',
['zh-hans']='自$date1',
['zh-hant']='自$date1',
default='<span style="color:red">from $date1</span>',
},
['until'] = {
nDates = 1,
ar = 'حتى $date1',
['be-tarask']={'усутыч да $date1', case={'gen',''}},
bn='$date1 পর্যন্ত',
ckb='تاوەکوو $date1',
cs={'do $date1', case={'gen', ''}},
de='bis $date1',
en='until $date1',
['en-gb']='until $date1',
['en-ca']='until $date1',
eo='ĝis $date1',
es='hasta $date1',
fr=function(date1, state)
if state.precision > 10 then -- precision > month
return "jusqu'au $date1"
else
return "jusqu'à $date1"
end
end,
ga='go dtí $date1',
hr={'do $date1', case={'gen',''}},
hsb={'do $date1', case={'gen',''}},
it='al $date1',
ko='$date1까지',
nb='til $date1',
nl='tot $date1',
nn='til $date1',
ml='$date1 വരെ',
pl={'do $date1', case={'gen',''}},
pt='até $date1',
ru={'не позже $date1', case={'gen',''}},
sk={'do $date1', case={'gen', ''}},
sl={'do $date1', case={'gen', ''}},
sr='до $date1',
uk={'аж до $date1', case={'gen',''}},
ur='تک $date1',
['zh-hans']='直到$date1',
['zh-hant']='直到$date1',
default='<span style="color:red">until $date1</span>',
},
['after'] = {
nDates = 1,
ar='بعد $date1',
['be-tarask']={'пасьля $date1', case={'gen',''}},
bn='$date1-এর পরে',
ca='després de $date1',
ckb='دوای $date1',
cs={'po $date1', case={'loc',''}},
de='nach $date1',
da='efter $date1',
el='μετά από $date1',
en='after $date1',
['en-gb']='after $date1',
['en-ca']='after $date1',
eo='post $date1',
es='después de $date1',
et='pärast $date1',
fa='پس از $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 jälkeen' end, case={'gen',''}},
fr='après $date1',
ga='tar éis $date1',
gl='despois do $date1',
he='לאחר $date1',
hr={'nakon $date1', case={'gen',''}},
hu='$date1 után',
hsb={'po $date1', case={'loc',''}},
it='dopo il $date1',
ja='$date1より後',
ko='$date1 후',
mk='по $date1',
ml='$date1-നു ശേഷം',
nb='etter $date1',
nn='etter $date1',
nds='na $date1',
nl='na $date1',
no='etter $date1',
pl={'po $date1', case={'loc',''}},
pt='após $date1',
qu="$date1 p'unchaw qhipan",
ro='după $date1',
ru={'после $date1', case={'gen',''}},
sk={'po $date1', case={'loc',''}},
sl={function(date1, state) return 'po ' .. decYear(state,'sl','loc') .. ' $date1' end, case={'loc',''}},
sr='после $date1',
sv='efter $date1',
uk={'після $date1', case={'gen',''}},
ur='بعد $date1',
vi='sau $date1',
['zh-hans']='在$date1之后',
['zh-hant']='在$date1之後',
default='<span style="color:red">after $date1</span>',
},
-- ==========================================
-- === Adjectives ===========================
-- ==========================================
['early'] = {
nDates = 1,
ar='بداية $date1',
['be-tarask']={'пачатак $date1', case={'gen',''}},
bn='$date1-এর শুরুতে',
ca='al principi de $date1',
ckb='سەرەتای $date1',
cs={'začátek $date1', case={'gen',''}},
da='tidlig $date1',
de='Anfang $date1',
el='αρχές του $date1',
en='early $date1',
['en-gb']='early $date1',
['en-ca']='early $date1',
eo='komence de $date1',
es='a principios de $date1',
et='$date1 algus',
fa='اوایل $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alku' end, case={'gen',''}},
fr='début $date1',
ga='go luath i $date1',
gl='a principios de $date1',
he='תחילת $date1',
hr={'početak $date1', case={'gen',''}},
hsb={'spočatk $date1', case={'gen',''}},
hu='$date1 elején',
it='inizio del $date1',
ja='$date1初頭',
ko='$date1 초반',
mk='почеток на $date1',
ml='$date1 ആദ്യപാദം',
nb='tidlig $date1',
nn='tidleg $date1',
nds='Anfang $date1',
nl='begin $date1',
no='tidlig $date1',
pl={'początek $date1', case={'gen',''}},
pt='a princípios de $date1',
qu="$date1 ñawpaq p'unchawkunapi",
ro='începând cu $date1',
ru={'начало $date1', case={'gen',''}},
sk={'začiatok $date1', case={'gen',''}},
sl=function(date1, state)
if state.precision == 9 then -- precision > month
return 'zgodnjega leta $date1'
else -- "od septembra"
return {'zgodnjega $date1', case={'gen',''}}
end
end,
sr='почетак $date1',
sv='början av $date1',
uk={'початок $date1', case={'gen',''}},
ur='ابتدا $date1',
vi='đầu năm $date1',
['zh-hans']='$date1早期',
['zh-hant']='$date1早期',
default='<span style="color:red">early $date1</span>',
},
['mid'] = {
nDates = 1,
ar='منتصف $date1',
['be-tarask']={'сярэдзіна $date1', case={'gen',''}},
bn='$date1-এর মাঝামাঝি',
ca='a mitjan $date1',
ckb='ناوەڕاستی $date1',
cs={'polovina $date1', case={'gen',''}},
da='midten af $date1',
de='Mitte $date1',
el='μέσα του $date1',
en='mid $date1',
['en-gb']='mid $date1',
['en-ca']='mid $date1',
eo='meze de $date1',
es='a mediados de $date1',
et='$date1 keskel',
fa='اواسط $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 puoliväli' end, case={'gen',''}},
fr='mi $date1',
ga='lár $date1',
gl='a mediados de $date1',
he='אמצע $date1',
hr={'sredina $date1', case={'gen',''}},
hsb={'srjedź $date1', case={'gen',''}},
hu='$date1 közepén',
it='metà del $date1',
ja='$date1半ば',
ko='$date1 중반',
mk='средина на $date1',
ml='$date1 മദ്ധ്യം',
nb='midten av $date1',
nn='midten av $date1',
nds='Midd $date1',
nl='midden $date1',
no='midten av $date1',
pl={'środek $date1', case={'gen',''}},
pt='meados de $date1',
qu="$date1 chawpin p'unchawkunapi",
ro='mijlocul lui $date1',
ru={'середина $date1', case={'gen',''}},
sk={'polovica $date1', case={'gen',''}},
sl={function(date1, state) return 'sredina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='средина $date1',
sv='mitten av $date1',
uk={'середина $date1', case={'gen',''}},
ur='وسط $date1',
vi='giữa năm $date1',
['zh-hans']='$date1中期',
['zh-hant']='$date1中期',
default='<span style="color:red">mid $date1</span>',
},
['late'] = {
nDates = 1,
ar='نهاية $date1',
bn='$date1-এর শেষে',
['be-tarask']={'канец $date1', case={'gen',''}},
ca='al final de $date1',
ckb='کۆتاییی $date1',
cs='konec $date1',
da='sen $date1',
de='Ende $date1',
el='τέλη του $date1',
en='late $date1',
['en-gb']='late $date1',
['en-ca']='late $date1',
eo='fine de $date1',
es='a fines de $date1',
et='$date1 lõpp',
fa='اواخر $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppu' end, case={'gen',''}},
fr='fin $date1',
ga='go déanach i $date1',
gl='a finais de $date1',
he='סוף $date1',
hr={'kraj $date1', case={'gen',''}},
hsb={'kónc $date1', case={'gen',''}},
hu='$date1 végén',
it='fine del $date1',
ja='$date1末',
ko='$date1 후반',
mk='крајот на $date1',
ml='$date1 അന്ത്യപാദം',
nb='sent $date1',
no='seint $date1',
nds='Enn $date1',
nl='eind $date1',
no='sent $date1',
pl={'koniec $date1', case={'gen',''}},
pt='ao final de $date1',
qu="$date1 qhipaq p'unchawkunapi",
ro='sfârșitul lui $date1',
ru={'конец $date1', case={'gen',''}},
sk={'koniec $date1', case={'gen',''}},
sl={function(date1, state) return 'pozno ' .. decYear(state,'sl','') .. ' $date1' end, case={'nom',''}},
sr='крај $date1',
sv='slutet av $date1',
uk={'кінець $date1', case={'gen',''}},
ur='اخیر $date1',
vi='cuối năm $date1',
['zh-hans']='$date1晚期',
['zh-hant']='$date1晚期',
default='<span style="color:red">late $date1</span>',
},
['circa'] = {
nDates = 1,
ar='قرابة $date1',
['be-tarask']={'каля $date1', case={'gen',''}},
bn='প্রায় $date1',
ca='cap a $date1',
ckb='بەنزیکی $date1',
cs='cca $date1',
da='ca. $date1',
de='etwa $date1',
el='περ. $date1',
en='circa $date1',
['en-gb']='circa $date1',
['en-ca']='circa $date1',
eo='ĉirkaŭ $date1',
es='hacia $date1', -- suggestion use "hacia"/"hacia el" or leave the latin circa or ca.
et='ca. $date1',
fa='حوالی $date1', -- template:Circa used 'حدود $date1'
fi={function(date1, state) return 'suunnilleen ' .. decYear(state,'fi','ine') .. '$date1' end, case={'ine',''}}, -- template:Circa used 'noin $date1'
fr=function(date1, state)
if state.precision >= 11 then -- precision >= day
return 'vers le $date1'
else
return 'vers $date1'
end
end,
ga='thart ar $date1',
gl='entre $date1', -- template:Circa used 'cara a $date1'
he='בסביבות $date1',
hr={'približno $date1', case={'gen',''}},
hsb={'wokoło $date1', case={'gen',''}},
hu='$date1 körül',
it='$date1 circa',
ja='$date1頃',
ko='$date1경',
mk='~ $date1', -- template:Circa used 'o. $date1'
ml= 'ഉദ്ദേശം $date1',
nb='ca. $date1',
nn='ca. $date1',
nds='üm un bi $date1',
nl='ca. $date1',
no='ca. $date1',
pl={'około $date1', case={'gen',''}},
pt='cerca de $date1',
qu='$date1chá',
ro='circa $date1',
ru={'около $date1', case={'gen',''}},
sk='cca $date1',
sl={function(date1, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='око $date1',
sv='cirka $date1',
uk={'близько $date1', case={'gen', ''}},
ur='قریباً $date1',
vi='vào khoảng $date1',
['zh-hans']='约$date1',
['zh-hant']='約$date1',
default='<span style="color:red">circa $date1</span>',
},
['uncertain'] = {
nDates = 1,
['zh-hans']='$date1(?)',
['zh-hant']='$date1(?)',
default='$date1 (?)',
},
probably = { -- see Q56644435
nDates = 1,
ar = 'يُحتمل في $date',
ast = 'probablemente $date1',
bn = 'সম্ভবত $date1',
ca = 'probablement $date1',
ckb = 'لەوانەیە $date1',
cs = 'pravděpodobně $date1',
de = 'wahrscheinlich $date1',
el = 'πιθανόν $date1',
en = 'probably $date1',
['en-gb']='probably $date1',
['en-ca']='probably $date1',
eo = 'probable $date1',
es = 'probable $date1',
fa = 'احتمالاً $date1',
fr = 'probablement $date1',
he = 'כפי הנראה $date1',
hr = 'vjerojatno $date1',
hu = 'feltehetőleg $date1',
it = 'probabile $date1',
ko = '$date1 유력',
mk = 'веројатно $date1',
ml = 'ഒരുപക്ഷേ $date1',
nl = 'waarschijnlijk $date1',
pl = 'prawdopodobnie $date1',
pt = 'provavelmente $date1',
ru = 'вероятно $date1',
sl = 'verjetno $date1',
sr = 'вероватно $date1',
sv = 'antagligen $date1',
uk = 'ймовірно $date1',
default='<span style="color:red">probably $date1</span>',
},
possibly = { -- see Q30230067
nDates = 1,
ar = 'يُمكن في $date1',
ast = 'posiblemente $date1',
bn = 'যথাসম্ভব $date1',
ckb = 'لەوانەیە $date1',
cs = 'možná $date1',
de = 'möglicherweise $date1',
en = 'possibly $date1',
['en-gb']='possibly $date1',
['en-ca']='possibly $date1',
eo = 'eble $date1',
el = 'πιθανόν $date1',
fa = 'احتمالاً $date1',
fr = 'peut-être $date1',
hr = 'moguće $date1',
hu = 'talán $date1',
ko = '$date1 추측',
mk = 'можеби $date1',
ml = 'മിക്കവാറും $date1',
nl = 'mogelijk $date1',
pl = 'być może $date1',
pt = 'possivelmente $date1',
ro = 'poate $date1',
ru = 'возможно $date1',
sl = 'morda $date1',
sr = 'можда $date1',
sv = 'möjligen $date1',
uk = 'можливо $date1',
default='<span style="color:red">possibly $date1</span>',
},
presumably = { -- see Q18122778
nDates = 1,
ast = 'presumiblemente $date1',
ar = 'يُحتمَل في $date1',
ckb = 'دەشێت $date1',
de = 'vermutlich $date1',
en = 'presumably $date1',
['en-gb']='presumably $date1',
['en-ca']='presumably $date1',
fa = 'به احتمال زیاد $date1',
fr = 'présumé $date1',
hr = 'pretpostavljeno $date1',
it = 'presumibilmente $date1',
ko = '$date1 추정',
ml = 'ഊഹപ്രകാരം $date1',
pl = 'przypuszczalnie $date1',
pt = 'presumivelmente $date1',
sl = 'domnevno $date1',
sr = 'претпоставља се $date1',
ru = 'предположительно $date1',
uk = 'здогадно $date1',
default='<span style="color:red">presumably $date1</span>',
},
['year unknown']= {
nDates = 0,
ar = 'سنة غير معلومة',
['be-tarask']='Год невядомы',
bn='অজানা বছর',
ca='Any desconegut',
ckb='ساڵی نەزاندراو',
cs='neznámý rok',
de='Jahr unbekannt',
el='άγνωστο έτος',
en='year unknown',
['en-gb']='year unknown',
['en-ca']='year unknown',
eo='jaro nesciata',
es='Año desconocido',
fa='سال نامعلوم',
fi='tuntematon vuosi',
fr='Année inconnue',
ga='bliain anaithnid',
he='שנה לא ידועה',
hsb='lěto njeznate',
hr='nepoznata godina',
it='anno sconosciuto',
ja='年代不明',
ko='연도 미상',
la='Sine anno',
ml='വർഷം ലഭ്യമല്ല',
mk='непозната година',
nb='ukjent år',
nn='ukjent år',
nl='zonder jaar',
no='ukjent år',
pl='rok nieznany',
pt='ano desconhecido',
qu='Mana riqsisqa wata',
ru='Год неизвестен',
sk='neznámy rok',
sl='neznano leto',
sr='непозната година',
sv='okänt år',
uk='рік невідомий',
ur='سال نامعلوم',
vi='không rõ năm',
['zh-hans']='年份未知',
['zh-hant']='年份未知',
default='<span style="color:red">year unknown</span>',
},
-- ==========================================
-- === Parts of a whole =====================
-- ==========================================
['firsthalf'] = {
nDates = 1,
ar='النصف الأول من $date1',
['be-tarask']={'першая палова $date1', case={'gen',''}},
bn='$date1-এর প্রথমার্ধ',
ca='1a meitat de $date1',
ckb='نیوەی یەکەمی $date1',
cs={'1. polovina $date1', case={'gen',''}},
da='1. halvdel af $date1',
de='erste Hälfte $date1',
el='πρώτο μισό του $date1',
en='first half of $date1',
['en-gb']='first half of $date1',
['en-ca']='first half of $date1',
eo='unua duono de $date1',
es='primera mitad de $date1',
et='$date1 esimene pool',
fa='نیمهٔ نخست $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alkupuolisko' end, case={'gen',''}},
fr='1<sup>re</sup> moitié de $date1',
ga='chéad leath de $date1',
gl='primeira metade de $date1',
he='במחצית הראשונה של $date1',
hsb={'prěnja połojca $date1', case={'gen',''}},
hu='$date1 első felében',
hr={'prva polovina $date1', case={'gen',''}},
it='prima metà del $date1',
ja='$date1上半期',
ko='$date1 상반기',
mk='прва половина на $date1',
ml='$date1 ആദ്യപകുതി',
nb='første halvdel av $date1',
nn='fyrste halvdelen av $date1',
nds='1. Helft $date1',
nl='eerste helft $date1',
no='første halvdel av $date1',
pl={'pierwsza połowa $date1', case={'gen',''}},
pt='primeira metade de $date1',
qu='$date1 ñawpaq kuskanpi',
ro='prima jumătate a lui $date1',
ru={'первая половина $date1', case={'gen',''}},
sk={'1. polovica $date1', case={'gen',''}},
sl={function(date1, state) return 'prva polovica ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='права половина $date1',
sv='första hälften av $date1',
uk={'перша половина $date1', case={'gen',''}},
ur='نصف اول $date1',
vi='nửa đầu năm $date1',
['zh-hans']='$date1上半期',
['zh-hant']='$date1上半期',
default='<span style="color:red">first half of $date1</span>',
},
['secondhalf'] = {
nDates = 1,
ar='النصف الثاني من $date1',
['be-tarask']={'другая палова $date1', case={'gen',''}},
bn='$date1-এর দ্বিতীয়ার্ধ',
ca='2a meitat de $date1',
ckb='نیوەی دووەمی $date1',
cs={'2. polovina $date1', case={'gen',''}},
da='2. halvdel af $date1',
de='zweite Hälfte $date1',
el='δεύτερο μισό του $date1',
en='second half of $date1',
['en-gb']='second half of $date1',
['en-ca']='second half of $date1',
eo='dua duono de $date1',
es='segunda mitad de $date1',
et='$date1 teine pool',
fa='نیمهٔ دوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppupuolisko' end, case={'gen',''}},
fr='2<sup>e</sup> moitié de $date1',
ga='dara leath de $date1',
gl='segunda metade de $date1',
he='במחצית השנייה של $date1',
hsb={'druha połojca $date1', case={'gen',''}},
hr={'druga polovina $date1', case={'gen',''}},
hu='$date1 második felében',
it='seconda metà del $date1',
ja='$date1下半期',
ko='$date1 하반기',
mk='втора половина на $date1',
ml='$date1 രണ്ടാം പകുതി',
nb='andre halvdel av $date1',
nn='andre halvdelen av $date1',
nds='2. Helft vun $date1',
nl='tweede helft $date1',
no='andre halvdel av $date1',
pl={'druga połowa $date1', case={'gen',''}},
pt='segunda metade de $date1',
qu='$date1 qhipaq kuskanpi',
ro='a doua jumătate a lui $date1',
ru={'вторая половина $date1', case={'gen',''}},
sk={'2. polovica $date1', case={'gen',''}},
sl={'druga polovica {{IfNum | $date0 | leta}} $date1', case={'gen',''}},
sr='друга половина $date1',
sv='andra hälften av $date1',
uk={'друга половина $date1', case={'gen',''}},
ur='نصف آخر $date1',
vi='nửa cuối năm $date1',
['zh-hans']='$date1下半期',
['zh-hant']='$date1下半期',
default='<span style="color:red">second half of $date1</span>',
},
['1quarter']= {
nDates = 1,
ar = ' الربع الأول من $date1',
bn='$date1-এর প্রথম ত্রৈমাসিক',
['be-tarask']={'першая чвэрць $date1', case={'gen',''}},
ckb='چارەکی یەکەمی $date1',
cs={'1. čtvrtina $date1', case={'gen',''}},
de='erstes Quartal $date1',
en='first quarter of $date1',
['en-gb']='first quarter of $date1',
['en-ca']='first quarter of $date1',
eo='unua kvarono de $date1',
es='primer cuarto del $date1',
fa='ربع نخست $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 ensimmäinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'premier quart '.. frOf[state.precision] ..' $date1' end,
ga='chéad ráithe de $date1',
he='רבעון ראשון של $date1',
hsb={'prěnja štwórćina $date1', case={'gen',''}},
hr={'prva četvrtina $date1', case={'gen',''}},
it='primo quarto del $date1',
ja='$date1第1四半期',
ko='$date1 일사분기',
ml='$date1 ഒന്നാം ത്രൈമാസം',
nb='første kvartal av $date1',
nl='eerste kwart $date1',
nn='fyrste kvartalet av $date1',
no='første kvartal av $date1',
--pl={'pierwsza ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'pierwszy tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'pierwsze ćwierćwiecze $date1'
else
return 'pierwszy kwartał $date1'
end
end, case={'gen',''}},
pt='primeiro trimestre de $date1',
qu='$date1 ñawpaq ñiqin tawa phatmanpi',
ru={'первая четверть $date1', case={'gen',''}},
sk={'1. štvrtina $date1', case={'gen',''}},
sl={'prva četrtina {{IfNum | $date0 | leta}} $date1', case={'gen',''}},
sr='прва четвртина $date1',
sv='första kvartalet av $date1',
uk={'1-ша чверть $date1', case={'gen',''}},
ur='پہلی سہ ماہی $date1',
vi='quý 1 năm $date1',
['zh-hans']='$date1第一季度',
['zh-hant']='$date1第一季度',
default='<span style="color:red">first quarter of $date1</span>',
},
['2quarter']= {
nDates = 1,
ar = 'الربع الثاني من $date1',
['be-tarask']={'другая чвэрць $date1', case={'gen',''}},
bn='$date1-এর দ্বিতীয় ত্রৈমাসিক',
ckb='چارەکی دووەمی $date1',
cs={'2. čtvrtina $date1', case={'gen',''}},
de='zweites Quartal $date1',
en='second quarter of $date1',
['en-gb']='second quarter of $date1',
['en-ca']='second quarter of $date1',
eo='dua kvarono de $date1',
es='segundo cuarto del $date1',
fa='ربع دوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 toinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'deuxième quart '.. frOf[state.precision] ..' $date1' end,
ga='dara ráithe de $date1',
he='רבעון שני של $date1',
hsb={'druha štwórćina $date1', case={'gen',''}},
hr={'druga četvrtina $date1', case={'gen',''}},
it='secondo quarto del $date1',
ja='$date1第2四半期',
ko='$date1 이사분기',
ml='$date1 രണ്ടാം ത്രൈമാസം',
nb='andre kvartal av $date1',
nl='tweede kwart $date1',
nn='andre kvartalet av $date1',
no='andre kvartal av $date1',
--pl={'druga ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'drugi tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'druge ćwierćwiecze $date1'
else
return 'drugi kwartał $date1'
end
end, case={'gen',''}},
pt='segundo trimestre de $date1',
qu='$date1 iskay ñiqin tawa phatmanpi',
ru={'вторая четверть $date1', case={'gen',''}},
sk={'2. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'druga četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='друга четвртина $date1',
sv='andra kvartalet av $date1',
uk={'2-га чверть $date1', case={'gen',''}},
ur='دوسری سہ ماہی $date1',
vi='quý 2 năm $date1',
['zh-hans']='$date1第二季度',
['zh-hant']='$date1第二季度',
default='<span style="color:red">second quarter of $date1</span>',
},
['3quarter']= {
nDates = 1,
ar = 'الربع الثالث من $date1',
['be-tarask']={'трэцяя чвэрць $date1', case={'gen',''}},
bn='$date1-এর তৃতীয় ত্রৈমাসিক',
ckb='چارەکی سێیەمی $date1',
cs={'3. čtvrtina $date1', case={'gen',''}},
de='drittes Quartal $date1',
en='third quarter of $date1',
['en-gb']='third quarter of $date1',
['en-ca']='third quarter of $date1',
eo='tria kvarono de $date1',
es='tercer cuarto del $date1',
fa='ربع سوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 kolmas neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'troisième quart '.. frOf[state.precision] ..' $date1' end,
ga='triú ráithe de $date1',
he='רבעון שלישי של $date1',
hsb={'třeća štwórćina $date1', case={'gen',''}},
hr={'treća četvrtina $date1', case={'gen',''}},
it='terzo quarto del $date1',
ja='$date1第3四半期',
ko='$date1 삼사분기',
ml='$date1 മൂന്നാം ത്രൈമാസം',
nb='tredje kvartal av $date1',
nl='derde kwart $date1',
nn='tredje kvartalet av $date1',
no='tredje kvartal av $date1',
--pl={'trzecia ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'trzeci tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'trzecie ćwierćwiecze $date1'
else
return 'trzeci kwartał $date1'
end
end, case={'gen',''}},
pt='terceiro trimestre de $date1',
qu='$date1 kimsa ñiqin tawa phatmanpi',
sk={'3. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'tretja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='трећа четвртина $date1',
ru={'третья четверть $date1', case={'gen',''}},
sv='tredje kvartalet av $date1',
uk={'3-тя чверть $date1', case={'gen',''}},
ur='تیسری سہ ماہی $date1',
vi='quý 3 năm $date1',
['zh-hans']='$date1第三季度',
['zh-hant']='$date1第三季度',
default='<span style="color:red">third quarter of $date1</span>',
},
['4quarter']= {
nDates = 1,
ar = 'الربع الرابع من $date1',
['be-tarask']={'чацьвёртая чвэрць $date1', case={'gen',''}},
bn='$date1-এর চতুর্থ ত্রৈমাসিক',
ckb='چارەکی چوارەمی $date1',
cs={'4. čtvrtina $date1', case={'gen',''}},
de='viertes Quartal $date1',
en='fourth quarter of $date1',
['en-gb']='fourth quarter of $date1',
['en-ca']='fourth quarter of $date1',
eo='kvara kvarono de $date1',
es='último cuarto del $date1',
fa='ربع چهارم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 viimeinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'quatrième quart '.. frOf[state.precision] ..' $date1' end,
ga='ceathrú ráithe de $date1',
he='רבעון רביעי של $date1',
hsb={'poslednja štwórćina $date1', case={'gen',''}},
hr={'četvrta četvrtina $date1', case={'gen',''}},
it='ultimo quarto del $date1',
ja='$date1第4四半期',
ko='$date1 사사분기',
ml='$date1 നാലാം ത്രൈമാസം',
nb='fjerde kvartal av $date1',
nl='vierde kwart $date1',
nn='tredje kvartalet av $date1',
no='fjerde kvartal av $date1',
--pl={'czwarta ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'ostatni tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'ostatnie ćwierćwiecze $date1'
else
return 'ostatni kwartał $date1'
end
end, case={'gen',''}},
pt='quarto trimestre de $date1',
qu='$date1 qhipaq ñiqin tawa phatmanpi',
ru={'последняя четверть $date1', case={'gen',''}},
sk={'4. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'zadnja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='четврта четвртина $date1',
sv='fjärde kvartalet av $date1',
uk={'4-та чверть $date1', case={'gen',''}},
ur='چوتھی سہ ماہی $date1',
vi='quý 4 năm $date1',
['zh-hans']='$date1第四季度',
['zh-hant']='$date1第四季度',
default='<span style="color:red">forth quarter of $date1</span>',
},
-- ==========================================
-- === Seasons ==============================
-- ==========================================
['spring'] = {
nDates = 1,
ar='ربيع $date1',
['be-tarask']='вясна $date1',
bn='বসন্তকাল $date1',
ca='primavera $date1',
ckb='بەھاری $date1',
cs={'jaro $date1', case={'gen', ''}},
da='Forår $date1',
de='Frühling $date1',
en='Spring $date1',
['en-gb']='Spring $date1',
['en-ca']='Spring $date1',
eo='printempo $date1',
es='primavera de $date1',
et='$date1 kevad',
fa='بهار $date1',
fi='Kevät $date1',
fr='printemps $date1',
ga='earrach $date1',
gl='primavera $date1',
he='אביב $date1',
hr='proljeće $date1',
hsb='nalěćo $date1',
hu='$date1 tavasza',
it='primavera $date1',
ja='{{#if:$date1|$date1年}}春',
ko='$date1 봄',
mk='пролет $date1',
ml='$date1 വസന്തം',
nb='våren $date1',
nds='Vörjohr $date1',
nn='våren $date1',
nl='voorjaar $date1',
no='våren $date1',
pl='wiosna $date1',
pt='primavera de $date1',
ro='primăvara lui $date1',
ru='весна $date1',
sk={'jar $date1', case={'gen', ''}},
sl='pomlad $date1',
sr='пролеће $date1',
sv='våren $date1',
uk='весна $date1',
ur='بہار $date1',
vi='mùa đông năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}春季',
['zh-hant']='{{#if:$date1|$date1年}}春季',
default='<span style="color:red">Spring $date1</span>',
},
['summer'] = {
nDates = 1,
ar='صيف $date1',
['be-tarask']='лета $date1',
bn='গ্রীষ্মকাল $date1',
ca='estiu $date1',
ckb='ھاوینی $date1',
cs={'léto $date1', case={'gen', ''}},
da='Sommer $date1',
de='Sommer $date1',
en='Summer $date1',
['en-gb']='Summer $date1',
['en-ca']='Summer $date1',
eo='somero $date1',
es='verano de $date1',
et='$date1 suvi',
fa='تابستان $date1',
fi='Kesä $date1',
fr='été $date1',
ga='samhradh $date1',
gl='verán $date1',
he='קיץ $date1',
hr='ljeto $date1',
hsb='lěćo $date1',
hu='$date1 nyara',
it='estate $date1',
ja='{{#if:$date1|$date1年}}夏',
ko='$date1 여름',
mk='лето $date1',
ml='$date1 വേനൽ',
nb='sommeren $date1',
nds='Sommer $date1',
nn='sumaren $date1',
nl='zomer $date1',
no='sommeren $date1',
pl='lato $date1',
pt='verão de $date1',
ro='vara lui $date1',
ru='лето $date1',
sk={'leto $date1', case={'gen', ''}},
sl='poletje $date1',
sr='лето $date1',
sv='sommaren $date1',
uk='літо $date1',
ur='گرما $date1',
vi='mùa hè năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}夏季',
['zh-hant']='{{#if:$date1|$date1年}}夏季',
default='<span style="color:red">Summer $date1</span>',
},
['autumn'] = {
nDates = 1,
ar='خريف $date1',
['be-tarask']='восень $date1',
bn='শরত্কাল $date1',
ca='tardor $date1',
ckb='پاییزی $date1',
cs={'podzim $date1', case={'gen', ''}},
da='Efterår $date1',
de='Herbst $date1',
en='Autumn $date1',
['en-gb']='Autumn $date1',
['en-ca']='Autumn $date1',
eo='aŭtuno $date1',
es='otoño de $date1',
et='$date1 sügis',
fa='پاییز $date1',
fi='Syksy $date1',
fr='automne $date1',
ga='fómhar $date1',
gl='outono $date1',
he='סתיו $date1',
hr='jesen $date1',
hsb='nazyma $date1',
hu='$date1 ősze',
it='autunno $date1',
ja='{{#if:$date1|$date1年}}秋',
ko='$date1 가을',
mk='есен $date1',
ml='$date1 ശരത്കാലം',
nb='høsten $date1',
nds='Harvst $date1',
nn='hausten $date1',
nl='herfst $date1',
no='høsten $date1',
pl='jesień $date1',
pt='outono de $date1',
ro='toamna lui $date1',
ru='осень $date1',
sk={'jeseň $date1', case={'gen', ''}},
sl='jesen $date1',
sr='јесен $date1',
sv='hösten $date1',
uk='осінь $date1',
ur='خزاں $date1',
vi='mùa thu năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}秋季',
['zh-hant']='{{#if:$date1|$date1年}}秋季',
default='<span style="color:red">Autumn $date1</span>',
},
['winter'] = {
nDates = 1,
ar='شتاء $date1',
['be-tarask']='зіма $date1',
bn='শীতকাল $date1',
ca='hivern $date1',
ckb='زستانی $date1',
cs={'zima $date1', case={'gen', ''}},
da='Vinter $date1',
de='Winter $date1',
en='Winter $date1',
['en-gb']='Winter $date1',
['en-ca']='Winter $date1',
eo='vintro $date1',
es='invierno de $date1',
et='$date1 talv',
fa='زمستان $date1',
fi='Talvi $date1',
fr='hiver $date1',
ga='geimhreadh $date1',
gl='inverno $date1',
he='חורף $date1',
hr='zima $date1',
hsb='zyma $date1',
hu='$date1 tele',
it='inverno $date1',
ja='{{#if:$date1|$date1年}}冬',
ko='$date1 겨울',
mk='зима $date1',
ml='$date1 ശൈത്യകാലം',
nds='Winter $date1',
nl='winter $date1',
nb='vinteren $date1',
nn='vinteren $date1',
no='vinteren $date1',
pl='zima $date1',
pt='inverno de $date1',
ro='iarna lui $date1',
ru='зима $date1',
sk={'zima $date1', case={'gen', ''}},
sl='zima $date1',
sr='зима $date1',
sv='vintern $date1',
uk='зима $date1',
ur='سرما $date1',
vi='mùa đông năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}冬季',
['zh-hant']='{{#if:$date1|$date1年}}冬季',
default='<span style="color:red">Winter $date1</span>',
},
-- ==========================================
-- === Decade/Century/Millennium ============
-- ==========================================
['decade'] = {
nDates = 1,
ar = 'عقد $date1',
['be-tarask']='$date1-я гады',
bn='$date1-এর দশক',
ca='dècada del $date1',
ckb='دەیەی $date1',
cs=function(date1, state) return ((date1 % 100 == 0) and 'první dekáda' or ((date1 % 100) .. '. léta')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. století' end,
da="$date1'erne",
de='$date1er Jahre',
el='δεκαετία του $date1',
en='$date1s',
['en-gb']='$date1s',
['en-ca']='$date1s',
eo='$date1-aj jaroj',
es='años $date1',
et='$date1ndad',
fa='دههٔ $date1',
fi='$date1-luvulla',
fr='années $date1',
ga='$date1í',
gl='anos $date1',
he='שנות ה-$date1',
hr='$date1-ih',
hsb='$date1te lěta',
hu = function(date1, state)
local suffix = 's'
if date1 % 100 == 10 or date1 % 100 == 40 or date1 % 100 == 50 or date1 % 100 == 70 or date1 % 100 == 90 then
suffix = 'es'
elseif date1 % 100 == 20 or date1 % 100 == 30 or date1 % 100 == 60 or date1 % 100 == 80 then
suffix = 'as'
elseif date1 % 100 == 0 then
if date1 % 1000 ~= 0 then
suffix = 'as'
elseif date1 % 1e6 ~= 0 then
suffix = 'es'
end
end
return string.format('%d-%s évek', date1, suffix)
end,
it="{{#ifexpr: $date1 mod 100 = 0 | primo decennio del {{Roman|{{#expr: ($date1 / 100) + 1}}}} sec. | anni '{{#expr: $date1 mod 100 }} del {{Roman|{{#expr: floor($date1 / 100) + 1}}}} sec.}}",
ja='$date1年代',
ko='$date1년대',
mk='$date1-ти',
ml='ദശകം $date1-ൽ',
nb='$date1-årene',
nn='$date1-åra',
nds='Johren $date1',
nl='jaren $date1',
no='$date1-årene',
pl=function(date1, state)
local str = 'lata '..(date1 % 100)..'. '
if (date1 % 100 == 0) then
str = 'pierwsza dekada '
elseif (date1 % 100 == 10) then
str = 'druga dekada '
end
return str .. Roman(math.floor(date1 / 100) + 1) .. ' wieku'
end,
pt='década de $date1',
qu='$date1 watakuna',
ro='anii $date1',
ru='$date1-е годы',
sk=function(date1, state) return ((date1 % 100 == 0) and 'prvé desaťročie' or ((date1 % 100) .. '. roky')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. storočia' end,
sl='$date1-ta leta',
sr='$date1-их',
sv='$date1-talet{{#switch:$date1|1300|1400|1500|1600|1700|1800|1900|2000|2100= (decennium)}}',
uk='$date1-ті роки',
ur='دہائی $date1',
vi='thập niên $date1',
['zh-hans']='$date1年代',
['zh-hant']='$date1年代',
default='<span style="color:red">$date1s</span>',
},
['century'] = {
nDates = 1,
ar='القرن $date1',
['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' стагодзьдзе' end,
bn=function(date1, state) return Ordinal(date1, 'bn') .. ' শতাব্দী' end,
ca='segle {{small-caps|{{lc:{{Roman year|$date1}}}}}}',
ckb='سەدەی $date1',
cs='$date1. století',
da='$date1. århundrede',
de='$date1. Jahrhundert',
el='$date1ος αιώνας',
en=function(date1, state) return Ordinal(date1, 'en') .. ' century' end,
['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' century' end,
['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' century' end,
eo='$date1-a jarcento',
es=function(date1, state) return 'siglo ' .. Roman(date1) end,
et='$date1. sajand',
fa='سدهٔ $date1',
fi='{{#expr: ($date1 - 1) * 100}}-luvulla',
fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle' end,
ga='$date1ú haois',
gl=function(date1, state) return 'século ' .. Roman(date1) end,
he='המאה ה-$date1',
hr='$date1. stoljeće',
hsb='$date1. lětstotk',
hu='$date1. évszázad',
it=function(date1, state) return Roman(date1) .. ' sec.' end,
ja='$date1世紀',
ko='$date1세기',
la='saeculum $date1',
mk=function(date1, state) return Roman(date1) .. ' век' end,
ml='$date1-ആം നൂറ്റാണ്ട്',
nb=function(date1, state) return Ordinal(date1, 'nb') .. ' århundre' end,
nn=function(date1, state) return 'det ' .. Ordinal(date1, 'no') .. ' hundreåret' end,
nds='$date1. Johrhunnert',
nl='$date1e eeuw',
no=function(date1, state) return Ordinal(date1, 'no') .. ' århundre' end,
pl=function(date1, state) return Roman(date1) .. ' ' .. decCentury('pl',state.case) end,
pt=function(date1, state) return 'século ' .. Roman(date1) end,
qu='$date1 ñiqin pachakwata',
ro='secolul al $date1-lea',
ru=function(date1, state) return Roman(date1) .. ' век' end,
sk='$date1. storočie',
sl=function(date1, state) return Ordinal(date1, 'sl') .. ' stoletje' end,
sr='$date1. век',
sv='{{#expr:$date1 - 1}}00-talet',
tt=function(date1, state) return Roman(date1) .. ' гасыр' end,
uk=function(date1, state) return Roman(date1) .. ' ст.' end,
ur='صدی $date1',
vi='thế kỷ $date1',
['zh-hans']='$date1世纪',
['zh-hant']='$date1世紀',
default='<span style="color:red">$date1 century</span>',
},
['millennium'] = {
nDates = 1,
ar = 'الألفية $date1',
['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' тысячагодзьдзе' end,
bn=function(date1, state) return Ordinal(date1, 'bn') .. ' সহস্রাব্দ' end,
ckb=function(date1, state) return 'ھەزارەی ' .. Ordinal(date1, 'ckb') end,
cs='$date1. tisíciletí',
de='$date1. Jahrtausend',
en=function(date1, state) return Ordinal(date1, 'en') .. ' millennium' end,
['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' millennium' end,
['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' millennium' end,
eo='$date1-a jarmilo',
es=function(date1, state) return Roman(date1) .. ' milenio' end,
fa=function(date1, state) return 'هزارهٔ ' .. Ordinal(date1, 'fa') end,
fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' millénaire' end,
ga='$date1ú mílaoise',
hr='$date1. tisućljeće',
hsb='$date1. lěttysac',
it=function(date1, state) return Roman(date1) .. ' millennio' end,
ja='$date1千年紀',
ko='제$date1천년기',
la='millennium $date1',
ml='$date1-മത്തെ സഹസ്രാബ്ദം',
nb=function(date1, state) return Ordinal(date1, 'nb') .. ' årtusen' end,
nn=function(date1, state) return Ordinal(date1, 'no') .. ' tusenåret' end,
nl='$date1e millennium',
no=function(date1, state) return Ordinal(date1, 'no') .. ' årtusen' end,
pl=function(date1, state) return Roman(date1) .. ' ' .. decMillennium('pl',state.case) end,
pt=function(date1, state) return Roman(date1) .. ' milénio' end,
qu='$date1 ñiqin waranqawata',
ru=function(date1, state) return Roman(date1) .. ' тысячелетие' end,
sk='$date1. tisícročie',
sl=function(date1, state) return Ordinal(date1, 'sl') .. ' tisočletje' end,
sv=function(date1, state) return Ordinal(date1, 'sv') .. ' årtusendet' end,
uk=function(date1, state) return Roman(date1) .. ' тис.' end,
ur=function(date1, state) return 'ہزارہ ' .. Ordinal(date1, 'ur') end,
vi='thiên niên kỷ $date1',
['zh-hans']=function(date1, state) return Ordinal(date1, 'zh-hans') .. '千年' end,
['zh-hant']=function(date1, state) return Ordinal(date1, 'zh-hant') .. '千年' end,
--default='{{Please translate|$date1 millennium|Module:I18n/complex date}}',
default='<span style="color:red">$date1 millennium</span>',
},
['million'] = {
ckb = '$date1 میلیۆن ساڵ',
de = '$date1 Millionen Jahre',
en = '$date1 million years',
['en-gb'] = '$date1 million years',
['en-ca'] = '$date1 million years',
eo = '$date1 milionoj da jaroj',
es = '$date1 millones de años',
fa = '$date1 میلیون سال',
fr = '$date1 millions d’années',
it = '$date1 milioni di anni',
ko = '$date1백만 년',
ml = function(date1, state)
if date1 >= 10 then
return (date1 / 10) .. ' കോടി വർഷങ്ങൾ' -- 100 lakh = 1 crore
else
return (date1 * 10) .. ' ലക്ഷം വർഷങ്ങൾ'
end
end,
nb = '$date1 millioner år',
nl = '$date1 miljoen jaar',
nn = '$date1 millionar år',
pl = '$date1 milionów lat',
pt = '$date1 milhões de anos',
ru = '$date1 миллиона лет',
sl = '$date1 milijonov let',
sr = '$date1 милион година',
uk = '$date1 мільйони років',
ur = '$date1 ملین سال',
['zh-hans'] = '$date1百万年',
['zh-hant'] = '$date1百萬年',
default='<span style="color:red">$date1 million years</span>',
nDates = 1,
},
['billion'] = {
ckb = '$date1 بیلیۆن ساڵ',
de = '$date1 Milliarden Jahre',
en = '$date1 billion years',
['en-gb'] = '$date1 billion years',
['en-ca'] = '$date1 billion years',
es = '$date1 mil millones de años',
fa = '$date1 میلیارد سال',
fr = '$date1 milliard d’années',
it = '$date1 miliardi di anni',
ko = '$date1십억 년',
ml = function(date1, state) return (date1 * 10) .. ' കോടി വർഷങ്ങൾ' end,
nb = '$date1 milliarder år',
nl = '$date1 miljard jaar',
nn = '$date1 milliardar år',
pl = '$date1 miliardów lat',
pt = '$date1 mil milhões de anos',
ru = '$date1 миллиардов лет',
sl = '$date1 milijard let',
sr = '$date1 милијарду година',
uk = '$date1 мільярдів років',
ur = '$date1 بلین سال',
['zh-hans'] = '$date1十亿年',
['zh-hant'] = '$date1十億年',
default='<span style="color:red$date1 billion years</span>',
nDates = 1,
},
-- ==========================================
-- === Complex phrases ======================
-- ==========================================
-- Phrases which for some languages can be build out of simpler phrases
-- Their "default" state, used when no translation in the requested language was found, returns a "state" like
-- table which is used to call the function again and built the phrase out of simple phrases
-- $date1 - original date - 1
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the century'] = {
nDates = 2,
['be-tarask']=function(date1, date2, state) return 'канец ' .. Roman(date1) ..' — пачатак ' .. Roman(date2) ..' стагодзьдзя' end,
bn=function(date1, date2, state) return '$date1/' .. Ordinal(date2, 'bn') .. ' শতাব্দীর পালাবদলে' end,
ckb=function(date1, date2, state) return 'سەردەمی $date1/' .. Ordinal(date2, 'ckb') .. ' سەدە' end,
cs='přelom $date1. a $date2. století',
de=function(date1, date2, state) return 'Jahrhundertwende $date1/' .. Ordinal(date2, 'de') end,
en=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en') .. ' century' end,
['en-gb']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-gb') .. ' century' end,
['en-ca']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-ca') .. ' century' end,
eo='ŝanĝo de la $date1-a al la $date2-a jarcentoj',
es=function(date1, date2, state) return 'hacia finales del siglo ' .. Roman(date1) .. ' y principios del siglo ' .. Roman(date2) .. '' end,
fi='{{#expr: $date1 * 100-100}}-luvun loppu ja {{#expr: $date2 * 100-100}}-luvun alku',
fr=function(date1, date2, state) return 'fin du ' .. Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle / début du ' .. Ordinal(date2, 'fr', 'roman', 'm') end,
ga=function(date1, date2, state) return 'cas an $date1ú/' .. Ordinal(date2, 'en') .. ' haois' end,
hr='kraj $date1. i početak $date2. stoljeća',
hsb=function(date1, date2, state) return 'přechod ' .. Roman(date1) ..' do ' .. Roman(date2) ..' lětstotka' end,
it=function(date1, date2, state) return 'fine del ' .. Roman(date1) .. ' sec. e inizio del ' .. Roman(date2) .. ' sec.' end,
ja='$date1世紀から$date2世紀への変わり目',
ko=function(date1, date2, state) return '$date1~$date2세기 전환기' end,
ml='$date1 നൂറ്റാണ്ട് അവസാനവും $date2 നൂറ്റാണ്ട് ആദ്യവും',
nb=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nb') .. ' århundre/begynnelsen av det ' .. Ordinal(date2, 'nb') .. ' århundre' end,
nl=function(date1, date2, state) return 'eind $date1e/begin $date2e eeuw' end,
nn=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nn') .. ' hundreåret/byrjinga av det ' .. Ordinal(date2, 'nn') .. ' hundreåret' end,
pl=function(date1, date2, state) return 'przełom ' .. Roman(date1) ..' i ' .. Roman(date2) ..' wieku' end,
pt=function(date1, date2, state) return 'final do século ' .. Roman(date1) .. ' e início do século ' .. Roman(date2) .. '' end,
qu="$date1 ñiqin waranqawatamanta $date2 ñiqin waranqawataman t'ikrasqanpi",
ru=function(date1, date2, state) return 'конец ' .. Roman(date1) ..' — начало ' .. Roman(date2) ..' века' end,
sk='prelom $date1. a $date2. storočia',
sl=function(date1, date2, state) return 'pozno ' .. Ordinal(date1, 'sl') .. '. in zgodnje ' .. Ordinal(date2, 'sl') .. '. stoletje' end,
sr='крај $date1. и почетак $date2. века',
sv='sekelskiftet år $date200',
uk=function(date1, date2, state) return 'кін. ' .. Roman(date1) ..' ст. — поч. ' .. Roman(date2) ..' ст.' end,
vi='bước sang thế kỷ $date2',
['zh-hans']=function(date1, date2, state) return '$date1世纪末' .. Ordinal(date2, 'zh-hans') .. '世纪初' end,
['zh-hant']=function(date1, date2, state) return '$date1世紀末' .. Ordinal(date2, 'zh-hant') .. '世紀初' end,
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='century', era1=state.era1, adj2 = 'early', unit2='century', era2=state.era2} end,
},
-- $date1 - original date - 10
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the decade']={
nDates = 2,
['be-tarask']='канец $date1-х — пачатак $date2-х гг.',
bn='$date1-এর দশকের শেষে এবং $date2-এর দশকের শুরুতে',
ckb='کۆتایییەکانی $date1 و سەرەتاکانی $date2',
cs=function(date1, date2, state)
local decade1 = math.floor((date1 % 100) / 10)
local decade2 = math.floor((date2 % 100) / 10)
local century1 = math.floor( date1 / 100) + 1
local century2 = math.floor( date2 / 100) + 1
if decade1 == 0 and date1 < date2 then
return "přelom 1. a 2. dekády " .. century1 .. ". století"
elseif decade2 == 0 and date2 < date1 then
return "přelom 9. a 10. dekády " .. century1 .. ". století"
elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then
return "přelom " .. century1 .. ". a " .. century2 .. ". století"
else
return "přelom " .. decade1 .. "0. a " .. decade2 .. "0. let " .. century1 .. ". století"
end
end,
de='späte $date1er und frühe $date2er',
en='late $date1s and early $date2s',
['en-gb']='late $date1s and early $date2s',
['en-ca']='late $date1s and early $date2s',
eo='ŝanĝo de la $date1-a al la $date2-a jardekoj',
es='finales de los años $date1 y principios de los años $date2',
fa='اواخر دههٔ $date1 و اوایل دههٔ $date2',
fi='$date1-luvun loppu ja $date2-luvun alku',
fr='fin des années $date1 / début des années $date2',
ga='deireadh sna $date1í / tús sna $date2í',
hr='kraj $date1-ih i početak $date2-ih',
hsb='pózdnje $date1te a zažne $date2te lěta',
it='fine degli anni $date1 / inizio degli anni $date2',
ja='$date1年代末から$date2年代初頭',
ko='$date1년대 말 $date2년대 초',
ml='$date1കൾ അവസാനവും $date2കൾ ആദ്യവും',
nb = 'sent på $date1-tallet og tidlig på $date2-tallet',
nl = 'eind $date1e/begin $date2e decennium',
nn = 'seint på $date1-talet og tidleg på $date2-talet',
pl=function(date1, date2, state)
local decade1 = math.floor(date1 % 100)
local decade2 = math.floor(date2 % 100)
local century1 = Roman(math.floor( date1 / 100) + 1)
local century2 = Roman(math.floor( date2 / 100) + 1)
if decade1 == 0 and date1 < date2 then
return "przełom pierwszej i drugiej dekady " .. century1 .. " wieku"
elseif decade1 == 10 and date1 < date2 then
return "przełom drugiej dekady i lat 20. " .. century1 .. " wieku"
elseif decade1 == 90 and decade2 == 0 then
return "przełom ostatniej dekady " .. century1 .. " i pierwszej dekady " .. century2 .. " wieku"
else
return "przełom lat " .. decade1 .. ". i " .. decade2 .. ". " .. century1 .. " wieku"
end
end,
pt='final dos anos $date1 e início dos anos $date2',
qu='qhipaq $date1 watakuna ñawpaq $date2 watakunapas',
ru='конец $date1-х — начало $date2-х гг.',
sv='decennieskiftet år $date2',
sk=function(date1, date2, state)
local decade1 = math.floor((date1 % 100) / 10)
local decade2 = math.floor((date2 % 100) / 10)
local century1 = math.floor( date1 / 100) + 1
local century2 = math.floor( date2 / 100) + 1
if decade1 == 0 and date1 < date2 then
return "prelom 1. a 2. desaťročia " .. century1 .. ". storočia"
elseif decade2 == 0 and date2 < date1 then
return "prelom 9. a 10. desaťročia " .. century1 .. ". storočia"
elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then
return "prelom " .. century1 .. ". a " .. century2 .. ". storočia"
else
return "prelom " .. decade1 .. "0. a " .. decade2 .. "0. rokov " .. century1 .. ". storočia"
end
end,
sl='pozna $date1-ta in zgodnja $date2-ta leta',
hr='крај $date1-их и почетак $date2-их',
uk='кінець $date1-х — початок $date2-х рр.',
ur='اخیر دہائی $date1 و ابتدا دہائی $date2',
vi='bước sang thập niên $date2',
['zh-hans']='$date1年代末$date2年代初',
['zh-hant']='$date1年代末$date2年代初',
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='decade', era1=state.era1, adj2 = 'early', unit2='decade', era2=state.era2} end,
},
-- $date1 - original date - 1
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the year']={
nDates = 2,
['be-tarask']='канец $date1 — пачатак $date2 г.',
bn='$date1-এর শেষে এবং $date2-এর শুরুতে',
ckb='کۆتاییی $date1 و سەرەتای $date2',
cs='přelom roku $date1/$date2',
de='Jahreswechsel $date1/$date2',
en='late $date1 and early $date2',
['en-gb']='late $date1 and early $date2',
['en-ca']='late $date1 and early $date2',
eo='jarŝanĝo $date1 / $date2',
es='finales de $date1 y principios de $date2',
fa='اواخر $date1 و اوایل $date2',
fi='vuoden $date1 loppu ja vuoden $date2 alku',
fr='fin $date1 / début $date2',
ga='deireadh $date1 / tús $date2',
hsb='kónc $date1/spočatk $date2',
ja='$date1年末から$date2年初め',
ko='$date1 말 $date2 초',
ml='$date1 അവസാനവും $date2 ആദ്യവും',
nb='årsskiftet $date1/$date2',
nl='eind $date1 en begin $date2',
nn='årsskiftet $date1/$date2',
pl='koniec $date1 i początek $date2 roku',
pt='final de $date1 e início de $date2',
qu="$date1 qhipaq p'unchawkuna $date2 ñawpaq p'unchawkunapas",
ru='конец $date1 — начало $date2 г.',
sk='prelom rokov $date1/$date2',
sl='konec leta $date1 in začetek leta $date2',
sv='sena $date1 och tidiga $date2',
uk='кінець $date1 — початок $date2 р.',
ur='اخیر $date1 و ابتدا $date2',
vi='bước sang năm $date2',
['zh-hans']='$date1年末$date2年初',
['zh-hant']='$date1年末$date2年初',
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='year', era1=state.era1, adj2 = 'early', unit2='year', era2=state.era2} end,
},
['circa2'] = {
nDates = 2,
ar='بين $date1 – $date2',
['be-tarask']={'прыкладна з $date1 да прыкладна $date2', case={'gen','gen'}},
bn='প্রায় $date1 এবং প্রায় $date2-এর মাঝামাঝি',
ca='cap a $date1 o $date2',
ckb='بە نزیکی لەنێوان $date1 و $date2',
cs='cca $date1 až $date2',
da='ca. mellem $date1 og $date2',
de='etwa $date1 bis $date2',
el='περίπου μεταξύ $date1 και $date2',
en='between circa $date1 and circa $date2',
['en-gb']='between circa $date1 and circa $date2',
['en-ca']='between circa $date1 and circa $date2',
eo='proksimume de $date1 ĝis $date2',
es='hacia $date1 o $date2',
et='ca. $date1 ja $date2 vahel',
fa='حدوداً بین $date1 و $date2',
fi={function(date1, date2, state) return 'suunnilleen ' .. decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}},
fr='vers $date1-$date2',
ga='idir $date1 go $date2',
gl='entre $date1 e $date2',
he='בסביבות ה- $date1 עד $date2',
hr={'približno između $date1 i $date2', case={'gen','gen'}},
hsb={'wot něhdźe $date1 do něhdźe $date2', case={'gen','gen'}},
hu='$date1 és $date2 között',
it='tra il $date1 e il $date2 circa',
ja='$date1頃と$date2頃の間',
ko='$date1경에서 $date2경 사이',
mk='~ помеѓу $date1 и $date2',
ml='ഉദ്ദേശം $date1-നും ഉദ്ദേശം $date2-നും ഇടയ്ക്ക്',
nb='ca. mellom $date1 og $date2',
nn='ca. mellom $date1 og $date2',
nds='üm un bi $date1 bet $date2',
nl='ca. $date1 tot $date2',
no='ca. mellom $date1 og $date2',
pl={'od około $date1 do około $date2', case={'gen','gen'}},
pt='cerca de $date1 a $date2',
qu="$date1 p'unchawmantachá $date2 p'unchawkamachá",
ro='circa $date1 – $date2',
ru={'с около $date1 до, примерно, $date2', case={'gen','gen'}},
sk='cca $date1 až $date2',
sl={function(date1, date2, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1 do $date2' end, case={'gen','gen'}},
sr='између ~ $date1 и ~ $date2',
sv='cirka $date1 till $date2',
uk={'з близько $date1 до, приблизно, $date2', case={'gen','gen'}},
ur='قریباً بین $date1 و $date2',
vi='giữa vào khoảng $date1 và vào khoảng $date2',
['zh-hans']='约$date1~$date2间',
['zh-hant']='約$date1~$date2間',
default=function(date1, date2, state) return {conj='between', adj1 = 'circa', unit1=state.unit1, era1=state.era1, adj2 = 'circa', unit2=state.unit2, era2=state.era2} end,
},
-- ==========================================
-- === Eras and calendars ===================
-- ==========================================
['julian'] = {
nDates = 2,
ar='$date1 ($date2 حسب [[w:ar:التقويم اليولياني|تقويم يولياني]])',
['be-tarask']='$date1 ($date2 паводле [[w:be-tarask:Юліянскі каляндар|ст. ст.]]',
bn='$date1 (জুলিয়ান ক্যালেন্ডারে $date2)',
ca='$date1 ($date2 segons el [[w:ca:Calendari julià|calendari julià]])',
ckb='$date1 ($date2 بەپێی [[w:ڕۆژژمێری جولیانی|ڕۆژژمێری جولیانی]])',
cs='$date1 ($date2 podle [[w:cs:Juliánský kalendář|juliánského kalendáře]])',
da='$date1 ($date2 [[w:da:Julianske kalender|Julianske kalender]])',
de='$date1 ($date2 [[w:de:Julianischer Kalender|Julianischer Kalender]])',
el='$date1 ($date2 με το [[w:el:Ιουλιανό ημερολόγιο|Ιουλιανό ημερολόγιο]])',
en='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
['en-gb']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
['en-ca']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
fa='$date1 ($date2 در [[w:fa:Old Style and New Style dates|تقویم جولیان]])',
eo='$date1 ($date2 laŭ la [[w:eo:Julia kalendaro|Julia Kalendaro]])',
es='$date1 ($date2 según el [[w:es:Calendario juliano|calendario juliano]])',
et='$date1 ($date2 [[w:et:Juliuse kalender|Juliuse kalendris]])',
fi='$date1 ($date2 [[w:fi:juliaaninen kalenteri|juliaanisen kalenterin]] mukaan)',
fr='$date1 ($date2 dans le [[w:fr:calendrier julien|calendrier julien]])',
ga='$date1 ($date2 sa [[w:ga:Féilire Iúil|féilire Iúil]])',
gl='$date1 ($date2 segundo o [[w:gl:Calendario xuliano|calendario xuliano]])',
hu='$date1 ($date2 a [[w:hu:Julianus-naptár|Julián naptárban]])',
hr='$date1 ($date2 prema [[w:hr:Julijanski kalendar|julijanskom kalendaru]])',
he='$date1 ($date2 ב[[w:he:לוח היוליאני|הלוח היוליאני]])',
hsb='$date1 ($date2 po julianiskej protyce)',
it='$date1 ($date2 secondo il [[w:it:Calendario giuliano|calendario giuliano]])',
ja='$date1([[w:ja:ユリウス暦|ユリウス暦]] $date2)',
ko='$date1 ([[w:ko:율리우스력|율리우스력]] $date2)',
mk='$date1 ($date2 по [[w:mk:Јулијански календар|Јулијанскиот календар]])',
ml='$date1 ([[w:ml:ജൂലിയൻ കാലഗണനാരീതി|ജൂലിയൻ വർഷത്തിൽ]] $date2)',
ml='$date1 ([[w:Old Style and New Style dates|ജൂലിയൻ കാലഗണനാരീതിയിൽ]] $date2)',
nds='$date1 ($date2 na’n [[w:nds:Juliaansch Klenner|Juliaanschen Klenner]])',
nb='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalenderen]])',
nn='$date1 ($date2 etter [[w:nn:den julianske kalenderen|den julianske kalenderen]])',
nl='$date1 ($date2 volgens de [[w:nl:Juliaanse kalender|Juliaanse kalender]])',
no='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalender]])',
pl='$date1 ($date2 wedle [[w:pl:Daty nowego i starego porządku|kalendarza juliańskiego]])',
pt='$date1 ($date2 no [[w:pt:Mudança para o calendário gregoriano|calendário juliano]])',
qu='$date1 ($date2 [[w:qu:Hulyanu kalindaryu|Hulyanu kalindaryupi]])',
ro='$date1 ($date2 în [[w:ro:calendarul iulian|calendarul iulian]])',
ru='$date1 ($date2 [[w:ru:Юлианский календарь|по ст. ст.]])',
sk='$date1 ($date2 podľa [[w:sk:Juliánsky kalendár|juliánskeho kalendára]])',
sl='$date1 ($date2 po [[w:sl:Julijanski koledar|julijanskem koledarju]])',
sr='$date1 ($date2 према [[w:sr:Јулијански календар|јулијанском календару]])',
sv='$date1 ($date2 [[w:sv:Gamla stilen|gamla stilen]])',
uk='$date1 ($date2 [[w:uk:Юліанський календар|Юліанський календар]])',
ur='$date1 ($date2 حسب [[w:ur:نئے اور پانے انداز کی تاریخ|جولین تقویم]])',
vi='$date1 ($date2 trong [[w:vi:Lịch Julius|lịch Juliêng]])',
['zh-hans']='$date1([[w:Old Style and New Style dates|格里历]]$date2)',
['zh-hant']='$date1([[w:Old Style and New Style dates|格里曆]]$date2)',
default='<span style="color:red">$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])</span>',
},
['ad'] = {
nDates = 1,
['be-tarask']='$date1 [[w:be-tarask:ад Нараджэньня Хрыста|пасьля Н. Х.]]',
bn ='$date1 খ্রিস্টাব্দ',
ca ='$date1 dC',
ckb ='$date1 [[w:ckb:ئانۆ دۆمینی|پاز]]',
cs ='$date1 n. l.',
de ='$date1 n. Chr.',
el ='$date1 μ.Χ.',
en ='$date1 [[w:en:Anno Domini|AD]]',
['en-gb'] ='$date1 [[w:en:Anno Domini|AD]]',
['en-ca'] ='$date1 [[w:en:Anno Domini|AD]]',
eo ='$date1 pK',
es ='$date1 [[w:es:Anno Dómini|d. C.]]',
fa ='$date1 م.',
fi ='$date1 jaa.',
fr ='$date1 ap. J.-C.',
gl ='$date1 d.C.',
he ='$date1 לספירה',
hu ='i. sz. $date1',
hr ='$date1 pr. Kr.',
hsb='$date1 po Chr.',
it ='$date1 d.C.',
ja ='西暦$date1',
ko ='서기 $date1',
mk ='$date1 н.е.',
ml ='ക്രി.വ. $date1',
nb ='$date1 e.Kr.',
nl ='$date1 n.Chr.',
nn ='$date1 e.Kr.',
no ='$date1 e.Kr.',
pl ='$date1 [[w:pl:naszej ery|n.e.]]',
pt ='$date1 [[:pt:Anno Domini|AD]]',
ro ='$date1 d.Hr.',
ru ='$date1 н. э.',
sk ='$date1 po Kr.',
sl ='$date1 n. št.',
sr ='$date1 [[w:sr:Anno Domini|AD]]',
sv ='$date1 [[w:sv:Efter Kristus|e.Kr.]]',
uk ='$date1 н. е.',
ur ='$date1 ء',
vi ='$date1 [[w:vi:Công Nguyên|CN]]',
['zh-hans'] ='[[w:zh:基督纪年|公元]]$date1',
['zh-hant'] ='[[w:zh:基督纪年|公元]]$date1',
default='<span style="color:red">$date1 [[w:en:Anno Domini|AD]]</span>',
},
['ah'] = {
nDates = 1,
['be-tarask']='$date1 [[w:be-tarask:Ісламскі каляндар|хіджры]]',
bn ='$date1 [[w:bn:ইসলামি বর্ষপঞ্জি|হিজরী]]',
ckb ='$date1 [[w:ckb:ساڵی کۆچی|سک]]',
cs ='$date1 [[w:cs:Anno Hegirae|AH]]',
de ='$date1 [[w:de:Anno Hegirae|AH]]',
en ='$date1 [[w:en:Hijri year|AH]]',
['en-gb'] ='$date1 [[w:en:Hijri year|AH]]',
['en-ca'] ='$date1 [[w:en:Hijri year|AH]]',
eo ='$date1 post la [[w:eo:Heĝiro|Heĝiro]]',
fa ='$date1 ه.ق.',
fr ='$date1 [[w:fr:Calendrier musulman|A.H.]]',
he ="$date1 [[w:he:הלוח המוסלמי|להג'רה]]",
hr ='$date1 god. hidžre',
ja ='[[w:ja:ヒジュラ暦|ヒジュラ暦]]$date1',
ko ='히즈라력 $date1',
ml ='$date1 [[w:ml:ഇസ്ലാമിക കലണ്ടർ|ഹിജ്റ]]',
nb ='$date1 [[w:no:Den muslimske kalenderen|A.H.]]',
nn ='$date1 [[w:nn:Den muslimske kalenderen|A.H.]]',
pl ='$date1 [[w:pl:Kalendarz muzułmański|A.H.]]',
pt ='$date1 [[:pt:Ano da Hégira|AH]]',
ru ='$date1 [[w:ru:Исламский календарь|хиджры]]',
sk ='$date1 [[w:sk:A. H.|A. H.]]',
sl ='$date1 [[w:sl:Islamski koledar|leto hidžre]]',
sr ='$date1 [[w:sr:Исламски календар|хиџретска година]]',
sv ='$date1 [[w:sv:Muslimska kalendern|A.H.]]',
uk ='$date1 [[w:uk:Мусульманський календар|хіджри]]',
ur ='$date1 ھ',
vi ='$date1 [[w:vi:Lịch Hồi giáo|AH]]',
['zh-hans'] ='[[w:zh:伊斯兰历|伊斯兰历]]$date1',
['zh-hant'] ='[[w:zh:伊斯蘭曆|伊斯蘭曆]]$date1',
default='<span style="color:red">$date1 [[w:en:Hijri year|AH]]</span>',
},
['bc'] = {
nDates = 1,
ar ='$date1 ق.م.',
['be-tarask']='$date1 [[w:be-tarask:да Нараджэньня Хрыста|да Н. Х.]]',
bn ='খ্রিস্টপূর্ব $date1',
ca ='$date1 [[w:ca:Abans de Crist|aC]]',
ckb ='$date1 [[w:ckb:پێش زایین|پز]]',
cs ='$date1 [[w:cs:Př. n. l.|př. n. l.]]',
de ='$date1 [[w:de:v. Chr.|v. Chr.]]',
el ='$date1 π.Χ.',
en ='$date1 [[w:en:Ante Christum Natum|BC]]',
['en-gb'] ='$date1 [[w:en:Ante Christum Natum|BC]]',
['en-ca'] ='$date1 [[w:en:Ante Christum Natum|BC]]',
eo ='$date1 aK',
es ='$date1 [[w:es:Antes de Cristo|a. C.]]',
fa ='$date1 پ.م.',
fi ='$date1 eaa.',
fr ='$date1 av. J.-C.',
gl ='$date1 [[w:gl:Antes de Cristo|a.C.]]',
he ='$date1 לפני הספירה',
hr ='$date1 [[w:hr:Pr. Kr.|pr. Kr.]]',
hsb='$date1 do Chr.',
hu ='i. e. $date1',
it ='$date1 [[w:it:Avanti Cristo|a.C.]]',
ja ='[[w:ja:紀元前|紀元前]]$date1',
ko ='기원전 $date1',
mk ='$date1 п.н.е.',
ml ='ക്രി.മു. $date1',
nds='$date1 vör uns Tied',
nb ='$date1 f.Kr.',
nl ='$date1 v.Chr.',
nn ='$date1 f.Kr.',
no ='$date1 f.Kr.',
pl ='$date1 [[w:pl:przed naszą erą|p.n.e.]]',
pt ='$date1 [[w:en:Ante Christum Natum|a.C.]]',
ro ='$date1 î.Hr.',
ru ='$date1 до н. э.',
sk ='$date1 [[w:sk:Pred Kristom|pred Kr.]]',
sl ='$date1 pr. n. št.',
sr ='$date1 [[w:sr:Ante Christum Natum|пре Христа]]',
sv ='$date1 [[w:sv:Före Kristus|f.Kr.]]',
uk ='$date1 до н. е.',
ur ='$date1 ق م',
vi ='$date1 [[w:vi:Trước Công Nguyên|TCN]]',
['zh-hans'] ='[[w:zh:基督纪年|公元前]]$date1',
['zh-hant'] ='[[w:zh:基督纪年|公元前]]$date1',
default='<span style="color:red">$date1 [[w:en:Ante Christum Natum|BC]]</span>',
},
['bp'] = {
nDates = 1,
ar ='$date1 [[w:ar:قبل الحاضر|قبل الحاضر]]',
be ='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]',
['be-tarask']='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]',
bn ='বর্তমানের আগে $date1',
ca ='$date1 [[w:ca:BP (unitat de temps)|BP]]',
ckb ='$date1 [[w:ckb:پێش ئێستا|پێش ئێستا]]',
cs ='$date1 [[w:cs:B. P.|B. P.]]',
de ='$date1 [[w:de:Before Present|BP]]',
el ='$date1 [[w:en:Before Present|BP]]',
en ='$date1 [[w:en:Before Present|BP]]',
['en-gb'] ='$date1 [[w:en:Before Present|BP]]',
['en-ca'] ='$date1 [[w:en:Before Present|BP]]',
eo='$date1 [[w:eo:Before Present|BP]]',
es ='$date1 [[w:es:Before Present|BP]]',
et ='$date1 [[w:et:Before Present|BP]]',
fa ='$date1 [[w:fa:پیش از امروز|پیش از امروز]]',
fi ='$date1 [[w:fi:BP (ajanlasku)|BP]]',
fr ='$date1 [[w:fr:Avant le présent|avant le présent]]',
hr ='$date1 [[w:hr:BP|prije današnjice]]',
it ='$date1 [[w:it:Before Present|BP]]',
ja ='$date1 [[w:ja:BP (年代測定)|BP]]',
ko ='$date1 [[w:ja:BP (고고학)|BP]]',
lv ='$date1 [[w:lv:Pirms mūsdienām|Pirms mūsdienām]]',
mk ='$date1 [[w:mk:Пред сегашноста|п.с.]]',
ml ='[[w:en:Before Present|ഇന്നത്തെ കാലത്തിനു മുമ്പ്]] $date1',
nb ='$date1 [[w:no:Before Present|BP]]',
nn ='$date1 [[w:nn:Before Present|BP]]',
nl ='$date1 [[w:nl:Before Present|BP]]',
no ='$date1 [[w:no:Before Present|BP]]',
pl ='$date1 [[w:pl:Before Present|BP]]',
pt ='$date1 [[w:pt:Antes do Presente|Antes do Presente]]',
ru ='$date1 [[w:ru:До настоящего времени|до н. в.]]',
sk ='$date1 [[w:sk:BP (čas)|BP]]',
sl ='$date1 [[w:sl:pred sedanjostjo|p. s.]]',
sr ='$date1 [[w:sr:Прије садашњости|Прије садашњости]]',
sv ='$date1 [[w:sv:B.P.|B.P.]]',
uk ='$date1 [[w:uk:Років тому|Років тому]]',
ur ='$date1 قبل حاضر',
vi ='$date1 [[w:en:Before Present|trước ngày nay]]',
['zh-hans'] ='[[w:zh:距今|距今]]$date1',
['zh-hant'] ='[[w:zh:距今|距今]]$date1',
default='<span style="color:red">$date1 [[w:en:Before Present|BP]]</span>',
},
}
-- List of possible string inputs to "adj", "junction", "era", and "precision" fields
-- Each term is matched to its synonym and the role: a - adjective, e - era
-- p - precision, c - calendar and combos, r - certainty and j - conjunction
p.Synonyms = {
-- adjectives and prepositions
['quarter1']={'1quarter','a'},
['1stquarter']={'1quarter','a'},
['1st quarter']={'1quarter','a'},
['first quarter']={'1quarter','a'},
['1quarter']={'1quarter','a'},
['quarter2']={'2quarter','a'},
['2ndquarter']={'2quarter','a'},
['2nd quarter']={'2quarter','a'},
['second quarter']={'2quarter','a'},
['2quarter']={'2quarter','a'},
['quarter3']={'3quarter','a'},
['3rdquarter']={'3quarter','a'},
['3rd quarter']={'3quarter','a'},
['third quarter']={'3quarter','a'},
['3quarter']={'3quarter','a'},
['quarter4']={'4quarter','a'},
['4thquarter']={'4quarter','a'},
['4th quarter']={'4quarter','a'},
['fourth quarter']={'4quarter','a'},
['4quarter']={'4quarter','a'},
['spring']={'spring','a'},
['summer']={'summer','a'},
['fall']={'autumn','a'},
['autumn']={'autumn','a'},
['winter']={'winter','a'},
['beginning']={'early','a'},
['early']={'early','a'},
['1half']={'firsthalf','a'},
['1sthalf']={'firsthalf','a'},
['1st half']={'firsthalf','a'},
['firsthalf']={'firsthalf','a'},
['first half']={'firsthalf','a'},
['end']={'late','a'},
['late']={'late','a'},
['middle']={'mid','a'},
['mid']={'mid','a'},
['2half']={'secondhalf','a'},
['2ndhalf']={'secondhalf','a'},
['2nd half']={'secondhalf','a'},
['secondhalf']={'secondhalf','a'},
['second half']={'secondhalf','a'},
['<']={'before','a'},
['b']={'before','a'},
['before']={'before','a'},
['>']={'after','a'},
['a']={'after','a'},
['after']={'after','a'},
['~']={'circa','a'},
['c']={'circa','a'},
['ca']={'circa','a'},
['circa']={'circa','a'},
['by']={'by','a'},
['from']={'from','a'},
['until']={'until','a'},
['uncertain']={'uncertain','r'},
['possibly']={'possibly','r'},
['probably']={'probably','r'},
['presumably']={'presumably','r'},
-- eras
['bc']={'bc','e'},
['bce']={'bc','e'},
['before present']={'bp','e'},
['bp']={'bp','e'},
['ce']={'ad','e'},
['ad']={'ad','e'},
['ah']={'ah','e'},
-- conjunctions
['&']={'and','j'},
['and']={'and','j'},
['or']={'or','j'},
['-']={'from-until','j'},
['–']={'from-until','j'},
['from-until']={'from-until','j'},
['between']={'between','j'},
['circa2']={'circa2','a'},
-- precision
['day']={'day','p'},
['month']={'month','p'},
['year']={'year','p'},
['s']={'decade','p'},
['decade']={'decade','p'},
['century']={'century','p'},
['millennium']={'millennium','p'},
['million']={'million','p'},
['billion']={'billion','p'},
-- calendar
['julian']={'julian','c'},
['islamic']={'islamic','c'},
['hijri']={'islamic','c'},
-- "Turn of the ..." options are a combos which will be handled in similar way as calendars
['turn of the century']={'turn of the century','c'},
['century turn']={'turn of the century','c'},
['turn of the decade']={'turn of the decade','c'},
['decade turn']={'turn of the decade','c'},
['turn of the year']={'turn of the year','c'},
['year turn']={'turn of the year','c'},
-- other dates which will be handled in similar way as calendars
['?']={'unknown','c'},
['unknown']={'unknown','c'},
['unknown year']={'year unknown','c'},
['year unknown']={'year unknown','c'},
}
return p
frjqd9q2iw3lxgde4z7u2i234a88jr5
10654
10653
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:I18n/complex_date]]
10653
Scribunto
text/plain
--[[
__ __ _ _ ___ _ ___ __ _ _ _
| \/ | ___ __| |_ _| | ___ _|_ _/ |( _ ) _ __ / /__ ___ _ __ ___ _ __ | | _____ __ __| | __ _| |_ ___
| |\/| |/ _ \ / _` | | | | |/ _ (_)| || |/ _ \| '_ \ / / __/ _ \| '_ ` _ \| '_ \| |/ _ \ \/ / / _` |/ _` | __/ _ \
| | | | (_) | (_| | |_| | | __/_ | || | (_) | | | |/ / (_| (_) | | | | | | |_) | | __/> < | (_| | (_| | || __/
|_| |_|\___/ \__,_|\__,_|_|\___(_)___|_|\___/|_| |_/_/ \___\___/|_| |_| |_| .__/|_|\___/_/\_\ \__,_|\__,_|\__\___|
|_|
This code was copied from Commons please request changes there.
Maintainers:
*Jarekt
]]
-- ==========================================================================
-- === External modules and functions (use Lazy loading) ===================
-- ==========================================================================
local function Ordinal(...)
-- Name of the Module:
-- * Module:Ordinal - on Commons and Wikidata
-- * Module:Ordinal-cd - on English Wikipedia
return require('Module:Ordinal')._Ordinal(...)
end
local function Roman(...)
-- Name of the Module:
-- * Module:Roman - on Commons and Wikidata
-- * Module:Roman-cd - on English Wikipedia
return require('Module:Roman')._Numeral(...)
end
local function linguistic_of(...)
return require('Module:Linguistic').of(...)
end
local function linguistic_conj(...)
return require('Module:Linguistic').conj(...)
end
-- ==========================================================================
-- === Local Helper functions ==============================================
-- ==========================================================================
-- form of French "of" based on "precision", which is wikibase compatible date precision format:
-- 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
-- 1 2 3 4 5 mill cent deca year month day
local frOf = {'du','du','du','du','du', 'du', 'du', 'de', 'de', 'de', 'du'}
local function decYear(state,lang,case)
--Declension of word "year" in several languages
if state.precision == 9 then
local yearCase = {
fi={xxx='vuosien', gen='vuoden', ill='vuoteen', ptv='vuotta', ela='vuodesta', ine='vuonna'},
sl={insD='letoma', insP='leti', ins='letom', gen='leta', loc='letu'},
hsb={insP='lětami', ins='lětom', gen='lěta', loc='lěće'}
}
return yearCase[lang][case] .. ' '
else
return ''
end
end
local function decCentury(lang,case)
--Declension of word "century" in several languages
local centuryCase = {
pl={nom='wiek', gen='wieku', ins='wiekiem', loc='wieku', default = 'wiek'},
hsb={nom='lětstotk', gen='lětstotka', ins='lětstotkom', loc='lětstotku', default = 'lětstotk'},
sl={nom='stoletje', gen='stoletja', dat='stoletju', acc='stoletje', ins='stoletju', loc='stoletju', default = 'stoletje'}
}
return centuryCase[lang][case] or centuryCase[lang]['default']
end
local function decMillennium(lang,case)
--Declension of word "century" in several languages
local millenniumCase = {
pl={nom='tysiąclecie', gen='tysiąclecia', ins='tysiącleciem', loc='tysiącleciu', default = 'tysiąclecie'},
hsb={nom='lěttysac', gen='lěttysaca', ins='lěttysacom', loc='lěttysacu', default = 'lěttysac'},
sl={nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletju', loc='tisočletjem', default = 'tisočletje'}
}
return millenniumCase[lang][case] or millenniumCase[lang]['default']
end
local plDeclension = { -- Polish Declensions of some terms
-- kto? co? (jest) kogo? czego?(brak) komu? czemu? kogo? co? (widzę) kim? czym? o kim? o czym? (mówię)
century = {nom='wiek', gen='wieku', dat='wiekowi', acc='wiek', ins='wiekiem', loc='wieku'},
millenium = {nom='tysiąclecie', gen='tysiąclecia', dat='tysiącleciu', acc='tysiąclecie', ins='tysiącleciem', loc='tysiącleciu'},
winter = {nom='zima', gen='zimy', dat='zimie', acc='zimę', ins='zimą', loc='zimie'},
spring = {nom='wiosna', gen='wiosny', dat='wiośnie', acc='wiosnę', ins='wiosną', loc='wiośnie'},
summer = {nom='lato', gen='lata', dat='latu', acc='lato', ins='latem', loc='lecie'},
autumn = {nom='jesień', gen='jesieni', dat='jesieni', acc='jesień', ins='jesienią', loc='jesieni'},
years = {nom='lata', gen='lat', dat='latom', acc='lata', ins='latami', loc='latach'}
}
local slDeclension = { -- Slovene declensions of some terms
-- kdo ali kaj? koga ali česa? komu ali čemu? koga ali kaj? (s) kom ali čim? (o) kom ali čem?
century = {nom='stoletje', gen='stoletja', dat='stoletjem', acc='stoletje', ins='stoletjem', loc='stoletju'},
millenium = {nom='tisočletje', gen='tisočletja', dat='tisočletju', acc='tisočletje', ins='tisočletjem', loc='tisčletju'},
winter = {nom='zima', gen='zime', dat='zimi', acc='zimi', ins='zimo', loc='zimi'},
spring = {nom='pomlad', gen='pomladi', dat='pomladi', acc='pomlad', ins='pomladjo', loc='pomladi'},
summer = {nom='leto', gen='poletja', dat='poletju', acc='poletje', ins='poletjem', loc='poletju'},
autumn = {nom='jesen', gen='jeseni', dat='jeseni', acc='jesen', ins='jesenjo', loc='jeseni'},
years = {nom='leta', gen='let', dat='letom', acc='leta', ins='leti', loc='letih'}
}
-- ==========================================================================
-- === Output data structure ===============================================
-- ==========================================================================
local p = {}
--[[
Multiple formats are possible:
1) string with key words "$date1" and "$date2" which will be replaced later by the date strings
2) function which can be used to create output string
* Function INPUTS:
- date1 and date2 string with date strings. "$date1" and "$date2" can also be used which will be replaced latter
- state is a table with full description of the phrase we are trying to construct. It includes state.precision1 (and 2)
which is wikibase compatible date precision format: 6=millennium, 7=century, 8=decade, 9=year, 10=month, 11=day
3) table with following fields:
* table[1] is either string or a function
* table.case is a 2 element table with Grammatical cases used by given language to alter
month name or other adjective related to date # 1 and 2
]]
p.Translations = {
-- ==========================================
-- === Two date phrases =====================
-- ==========================================
['from-until'] = {
nDates = 2,
ar='من $date1 إلى $date2',
['be-tarask']={'з $date1 да $date2', case={'gen','gen'}},
bn='$date1 থেকে $date2 পর্যন্ত',
ca='$date1 fins $date2',
ckb='لە $date1 تاوەکوو $date2',
cs='$date1 až $date2',
da='fra $date1 til $date2',
de='$date1 bis $date2',
el='από $date1 έως $date2',
en='from $date1 until $date2',
['en-gb']='from $date1 until $date2',
['en-ca']='from $date1 until $date2',
eo='de $date1 al $date2',
es='de $date1 a $date2',
et='$date1 kuni $date2',
fa='از $date1 تا $date2',
fi='$date1–$date2', -- välisenä aikana
fr=function(date1, date2, state) -- could actually be better should be "d'octobre à mars 2013' not "de octore 2013 à mars 2013"
if state.precision > 10 then -- precision > month
return 'du $date1 au $date2'
else -- "DE septebmbre" / "D'octobre"
return linguistic_of(date1, 'fr') .. " à $date2"
end
end,
ga='ó $date1 go $date2',
gl='de $date1 a $date2', --Template:From until used 'desde $date1 ata $date2'
he='מ- $date1 עד $date2',
hr={'od $date1 do $date2', case={'gen','gen'}},
hsb={'wot $date1 do $date2', case={'gen','gen'}},
hu='$date1 – $date2',
it='dal $date1 al $date2',
ja='$date1から$date2まで',
ko='$date1부터 $date2까지',
mk='од $date1 до $date2',
ml='$date1 മുതൽ $date2 വരെ',
nb='fra $date1 til $date2',
nds='$date1 bet $date2',
nn='frå $date1 til $date2',
nl='$date1 tot $date2',
no='fra $date1 til $date2',
pl={'od $date1 do $date2', case={'gen','gen'}},
ro='din $date1 până în $date2',
pt='de $date1 a $date2',
qu="$date1 p'unchawmanta $date2 p\'unchawkama",
ru={'с $date1 по $date2', case={'gen','gen'}},
sk={'od $date1 do $date2', case={'gen','gen'}},
sl={'od $date1 do $date2', case={'gen','gen'}},
sr='од $date1 до $date2',
sv='från $date1 till $date2',
uk={'з $date1 до $date2', case={'gen','gen'}},
ur='از $date1 تا $date2',
vi='từ $date1 đến $date2',
['zh-hans']='从$date1到$date2',
['zh-hant']='從$date1到$date2',
default='<span style="color:red">$date1 - $date2</span>',
},
['between']={
nDates = 2,
ar='بين $date1 و $date2',
['be-tarask']={'між $date1 і $date2', case={'ins','ins'}},
bn='$date1 এবং $date2-এর মাঝামাঝি',
ca='entre $date1 i $date2',
ckb='لەنێوان $date1 و $date2',
cs={'mezi $date1 a $date2', case={'ins','ins'}},
da='mellem $date1 og $date2',
de='zwischen $date1 und $date2',
el='μεταξύ $date1 και $date2',
en='between $date1 and $date2',
['en-gb']='between $date1 and $date2',
['en-ca']='between $date1 and $date2',
eo='inter $date1 kaj $date2',
es='entre $date1 y $date2',
et='$date1 ja $date2 vahel',
fa='بین $date1 و $date2',
fi={function(date1, date2, state) return decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}},
fr = function(date1, date2, state)
-- prepend ‘le’ if precision > month
local prep1 = state.precision1 > 10 and 'le ' or ''
local prep2 = state.precision2 > 10 and 'le ' or ''
return 'entre ' .. prep1 .. '$date1 et ' .. prep2 .. '$date2'
end,
ga='idir $date1 agus $date2',
gl='entre $date1 e $date2',
he='בין $date1 ו- $date2',
hr={'između $date1 i $date2', case={'gen','gen'}},
hsb={'mjez $date1 a $date2', case={'ins','ins'}},
hu='$date1 és $date2 között',
hi='$date1 और $date2 के बीच',
it='tra il $date1 e il $date2',
ja='$date1と$date2の間',
ko='$date1에서 $date2 사이',
mk='помеѓу $date1 и $date2',
ml='$date1, $date2 എന്നിവയ്ക്കിടയ്ക്ക്',
nb='mellom $date1 og $date2',
nds='twischen $date1 un $date2',
nn='mellom $date1 og $date2',
nl='tussen $date1 en $date2',
no='mellom $date1 og $date2',
pl={'między $date1 a $date2', case={'ins','ins'}},
ro='între $date1 și $date2',
pt='entre $date1 e $date2',
qu="$date1 p'unchawpa $date2 p'unchawpapas chawpin",
ru={'между $date1 и $date2', case={'ins','ins'}},
sk={'medzi $date1 a $date2', case={'ins','ins'}},
sl={function(date1, date2, state) return 'med ' .. decYear(state,'sl','insP') .. '$date1 in $date2' end, case={'ins','ins'}},
sr='између $date1 и $date2',
sv='mellan $date1 och $date2',
uk={'між $date1 та $date2', case={'ins','ins'}},
ur='بین $date1 و $date2',
vec='tra el $date1 e el $date2',
vi='giữa $date1 và $date2',
['zh-hans']='在$date1到$date2之间',
['zh-hant']='在$date1到$date2之間',
default='<span style="color:red">$date1 - $date2</span>',
},
['or'] = {
nDates = 2,
ar='$date1 أو $date2',
['be-tarask']='$date1 ці $date2',
bn='$date1 অথবা $date2',
ca='$date1 o $date2',
ckb='$date1 یان $date2',
cs='$date1 nebo $date2',
da='$date1 eller $date2',
de='$date1 oder $date2',
el='$date1 ή $date2',
en='$date1 or $date2',
['en-gb']='$date1 or $date2',
['en-ca']='$date1 or $date2',
eo='$date1 aŭ $date2',
es='$date1 o $date2',
et='$date1 või $date2',
fa='$date1 یا $date2',
fi='$date1 tai $date2',
fr='$date1 ou $date2',
ga='$date1 nó $date2',
gl='$date1 ou $date2',
he='$date1 או $date2',
hr='$date1 ili $date2',
hsb='$date1 abo $date2',
hu='$date1 vagy $date2',
it='$date1 o $date2',
ja='$date1または$date2',
ko='$date1 또는 $date2까지',
mk='$date1 или $date2',
ml='$date1 അഥവാ $date2',
nb='$date1 eller $date2',
nn='$date1 eller $date2',
nds='$date1 oder $date2',
nl='$date1 of $date2',
no='$date1 eller $date2',
pl='$date1 lub $date2',
pt='$date1 ou $date2',
qu='$date1 icha $date2',
ro='$date1 sau $date2',
ru='$date1 или $date2',
sk='$date1 alebo $date2',
sl='$date1 ali $date2',
sr='$date1 или $date2',
sv='$date1 eller $date2',
uk='$date1 або $date2',
ur='$date1 یا $date2',
th='$date1 หรือ $date2',
vi='$date1 hoặc $date2',
['zh-hans']='$date1或$date2',
['zh-hant']='$date1或$date2',
default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'or') end,
},
['and'] = {
nDates = 2,
ar='$date1 و $date2',
['be-tarask']='$date1 і $date2',
bn='$date1 এবং $date2',
ca='$date1 i $date2',
ckb='$date1 و $date2',
cs='$date1 a $date2',
da='$date1 og $date2',
de='$date1 und $date2',
el='$date1 και $date2',
en='$date1 and $date2',
['en-gb']='$date1 and $date2',
['en-ca']='$date1 and $date2',
eo='$date1 kaj $date2',
es='$date1 y $date2',
et='$date1 ja $date2',
fa='$date1 و $date2',
fi='$date1 ja $date2',
fr='$date1 et $date2',
ga='$date1 agus $date2',
gl='$date1 e $date2',
he='$date1 ו- $date2',
hu='$date1 és $date2',
hsb='$date1 a $date2',
it='$date1 e $date2',
ja='$date1および$date2',
ko='$date1 및 $date2',
mk='$date1 и $date2',
ml='$date1 ഒപ്പം $date2',
nb='$date1 og $date2',
nn='$date1 og $date2',
nds='$date1 un $date2',
nl='$date1 en $date2',
no='$date1 og $date2',
pl='$date1 i $date2',
pt='$date1 e $date2',
qu='$date1wan $date2pas',
ro='$date1 și $date2',
ru='$date1 и $date2',
sk='$date1 a $date2',
sl='$date1 in $date2',
sr='$date1 и $date2',
sv='$date1 och $date2',
uk='$date1 та $date2',
ur='$date1 و $date2',
vi='$date1 và $date2',
['zh-hans']='$date1和$date2',
['zh-hant']='$date1和$date2',
default=function(date1, date2, state) return linguistic_conj({date1, date2}, state.lang, 'and') end,
},
-- ==========================================
-- === Prepositions =========================
-- ==========================================
['by'] = {
nDates = 1,
ar='بحلول $date1',
['be-tarask']={'да $date1', case={'gen',''}},
bn='$date1 কর্তৃক',
ca='vers $date1',
ckb='نزیکی $date1',
cs={'kolem $date1', case={'gen',''}},
da='mod $date1',
de='spätestens $date1',
el='έως $date1',
en='by $date1',
['en-gb']='by $date1',
['en-ca']='by $date1',
eo='ne post $date1',
es='para $date1',
et='hiljemalt $date1',
fa='توسط $date1',
fi={function(date1, state) return decYear(state,'fi','ill') .. '$date1 mennessä' end, case={'ill',''}},
fr='$date1 (au plus tard)',
ga='faoi $date1',
gl='cara a $date1',
he='עד $date1',
hr={'do $date1', case={'gen',''}},
hsb={'do $date1', case={'gen',''}},
it='entro il $date1',
ja='$date1まで',
ko='$date1까지',
mk='кон $date1',
ml='$date1-ൽ',
nb='innen $date1',
nn='innan $date1',
nds='$date1 oder vördem al',
nl='tegen $date1',
no='innen $date1',
pl={'przed $date1', case={'ins',''}},
pt='por $date1',
qu="$date1 p'unchawkama",
ro='de $date1',
ru={'к $date1', case={'dat',''}},
sk={'okolo $date1', case={'gen',''}},
sl={function(date1, state) return 'najpozneje ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='до $date1',
sv='senast $date1',
uk={'до $date1', case={'dat',''}},
ur='توسط $date1',
vi='vào $date1', -- need to insert "đã" somewhere later in the sentence -->
['zh-hans']='$date1前后',
['zh-hant']='$date1前後',
default='<span style="color:red">by $date1</span>',
},
['before'] = {
nDates = 1,
ar='قبل $date1',
['be-tarask']={'перад $date1', case={'ins',''}},
bn='$date1-এর আগে',
bg='Преди $date1',
ca='abans $date1',
ckb='پێش $date1',
cs={'před $date1', case={'ins',''}},
da='før $date1',
de='vor $date1',
el='πριν από $date1',
en='before $date1',
['en-gb']='before $date1',
['en-ca']='before $date1',
eo='antaŭ $date1',
es='antes de $date1',
et='enne $date1',
fa='پیش از $date1',
fi={function(date1, state) return 'ennen ' .. decYear(state,'fi','ptv') .. '$date1' end, case={'ptv',''}},
fr='avant $date1',
ga='roimh $date1',
gl='antes do $date1',
he='לפני $date1',
hr={'prije $date1', case={'gen',''}},
hsb={'do $date1', case={'gen',''}},
hu='$date1 előtt',
it='prima del $date1',
ja='$date1より前',
ko='$date1 전',
mk='пред $date1',
ml='$date1-നു മുമ്പ്',
nb='før $date1',
nn='før $date1',
nds='vör $date1',
nl='voor $date1',
no='før $date1',
pl={'przed $date1', case={'ins',''}},
pt='antes de $date1',
qu="$date1 p'unchaw ñawpan",
ro='înainte de $date1',
ru={'ранее $date1', case={'gen',''}},
sk={'pred $date1', case={'ins',''}},
sl={function(date1, state) return 'pred ' .. decYear(state,'sl','ins') .. ' $date1' end, case={'ins',''}},
sr='пре $date1',
sv='före $date1',
uk={'до $date1', case={'gen',''}},
ur='قبل $date1',
vi='trước $date1',
['zh-hans']='在$date1之前',
['zh-hant']='在$date1之前',
default='<span style="color:red">before $date1</span>',
},
['from'] = {
nDates = 1,
ar='من $date1',
['be-tarask']={'з $date1', case={'gen',''}},
bn='$date1 থেকে',
ckb='لە $date1',
cs={'od $date1', case={'gen',''}},
de='seit $date1',
el='από $date1',
en='from $date1',
['en-gb']='from $date1',
['en-ca']='from $date1',
eo='ekde $date1',
es='desde $date1',
et='alates $date1',
fa='از $date1',
fi={function(date1, state) return decYear(state,'fi','ela') .. '$date1 alkaen' end, case={'ela',''}},
fr= function(date1, state) return 'à partir '.. frOf[state.precision] ..' $date1' end,
ga='as $date1',
gl='desde o $date1',
he='מ- $date1',
hr={'od $date1', case={'gen',''}},
hsb={'wot $date1', case={'gen',''}},
it='dal $date1',
ja='$date1から',
ko='$date1부터',
nds='vonaf $date1',
mk='од $date1',
nb='fra $date1',
nn='frå $date1',
ml='$date1 മുതൽ',
nl='vanaf $date1',
no='fra $date1',
pl={'od $date1', case={'gen',''}},
pt='desde $date1',
qu="$date1 p'unchawmanta",
ro='din $date1',
ru={'С $date1', case={'gen',''}},
sk={'od $date1', case={'gen',''}},
sl={function(date1, state) return 'od ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='од $date1',
sv='från $date1',
uk={'з $date1', case={'gen',''}},
ur='از $date1',
vi='từ $date1',
['zh-hans']='自$date1',
['zh-hant']='自$date1',
default='<span style="color:red">from $date1</span>',
},
['until'] = {
nDates = 1,
ar = 'حتى $date1',
['be-tarask']={'усутыч да $date1', case={'gen',''}},
bn='$date1 পর্যন্ত',
ckb='تاوەکوو $date1',
cs={'do $date1', case={'gen', ''}},
de='bis $date1',
en='until $date1',
['en-gb']='until $date1',
['en-ca']='until $date1',
eo='ĝis $date1',
es='hasta $date1',
fr=function(date1, state)
if state.precision > 10 then -- precision > month
return "jusqu'au $date1"
else
return "jusqu'à $date1"
end
end,
ga='go dtí $date1',
hr={'do $date1', case={'gen',''}},
hsb={'do $date1', case={'gen',''}},
it='al $date1',
ko='$date1까지',
nb='til $date1',
nl='tot $date1',
nn='til $date1',
ml='$date1 വരെ',
pl={'do $date1', case={'gen',''}},
pt='até $date1',
ru={'не позже $date1', case={'gen',''}},
sk={'do $date1', case={'gen', ''}},
sl={'do $date1', case={'gen', ''}},
sr='до $date1',
uk={'аж до $date1', case={'gen',''}},
ur='تک $date1',
['zh-hans']='直到$date1',
['zh-hant']='直到$date1',
default='<span style="color:red">until $date1</span>',
},
['after'] = {
nDates = 1,
ar='بعد $date1',
['be-tarask']={'пасьля $date1', case={'gen',''}},
bn='$date1-এর পরে',
ca='després de $date1',
ckb='دوای $date1',
cs={'po $date1', case={'loc',''}},
de='nach $date1',
da='efter $date1',
el='μετά από $date1',
en='after $date1',
['en-gb']='after $date1',
['en-ca']='after $date1',
eo='post $date1',
es='después de $date1',
et='pärast $date1',
fa='پس از $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 jälkeen' end, case={'gen',''}},
fr='après $date1',
ga='tar éis $date1',
gl='despois do $date1',
he='לאחר $date1',
hr={'nakon $date1', case={'gen',''}},
hu='$date1 után',
hsb={'po $date1', case={'loc',''}},
it='dopo il $date1',
ja='$date1より後',
ko='$date1 후',
mk='по $date1',
ml='$date1-നു ശേഷം',
nb='etter $date1',
nn='etter $date1',
nds='na $date1',
nl='na $date1',
no='etter $date1',
pl={'po $date1', case={'loc',''}},
pt='após $date1',
qu="$date1 p'unchaw qhipan",
ro='după $date1',
ru={'после $date1', case={'gen',''}},
sk={'po $date1', case={'loc',''}},
sl={function(date1, state) return 'po ' .. decYear(state,'sl','loc') .. ' $date1' end, case={'loc',''}},
sr='после $date1',
sv='efter $date1',
uk={'після $date1', case={'gen',''}},
ur='بعد $date1',
vi='sau $date1',
['zh-hans']='在$date1之后',
['zh-hant']='在$date1之後',
default='<span style="color:red">after $date1</span>',
},
-- ==========================================
-- === Adjectives ===========================
-- ==========================================
['early'] = {
nDates = 1,
ar='بداية $date1',
['be-tarask']={'пачатак $date1', case={'gen',''}},
bn='$date1-এর শুরুতে',
ca='al principi de $date1',
ckb='سەرەتای $date1',
cs={'začátek $date1', case={'gen',''}},
da='tidlig $date1',
de='Anfang $date1',
el='αρχές του $date1',
en='early $date1',
['en-gb']='early $date1',
['en-ca']='early $date1',
eo='komence de $date1',
es='a principios de $date1',
et='$date1 algus',
fa='اوایل $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alku' end, case={'gen',''}},
fr='début $date1',
ga='go luath i $date1',
gl='a principios de $date1',
he='תחילת $date1',
hr={'početak $date1', case={'gen',''}},
hsb={'spočatk $date1', case={'gen',''}},
hu='$date1 elején',
it='inizio del $date1',
ja='$date1初頭',
ko='$date1 초반',
mk='почеток на $date1',
ml='$date1 ആദ്യപാദം',
nb='tidlig $date1',
nn='tidleg $date1',
nds='Anfang $date1',
nl='begin $date1',
no='tidlig $date1',
pl={'początek $date1', case={'gen',''}},
pt='a princípios de $date1',
qu="$date1 ñawpaq p'unchawkunapi",
ro='începând cu $date1',
ru={'начало $date1', case={'gen',''}},
sk={'začiatok $date1', case={'gen',''}},
sl=function(date1, state)
if state.precision == 9 then -- precision > month
return 'zgodnjega leta $date1'
else -- "od septembra"
return {'zgodnjega $date1', case={'gen',''}}
end
end,
sr='почетак $date1',
sv='början av $date1',
uk={'початок $date1', case={'gen',''}},
ur='ابتدا $date1',
vi='đầu năm $date1',
['zh-hans']='$date1早期',
['zh-hant']='$date1早期',
default='<span style="color:red">early $date1</span>',
},
['mid'] = {
nDates = 1,
ar='منتصف $date1',
['be-tarask']={'сярэдзіна $date1', case={'gen',''}},
bn='$date1-এর মাঝামাঝি',
ca='a mitjan $date1',
ckb='ناوەڕاستی $date1',
cs={'polovina $date1', case={'gen',''}},
da='midten af $date1',
de='Mitte $date1',
el='μέσα του $date1',
en='mid $date1',
['en-gb']='mid $date1',
['en-ca']='mid $date1',
eo='meze de $date1',
es='a mediados de $date1',
et='$date1 keskel',
fa='اواسط $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 puoliväli' end, case={'gen',''}},
fr='mi $date1',
ga='lár $date1',
gl='a mediados de $date1',
he='אמצע $date1',
hr={'sredina $date1', case={'gen',''}},
hsb={'srjedź $date1', case={'gen',''}},
hu='$date1 közepén',
it='metà del $date1',
ja='$date1半ば',
ko='$date1 중반',
mk='средина на $date1',
ml='$date1 മദ്ധ്യം',
nb='midten av $date1',
nn='midten av $date1',
nds='Midd $date1',
nl='midden $date1',
no='midten av $date1',
pl={'środek $date1', case={'gen',''}},
pt='meados de $date1',
qu="$date1 chawpin p'unchawkunapi",
ro='mijlocul lui $date1',
ru={'середина $date1', case={'gen',''}},
sk={'polovica $date1', case={'gen',''}},
sl={function(date1, state) return 'sredina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='средина $date1',
sv='mitten av $date1',
uk={'середина $date1', case={'gen',''}},
ur='وسط $date1',
vi='giữa năm $date1',
['zh-hans']='$date1中期',
['zh-hant']='$date1中期',
default='<span style="color:red">mid $date1</span>',
},
['late'] = {
nDates = 1,
ar='نهاية $date1',
bn='$date1-এর শেষে',
['be-tarask']={'канец $date1', case={'gen',''}},
ca='al final de $date1',
ckb='کۆتاییی $date1',
cs='konec $date1',
da='sen $date1',
de='Ende $date1',
el='τέλη του $date1',
en='late $date1',
['en-gb']='late $date1',
['en-ca']='late $date1',
eo='fine de $date1',
es='a fines de $date1',
et='$date1 lõpp',
fa='اواخر $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppu' end, case={'gen',''}},
fr='fin $date1',
ga='go déanach i $date1',
gl='a finais de $date1',
he='סוף $date1',
hr={'kraj $date1', case={'gen',''}},
hsb={'kónc $date1', case={'gen',''}},
hu='$date1 végén',
it='fine del $date1',
ja='$date1末',
ko='$date1 후반',
mk='крајот на $date1',
ml='$date1 അന്ത്യപാദം',
nb='sent $date1',
no='seint $date1',
nds='Enn $date1',
nl='eind $date1',
no='sent $date1',
pl={'koniec $date1', case={'gen',''}},
pt='ao final de $date1',
qu="$date1 qhipaq p'unchawkunapi",
ro='sfârșitul lui $date1',
ru={'конец $date1', case={'gen',''}},
sk={'koniec $date1', case={'gen',''}},
sl={function(date1, state) return 'pozno ' .. decYear(state,'sl','') .. ' $date1' end, case={'nom',''}},
sr='крај $date1',
sv='slutet av $date1',
uk={'кінець $date1', case={'gen',''}},
ur='اخیر $date1',
vi='cuối năm $date1',
['zh-hans']='$date1晚期',
['zh-hant']='$date1晚期',
default='<span style="color:red">late $date1</span>',
},
['circa'] = {
nDates = 1,
ar='قرابة $date1',
['be-tarask']={'каля $date1', case={'gen',''}},
bn='প্রায় $date1',
ca='cap a $date1',
ckb='بەنزیکی $date1',
cs='cca $date1',
da='ca. $date1',
de='etwa $date1',
el='περ. $date1',
en='circa $date1',
['en-gb']='circa $date1',
['en-ca']='circa $date1',
eo='ĉirkaŭ $date1',
es='hacia $date1', -- suggestion use "hacia"/"hacia el" or leave the latin circa or ca.
et='ca. $date1',
fa='حوالی $date1', -- template:Circa used 'حدود $date1'
fi={function(date1, state) return 'suunnilleen ' .. decYear(state,'fi','ine') .. '$date1' end, case={'ine',''}}, -- template:Circa used 'noin $date1'
fr=function(date1, state)
if state.precision >= 11 then -- precision >= day
return 'vers le $date1'
else
return 'vers $date1'
end
end,
ga='thart ar $date1',
gl='entre $date1', -- template:Circa used 'cara a $date1'
he='בסביבות $date1',
hr={'približno $date1', case={'gen',''}},
hsb={'wokoło $date1', case={'gen',''}},
hu='$date1 körül',
it='$date1 circa',
ja='$date1頃',
ko='$date1경',
mk='~ $date1', -- template:Circa used 'o. $date1'
ml= 'ഉദ്ദേശം $date1',
nb='ca. $date1',
nn='ca. $date1',
nds='üm un bi $date1',
nl='ca. $date1',
no='ca. $date1',
pl={'około $date1', case={'gen',''}},
pt='cerca de $date1',
qu='$date1chá',
ro='circa $date1',
ru={'около $date1', case={'gen',''}},
sk='cca $date1',
sl={function(date1, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='око $date1',
sv='cirka $date1',
uk={'близько $date1', case={'gen', ''}},
ur='قریباً $date1',
vi='vào khoảng $date1',
['zh-hans']='约$date1',
['zh-hant']='約$date1',
default='<span style="color:red">circa $date1</span>',
},
['uncertain'] = {
nDates = 1,
['zh-hans']='$date1(?)',
['zh-hant']='$date1(?)',
default='$date1 (?)',
},
probably = { -- see Q56644435
nDates = 1,
ar = 'يُحتمل في $date',
ast = 'probablemente $date1',
bn = 'সম্ভবত $date1',
ca = 'probablement $date1',
ckb = 'لەوانەیە $date1',
cs = 'pravděpodobně $date1',
de = 'wahrscheinlich $date1',
el = 'πιθανόν $date1',
en = 'probably $date1',
['en-gb']='probably $date1',
['en-ca']='probably $date1',
eo = 'probable $date1',
es = 'probable $date1',
fa = 'احتمالاً $date1',
fr = 'probablement $date1',
he = 'כפי הנראה $date1',
hr = 'vjerojatno $date1',
hu = 'feltehetőleg $date1',
it = 'probabile $date1',
ko = '$date1 유력',
mk = 'веројатно $date1',
ml = 'ഒരുപക്ഷേ $date1',
nl = 'waarschijnlijk $date1',
pl = 'prawdopodobnie $date1',
pt = 'provavelmente $date1',
ru = 'вероятно $date1',
sl = 'verjetno $date1',
sr = 'вероватно $date1',
sv = 'antagligen $date1',
uk = 'ймовірно $date1',
default='<span style="color:red">probably $date1</span>',
},
possibly = { -- see Q30230067
nDates = 1,
ar = 'يُمكن في $date1',
ast = 'posiblemente $date1',
bn = 'যথাসম্ভব $date1',
ckb = 'لەوانەیە $date1',
cs = 'možná $date1',
de = 'möglicherweise $date1',
en = 'possibly $date1',
['en-gb']='possibly $date1',
['en-ca']='possibly $date1',
eo = 'eble $date1',
el = 'πιθανόν $date1',
fa = 'احتمالاً $date1',
fr = 'peut-être $date1',
hr = 'moguće $date1',
hu = 'talán $date1',
ko = '$date1 추측',
mk = 'можеби $date1',
ml = 'മിക്കവാറും $date1',
nl = 'mogelijk $date1',
pl = 'być może $date1',
pt = 'possivelmente $date1',
ro = 'poate $date1',
ru = 'возможно $date1',
sl = 'morda $date1',
sr = 'можда $date1',
sv = 'möjligen $date1',
uk = 'можливо $date1',
default='<span style="color:red">possibly $date1</span>',
},
presumably = { -- see Q18122778
nDates = 1,
ast = 'presumiblemente $date1',
ar = 'يُحتمَل في $date1',
ckb = 'دەشێت $date1',
de = 'vermutlich $date1',
en = 'presumably $date1',
['en-gb']='presumably $date1',
['en-ca']='presumably $date1',
fa = 'به احتمال زیاد $date1',
fr = 'présumé $date1',
hr = 'pretpostavljeno $date1',
it = 'presumibilmente $date1',
ko = '$date1 추정',
ml = 'ഊഹപ്രകാരം $date1',
pl = 'przypuszczalnie $date1',
pt = 'presumivelmente $date1',
sl = 'domnevno $date1',
sr = 'претпоставља се $date1',
ru = 'предположительно $date1',
uk = 'здогадно $date1',
default='<span style="color:red">presumably $date1</span>',
},
['year unknown']= {
nDates = 0,
ar = 'سنة غير معلومة',
['be-tarask']='Год невядомы',
bn='অজানা বছর',
ca='Any desconegut',
ckb='ساڵی نەزاندراو',
cs='neznámý rok',
de='Jahr unbekannt',
el='άγνωστο έτος',
en='year unknown',
['en-gb']='year unknown',
['en-ca']='year unknown',
eo='jaro nesciata',
es='Año desconocido',
fa='سال نامعلوم',
fi='tuntematon vuosi',
fr='Année inconnue',
ga='bliain anaithnid',
he='שנה לא ידועה',
hsb='lěto njeznate',
hr='nepoznata godina',
it='anno sconosciuto',
ja='年代不明',
ko='연도 미상',
la='Sine anno',
ml='വർഷം ലഭ്യമല്ല',
mk='непозната година',
nb='ukjent år',
nn='ukjent år',
nl='zonder jaar',
no='ukjent år',
pl='rok nieznany',
pt='ano desconhecido',
qu='Mana riqsisqa wata',
ru='Год неизвестен',
sk='neznámy rok',
sl='neznano leto',
sr='непозната година',
sv='okänt år',
uk='рік невідомий',
ur='سال نامعلوم',
vi='không rõ năm',
['zh-hans']='年份未知',
['zh-hant']='年份未知',
default='<span style="color:red">year unknown</span>',
},
-- ==========================================
-- === Parts of a whole =====================
-- ==========================================
['firsthalf'] = {
nDates = 1,
ar='النصف الأول من $date1',
['be-tarask']={'першая палова $date1', case={'gen',''}},
bn='$date1-এর প্রথমার্ধ',
ca='1a meitat de $date1',
ckb='نیوەی یەکەمی $date1',
cs={'1. polovina $date1', case={'gen',''}},
da='1. halvdel af $date1',
de='erste Hälfte $date1',
el='πρώτο μισό του $date1',
en='first half of $date1',
['en-gb']='first half of $date1',
['en-ca']='first half of $date1',
eo='unua duono de $date1',
es='primera mitad de $date1',
et='$date1 esimene pool',
fa='نیمهٔ نخست $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 alkupuolisko' end, case={'gen',''}},
fr='1<sup>re</sup> moitié de $date1',
ga='chéad leath de $date1',
gl='primeira metade de $date1',
he='במחצית הראשונה של $date1',
hsb={'prěnja połojca $date1', case={'gen',''}},
hu='$date1 első felében',
hr={'prva polovina $date1', case={'gen',''}},
it='prima metà del $date1',
ja='$date1上半期',
ko='$date1 상반기',
mk='прва половина на $date1',
ml='$date1 ആദ്യപകുതി',
nb='første halvdel av $date1',
nn='fyrste halvdelen av $date1',
nds='1. Helft $date1',
nl='eerste helft $date1',
no='første halvdel av $date1',
pl={'pierwsza połowa $date1', case={'gen',''}},
pt='primeira metade de $date1',
qu='$date1 ñawpaq kuskanpi',
ro='prima jumătate a lui $date1',
ru={'первая половина $date1', case={'gen',''}},
sk={'1. polovica $date1', case={'gen',''}},
sl={function(date1, state) return 'prva polovica ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='права половина $date1',
sv='första hälften av $date1',
uk={'перша половина $date1', case={'gen',''}},
ur='نصف اول $date1',
vi='nửa đầu năm $date1',
['zh-hans']='$date1上半期',
['zh-hant']='$date1上半期',
default='<span style="color:red">first half of $date1</span>',
},
['secondhalf'] = {
nDates = 1,
ar='النصف الثاني من $date1',
['be-tarask']={'другая палова $date1', case={'gen',''}},
bn='$date1-এর দ্বিতীয়ার্ধ',
ca='2a meitat de $date1',
ckb='نیوەی دووەمی $date1',
cs={'2. polovina $date1', case={'gen',''}},
da='2. halvdel af $date1',
de='zweite Hälfte $date1',
el='δεύτερο μισό του $date1',
en='second half of $date1',
['en-gb']='second half of $date1',
['en-ca']='second half of $date1',
eo='dua duono de $date1',
es='segunda mitad de $date1',
et='$date1 teine pool',
fa='نیمهٔ دوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 loppupuolisko' end, case={'gen',''}},
fr='2<sup>e</sup> moitié de $date1',
ga='dara leath de $date1',
gl='segunda metade de $date1',
he='במחצית השנייה של $date1',
hsb={'druha połojca $date1', case={'gen',''}},
hr={'druga polovina $date1', case={'gen',''}},
hu='$date1 második felében',
it='seconda metà del $date1',
ja='$date1下半期',
ko='$date1 하반기',
mk='втора половина на $date1',
ml='$date1 രണ്ടാം പകുതി',
nb='andre halvdel av $date1',
nn='andre halvdelen av $date1',
nds='2. Helft vun $date1',
nl='tweede helft $date1',
no='andre halvdel av $date1',
pl={'druga połowa $date1', case={'gen',''}},
pt='segunda metade de $date1',
qu='$date1 qhipaq kuskanpi',
ro='a doua jumătate a lui $date1',
ru={'вторая половина $date1', case={'gen',''}},
sk={'2. polovica $date1', case={'gen',''}},
sl={'druga polovica {{IfNum | $date0 | leta}} $date1', case={'gen',''}},
sr='друга половина $date1',
sv='andra hälften av $date1',
uk={'друга половина $date1', case={'gen',''}},
ur='نصف آخر $date1',
vi='nửa cuối năm $date1',
['zh-hans']='$date1下半期',
['zh-hant']='$date1下半期',
default='<span style="color:red">second half of $date1</span>',
},
['1quarter']= {
nDates = 1,
ar = ' الربع الأول من $date1',
bn='$date1-এর প্রথম ত্রৈমাসিক',
['be-tarask']={'першая чвэрць $date1', case={'gen',''}},
ckb='چارەکی یەکەمی $date1',
cs={'1. čtvrtina $date1', case={'gen',''}},
de='erstes Quartal $date1',
en='first quarter of $date1',
['en-gb']='first quarter of $date1',
['en-ca']='first quarter of $date1',
eo='unua kvarono de $date1',
es='primer cuarto del $date1',
fa='ربع نخست $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 ensimmäinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'premier quart '.. frOf[state.precision] ..' $date1' end,
ga='chéad ráithe de $date1',
he='רבעון ראשון של $date1',
hsb={'prěnja štwórćina $date1', case={'gen',''}},
hr={'prva četvrtina $date1', case={'gen',''}},
it='primo quarto del $date1',
ja='$date1第1四半期',
ko='$date1 일사분기',
ml='$date1 ഒന്നാം ത്രൈമാസം',
nb='første kvartal av $date1',
nl='eerste kwart $date1',
nn='fyrste kvartalet av $date1',
no='første kvartal av $date1',
--pl={'pierwsza ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'pierwszy tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'pierwsze ćwierćwiecze $date1'
else
return 'pierwszy kwartał $date1'
end
end, case={'gen',''}},
pt='primeiro trimestre de $date1',
qu='$date1 ñawpaq ñiqin tawa phatmanpi',
ru={'первая четверть $date1', case={'gen',''}},
sk={'1. štvrtina $date1', case={'gen',''}},
sl={'prva četrtina {{IfNum | $date0 | leta}} $date1', case={'gen',''}},
sr='прва четвртина $date1',
sv='första kvartalet av $date1',
uk={'1-ша чверть $date1', case={'gen',''}},
ur='پہلی سہ ماہی $date1',
vi='quý 1 năm $date1',
['zh-hans']='$date1第一季度',
['zh-hant']='$date1第一季度',
default='<span style="color:red">first quarter of $date1</span>',
},
['2quarter']= {
nDates = 1,
ar = 'الربع الثاني من $date1',
['be-tarask']={'другая чвэрць $date1', case={'gen',''}},
bn='$date1-এর দ্বিতীয় ত্রৈমাসিক',
ckb='چارەکی دووەمی $date1',
cs={'2. čtvrtina $date1', case={'gen',''}},
de='zweites Quartal $date1',
en='second quarter of $date1',
['en-gb']='second quarter of $date1',
['en-ca']='second quarter of $date1',
eo='dua kvarono de $date1',
es='segundo cuarto del $date1',
fa='ربع دوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 toinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'deuxième quart '.. frOf[state.precision] ..' $date1' end,
ga='dara ráithe de $date1',
he='רבעון שני של $date1',
hsb={'druha štwórćina $date1', case={'gen',''}},
hr={'druga četvrtina $date1', case={'gen',''}},
it='secondo quarto del $date1',
ja='$date1第2四半期',
ko='$date1 이사분기',
ml='$date1 രണ്ടാം ത്രൈമാസം',
nb='andre kvartal av $date1',
nl='tweede kwart $date1',
nn='andre kvartalet av $date1',
no='andre kvartal av $date1',
--pl={'druga ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'drugi tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'druge ćwierćwiecze $date1'
else
return 'drugi kwartał $date1'
end
end, case={'gen',''}},
pt='segundo trimestre de $date1',
qu='$date1 iskay ñiqin tawa phatmanpi',
ru={'вторая четверть $date1', case={'gen',''}},
sk={'2. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'druga četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='друга четвртина $date1',
sv='andra kvartalet av $date1',
uk={'2-га чверть $date1', case={'gen',''}},
ur='دوسری سہ ماہی $date1',
vi='quý 2 năm $date1',
['zh-hans']='$date1第二季度',
['zh-hant']='$date1第二季度',
default='<span style="color:red">second quarter of $date1</span>',
},
['3quarter']= {
nDates = 1,
ar = 'الربع الثالث من $date1',
['be-tarask']={'трэцяя чвэрць $date1', case={'gen',''}},
bn='$date1-এর তৃতীয় ত্রৈমাসিক',
ckb='چارەکی سێیەمی $date1',
cs={'3. čtvrtina $date1', case={'gen',''}},
de='drittes Quartal $date1',
en='third quarter of $date1',
['en-gb']='third quarter of $date1',
['en-ca']='third quarter of $date1',
eo='tria kvarono de $date1',
es='tercer cuarto del $date1',
fa='ربع سوم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 kolmas neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'troisième quart '.. frOf[state.precision] ..' $date1' end,
ga='triú ráithe de $date1',
he='רבעון שלישי של $date1',
hsb={'třeća štwórćina $date1', case={'gen',''}},
hr={'treća četvrtina $date1', case={'gen',''}},
it='terzo quarto del $date1',
ja='$date1第3四半期',
ko='$date1 삼사분기',
ml='$date1 മൂന്നാം ത്രൈമാസം',
nb='tredje kvartal av $date1',
nl='derde kwart $date1',
nn='tredje kvartalet av $date1',
no='tredje kvartal av $date1',
--pl={'trzecia ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'trzeci tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'trzecie ćwierćwiecze $date1'
else
return 'trzeci kwartał $date1'
end
end, case={'gen',''}},
pt='terceiro trimestre de $date1',
qu='$date1 kimsa ñiqin tawa phatmanpi',
sk={'3. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'tretja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='трећа четвртина $date1',
ru={'третья четверть $date1', case={'gen',''}},
sv='tredje kvartalet av $date1',
uk={'3-тя чверть $date1', case={'gen',''}},
ur='تیسری سہ ماہی $date1',
vi='quý 3 năm $date1',
['zh-hans']='$date1第三季度',
['zh-hant']='$date1第三季度',
default='<span style="color:red">third quarter of $date1</span>',
},
['4quarter']= {
nDates = 1,
ar = 'الربع الرابع من $date1',
['be-tarask']={'чацьвёртая чвэрць $date1', case={'gen',''}},
bn='$date1-এর চতুর্থ ত্রৈমাসিক',
ckb='چارەکی چوارەمی $date1',
cs={'4. čtvrtina $date1', case={'gen',''}},
de='viertes Quartal $date1',
en='fourth quarter of $date1',
['en-gb']='fourth quarter of $date1',
['en-ca']='fourth quarter of $date1',
eo='kvara kvarono de $date1',
es='último cuarto del $date1',
fa='ربع چهارم $date1',
fi={function(date1, state) return decYear(state,'fi','gen') .. '$date1 viimeinen neljännes' end, case={'gen',''}},
fr= function(date1, state) return 'quatrième quart '.. frOf[state.precision] ..' $date1' end,
ga='ceathrú ráithe de $date1',
he='רבעון רביעי של $date1',
hsb={'poslednja štwórćina $date1', case={'gen',''}},
hr={'četvrta četvrtina $date1', case={'gen',''}},
it='ultimo quarto del $date1',
ja='$date1第4四半期',
ko='$date1 사사분기',
ml='$date1 നാലാം ത്രൈമാസം',
nb='fjerde kvartal av $date1',
nl='vierde kwart $date1',
nn='tredje kvartalet av $date1',
no='fjerde kvartal av $date1',
--pl={'czwarta ćwiartka $date1', case={'gen',''}},
pl={function(date1, state)
if state.precision == 10 then -- precision == month
return 'ostatni tydzień $date1'
elseif state.precision == 7 then -- precision == century
return 'ostatnie ćwierćwiecze $date1'
else
return 'ostatni kwartał $date1'
end
end, case={'gen',''}},
pt='quarto trimestre de $date1',
qu='$date1 qhipaq ñiqin tawa phatmanpi',
ru={'последняя четверть $date1', case={'gen',''}},
sk={'4. štvrtina $date1', case={'gen',''}},
sl={function(date1, state) return 'zadnja četrtina ' .. decYear(state,'sl','gen') .. ' $date1' end, case={'gen',''}},
sr='четврта четвртина $date1',
sv='fjärde kvartalet av $date1',
uk={'4-та чверть $date1', case={'gen',''}},
ur='چوتھی سہ ماہی $date1',
vi='quý 4 năm $date1',
['zh-hans']='$date1第四季度',
['zh-hant']='$date1第四季度',
default='<span style="color:red">forth quarter of $date1</span>',
},
-- ==========================================
-- === Seasons ==============================
-- ==========================================
['spring'] = {
nDates = 1,
ar='ربيع $date1',
['be-tarask']='вясна $date1',
bn='বসন্তকাল $date1',
ca='primavera $date1',
ckb='بەھاری $date1',
cs={'jaro $date1', case={'gen', ''}},
da='Forår $date1',
de='Frühling $date1',
en='Spring $date1',
['en-gb']='Spring $date1',
['en-ca']='Spring $date1',
eo='printempo $date1',
es='primavera de $date1',
et='$date1 kevad',
fa='بهار $date1',
fi='Kevät $date1',
fr='printemps $date1',
ga='earrach $date1',
gl='primavera $date1',
he='אביב $date1',
hr='proljeće $date1',
hsb='nalěćo $date1',
hu='$date1 tavasza',
it='primavera $date1',
ja='{{#if:$date1|$date1年}}春',
ko='$date1 봄',
mk='пролет $date1',
ml='$date1 വസന്തം',
nb='våren $date1',
nds='Vörjohr $date1',
nn='våren $date1',
nl='voorjaar $date1',
no='våren $date1',
pl='wiosna $date1',
pt='primavera de $date1',
ro='primăvara lui $date1',
ru='весна $date1',
sk={'jar $date1', case={'gen', ''}},
sl='pomlad $date1',
sr='пролеће $date1',
sv='våren $date1',
uk='весна $date1',
ur='بہار $date1',
vi='mùa đông năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}春季',
['zh-hant']='{{#if:$date1|$date1年}}春季',
default='<span style="color:red">Spring $date1</span>',
},
['summer'] = {
nDates = 1,
ar='صيف $date1',
['be-tarask']='лета $date1',
bn='গ্রীষ্মকাল $date1',
ca='estiu $date1',
ckb='ھاوینی $date1',
cs={'léto $date1', case={'gen', ''}},
da='Sommer $date1',
de='Sommer $date1',
en='Summer $date1',
['en-gb']='Summer $date1',
['en-ca']='Summer $date1',
eo='somero $date1',
es='verano de $date1',
et='$date1 suvi',
fa='تابستان $date1',
fi='Kesä $date1',
fr='été $date1',
ga='samhradh $date1',
gl='verán $date1',
he='קיץ $date1',
hr='ljeto $date1',
hsb='lěćo $date1',
hu='$date1 nyara',
it='estate $date1',
ja='{{#if:$date1|$date1年}}夏',
ko='$date1 여름',
mk='лето $date1',
ml='$date1 വേനൽ',
nb='sommeren $date1',
nds='Sommer $date1',
nn='sumaren $date1',
nl='zomer $date1',
no='sommeren $date1',
pl='lato $date1',
pt='verão de $date1',
ro='vara lui $date1',
ru='лето $date1',
sk={'leto $date1', case={'gen', ''}},
sl='poletje $date1',
sr='лето $date1',
sv='sommaren $date1',
uk='літо $date1',
ur='گرما $date1',
vi='mùa hè năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}夏季',
['zh-hant']='{{#if:$date1|$date1年}}夏季',
default='<span style="color:red">Summer $date1</span>',
},
['autumn'] = {
nDates = 1,
ar='خريف $date1',
['be-tarask']='восень $date1',
bn='শরত্কাল $date1',
ca='tardor $date1',
ckb='پاییزی $date1',
cs={'podzim $date1', case={'gen', ''}},
da='Efterår $date1',
de='Herbst $date1',
en='Autumn $date1',
['en-gb']='Autumn $date1',
['en-ca']='Autumn $date1',
eo='aŭtuno $date1',
es='otoño de $date1',
et='$date1 sügis',
fa='پاییز $date1',
fi='Syksy $date1',
fr='automne $date1',
ga='fómhar $date1',
gl='outono $date1',
he='סתיו $date1',
hr='jesen $date1',
hsb='nazyma $date1',
hu='$date1 ősze',
it='autunno $date1',
ja='{{#if:$date1|$date1年}}秋',
ko='$date1 가을',
mk='есен $date1',
ml='$date1 ശരത്കാലം',
nb='høsten $date1',
nds='Harvst $date1',
nn='hausten $date1',
nl='herfst $date1',
no='høsten $date1',
pl='jesień $date1',
pt='outono de $date1',
ro='toamna lui $date1',
ru='осень $date1',
sk={'jeseň $date1', case={'gen', ''}},
sl='jesen $date1',
sr='јесен $date1',
sv='hösten $date1',
uk='осінь $date1',
ur='خزاں $date1',
vi='mùa thu năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}秋季',
['zh-hant']='{{#if:$date1|$date1年}}秋季',
default='<span style="color:red">Autumn $date1</span>',
},
['winter'] = {
nDates = 1,
ar='شتاء $date1',
['be-tarask']='зіма $date1',
bn='শীতকাল $date1',
ca='hivern $date1',
ckb='زستانی $date1',
cs={'zima $date1', case={'gen', ''}},
da='Vinter $date1',
de='Winter $date1',
en='Winter $date1',
['en-gb']='Winter $date1',
['en-ca']='Winter $date1',
eo='vintro $date1',
es='invierno de $date1',
et='$date1 talv',
fa='زمستان $date1',
fi='Talvi $date1',
fr='hiver $date1',
ga='geimhreadh $date1',
gl='inverno $date1',
he='חורף $date1',
hr='zima $date1',
hsb='zyma $date1',
hu='$date1 tele',
it='inverno $date1',
ja='{{#if:$date1|$date1年}}冬',
ko='$date1 겨울',
mk='зима $date1',
ml='$date1 ശൈത്യകാലം',
nds='Winter $date1',
nl='winter $date1',
nb='vinteren $date1',
nn='vinteren $date1',
no='vinteren $date1',
pl='zima $date1',
pt='inverno de $date1',
ro='iarna lui $date1',
ru='зима $date1',
sk={'zima $date1', case={'gen', ''}},
sl='zima $date1',
sr='зима $date1',
sv='vintern $date1',
uk='зима $date1',
ur='سرما $date1',
vi='mùa đông năm $date1',
['zh-hans']='{{#if:$date1|$date1年}}冬季',
['zh-hant']='{{#if:$date1|$date1年}}冬季',
default='<span style="color:red">Winter $date1</span>',
},
-- ==========================================
-- === Decade/Century/Millennium ============
-- ==========================================
['decade'] = {
nDates = 1,
ar = 'عقد $date1',
['be-tarask']='$date1-я гады',
bn='$date1-এর দশক',
ca='dècada del $date1',
ckb='دەیەی $date1',
cs=function(date1, state) return ((date1 % 100 == 0) and 'první dekáda' or ((date1 % 100) .. '. léta')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. století' end,
da="$date1'erne",
de='$date1er Jahre',
el='δεκαετία του $date1',
en='$date1s',
['en-gb']='$date1s',
['en-ca']='$date1s',
eo='$date1-aj jaroj',
es='años $date1',
et='$date1ndad',
fa='دههٔ $date1',
fi='$date1-luvulla',
fr='années $date1',
ga='$date1í',
gl='anos $date1',
he='שנות ה-$date1',
hr='$date1-ih',
hsb='$date1te lěta',
hu = function(date1, state)
local suffix = 's'
if date1 % 100 == 10 or date1 % 100 == 40 or date1 % 100 == 50 or date1 % 100 == 70 or date1 % 100 == 90 then
suffix = 'es'
elseif date1 % 100 == 20 or date1 % 100 == 30 or date1 % 100 == 60 or date1 % 100 == 80 then
suffix = 'as'
elseif date1 % 100 == 0 then
if date1 % 1000 ~= 0 then
suffix = 'as'
elseif date1 % 1e6 ~= 0 then
suffix = 'es'
end
end
return string.format('%d-%s évek', date1, suffix)
end,
it="{{#ifexpr: $date1 mod 100 = 0 | primo decennio del {{Roman|{{#expr: ($date1 / 100) + 1}}}} sec. | anni '{{#expr: $date1 mod 100 }} del {{Roman|{{#expr: floor($date1 / 100) + 1}}}} sec.}}",
ja='$date1年代',
ko='$date1년대',
mk='$date1-ти',
ml='ദശകം $date1-ൽ',
nb='$date1-årene',
nn='$date1-åra',
nds='Johren $date1',
nl='jaren $date1',
no='$date1-årene',
pl=function(date1, state)
local str = 'lata '..(date1 % 100)..'. '
if (date1 % 100 == 0) then
str = 'pierwsza dekada '
elseif (date1 % 100 == 10) then
str = 'druga dekada '
end
return str .. Roman(math.floor(date1 / 100) + 1) .. ' wieku'
end,
pt='década de $date1',
qu='$date1 watakuna',
ro='anii $date1',
ru='$date1-е годы',
sk=function(date1, state) return ((date1 % 100 == 0) and 'prvé desaťročie' or ((date1 % 100) .. '. roky')) .. ' ' .. (math.floor(date1 / 100) + 1) .. '. storočia' end,
sl='$date1-ta leta',
sr='$date1-их',
sv='$date1-talet{{#switch:$date1|1300|1400|1500|1600|1700|1800|1900|2000|2100= (decennium)}}',
uk='$date1-ті роки',
ur='دہائی $date1',
vi='thập niên $date1',
['zh-hans']='$date1年代',
['zh-hant']='$date1年代',
default='<span style="color:red">$date1s</span>',
},
['century'] = {
nDates = 1,
ar='القرن $date1',
['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' стагодзьдзе' end,
bn=function(date1, state) return Ordinal(date1, 'bn') .. ' শতাব্দী' end,
ca='segle {{small-caps|{{lc:{{Roman year|$date1}}}}}}',
ckb='سەدەی $date1',
cs='$date1. století',
da='$date1. århundrede',
de='$date1. Jahrhundert',
el='$date1ος αιώνας',
en=function(date1, state) return Ordinal(date1, 'en') .. ' century' end,
['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' century' end,
['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' century' end,
eo='$date1-a jarcento',
es=function(date1, state) return 'siglo ' .. Roman(date1) end,
et='$date1. sajand',
fa='سدهٔ $date1',
fi='{{#expr: ($date1 - 1) * 100}}-luvulla',
fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle' end,
ga='$date1ú haois',
gl=function(date1, state) return 'século ' .. Roman(date1) end,
he='המאה ה-$date1',
hr='$date1. stoljeće',
hsb='$date1. lětstotk',
hu='$date1. évszázad',
it=function(date1, state) return Roman(date1) .. ' sec.' end,
ja='$date1世紀',
ko='$date1세기',
la='saeculum $date1',
mk=function(date1, state) return Roman(date1) .. ' век' end,
ml='$date1-ആം നൂറ്റാണ്ട്',
nb=function(date1, state) return Ordinal(date1, 'nb') .. ' århundre' end,
nn=function(date1, state) return 'det ' .. Ordinal(date1, 'no') .. ' hundreåret' end,
nds='$date1. Johrhunnert',
nl='$date1e eeuw',
no=function(date1, state) return Ordinal(date1, 'no') .. ' århundre' end,
pl=function(date1, state) return Roman(date1) .. ' ' .. decCentury('pl',state.case) end,
pt=function(date1, state) return 'século ' .. Roman(date1) end,
qu='$date1 ñiqin pachakwata',
ro='secolul al $date1-lea',
ru=function(date1, state) return Roman(date1) .. ' век' end,
sk='$date1. storočie',
sl=function(date1, state) return Ordinal(date1, 'sl') .. ' stoletje' end,
sr='$date1. век',
sv='{{#expr:$date1 - 1}}00-talet',
tt=function(date1, state) return Roman(date1) .. ' гасыр' end,
uk=function(date1, state) return Roman(date1) .. ' ст.' end,
ur='صدی $date1',
vi='thế kỷ $date1',
['zh-hans']='$date1世纪',
['zh-hant']='$date1世紀',
default='<span style="color:red">$date1 century</span>',
},
['millennium'] = {
nDates = 1,
ar = 'الألفية $date1',
['be-tarask']=function(date1, state) return Ordinal(date1, 'be-tarask') .. ' тысячагодзьдзе' end,
bn=function(date1, state) return Ordinal(date1, 'bn') .. ' সহস্রাব্দ' end,
ckb=function(date1, state) return 'ھەزارەی ' .. Ordinal(date1, 'ckb') end,
cs='$date1. tisíciletí',
de='$date1. Jahrtausend',
en=function(date1, state) return Ordinal(date1, 'en') .. ' millennium' end,
['en-gb']=function(date1, state) return Ordinal(date1, 'en-gb') .. ' millennium' end,
['en-ca']=function(date1, state) return Ordinal(date1, 'en-ca') .. ' millennium' end,
eo='$date1-a jarmilo',
es=function(date1, state) return Roman(date1) .. ' milenio' end,
fa=function(date1, state) return 'هزارهٔ ' .. Ordinal(date1, 'fa') end,
fr=function(date1, state) return Ordinal(date1, 'fr', 'roman', 'm') .. ' millénaire' end,
ga='$date1ú mílaoise',
hr='$date1. tisućljeće',
hsb='$date1. lěttysac',
it=function(date1, state) return Roman(date1) .. ' millennio' end,
ja='$date1千年紀',
ko='제$date1천년기',
la='millennium $date1',
ml='$date1-മത്തെ സഹസ്രാബ്ദം',
nb=function(date1, state) return Ordinal(date1, 'nb') .. ' årtusen' end,
nn=function(date1, state) return Ordinal(date1, 'no') .. ' tusenåret' end,
nl='$date1e millennium',
no=function(date1, state) return Ordinal(date1, 'no') .. ' årtusen' end,
pl=function(date1, state) return Roman(date1) .. ' ' .. decMillennium('pl',state.case) end,
pt=function(date1, state) return Roman(date1) .. ' milénio' end,
qu='$date1 ñiqin waranqawata',
ru=function(date1, state) return Roman(date1) .. ' тысячелетие' end,
sk='$date1. tisícročie',
sl=function(date1, state) return Ordinal(date1, 'sl') .. ' tisočletje' end,
sv=function(date1, state) return Ordinal(date1, 'sv') .. ' årtusendet' end,
uk=function(date1, state) return Roman(date1) .. ' тис.' end,
ur=function(date1, state) return 'ہزارہ ' .. Ordinal(date1, 'ur') end,
vi='thiên niên kỷ $date1',
['zh-hans']=function(date1, state) return Ordinal(date1, 'zh-hans') .. '千年' end,
['zh-hant']=function(date1, state) return Ordinal(date1, 'zh-hant') .. '千年' end,
--default='{{Please translate|$date1 millennium|Module:I18n/complex date}}',
default='<span style="color:red">$date1 millennium</span>',
},
['million'] = {
ckb = '$date1 میلیۆن ساڵ',
de = '$date1 Millionen Jahre',
en = '$date1 million years',
['en-gb'] = '$date1 million years',
['en-ca'] = '$date1 million years',
eo = '$date1 milionoj da jaroj',
es = '$date1 millones de años',
fa = '$date1 میلیون سال',
fr = '$date1 millions d’années',
it = '$date1 milioni di anni',
ko = '$date1백만 년',
ml = function(date1, state)
if date1 >= 10 then
return (date1 / 10) .. ' കോടി വർഷങ്ങൾ' -- 100 lakh = 1 crore
else
return (date1 * 10) .. ' ലക്ഷം വർഷങ്ങൾ'
end
end,
nb = '$date1 millioner år',
nl = '$date1 miljoen jaar',
nn = '$date1 millionar år',
pl = '$date1 milionów lat',
pt = '$date1 milhões de anos',
ru = '$date1 миллиона лет',
sl = '$date1 milijonov let',
sr = '$date1 милион година',
uk = '$date1 мільйони років',
ur = '$date1 ملین سال',
['zh-hans'] = '$date1百万年',
['zh-hant'] = '$date1百萬年',
default='<span style="color:red">$date1 million years</span>',
nDates = 1,
},
['billion'] = {
ckb = '$date1 بیلیۆن ساڵ',
de = '$date1 Milliarden Jahre',
en = '$date1 billion years',
['en-gb'] = '$date1 billion years',
['en-ca'] = '$date1 billion years',
es = '$date1 mil millones de años',
fa = '$date1 میلیارد سال',
fr = '$date1 milliard d’années',
it = '$date1 miliardi di anni',
ko = '$date1십억 년',
ml = function(date1, state) return (date1 * 10) .. ' കോടി വർഷങ്ങൾ' end,
nb = '$date1 milliarder år',
nl = '$date1 miljard jaar',
nn = '$date1 milliardar år',
pl = '$date1 miliardów lat',
pt = '$date1 mil milhões de anos',
ru = '$date1 миллиардов лет',
sl = '$date1 milijard let',
sr = '$date1 милијарду година',
uk = '$date1 мільярдів років',
ur = '$date1 بلین سال',
['zh-hans'] = '$date1十亿年',
['zh-hant'] = '$date1十億年',
default='<span style="color:red$date1 billion years</span>',
nDates = 1,
},
-- ==========================================
-- === Complex phrases ======================
-- ==========================================
-- Phrases which for some languages can be build out of simpler phrases
-- Their "default" state, used when no translation in the requested language was found, returns a "state" like
-- table which is used to call the function again and built the phrase out of simple phrases
-- $date1 - original date - 1
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the century'] = {
nDates = 2,
['be-tarask']=function(date1, date2, state) return 'канец ' .. Roman(date1) ..' — пачатак ' .. Roman(date2) ..' стагодзьдзя' end,
bn=function(date1, date2, state) return '$date1/' .. Ordinal(date2, 'bn') .. ' শতাব্দীর পালাবদলে' end,
ckb=function(date1, date2, state) return 'سەردەمی $date1/' .. Ordinal(date2, 'ckb') .. ' سەدە' end,
cs='přelom $date1. a $date2. století',
de=function(date1, date2, state) return 'Jahrhundertwende $date1/' .. Ordinal(date2, 'de') end,
en=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en') .. ' century' end,
['en-gb']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-gb') .. ' century' end,
['en-ca']=function(date1, date2, state) return 'turn of the $date1/' .. Ordinal(date2, 'en-ca') .. ' century' end,
eo='ŝanĝo de la $date1-a al la $date2-a jarcentoj',
es=function(date1, date2, state) return 'hacia finales del siglo ' .. Roman(date1) .. ' y principios del siglo ' .. Roman(date2) .. '' end,
fi='{{#expr: $date1 * 100-100}}-luvun loppu ja {{#expr: $date2 * 100-100}}-luvun alku',
fr=function(date1, date2, state) return 'fin du ' .. Ordinal(date1, 'fr', 'roman', 'm') .. ' siècle / début du ' .. Ordinal(date2, 'fr', 'roman', 'm') end,
ga=function(date1, date2, state) return 'cas an $date1ú/' .. Ordinal(date2, 'en') .. ' haois' end,
hr='kraj $date1. i početak $date2. stoljeća',
hsb=function(date1, date2, state) return 'přechod ' .. Roman(date1) ..' do ' .. Roman(date2) ..' lětstotka' end,
it=function(date1, date2, state) return 'fine del ' .. Roman(date1) .. ' sec. e inizio del ' .. Roman(date2) .. ' sec.' end,
ja='$date1世紀から$date2世紀への変わり目',
ko=function(date1, date2, state) return '$date1~$date2세기 전환기' end,
ml='$date1 നൂറ്റാണ്ട് അവസാനവും $date2 നൂറ്റാണ്ട് ആദ്യവും',
nb=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nb') .. ' århundre/begynnelsen av det ' .. Ordinal(date2, 'nb') .. ' århundre' end,
nl=function(date1, date2, state) return 'eind $date1e/begin $date2e eeuw' end,
nn=function(date1, date2, state) return 'slutten av det ' .. Ordinal(date1, 'nn') .. ' hundreåret/byrjinga av det ' .. Ordinal(date2, 'nn') .. ' hundreåret' end,
pl=function(date1, date2, state) return 'przełom ' .. Roman(date1) ..' i ' .. Roman(date2) ..' wieku' end,
pt=function(date1, date2, state) return 'final do século ' .. Roman(date1) .. ' e início do século ' .. Roman(date2) .. '' end,
qu="$date1 ñiqin waranqawatamanta $date2 ñiqin waranqawataman t'ikrasqanpi",
ru=function(date1, date2, state) return 'конец ' .. Roman(date1) ..' — начало ' .. Roman(date2) ..' века' end,
sk='prelom $date1. a $date2. storočia',
sl=function(date1, date2, state) return 'pozno ' .. Ordinal(date1, 'sl') .. '. in zgodnje ' .. Ordinal(date2, 'sl') .. '. stoletje' end,
sr='крај $date1. и почетак $date2. века',
sv='sekelskiftet år $date200',
uk=function(date1, date2, state) return 'кін. ' .. Roman(date1) ..' ст. — поч. ' .. Roman(date2) ..' ст.' end,
vi='bước sang thế kỷ $date2',
['zh-hans']=function(date1, date2, state) return '$date1世纪末' .. Ordinal(date2, 'zh-hans') .. '世纪初' end,
['zh-hant']=function(date1, date2, state) return '$date1世紀末' .. Ordinal(date2, 'zh-hant') .. '世紀初' end,
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='century', era1=state.era1, adj2 = 'early', unit2='century', era2=state.era2} end,
},
-- $date1 - original date - 10
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the decade']={
nDates = 2,
['be-tarask']='канец $date1-х — пачатак $date2-х гг.',
bn='$date1-এর দশকের শেষে এবং $date2-এর দশকের শুরুতে',
ckb='کۆتایییەکانی $date1 و سەرەتاکانی $date2',
cs=function(date1, date2, state)
local decade1 = math.floor((date1 % 100) / 10)
local decade2 = math.floor((date2 % 100) / 10)
local century1 = math.floor( date1 / 100) + 1
local century2 = math.floor( date2 / 100) + 1
if decade1 == 0 and date1 < date2 then
return "přelom 1. a 2. dekády " .. century1 .. ". století"
elseif decade2 == 0 and date2 < date1 then
return "přelom 9. a 10. dekády " .. century1 .. ". století"
elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then
return "přelom " .. century1 .. ". a " .. century2 .. ". století"
else
return "přelom " .. decade1 .. "0. a " .. decade2 .. "0. let " .. century1 .. ". století"
end
end,
de='späte $date1er und frühe $date2er',
en='late $date1s and early $date2s',
['en-gb']='late $date1s and early $date2s',
['en-ca']='late $date1s and early $date2s',
eo='ŝanĝo de la $date1-a al la $date2-a jardekoj',
es='finales de los años $date1 y principios de los años $date2',
fa='اواخر دههٔ $date1 و اوایل دههٔ $date2',
fi='$date1-luvun loppu ja $date2-luvun alku',
fr='fin des années $date1 / début des années $date2',
ga='deireadh sna $date1í / tús sna $date2í',
hr='kraj $date1-ih i početak $date2-ih',
hsb='pózdnje $date1te a zažne $date2te lěta',
it='fine degli anni $date1 / inizio degli anni $date2',
ja='$date1年代末から$date2年代初頭',
ko='$date1년대 말 $date2년대 초',
ml='$date1കൾ അവസാനവും $date2കൾ ആദ്യവും',
nb = 'sent på $date1-tallet og tidlig på $date2-tallet',
nl = 'eind $date1e/begin $date2e decennium',
nn = 'seint på $date1-talet og tidleg på $date2-talet',
pl=function(date1, date2, state)
local decade1 = math.floor(date1 % 100)
local decade2 = math.floor(date2 % 100)
local century1 = Roman(math.floor( date1 / 100) + 1)
local century2 = Roman(math.floor( date2 / 100) + 1)
if decade1 == 0 and date1 < date2 then
return "przełom pierwszej i drugiej dekady " .. century1 .. " wieku"
elseif decade1 == 10 and date1 < date2 then
return "przełom drugiej dekady i lat 20. " .. century1 .. " wieku"
elseif decade1 == 90 and decade2 == 0 then
return "przełom ostatniej dekady " .. century1 .. " i pierwszej dekady " .. century2 .. " wieku"
else
return "przełom lat " .. decade1 .. ". i " .. decade2 .. ". " .. century1 .. " wieku"
end
end,
pt='final dos anos $date1 e início dos anos $date2',
qu='qhipaq $date1 watakuna ñawpaq $date2 watakunapas',
ru='конец $date1-х — начало $date2-х гг.',
sv='decennieskiftet år $date2',
sk=function(date1, date2, state)
local decade1 = math.floor((date1 % 100) / 10)
local decade2 = math.floor((date2 % 100) / 10)
local century1 = math.floor( date1 / 100) + 1
local century2 = math.floor( date2 / 100) + 1
if decade1 == 0 and date1 < date2 then
return "prelom 1. a 2. desaťročia " .. century1 .. ". storočia"
elseif decade2 == 0 and date2 < date1 then
return "prelom 9. a 10. desaťročia " .. century1 .. ". storočia"
elseif (decade1 == 9 and date1 < date2) or (decade2 == 9 and date2 < date1) then
return "prelom " .. century1 .. ". a " .. century2 .. ". storočia"
else
return "prelom " .. decade1 .. "0. a " .. decade2 .. "0. rokov " .. century1 .. ". storočia"
end
end,
sl='pozna $date1-ta in zgodnja $date2-ta leta',
hr='крај $date1-их и почетак $date2-их',
uk='кінець $date1-х — початок $date2-х рр.',
ur='اخیر دہائی $date1 و ابتدا دہائی $date2',
vi='bước sang thập niên $date2',
['zh-hans']='$date1年代末$date2年代初',
['zh-hant']='$date1年代末$date2年代初',
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='decade', era1=state.era1, adj2 = 'early', unit2='decade', era2=state.era2} end,
},
-- $date1 - original date - 1
-- $date2 - original date
-- if era is BC than $date1 and $date2 are swapped
['turn of the year']={
nDates = 2,
['be-tarask']='канец $date1 — пачатак $date2 г.',
bn='$date1-এর শেষে এবং $date2-এর শুরুতে',
ckb='کۆتاییی $date1 و سەرەتای $date2',
cs='přelom roku $date1/$date2',
de='Jahreswechsel $date1/$date2',
en='late $date1 and early $date2',
['en-gb']='late $date1 and early $date2',
['en-ca']='late $date1 and early $date2',
eo='jarŝanĝo $date1 / $date2',
es='finales de $date1 y principios de $date2',
fa='اواخر $date1 و اوایل $date2',
fi='vuoden $date1 loppu ja vuoden $date2 alku',
fr='fin $date1 / début $date2',
ga='deireadh $date1 / tús $date2',
hsb='kónc $date1/spočatk $date2',
ja='$date1年末から$date2年初め',
ko='$date1 말 $date2 초',
ml='$date1 അവസാനവും $date2 ആദ്യവും',
nb='årsskiftet $date1/$date2',
nl='eind $date1 en begin $date2',
nn='årsskiftet $date1/$date2',
pl='koniec $date1 i początek $date2 roku',
pt='final de $date1 e início de $date2',
qu="$date1 qhipaq p'unchawkuna $date2 ñawpaq p'unchawkunapas",
ru='конец $date1 — начало $date2 г.',
sk='prelom rokov $date1/$date2',
sl='konec leta $date1 in začetek leta $date2',
sv='sena $date1 och tidiga $date2',
uk='кінець $date1 — початок $date2 р.',
ur='اخیر $date1 و ابتدا $date2',
vi='bước sang năm $date2',
['zh-hans']='$date1年末$date2年初',
['zh-hant']='$date1年末$date2年初',
default=function(date1, date2, state) return {conj='and', adj1 = 'late', unit1='year', era1=state.era1, adj2 = 'early', unit2='year', era2=state.era2} end,
},
['circa2'] = {
nDates = 2,
ar='بين $date1 – $date2',
['be-tarask']={'прыкладна з $date1 да прыкладна $date2', case={'gen','gen'}},
bn='প্রায় $date1 এবং প্রায় $date2-এর মাঝামাঝি',
ca='cap a $date1 o $date2',
ckb='بە نزیکی لەنێوان $date1 و $date2',
cs='cca $date1 až $date2',
da='ca. mellem $date1 og $date2',
de='etwa $date1 bis $date2',
el='περίπου μεταξύ $date1 και $date2',
en='between circa $date1 and circa $date2',
['en-gb']='between circa $date1 and circa $date2',
['en-ca']='between circa $date1 and circa $date2',
eo='proksimume de $date1 ĝis $date2',
es='hacia $date1 o $date2',
et='ca. $date1 ja $date2 vahel',
fa='حدوداً بین $date1 و $date2',
fi={function(date1, date2, state) return 'suunnilleen ' .. decYear(state,'fi','xxx') .. '$date1 ja $date2 välisenä aikana' end, case={'gen','gen'}},
fr='vers $date1-$date2',
ga='idir $date1 go $date2',
gl='entre $date1 e $date2',
he='בסביבות ה- $date1 עד $date2',
hr={'približno između $date1 i $date2', case={'gen','gen'}},
hsb={'wot něhdźe $date1 do něhdźe $date2', case={'gen','gen'}},
hu='$date1 és $date2 között',
it='tra il $date1 e il $date2 circa',
ja='$date1頃と$date2頃の間',
ko='$date1경에서 $date2경 사이',
mk='~ помеѓу $date1 и $date2',
ml='ഉദ്ദേശം $date1-നും ഉദ്ദേശം $date2-നും ഇടയ്ക്ക്',
nb='ca. mellom $date1 og $date2',
nn='ca. mellom $date1 og $date2',
nds='üm un bi $date1 bet $date2',
nl='ca. $date1 tot $date2',
no='ca. mellom $date1 og $date2',
pl={'od około $date1 do około $date2', case={'gen','gen'}},
pt='cerca de $date1 a $date2',
qu="$date1 p'unchawmantachá $date2 p'unchawkamachá",
ro='circa $date1 – $date2',
ru={'с около $date1 до, примерно, $date2', case={'gen','gen'}},
sk='cca $date1 až $date2',
sl={function(date1, date2, state) return 'ok. ' .. decYear(state,'sl','gen') .. ' $date1 do $date2' end, case={'gen','gen'}},
sr='између ~ $date1 и ~ $date2',
sv='cirka $date1 till $date2',
uk={'з близько $date1 до, приблизно, $date2', case={'gen','gen'}},
ur='قریباً بین $date1 و $date2',
vi='giữa vào khoảng $date1 và vào khoảng $date2',
['zh-hans']='约$date1~$date2间',
['zh-hant']='約$date1~$date2間',
default=function(date1, date2, state) return {conj='between', adj1 = 'circa', unit1=state.unit1, era1=state.era1, adj2 = 'circa', unit2=state.unit2, era2=state.era2} end,
},
-- ==========================================
-- === Eras and calendars ===================
-- ==========================================
['julian'] = {
nDates = 2,
ar='$date1 ($date2 حسب [[w:ar:التقويم اليولياني|تقويم يولياني]])',
['be-tarask']='$date1 ($date2 паводле [[w:be-tarask:Юліянскі каляндар|ст. ст.]]',
bn='$date1 (জুলিয়ান ক্যালেন্ডারে $date2)',
ca='$date1 ($date2 segons el [[w:ca:Calendari julià|calendari julià]])',
ckb='$date1 ($date2 بەپێی [[w:ڕۆژژمێری جولیانی|ڕۆژژمێری جولیانی]])',
cs='$date1 ($date2 podle [[w:cs:Juliánský kalendář|juliánského kalendáře]])',
da='$date1 ($date2 [[w:da:Julianske kalender|Julianske kalender]])',
de='$date1 ($date2 [[w:de:Julianischer Kalender|Julianischer Kalender]])',
el='$date1 ($date2 με το [[w:el:Ιουλιανό ημερολόγιο|Ιουλιανό ημερολόγιο]])',
en='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
['en-gb']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
['en-ca']='$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])',
fa='$date1 ($date2 در [[w:fa:Old Style and New Style dates|تقویم جولیان]])',
eo='$date1 ($date2 laŭ la [[w:eo:Julia kalendaro|Julia Kalendaro]])',
es='$date1 ($date2 según el [[w:es:Calendario juliano|calendario juliano]])',
et='$date1 ($date2 [[w:et:Juliuse kalender|Juliuse kalendris]])',
fi='$date1 ($date2 [[w:fi:juliaaninen kalenteri|juliaanisen kalenterin]] mukaan)',
fr='$date1 ($date2 dans le [[w:fr:calendrier julien|calendrier julien]])',
ga='$date1 ($date2 sa [[w:ga:Féilire Iúil|féilire Iúil]])',
gl='$date1 ($date2 segundo o [[w:gl:Calendario xuliano|calendario xuliano]])',
hu='$date1 ($date2 a [[w:hu:Julianus-naptár|Julián naptárban]])',
hr='$date1 ($date2 prema [[w:hr:Julijanski kalendar|julijanskom kalendaru]])',
he='$date1 ($date2 ב[[w:he:לוח היוליאני|הלוח היוליאני]])',
hsb='$date1 ($date2 po julianiskej protyce)',
it='$date1 ($date2 secondo il [[w:it:Calendario giuliano|calendario giuliano]])',
ja='$date1([[w:ja:ユリウス暦|ユリウス暦]] $date2)',
ko='$date1 ([[w:ko:율리우스력|율리우스력]] $date2)',
mk='$date1 ($date2 по [[w:mk:Јулијански календар|Јулијанскиот календар]])',
ml='$date1 ([[w:ml:ജൂലിയൻ കാലഗണനാരീതി|ജൂലിയൻ വർഷത്തിൽ]] $date2)',
ml='$date1 ([[w:Old Style and New Style dates|ജൂലിയൻ കാലഗണനാരീതിയിൽ]] $date2)',
nds='$date1 ($date2 na’n [[w:nds:Juliaansch Klenner|Juliaanschen Klenner]])',
nb='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalenderen]])',
nn='$date1 ($date2 etter [[w:nn:den julianske kalenderen|den julianske kalenderen]])',
nl='$date1 ($date2 volgens de [[w:nl:Juliaanse kalender|Juliaanse kalender]])',
no='$date1 ($date2 etter [[w:no:Juliansk kalender|den julianske kalender]])',
pl='$date1 ($date2 wedle [[w:pl:Daty nowego i starego porządku|kalendarza juliańskiego]])',
pt='$date1 ($date2 no [[w:pt:Mudança para o calendário gregoriano|calendário juliano]])',
qu='$date1 ($date2 [[w:qu:Hulyanu kalindaryu|Hulyanu kalindaryupi]])',
ro='$date1 ($date2 în [[w:ro:calendarul iulian|calendarul iulian]])',
ru='$date1 ($date2 [[w:ru:Юлианский календарь|по ст. ст.]])',
sk='$date1 ($date2 podľa [[w:sk:Juliánsky kalendár|juliánskeho kalendára]])',
sl='$date1 ($date2 po [[w:sl:Julijanski koledar|julijanskem koledarju]])',
sr='$date1 ($date2 према [[w:sr:Јулијански календар|јулијанском календару]])',
sv='$date1 ($date2 [[w:sv:Gamla stilen|gamla stilen]])',
uk='$date1 ($date2 [[w:uk:Юліанський календар|Юліанський календар]])',
ur='$date1 ($date2 حسب [[w:ur:نئے اور پانے انداز کی تاریخ|جولین تقویم]])',
vi='$date1 ($date2 trong [[w:vi:Lịch Julius|lịch Juliêng]])',
['zh-hans']='$date1([[w:Old Style and New Style dates|格里历]]$date2)',
['zh-hant']='$date1([[w:Old Style and New Style dates|格里曆]]$date2)',
default='<span style="color:red">$date1 ($date2 in [[w:Old Style and New Style dates|Julian calendar]])</span>',
},
['ad'] = {
nDates = 1,
['be-tarask']='$date1 [[w:be-tarask:ад Нараджэньня Хрыста|пасьля Н. Х.]]',
bn ='$date1 খ্রিস্টাব্দ',
ca ='$date1 dC',
ckb ='$date1 [[w:ckb:ئانۆ دۆمینی|پاز]]',
cs ='$date1 n. l.',
de ='$date1 n. Chr.',
el ='$date1 μ.Χ.',
en ='$date1 [[w:en:Anno Domini|AD]]',
['en-gb'] ='$date1 [[w:en:Anno Domini|AD]]',
['en-ca'] ='$date1 [[w:en:Anno Domini|AD]]',
eo ='$date1 pK',
es ='$date1 [[w:es:Anno Dómini|d. C.]]',
fa ='$date1 م.',
fi ='$date1 jaa.',
fr ='$date1 ap. J.-C.',
gl ='$date1 d.C.',
he ='$date1 לספירה',
hu ='i. sz. $date1',
hr ='$date1 pr. Kr.',
hsb='$date1 po Chr.',
it ='$date1 d.C.',
ja ='西暦$date1',
ko ='서기 $date1',
mk ='$date1 н.е.',
ml ='ക്രി.വ. $date1',
nb ='$date1 e.Kr.',
nl ='$date1 n.Chr.',
nn ='$date1 e.Kr.',
no ='$date1 e.Kr.',
pl ='$date1 [[w:pl:naszej ery|n.e.]]',
pt ='$date1 [[:pt:Anno Domini|AD]]',
ro ='$date1 d.Hr.',
ru ='$date1 н. э.',
sk ='$date1 po Kr.',
sl ='$date1 n. št.',
sr ='$date1 [[w:sr:Anno Domini|AD]]',
sv ='$date1 [[w:sv:Efter Kristus|e.Kr.]]',
uk ='$date1 н. е.',
ur ='$date1 ء',
vi ='$date1 [[w:vi:Công Nguyên|CN]]',
['zh-hans'] ='[[w:zh:基督纪年|公元]]$date1',
['zh-hant'] ='[[w:zh:基督纪年|公元]]$date1',
default='<span style="color:red">$date1 [[w:en:Anno Domini|AD]]</span>',
},
['ah'] = {
nDates = 1,
['be-tarask']='$date1 [[w:be-tarask:Ісламскі каляндар|хіджры]]',
bn ='$date1 [[w:bn:ইসলামি বর্ষপঞ্জি|হিজরী]]',
ckb ='$date1 [[w:ckb:ساڵی کۆچی|سک]]',
cs ='$date1 [[w:cs:Anno Hegirae|AH]]',
de ='$date1 [[w:de:Anno Hegirae|AH]]',
en ='$date1 [[w:en:Hijri year|AH]]',
['en-gb'] ='$date1 [[w:en:Hijri year|AH]]',
['en-ca'] ='$date1 [[w:en:Hijri year|AH]]',
eo ='$date1 post la [[w:eo:Heĝiro|Heĝiro]]',
fa ='$date1 ه.ق.',
fr ='$date1 [[w:fr:Calendrier musulman|A.H.]]',
he ="$date1 [[w:he:הלוח המוסלמי|להג'רה]]",
hr ='$date1 god. hidžre',
ja ='[[w:ja:ヒジュラ暦|ヒジュラ暦]]$date1',
ko ='히즈라력 $date1',
ml ='$date1 [[w:ml:ഇസ്ലാമിക കലണ്ടർ|ഹിജ്റ]]',
nb ='$date1 [[w:no:Den muslimske kalenderen|A.H.]]',
nn ='$date1 [[w:nn:Den muslimske kalenderen|A.H.]]',
pl ='$date1 [[w:pl:Kalendarz muzułmański|A.H.]]',
pt ='$date1 [[:pt:Ano da Hégira|AH]]',
ru ='$date1 [[w:ru:Исламский календарь|хиджры]]',
sk ='$date1 [[w:sk:A. H.|A. H.]]',
sl ='$date1 [[w:sl:Islamski koledar|leto hidžre]]',
sr ='$date1 [[w:sr:Исламски календар|хиџретска година]]',
sv ='$date1 [[w:sv:Muslimska kalendern|A.H.]]',
uk ='$date1 [[w:uk:Мусульманський календар|хіджри]]',
ur ='$date1 ھ',
vi ='$date1 [[w:vi:Lịch Hồi giáo|AH]]',
['zh-hans'] ='[[w:zh:伊斯兰历|伊斯兰历]]$date1',
['zh-hant'] ='[[w:zh:伊斯蘭曆|伊斯蘭曆]]$date1',
default='<span style="color:red">$date1 [[w:en:Hijri year|AH]]</span>',
},
['bc'] = {
nDates = 1,
ar ='$date1 ق.م.',
['be-tarask']='$date1 [[w:be-tarask:да Нараджэньня Хрыста|да Н. Х.]]',
bn ='খ্রিস্টপূর্ব $date1',
ca ='$date1 [[w:ca:Abans de Crist|aC]]',
ckb ='$date1 [[w:ckb:پێش زایین|پز]]',
cs ='$date1 [[w:cs:Př. n. l.|př. n. l.]]',
de ='$date1 [[w:de:v. Chr.|v. Chr.]]',
el ='$date1 π.Χ.',
en ='$date1 [[w:en:Ante Christum Natum|BC]]',
['en-gb'] ='$date1 [[w:en:Ante Christum Natum|BC]]',
['en-ca'] ='$date1 [[w:en:Ante Christum Natum|BC]]',
eo ='$date1 aK',
es ='$date1 [[w:es:Antes de Cristo|a. C.]]',
fa ='$date1 پ.م.',
fi ='$date1 eaa.',
fr ='$date1 av. J.-C.',
gl ='$date1 [[w:gl:Antes de Cristo|a.C.]]',
he ='$date1 לפני הספירה',
hr ='$date1 [[w:hr:Pr. Kr.|pr. Kr.]]',
hsb='$date1 do Chr.',
hu ='i. e. $date1',
it ='$date1 [[w:it:Avanti Cristo|a.C.]]',
ja ='[[w:ja:紀元前|紀元前]]$date1',
ko ='기원전 $date1',
mk ='$date1 п.н.е.',
ml ='ക്രി.മു. $date1',
nds='$date1 vör uns Tied',
nb ='$date1 f.Kr.',
nl ='$date1 v.Chr.',
nn ='$date1 f.Kr.',
no ='$date1 f.Kr.',
pl ='$date1 [[w:pl:przed naszą erą|p.n.e.]]',
pt ='$date1 [[w:en:Ante Christum Natum|a.C.]]',
ro ='$date1 î.Hr.',
ru ='$date1 до н. э.',
sk ='$date1 [[w:sk:Pred Kristom|pred Kr.]]',
sl ='$date1 pr. n. št.',
sr ='$date1 [[w:sr:Ante Christum Natum|пре Христа]]',
sv ='$date1 [[w:sv:Före Kristus|f.Kr.]]',
uk ='$date1 до н. е.',
ur ='$date1 ق م',
vi ='$date1 [[w:vi:Trước Công Nguyên|TCN]]',
['zh-hans'] ='[[w:zh:基督纪年|公元前]]$date1',
['zh-hant'] ='[[w:zh:基督纪年|公元前]]$date1',
default='<span style="color:red">$date1 [[w:en:Ante Christum Natum|BC]]</span>',
},
['bp'] = {
nDates = 1,
ar ='$date1 [[w:ar:قبل الحاضر|قبل الحاضر]]',
be ='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]',
['be-tarask']='$date1 [[w:be-tarask:Да нашых дзён|Да нашых дзён]]',
bn ='বর্তমানের আগে $date1',
ca ='$date1 [[w:ca:BP (unitat de temps)|BP]]',
ckb ='$date1 [[w:ckb:پێش ئێستا|پێش ئێستا]]',
cs ='$date1 [[w:cs:B. P.|B. P.]]',
de ='$date1 [[w:de:Before Present|BP]]',
el ='$date1 [[w:en:Before Present|BP]]',
en ='$date1 [[w:en:Before Present|BP]]',
['en-gb'] ='$date1 [[w:en:Before Present|BP]]',
['en-ca'] ='$date1 [[w:en:Before Present|BP]]',
eo='$date1 [[w:eo:Before Present|BP]]',
es ='$date1 [[w:es:Before Present|BP]]',
et ='$date1 [[w:et:Before Present|BP]]',
fa ='$date1 [[w:fa:پیش از امروز|پیش از امروز]]',
fi ='$date1 [[w:fi:BP (ajanlasku)|BP]]',
fr ='$date1 [[w:fr:Avant le présent|avant le présent]]',
hr ='$date1 [[w:hr:BP|prije današnjice]]',
it ='$date1 [[w:it:Before Present|BP]]',
ja ='$date1 [[w:ja:BP (年代測定)|BP]]',
ko ='$date1 [[w:ja:BP (고고학)|BP]]',
lv ='$date1 [[w:lv:Pirms mūsdienām|Pirms mūsdienām]]',
mk ='$date1 [[w:mk:Пред сегашноста|п.с.]]',
ml ='[[w:en:Before Present|ഇന്നത്തെ കാലത്തിനു മുമ്പ്]] $date1',
nb ='$date1 [[w:no:Before Present|BP]]',
nn ='$date1 [[w:nn:Before Present|BP]]',
nl ='$date1 [[w:nl:Before Present|BP]]',
no ='$date1 [[w:no:Before Present|BP]]',
pl ='$date1 [[w:pl:Before Present|BP]]',
pt ='$date1 [[w:pt:Antes do Presente|Antes do Presente]]',
ru ='$date1 [[w:ru:До настоящего времени|до н. в.]]',
sk ='$date1 [[w:sk:BP (čas)|BP]]',
sl ='$date1 [[w:sl:pred sedanjostjo|p. s.]]',
sr ='$date1 [[w:sr:Прије садашњости|Прије садашњости]]',
sv ='$date1 [[w:sv:B.P.|B.P.]]',
uk ='$date1 [[w:uk:Років тому|Років тому]]',
ur ='$date1 قبل حاضر',
vi ='$date1 [[w:en:Before Present|trước ngày nay]]',
['zh-hans'] ='[[w:zh:距今|距今]]$date1',
['zh-hant'] ='[[w:zh:距今|距今]]$date1',
default='<span style="color:red">$date1 [[w:en:Before Present|BP]]</span>',
},
}
-- List of possible string inputs to "adj", "junction", "era", and "precision" fields
-- Each term is matched to its synonym and the role: a - adjective, e - era
-- p - precision, c - calendar and combos, r - certainty and j - conjunction
p.Synonyms = {
-- adjectives and prepositions
['quarter1']={'1quarter','a'},
['1stquarter']={'1quarter','a'},
['1st quarter']={'1quarter','a'},
['first quarter']={'1quarter','a'},
['1quarter']={'1quarter','a'},
['quarter2']={'2quarter','a'},
['2ndquarter']={'2quarter','a'},
['2nd quarter']={'2quarter','a'},
['second quarter']={'2quarter','a'},
['2quarter']={'2quarter','a'},
['quarter3']={'3quarter','a'},
['3rdquarter']={'3quarter','a'},
['3rd quarter']={'3quarter','a'},
['third quarter']={'3quarter','a'},
['3quarter']={'3quarter','a'},
['quarter4']={'4quarter','a'},
['4thquarter']={'4quarter','a'},
['4th quarter']={'4quarter','a'},
['fourth quarter']={'4quarter','a'},
['4quarter']={'4quarter','a'},
['spring']={'spring','a'},
['summer']={'summer','a'},
['fall']={'autumn','a'},
['autumn']={'autumn','a'},
['winter']={'winter','a'},
['beginning']={'early','a'},
['early']={'early','a'},
['1half']={'firsthalf','a'},
['1sthalf']={'firsthalf','a'},
['1st half']={'firsthalf','a'},
['firsthalf']={'firsthalf','a'},
['first half']={'firsthalf','a'},
['end']={'late','a'},
['late']={'late','a'},
['middle']={'mid','a'},
['mid']={'mid','a'},
['2half']={'secondhalf','a'},
['2ndhalf']={'secondhalf','a'},
['2nd half']={'secondhalf','a'},
['secondhalf']={'secondhalf','a'},
['second half']={'secondhalf','a'},
['<']={'before','a'},
['b']={'before','a'},
['before']={'before','a'},
['>']={'after','a'},
['a']={'after','a'},
['after']={'after','a'},
['~']={'circa','a'},
['c']={'circa','a'},
['ca']={'circa','a'},
['circa']={'circa','a'},
['by']={'by','a'},
['from']={'from','a'},
['until']={'until','a'},
['uncertain']={'uncertain','r'},
['possibly']={'possibly','r'},
['probably']={'probably','r'},
['presumably']={'presumably','r'},
-- eras
['bc']={'bc','e'},
['bce']={'bc','e'},
['before present']={'bp','e'},
['bp']={'bp','e'},
['ce']={'ad','e'},
['ad']={'ad','e'},
['ah']={'ah','e'},
-- conjunctions
['&']={'and','j'},
['and']={'and','j'},
['or']={'or','j'},
['-']={'from-until','j'},
['–']={'from-until','j'},
['from-until']={'from-until','j'},
['between']={'between','j'},
['circa2']={'circa2','a'},
-- precision
['day']={'day','p'},
['month']={'month','p'},
['year']={'year','p'},
['s']={'decade','p'},
['decade']={'decade','p'},
['century']={'century','p'},
['millennium']={'millennium','p'},
['million']={'million','p'},
['billion']={'billion','p'},
-- calendar
['julian']={'julian','c'},
['islamic']={'islamic','c'},
['hijri']={'islamic','c'},
-- "Turn of the ..." options are a combos which will be handled in similar way as calendars
['turn of the century']={'turn of the century','c'},
['century turn']={'turn of the century','c'},
['turn of the decade']={'turn of the decade','c'},
['decade turn']={'turn of the decade','c'},
['turn of the year']={'turn of the year','c'},
['year turn']={'turn of the year','c'},
-- other dates which will be handled in similar way as calendars
['?']={'unknown','c'},
['unknown']={'unknown','c'},
['unknown year']={'year unknown','c'},
['year unknown']={'year unknown','c'},
}
return p
frjqd9q2iw3lxgde4z7u2i234a88jr5
Module:TagQS
828
1320
10655
2024-07-15T14:05:29Z
commons>Jarekt
0
10655
Scribunto
text/plain
--[[
_____ .___ .__ ___________ ________ _________
/ \ ____ __| _/_ __| | ____ /\ \__ ___/____ ____ \_____ \ / _____/
/ \ / \ / _ \ / __ | | \ | _/ __ \ \/ | | \__ \ / ___\ / / \ \ \_____ \
/ Y ( <_> ) /_/ | | / |_\ ___/ /\ | | / __ \_/ /_/ > \_/. \/ \
\____|__ /\____/\____ |____/|____/\___ > \/ |____| (____ /\___ /\_____\ \_/_______ /
\/ \/ \/ \//_____/ \__> \/
This module is intended for creating invisible tags which can be used to pass
language independent data from some templates to infoboxes. Those tags are often
used by templates like [Template:Artwork] to pass data to Wikidata
Authors and maintainers:
* User:Jarekt - original version
]]
require('strict') -- used for debugging purposes as it detects cases of unintended global variables
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
function p.replaceUnlessQuoted(str, oldChar, newChar)
-- String "str" has some sections that are in quotes and some that are not.
-- Do replacements only in the text sections which are not in "" quotes.
local quote = string.byte('"')
local comma = string.byte(oldChar)
local quoted = false
for pos = 1, #str do
if str:byte(pos) == quote then
quoted = not quoted
end
if str:byte(pos) == comma and not quoted then
str = str:sub(1,pos-1) .. newChar .. str:sub(pos+1, str:len())
end
end
return str
end
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
function p.createTag(field, property, value)
-- create tags to insert using "field" "property" and "value" strings.
-- "field" is an unique label to distinguish it from other tags.
-- "property" and "value" are actually in a format similar to the one expected by QuickStatements
return mw.ustring.format('<div style="display: none;">%s QS:%s,%s</div>', field, property or 'P', value)
end
function p.changeField(text, old, new)
-- replace "field" part of the tag. It is needed as sometimes template adding those tags does not
-- know the meaning, which is known the the outside template. For example in
-- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial
-- tag with the wikidata item and {{Book}} template will add label and property for "transaltor".
local patrn = '%<div style="display: none;"%>'.. old ..' QS:([^%<]+)%</div%>'
local repl = '<div style="display: none;">'.. new ..' QS:%1</div>'
return mw.ustring.gsub(text, patrn, repl)
end
function p.changeProperty(text, field, old, new)
-- replace "property" part of the tag. It is needed as sometimes template adding those tags does not
-- know the meaning, which is known the the outside template. For example in
-- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial
-- tag with the wikidata item and {{Book}} template will add label and property for "transaltor".
if not old then -- string "old" is optional if nil than any property will be replaced
old = '[^%,]+'
end
local patrn = '%<div style="display: none;"%>' .. field .. ' QS:' .. old .. ',([^%<]+)%</div%>'
local repl = '<div style="display: none;">' .. field .. ' QS:' .. new .. ',%1</div>'
return mw.ustring.gsub(text, patrn, repl)
end
function p.append2value(text, field, text2append)
-- append "text" to the "value" part of the tag
local patrn = '%<div style="display: none;"%>'.. field ..' QS:([^%<]+)%</div%>'
local repl = '<div style="display: none;">' .. field ..' QS:%1,' .. text2append .. '</div>'
return mw.ustring.gsub(text, patrn, repl)
end
function p.readTag(text, field)
-- read a single tag
local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>'
local qs = string.match(text, pat) -- find hidden tag with QS code
local _, nMatch = string.gsub(text, pat, "") -- count matches
if qs and nMatch==1 then -- allow only single matches
return p.replaceUnlessQuoted(qs, ',', '|')
end
end
function p.readTags(text, field)
-- read multiple tags and return array of them
local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>'
local ret = {}
for qs in mw.ustring.gmatch(text, pat) do
table.insert(ret, p.replaceUnlessQuoted(qs, ',', '|') )
end
return ret
end
function p.hasTag(text, field)
-- does the "text" has a tag with field "field", or if field=nil does it have any tags?
return text~= p.removeTag(text, field)
end
function p.removeTag(text, field)
-- remove tags with field "field" from the string. Field =nil will replace all tags
if not field then
field = '[^ ]+'
end
local patrn = '%<div style="display: none;"%>' .. field .. ' QS:[^%<]+%</div%>'
return mw.ustring.gsub(text, patrn, '')
end
-- ===========================================================================
-- === Versions of the function to be called from template namespace
-- ===========================================================================
function p.CreateTag(frame)
return p.createTag(frame.args[1], frame.args[2], frame.args[3])
end
return p
3nh01znqigloqpeqb5s2wb498nxtf4d
10656
10655
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:TagQS]]
10655
Scribunto
text/plain
--[[
_____ .___ .__ ___________ ________ _________
/ \ ____ __| _/_ __| | ____ /\ \__ ___/____ ____ \_____ \ / _____/
/ \ / \ / _ \ / __ | | \ | _/ __ \ \/ | | \__ \ / ___\ / / \ \ \_____ \
/ Y ( <_> ) /_/ | | / |_\ ___/ /\ | | / __ \_/ /_/ > \_/. \/ \
\____|__ /\____/\____ |____/|____/\___ > \/ |____| (____ /\___ /\_____\ \_/_______ /
\/ \/ \/ \//_____/ \__> \/
This module is intended for creating invisible tags which can be used to pass
language independent data from some templates to infoboxes. Those tags are often
used by templates like [Template:Artwork] to pass data to Wikidata
Authors and maintainers:
* User:Jarekt - original version
]]
require('strict') -- used for debugging purposes as it detects cases of unintended global variables
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
function p.replaceUnlessQuoted(str, oldChar, newChar)
-- String "str" has some sections that are in quotes and some that are not.
-- Do replacements only in the text sections which are not in "" quotes.
local quote = string.byte('"')
local comma = string.byte(oldChar)
local quoted = false
for pos = 1, #str do
if str:byte(pos) == quote then
quoted = not quoted
end
if str:byte(pos) == comma and not quoted then
str = str:sub(1,pos-1) .. newChar .. str:sub(pos+1, str:len())
end
end
return str
end
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
function p.createTag(field, property, value)
-- create tags to insert using "field" "property" and "value" strings.
-- "field" is an unique label to distinguish it from other tags.
-- "property" and "value" are actually in a format similar to the one expected by QuickStatements
return mw.ustring.format('<div style="display: none;">%s QS:%s,%s</div>', field, property or 'P', value)
end
function p.changeField(text, old, new)
-- replace "field" part of the tag. It is needed as sometimes template adding those tags does not
-- know the meaning, which is known the the outside template. For example in
-- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial
-- tag with the wikidata item and {{Book}} template will add label and property for "transaltor".
local patrn = '%<div style="display: none;"%>'.. old ..' QS:([^%<]+)%</div%>'
local repl = '<div style="display: none;">'.. new ..' QS:%1</div>'
return mw.ustring.gsub(text, patrn, repl)
end
function p.changeProperty(text, field, old, new)
-- replace "property" part of the tag. It is needed as sometimes template adding those tags does not
-- know the meaning, which is known the the outside template. For example in
-- "{{Book|translator={{Creator|wikidata=Q12345}}" the Creator template will create initial
-- tag with the wikidata item and {{Book}} template will add label and property for "transaltor".
if not old then -- string "old" is optional if nil than any property will be replaced
old = '[^%,]+'
end
local patrn = '%<div style="display: none;"%>' .. field .. ' QS:' .. old .. ',([^%<]+)%</div%>'
local repl = '<div style="display: none;">' .. field .. ' QS:' .. new .. ',%1</div>'
return mw.ustring.gsub(text, patrn, repl)
end
function p.append2value(text, field, text2append)
-- append "text" to the "value" part of the tag
local patrn = '%<div style="display: none;"%>'.. field ..' QS:([^%<]+)%</div%>'
local repl = '<div style="display: none;">' .. field ..' QS:%1,' .. text2append .. '</div>'
return mw.ustring.gsub(text, patrn, repl)
end
function p.readTag(text, field)
-- read a single tag
local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>'
local qs = string.match(text, pat) -- find hidden tag with QS code
local _, nMatch = string.gsub(text, pat, "") -- count matches
if qs and nMatch==1 then -- allow only single matches
return p.replaceUnlessQuoted(qs, ',', '|')
end
end
function p.readTags(text, field)
-- read multiple tags and return array of them
local pat = '%<div style="display: none;"%>'..field..' QS:([^%<]+)%</div%>'
local ret = {}
for qs in mw.ustring.gmatch(text, pat) do
table.insert(ret, p.replaceUnlessQuoted(qs, ',', '|') )
end
return ret
end
function p.hasTag(text, field)
-- does the "text" has a tag with field "field", or if field=nil does it have any tags?
return text~= p.removeTag(text, field)
end
function p.removeTag(text, field)
-- remove tags with field "field" from the string. Field =nil will replace all tags
if not field then
field = '[^ ]+'
end
local patrn = '%<div style="display: none;"%>' .. field .. ' QS:[^%<]+%</div%>'
return mw.ustring.gsub(text, patrn, '')
end
-- ===========================================================================
-- === Versions of the function to be called from template namespace
-- ===========================================================================
function p.CreateTag(frame)
return p.createTag(frame.args[1], frame.args[2], frame.args[3])
end
return p
3nh01znqigloqpeqb5s2wb498nxtf4d
Module:Linguistic
828
1321
10657
2022-10-26T04:48:14Z
commons>Jonesey95
0
require strict per TPER
10657
Scribunto
text/plain
--[[
__ __ _ _ _ _ _ _ _
| \/ | ___ __| |_ _| | ___ _| | (_)_ __ __ _ _ _(_)___| |_(_) ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) | | | '_ \ / _` | | | | / __| __| |/ __|
| | | | (_) | (_| | |_| | | __/_| |___| | | | | (_| | |_| | \__ \ |_| | (__
|_| |_|\___/ \__,_|\__,_|_|\___(_)_____|_|_| |_|\__, |\__,_|_|___/\__|_|\___|
|___/
Simple internationalization functions that can be called by other modules.
This Module was copied from Wikimedia Commons, so please request changes there.
Maintainers:
* Zolo - original version
* Jarekt
Dependencies:
- Module uses c:data:I18n/Or.tab
]]
require('strict')
-- ==================================================
-- === Internal functions ===========================
-- ==================================================
local function langSwitch(list,lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
for i,language in ipairs(langList) do
if list[language] then
return list[language]
end
end
return nil
end
------------------------------------------------------------------------------
-- read Commons Data:SOMENAME.tab dataset and look for message identified by a
-- "key" in a language "lang". See editAtWikidata as an example.
local function formatMessage(dataset, key, lang)
for _, row in pairs(mw.ext.data.get(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
return mw.message.newRawMessage(msg):plain()
end
end
error('Invalid message key "' .. key .. '"')
end
------------------------------------------------------------------------------
local function nowiki(str) -- remove all the links
if not str then
return str
end
str = mw.ustring.gsub(str, "<[^>]*>", "") -- remove all html tags from str
str = mw.ustring.gsub(str, "'''", "") -- remove bold
str = mw.ustring.gsub(str, "''", "") -- remove italics
str = mw.ustring.gsub(str, "%[%[[Ff]ile:[^%]]+%]%]", "") -- remove file icons
str = mw.ustring.gsub(str, "%[%[[^|]*|", "") -- remove piped links, like "[[:en:test|"
str = mw.ustring.gsub(str, "%[[^ ]+ ", "") -- remove URL links, like "[https://www.wikidata.org/wiki/Q2706250 "
str = mw.ustring.gsub(str, "%[%[", "" ) -- remove piped links, like "[["
str = mw.ustring.gsub(str, "%]", "" ) -- remove piped links, like "]" or "]]"
return str
end
------------------------------------------------------------------------------
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to Module:Yesno
local function yesno(val, default)
if type(val) == 'boolean' then
return val
elseif type(val) == 'number' then
if val==1 then
return true
elseif val==0 then
return false
end
elseif type(val) == 'string' then
val = mw.ustring.lower(val) -- put in lower case
if val == 'no' or val == 'n' or val == 'false' or val == '0' then
return false
elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then
return true
end
end
return default
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
------------------------------------------------------------------------------------------
function p.vowelfirst (str)
if str then
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭï'..
'ḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
str = mw.ustring.lower(mw.ustring.sub(str,1,1))
return mw.ustring.find(vowels, str, 1, true )
end
end
------------------------------------------------------------------------------------------
function p.inparentheses(str)
if (not str) or (str == "") then
return nil
end
local str2 = mw.message.new('parentheses', str):inLanguage(lang):plain()
return (str2~=nil and str2) or ('('..str..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set
end
------------------------------------------------------------------------------------------
function p.of(word, lang, raw, gender, number, determiner) -- rough translation of "of" in various languages
-- note that the cases when on "of" is employed varies a lot among languages, so it is more prudent to call this from lang specific function only
if not raw or mw.text.trim(raw) == "" then
raw = mw.ustring.lower(nowiki(word))
end
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if lang == 'fr' then
determiner = yesno(determiner,false)
if determiner then
if string.sub(number or '',1,1)=='p' then -- number == 'plural'
return 'des ' .. word
elseif p.vowelfirst(raw) then
return 'de l’' .. word
elseif string.sub(gender or '',1,1)=='f' then -- gender == 'feminine'
return 'de la ' .. word
else
return 'du ' .. word
end
else
if p.vowelfirst(raw) then
return 'd’' .. word
else
return 'de ' .. word
end
end
elseif lang == 'ca' then
-- implement [[Template:Of/ca]] or https://ca.wikipedia.org/wiki/Plantilla:Deod%27/base for case where "{{{context}}}" is "en" (default on Commons)
if ( p.vowelfirst(raw) and not mw.ustring.find( 'ia|ià|ie|io|iu|ua|ue|ui|uí|uï|uo|ya|ye|yi|yo|yu|', mw.ustring.sub(raw,1,2) .. '|')) then
return 'd\'' .. word
else
return 'de ' .. word
end
end
end
------------------------------------------------------------------------------------------
function p.noungroup(noun, adj, lang)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
if not adj or adj == ''
then return noun
end
local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain()
-- Assign order of words per language: 1 means adjective before the noun and 2 means adjective after the noun
-- original source for many: language subpages of [[Template:Technique]]
-- corrections to that using https://wals.info/feature/87A, still different:
-- * vi: WALS says 2
-- * gl isn't consistent in [[Template:Technique/gl]], but seems to be 2
local LUT = {ar=2, ca=2, cs=1, da=1, de=1, el=1, en=1, es=2, et=1, fi=1, fr=2,
gl=2, he=2, hu=1, it=2, ja=1, la=2, mk=1, nds=1, nb=1, nl=1, no=1, pl=1, pt=2,
ro=2, ru=1, scn=2, sk=1, sl=1, sr=1, sv=1, sw=1, tr=1, vec=1, vi=1, zh=1}
local primaryLangSubtag = mw.text.split(lang, '-', true)[1]
local case = LUT[lang] or LUT[primaryLangSubtag]
if case==1 then -- adjective before the noun
return adj .. wordsep .. noun
elseif case==2 then -- adjective after the noun
return noun .. wordsep .. adj
else -- order unknown
return noun .. ' (' .. adj .. ')'
end
end
------------------------------------------------------------------------------------------
function p.conj(args, lang, conjtype)
local comma = mw.message.new( "comma-separator"):inLanguage(lang):plain()
local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain()
local andtable = { ar=' و', he=' ו', ja='および', pl=' i '} -- languages with a problem with the MediaWiki:And
local sep1, sep2 = comma, nil
if conjtype == 'comma' then
sep2 = comma
elseif conjtype == 'or' or conjtype == 'explicit or' then
local wordor = formatMessage('I18n/Or.tab', 'or', lang) -- get translated "or"
sep2 = wordsep .. wordor .. wordsep -- pad it with spaces (if needed)
sep1 = (conjtype == 'explicit or' and sep2) or comma -- adds "or" betwen all words when the context can be confusing
elseif conjtype and conjtype ~= 'and' and conjtype ~= '' then
sep1, sep2 = conjtype, conjtype
elseif andtable[lang] then
sep2 = andtable[lang]
else
sep2 = mw.message.new( "and" ):inLanguage(lang):plain() .. wordsep
end
return mw.text.listToText(args, sep1, sep2)
end
-- ===========================================================================
-- === Version of the functions to be called from template namespace
-- ===========================================================================
------------------------------------------------------------------------------------------
function p.offromwiki(frame)
local args = frame.args
return p.of(args.word, args.lang, args.raw, args.gender, args.number, args.determiner)
end
------------------------------------------------------------------------------------------
function p.conjfromWiki(frame)
local args = frame.args
if not args or not args[1] then
args = frame:getParent().args
end
local lang = args.lang
if not lang or mw.text.trim(lang) == '' then
lang = frame:callParserFunction( "int", "lang" )
end
local newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return 'error: bad parameter in template:Conj: ' .. i .. '[[Category:Pages with incorrect template usage/Conj|A]]'
end
end
end
return p.conj(newargs, lang, args.type)
end
return p
ibgdthfbs6ucr2zs5ekihtxtvv7itcl
10658
10657
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Linguistic]]
10657
Scribunto
text/plain
--[[
__ __ _ _ _ _ _ _ _
| \/ | ___ __| |_ _| | ___ _| | (_)_ __ __ _ _ _(_)___| |_(_) ___
| |\/| |/ _ \ / _` | | | | |/ _ (_) | | | '_ \ / _` | | | | / __| __| |/ __|
| | | | (_) | (_| | |_| | | __/_| |___| | | | | (_| | |_| | \__ \ |_| | (__
|_| |_|\___/ \__,_|\__,_|_|\___(_)_____|_|_| |_|\__, |\__,_|_|___/\__|_|\___|
|___/
Simple internationalization functions that can be called by other modules.
This Module was copied from Wikimedia Commons, so please request changes there.
Maintainers:
* Zolo - original version
* Jarekt
Dependencies:
- Module uses c:data:I18n/Or.tab
]]
require('strict')
-- ==================================================
-- === Internal functions ===========================
-- ==================================================
local function langSwitch(list,lang)
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
for i,language in ipairs(langList) do
if list[language] then
return list[language]
end
end
return nil
end
------------------------------------------------------------------------------
-- read Commons Data:SOMENAME.tab dataset and look for message identified by a
-- "key" in a language "lang". See editAtWikidata as an example.
local function formatMessage(dataset, key, lang)
for _, row in pairs(mw.ext.data.get(dataset, lang).data) do
local id, msg = unpack(row)
if id == key then
return mw.message.newRawMessage(msg):plain()
end
end
error('Invalid message key "' .. key .. '"')
end
------------------------------------------------------------------------------
local function nowiki(str) -- remove all the links
if not str then
return str
end
str = mw.ustring.gsub(str, "<[^>]*>", "") -- remove all html tags from str
str = mw.ustring.gsub(str, "'''", "") -- remove bold
str = mw.ustring.gsub(str, "''", "") -- remove italics
str = mw.ustring.gsub(str, "%[%[[Ff]ile:[^%]]+%]%]", "") -- remove file icons
str = mw.ustring.gsub(str, "%[%[[^|]*|", "") -- remove piped links, like "[[:en:test|"
str = mw.ustring.gsub(str, "%[[^ ]+ ", "") -- remove URL links, like "[https://www.wikidata.org/wiki/Q2706250 "
str = mw.ustring.gsub(str, "%[%[", "" ) -- remove piped links, like "[["
str = mw.ustring.gsub(str, "%]", "" ) -- remove piped links, like "]" or "]]"
return str
end
------------------------------------------------------------------------------
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to Module:Yesno
local function yesno(val, default)
if type(val) == 'boolean' then
return val
elseif type(val) == 'number' then
if val==1 then
return true
elseif val==0 then
return false
end
elseif type(val) == 'string' then
val = mw.ustring.lower(val) -- put in lower case
if val == 'no' or val == 'n' or val == 'false' or val == '0' then
return false
elseif val == 'yes' or val == 'y' or val == 'true' or val == '1' then
return true
end
end
return default
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- ===========================================================================
-- === Version of the function to be called from other LUA codes
-- ===========================================================================
------------------------------------------------------------------------------------------
function p.vowelfirst (str)
if str then
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭï'..
'ḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
str = mw.ustring.lower(mw.ustring.sub(str,1,1))
return mw.ustring.find(vowels, str, 1, true )
end
end
------------------------------------------------------------------------------------------
function p.inparentheses(str)
if (not str) or (str == "") then
return nil
end
local str2 = mw.message.new('parentheses', str):inLanguage(lang):plain()
return (str2~=nil and str2) or ('('..str..')') -- in case this module is moved to a project where {{int:parenthesis}} is not set
end
------------------------------------------------------------------------------------------
function p.of(word, lang, raw, gender, number, determiner) -- rough translation of "of" in various languages
-- note that the cases when on "of" is employed varies a lot among languages, so it is more prudent to call this from lang specific function only
if not raw or mw.text.trim(raw) == "" then
raw = mw.ustring.lower(nowiki(word))
end
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if lang == 'fr' then
determiner = yesno(determiner,false)
if determiner then
if string.sub(number or '',1,1)=='p' then -- number == 'plural'
return 'des ' .. word
elseif p.vowelfirst(raw) then
return 'de l’' .. word
elseif string.sub(gender or '',1,1)=='f' then -- gender == 'feminine'
return 'de la ' .. word
else
return 'du ' .. word
end
else
if p.vowelfirst(raw) then
return 'd’' .. word
else
return 'de ' .. word
end
end
elseif lang == 'ca' then
-- implement [[Template:Of/ca]] or https://ca.wikipedia.org/wiki/Plantilla:Deod%27/base for case where "{{{context}}}" is "en" (default on Commons)
if ( p.vowelfirst(raw) and not mw.ustring.find( 'ia|ià|ie|io|iu|ua|ue|ui|uí|uï|uo|ya|ye|yi|yo|yu|', mw.ustring.sub(raw,1,2) .. '|')) then
return 'd\'' .. word
else
return 'de ' .. word
end
end
end
------------------------------------------------------------------------------------------
function p.noungroup(noun, adj, lang)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
if not adj or adj == ''
then return noun
end
local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain()
-- Assign order of words per language: 1 means adjective before the noun and 2 means adjective after the noun
-- original source for many: language subpages of [[Template:Technique]]
-- corrections to that using https://wals.info/feature/87A, still different:
-- * vi: WALS says 2
-- * gl isn't consistent in [[Template:Technique/gl]], but seems to be 2
local LUT = {ar=2, ca=2, cs=1, da=1, de=1, el=1, en=1, es=2, et=1, fi=1, fr=2,
gl=2, he=2, hu=1, it=2, ja=1, la=2, mk=1, nds=1, nb=1, nl=1, no=1, pl=1, pt=2,
ro=2, ru=1, scn=2, sk=1, sl=1, sr=1, sv=1, sw=1, tr=1, vec=1, vi=1, zh=1}
local primaryLangSubtag = mw.text.split(lang, '-', true)[1]
local case = LUT[lang] or LUT[primaryLangSubtag]
if case==1 then -- adjective before the noun
return adj .. wordsep .. noun
elseif case==2 then -- adjective after the noun
return noun .. wordsep .. adj
else -- order unknown
return noun .. ' (' .. adj .. ')'
end
end
------------------------------------------------------------------------------------------
function p.conj(args, lang, conjtype)
local comma = mw.message.new( "comma-separator"):inLanguage(lang):plain()
local wordsep = mw.message.new( "Word-separator" ):inLanguage(lang):plain()
local andtable = { ar=' و', he=' ו', ja='および', pl=' i '} -- languages with a problem with the MediaWiki:And
local sep1, sep2 = comma, nil
if conjtype == 'comma' then
sep2 = comma
elseif conjtype == 'or' or conjtype == 'explicit or' then
local wordor = formatMessage('I18n/Or.tab', 'or', lang) -- get translated "or"
sep2 = wordsep .. wordor .. wordsep -- pad it with spaces (if needed)
sep1 = (conjtype == 'explicit or' and sep2) or comma -- adds "or" betwen all words when the context can be confusing
elseif conjtype and conjtype ~= 'and' and conjtype ~= '' then
sep1, sep2 = conjtype, conjtype
elseif andtable[lang] then
sep2 = andtable[lang]
else
sep2 = mw.message.new( "and" ):inLanguage(lang):plain() .. wordsep
end
return mw.text.listToText(args, sep1, sep2)
end
-- ===========================================================================
-- === Version of the functions to be called from template namespace
-- ===========================================================================
------------------------------------------------------------------------------------------
function p.offromwiki(frame)
local args = frame.args
return p.of(args.word, args.lang, args.raw, args.gender, args.number, args.determiner)
end
------------------------------------------------------------------------------------------
function p.conjfromWiki(frame)
local args = frame.args
if not args or not args[1] then
args = frame:getParent().args
end
local lang = args.lang
if not lang or mw.text.trim(lang) == '' then
lang = frame:callParserFunction( "int", "lang" )
end
local newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return 'error: bad parameter in template:Conj: ' .. i .. '[[Category:Pages with incorrect template usage/Conj|A]]'
end
end
end
return p.conj(newargs, lang, args.type)
end
return p
ibgdthfbs6ucr2zs5ekihtxtvv7itcl
Module:LangSwitch
828
1322
10659
2022-10-29T17:41:02Z
commons>Mdaniels5757
0
per edit request
10659
Scribunto
text/plain
--[[
__ __ _ _ _ ____ _ _ _
| \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \
| | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_|
|___/
Authors and maintainers:
* User:Zolo - original version in Module:Fallback
* User:Jarekt
]]
-- add optional module
-- used for debugging purposes as it detects cases of unintended global variables
require('strict')
local p = {}
local function add_labels(args)
-- add invisible but machine readable labels to the files, which can be used to add titles to wikidata items
local createTag = require('Module:TagQS').createTag -- lazy loading of the module: only for the files that need it
local qsTable = {''}
-- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata
for lang, text in pairs( args ) do
if type(lang)=='string' and mw.language.isSupportedLanguage(lang) then -- lang has to be a valid language
table.insert( qsTable, createTag('label', 'L'..lang, '"' .. text .. '"') )
end
end
return table.concat( qsTable, '\n')
end
--[[
_langSwitch
This function is the core part of the LangSwitch template.
Example usage from Lua:
text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang)
Parameters:
args - table with translations by language
lang - desired language (often user's native language)
Error Handling:
]]
function p._langSwitch(args, lang) -- args: table of translations
-- Return error if there is not default and no english version
if not args.en and not args.default then
local err = '<b class="error">LangSwitch Error: no default</b>'
if args.nocat == '1' then
return err
else
return err .. '[[Category:LangSwitch template without default version]]'
end
end
-- To improve performance try quick switch, and load fallback chain only if needed.
-- In the vast majority of cases fast switch is sufficient
local val = args[lang]
if val == '~' then
return ''
elseif val and val ~= '' then
return val
elseif args.quick then
return nil
end
-- get the list of accepetable language (lang + those in lang's fallback chain) and check their content
assert(lang, 'LangSwitch Error: no lang')
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
table.insert(langList,math.max(#langList,2),'default')
for _, language in ipairs(langList) do
val = args[language]
if val == '~' then
return ''
elseif val and val ~= '' then
return val
end
end
end
--[[
langSwitch
This function is the core part of the LangSwitch template.
Example Usage from a template:
{{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }}
Parameters:
frame.args - table with translations by language
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.langSwitch(frame) -- version to be used from wikitext
local args = frame.args
-- if no expected args provided than check parent template/module args
if args.en==nil and args.default==nil and args.nocat==nil then
args = mw.getCurrentFrame():getParent().args
end
local lang = args.lang
if not lang or not mw.language.isKnownLanguageTag(lang) then
lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
-- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata
local labels = ''
if args.add_labels then
labels = add_labels(args)
end
-- Try quick switch which checks the most likely option when fallback is not needed
args.quick = true;
local val = p._langSwitch(args, lang)
if val then
return val .. labels
end
-- Allow input in format: {{LangSwitch|de=Grün|es/it/pt=Verde|fr=Vert|en=Green |lang=en}}
-- with multiple languages mapping to a single value
local args1 = {}
for name, value in pairs( args ) do
if value ~= '' and type(name)=='string' then
for str in string.gmatch( name, "([^/]+)" ) do
args1[str] = value
end
end
end
return p._langSwitch(args1, lang) .. labels
end
return p
eio249psl03mn1ttbazreiyu21cxato
10660
10659
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:LangSwitch]]
10659
Scribunto
text/plain
--[[
__ __ _ _ _ ____ _ _ _
| \/ | ___ __| |_ _| | ___ _| | __ _ _ __ __ _/ ___|_ _(_) |_ ___| |__
| |\/| |/ _ \ / _` | | | | |/ _ (_) | / _` | '_ \ / _` \___ \ \ /\ / / | __/ __| '_ \
| | | | (_) | (_| | |_| | | __/_| |__| (_| | | | | (_| |___) \ V V /| | || (__| | | |
|_| |_|\___/ \__,_|\__,_|_|\___(_)_____\__,_|_| |_|\__, |____/ \_/\_/ |_|\__\___|_| |_|
|___/
Authors and maintainers:
* User:Zolo - original version in Module:Fallback
* User:Jarekt
]]
-- add optional module
-- used for debugging purposes as it detects cases of unintended global variables
require('strict')
local p = {}
local function add_labels(args)
-- add invisible but machine readable labels to the files, which can be used to add titles to wikidata items
local createTag = require('Module:TagQS').createTag -- lazy loading of the module: only for the files that need it
local qsTable = {''}
-- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata
for lang, text in pairs( args ) do
if type(lang)=='string' and mw.language.isSupportedLanguage(lang) then -- lang has to be a valid language
table.insert( qsTable, createTag('label', 'L'..lang, '"' .. text .. '"') )
end
end
return table.concat( qsTable, '\n')
end
--[[
_langSwitch
This function is the core part of the LangSwitch template.
Example usage from Lua:
text = _langSwitch({en='text in english', pl='tekst po polsku'}, lang)
Parameters:
args - table with translations by language
lang - desired language (often user's native language)
Error Handling:
]]
function p._langSwitch(args, lang) -- args: table of translations
-- Return error if there is not default and no english version
if not args.en and not args.default then
local err = '<b class="error">LangSwitch Error: no default</b>'
if args.nocat == '1' then
return err
else
return err .. '[[Category:LangSwitch template without default version]]'
end
end
-- To improve performance try quick switch, and load fallback chain only if needed.
-- In the vast majority of cases fast switch is sufficient
local val = args[lang]
if val == '~' then
return ''
elseif val and val ~= '' then
return val
elseif args.quick then
return nil
end
-- get the list of accepetable language (lang + those in lang's fallback chain) and check their content
assert(lang, 'LangSwitch Error: no lang')
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
table.insert(langList,math.max(#langList,2),'default')
for _, language in ipairs(langList) do
val = args[language]
if val == '~' then
return ''
elseif val and val ~= '' then
return val
end
end
end
--[[
langSwitch
This function is the core part of the LangSwitch template.
Example Usage from a template:
{{#invoke:fallback|langSwitch|en=text in english|pl=tekst po polsku|lang={{int:lang}} }}
Parameters:
frame.args - table with translations by language
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.langSwitch(frame) -- version to be used from wikitext
local args = frame.args
-- if no expected args provided than check parent template/module args
if args.en==nil and args.default==nil and args.nocat==nil then
args = mw.getCurrentFrame():getParent().args
end
local lang = args.lang
if not lang or not mw.language.isKnownLanguageTag(lang) then
lang = frame:callParserFunction( "int", "lang" ) -- get user's chosen language
end
-- add text of invisible tag brodcasted by the template which allows creation of QuickStatements command used to add this info to Wikidata
local labels = ''
if args.add_labels then
labels = add_labels(args)
end
-- Try quick switch which checks the most likely option when fallback is not needed
args.quick = true;
local val = p._langSwitch(args, lang)
if val then
return val .. labels
end
-- Allow input in format: {{LangSwitch|de=Grün|es/it/pt=Verde|fr=Vert|en=Green |lang=en}}
-- with multiple languages mapping to a single value
local args1 = {}
for name, value in pairs( args ) do
if value ~= '' and type(name)=='string' then
for str in string.gmatch( name, "([^/]+)" ) do
args1[str] = value
end
end
end
return p._langSwitch(args1, lang) .. labels
end
return p
eio249psl03mn1ttbazreiyu21cxato
Tempilet:Ifsvg
10
1323
10661
2021-07-06T15:05:33Z
commons>Minorax
0
Protected "[[Template:Ifsvg]]": [[Commons:Protection policy|Widely used template]]: 165928 transclusion(s) found. ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10661
wikitext
text/x-wiki
{{#ifeq:{{NAMESPACE}}|File
| {{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}| svg | {{{1|}}} | {{{2|}}} }}
| {{{3|<noinclude>not file</noinclude>}}} }}<noinclude>
{{documentation}}
</noinclude>
5zxgtiv2gqenxwf1ujj0ow37pdx3yq1
10662
10661
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Ifsvg]]
10661
wikitext
text/x-wiki
{{#ifeq:{{NAMESPACE}}|File
| {{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}| svg | {{{1|}}} | {{{2|}}} }}
| {{{3|<noinclude>not file</noinclude>}}} }}<noinclude>
{{documentation}}
</noinclude>
5zxgtiv2gqenxwf1ujj0ow37pdx3yq1
Module:File
828
1324
10663
2024-10-29T15:32:04Z
commons>TheDJ
0
Add webp to list of supported file types
10663
Scribunto
text/plain
-- Module for handling Media files (Origin: Wikimedia Commons)
require('strict')
-- ==================================================
-- === helper Lookup table ==========================
-- ==================================================
local extensionMap = {
-- File types with full support in Commons (See [[c:Commons:File types]]).
DJVU = 'image/vnd.djvu',
FLAC = 'audio/x-flac',
GIF = 'image/gif',
JPEG = 'image/jpeg',
JPG = 'image/jpeg',
MID = 'audio/midi',
MP3 = 'audio/mpeg',
OGA = 'audio/ogg',
OGG = 'audio/ogg',
OGV = 'video/ogg',
PDF = 'application/pdf',
PNG = 'image/png',
SVG = 'image/svg+xml',
TIF = 'image/tiff',
TIFF = 'image/tiff',
WEBM = 'video/webm',
WEBP = 'image/webp',
WAV = 'audio/x-wav',
XCF = 'image/xcf',
-- Other file types with restrictions (not accepted in standard uploads on Commons but in 'User:' namespace).
-- They could be supported in Wiki pages by embedding their content in an <pre> or <source> elements.
CSS = 'text/css',
CSV = 'text/csv',
JS = 'application/javascript',
JSON = 'application/json',
TXT = 'text/plain',
XML = 'application/xml',
-- Only generated by MediaWiki on output of some queries, restricted in all uploads.
GZ = 'application/gzip', -- delivered only only for some wiki results
ZIP = 'application/zip', -- delivered only for some wiki data exports
-- Other file types not supported and to convert (a few of them may be in special administration namespaces).
DOC = 'application/msword', -- please convert to PDF, DJVU, or Wiki
F4V = 'video/mpeg', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
FLV = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
ICO = 'image/vnd.microsoft.icon', -- used in MediaWiki resources for 'website icons'
MP4 = 'video/mp4',
QT = 'video/quicktime', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
RA = 'audio/vnd.rn-realaudio', -- (deprecated, replaced by MP3) please convert to OGA
SWF = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
WMA = 'audio/x-ms-wma', -- please convert to OGA
WMV = 'video/x-ms-wmv', -- please convert to OGV or WEBM
XLS = 'application/vnd.ms-excel', -- please convert to PDF, DJVU, or Wiki
}
-- ==================================================
-- === Local functions ==============================
-- ==================================================
local function filename(frame)
return frame.args[1] or frame.args["file"] or frame.args["title"]
end
local function getMetadata(frame)
local fname = filename(frame)
local title
if fname then
title = mw.title.new(fname, 6)
else
title = mw.title.getCurrentTitle()
end
if title then
return title.file
else
return {exists=false}
end
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- p.csExtension("Foo.bar.svg")
-- @return "svg"
function p.csExtension(frame)
local fname = filename(frame) or mw.title.getCurrentTitle().text
local parts = mw.text.split(fname, '.', true)
if #parts>1 then
return parts[#parts]
else
return ''
end
end
function p.extension(frame)
return p.csExtension(frame):lower()
end
function p.extensionUpper(frame)
return p.csExtension(frame):upper()
end
-- p.woExtension("Foo.bar.svg")
-- @return "Foo.bar"
-- Original author: Bawolff at [[Module:FileName]]
function p.woExtension(frame)
local fname = filename(frame) or mw.title.getCurrentTitle().text
local parts = mw.text.split(fname , '.', true)
local upTo = #parts - 1
if upTo == 0 then upTo = 1 end
return table.concat(parts, '.', 1, upTo)
end
function p.mime(frame)
local meta = getMetadata(frame)
if meta.exists then
return meta.mimeType
else
return extensionMap[p.extensionUpper(frame)] or 'unknown'
end
end
function p.mimeType(frame)
return getMetadata(frame).mimeType
end
function p.fileExists(frame)
return getMetadata(frame).exists or ''
end
-- This one won't throw errors at you
function p.fileExistsRelaxed(frame)
local ok, metadata = pcall(getMetadata(frame))
if ok then
return metadata.exists or ''
else
return ''
end
end
function p.maxthumb(frame)
-- Limits in megapixels are currently stored in Commons templates, they could be in this module.
-- There may be more limits for other supported mime types (djvu, flac, ogv, pdf, svg, webm, xcf).
local maxthumbMap = {
['image/gif'] = 1000,
['image/png' ] = 2500, -- see Template:LargePNG/limit
['image/tiff'] = 1000, -- see Template:LargeTIFF/limit
}
local mime = p.mime(frame)
return maxthumbMap[mime] or 'unknown @Module:File'
end
function p.dateWorkCreated(frame)
return '' -- no longer supported
end
function p.width(frame)
return getMetadata(frame).width
end
function p.height(frame)
return getMetadata(frame).height
end
function p.dimensions(frame)
local d = getMetadata(frame)
if d.exists then
return d.width .. ' × ' .. d.height
else
return ''
end
end
function p.size(frame)
return getMetadata(frame).size
end
function p.pageCount(frame)
local pages = getMetadata(frame).pages or {1}
return #pages
end
return p
f6ox2m3jg1irbxkfn9d27fp97b3byx7
10664
10663
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:File]]
10663
Scribunto
text/plain
-- Module for handling Media files (Origin: Wikimedia Commons)
require('strict')
-- ==================================================
-- === helper Lookup table ==========================
-- ==================================================
local extensionMap = {
-- File types with full support in Commons (See [[c:Commons:File types]]).
DJVU = 'image/vnd.djvu',
FLAC = 'audio/x-flac',
GIF = 'image/gif',
JPEG = 'image/jpeg',
JPG = 'image/jpeg',
MID = 'audio/midi',
MP3 = 'audio/mpeg',
OGA = 'audio/ogg',
OGG = 'audio/ogg',
OGV = 'video/ogg',
PDF = 'application/pdf',
PNG = 'image/png',
SVG = 'image/svg+xml',
TIF = 'image/tiff',
TIFF = 'image/tiff',
WEBM = 'video/webm',
WEBP = 'image/webp',
WAV = 'audio/x-wav',
XCF = 'image/xcf',
-- Other file types with restrictions (not accepted in standard uploads on Commons but in 'User:' namespace).
-- They could be supported in Wiki pages by embedding their content in an <pre> or <source> elements.
CSS = 'text/css',
CSV = 'text/csv',
JS = 'application/javascript',
JSON = 'application/json',
TXT = 'text/plain',
XML = 'application/xml',
-- Only generated by MediaWiki on output of some queries, restricted in all uploads.
GZ = 'application/gzip', -- delivered only only for some wiki results
ZIP = 'application/zip', -- delivered only for some wiki data exports
-- Other file types not supported and to convert (a few of them may be in special administration namespaces).
DOC = 'application/msword', -- please convert to PDF, DJVU, or Wiki
F4V = 'video/mpeg', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
FLV = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
ICO = 'image/vnd.microsoft.icon', -- used in MediaWiki resources for 'website icons'
MP4 = 'video/mp4',
QT = 'video/quicktime', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
RA = 'audio/vnd.rn-realaudio', -- (deprecated, replaced by MP3) please convert to OGA
SWF = 'video/x-flv', -- (deprecated, replaced by MP4) please convert to OGV or WEBM
WMA = 'audio/x-ms-wma', -- please convert to OGA
WMV = 'video/x-ms-wmv', -- please convert to OGV or WEBM
XLS = 'application/vnd.ms-excel', -- please convert to PDF, DJVU, or Wiki
}
-- ==================================================
-- === Local functions ==============================
-- ==================================================
local function filename(frame)
return frame.args[1] or frame.args["file"] or frame.args["title"]
end
local function getMetadata(frame)
local fname = filename(frame)
local title
if fname then
title = mw.title.new(fname, 6)
else
title = mw.title.getCurrentTitle()
end
if title then
return title.file
else
return {exists=false}
end
end
-- ==================================================
-- === External functions ===========================
-- ==================================================
local p = {}
-- p.csExtension("Foo.bar.svg")
-- @return "svg"
function p.csExtension(frame)
local fname = filename(frame) or mw.title.getCurrentTitle().text
local parts = mw.text.split(fname, '.', true)
if #parts>1 then
return parts[#parts]
else
return ''
end
end
function p.extension(frame)
return p.csExtension(frame):lower()
end
function p.extensionUpper(frame)
return p.csExtension(frame):upper()
end
-- p.woExtension("Foo.bar.svg")
-- @return "Foo.bar"
-- Original author: Bawolff at [[Module:FileName]]
function p.woExtension(frame)
local fname = filename(frame) or mw.title.getCurrentTitle().text
local parts = mw.text.split(fname , '.', true)
local upTo = #parts - 1
if upTo == 0 then upTo = 1 end
return table.concat(parts, '.', 1, upTo)
end
function p.mime(frame)
local meta = getMetadata(frame)
if meta.exists then
return meta.mimeType
else
return extensionMap[p.extensionUpper(frame)] or 'unknown'
end
end
function p.mimeType(frame)
return getMetadata(frame).mimeType
end
function p.fileExists(frame)
return getMetadata(frame).exists or ''
end
-- This one won't throw errors at you
function p.fileExistsRelaxed(frame)
local ok, metadata = pcall(getMetadata(frame))
if ok then
return metadata.exists or ''
else
return ''
end
end
function p.maxthumb(frame)
-- Limits in megapixels are currently stored in Commons templates, they could be in this module.
-- There may be more limits for other supported mime types (djvu, flac, ogv, pdf, svg, webm, xcf).
local maxthumbMap = {
['image/gif'] = 1000,
['image/png' ] = 2500, -- see Template:LargePNG/limit
['image/tiff'] = 1000, -- see Template:LargeTIFF/limit
}
local mime = p.mime(frame)
return maxthumbMap[mime] or 'unknown @Module:File'
end
function p.dateWorkCreated(frame)
return '' -- no longer supported
end
function p.width(frame)
return getMetadata(frame).width
end
function p.height(frame)
return getMetadata(frame).height
end
function p.dimensions(frame)
local d = getMetadata(frame)
if d.exists then
return d.width .. ' × ' .. d.height
else
return ''
end
end
function p.size(frame)
return getMetadata(frame).size
end
function p.pageCount(frame)
local pages = getMetadata(frame).pages or {1}
return #pages
end
return p
f6ox2m3jg1irbxkfn9d27fp97b3byx7
Tempilet:Colon
10
1325
10665
2023-06-02T09:27:01Z
commons>TKsdik8900
0
Fulfilling the edit request ([[Template talk:Colon#Use Lua module]]) by [[User:CalendulaAsteraceae|CalendulaAsteraceae]]
10665
wikitext
text/x-wiki
{{#invoke:Colon|colon}}<noinclude>{{documentation}}</noinclude>
6h6zrczkyugye2yejwwvp8zddl4t8ge
10666
10665
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Colon]]
10665
wikitext
text/x-wiki
{{#invoke:Colon|colon}}<noinclude>{{documentation}}</noinclude>
6h6zrczkyugye2yejwwvp8zddl4t8ge
Tempilet:NoImageNotes
10
1326
10667
2022-11-05T18:04:19Z
commons>Jonesey95
0
replace in-line span tag, which is often used to wrap block content, with equivalent div tag to fix Linter errors. I see that this is transcluded in over one million pages, but it is used directly in only about 100 template pages, and I checked most of them and they use this template in a table cell on their own rather than followed by in-line content. Please post on the talk page if I have broken anything.
10667
wikitext
text/x-wiki
<includeonly><div class="wpImageAnnotatorControl wpImageAnnotatorOff">{{{1|}}}</div></includeonly><noinclude>{{documentation}}</noinclude>
ncu4bxelcyq8ok673lbdeficun7f215
10668
10667
2026-08-25T23:38:27Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:NoImageNotes]]
10667
wikitext
text/x-wiki
<includeonly><div class="wpImageAnnotatorControl wpImageAnnotatorOff">{{{1|}}}</div></includeonly><noinclude>{{documentation}}</noinclude>
ncu4bxelcyq8ok673lbdeficun7f215
Tempilet:T/main
10
1327
10671
2022-10-29T18:04:16Z
commons>Mdaniels5757
0
Fulfilling [[Template:Edit request|edit request]] by [[User:Jonesey95|Jonesey95]]. Thanks for helping!
10671
wikitext
text/x-wiki
{{#ifeq:{{lc:{{{code}}}}}|tt|<code>}}<!-- code start
-->{{#switch:{{#switch:{{{link}}}|no|n|-=1|0}}{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}<!--
-->|000|010|011|100=|{{#switch:{{{case}}}|i|n={{i18n/namespace|t|link={{{case}}}o|lang={{{i18n|}}}}}|l=template|Template}}:}}<!--
-->{{#switch:{{{link}}}|no|n={{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace;{{{style|}}}">}}<!-- link=no
-->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6={{}}<!--
-->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- when "link=no": just display
-->{{#if:{{{parm|}}}||{{{parm}}}}}<!-- optional parm display
-->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6=}}}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!--
-->|{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4={{|1|5={}}}}<!-- when +: not outside
-->[[:{{#switch:{{{3|}}}|+|-|=|{{trim|{{{3}}}}}:}}<!-- language code (ISO 639-1) (and/or sisterproject prefix)
-->Template:{{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|<!-- =link=
-->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{case}}}|i|n={{i18n/namespace|t|link=no|lang={{{i18n|}}}}}|l=template|Template}}:}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace,monospace;{{{style|}}}">}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6={{|1|5={}}<!--
-->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4={{|1|5={}}}}<!-- inside
-->{{#if:{{{code|}}}|<code>}}{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=<kbd>}}<!-- code/typewrite start
-->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- display name
-->{{#if:{{{parm|}}}|{{#switch:||{{padleft:|1|{{{parm}}}}}|{{padleft:|6|{{{parm}}}}}=||}}{{{parm}}}}}<!-- opt. parm
-->{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=</kbd>}}{{#if:{{{code|}}}|</code>}}<!-- typewrite/code end
-->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6=}}|1|5=}}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!--
-->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4=}}|1|5=}}}}}<!-- inside
-->]]{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4=}}|1|5=}}}}}}}<!-- not outside
-->{{#ifeq:{{lc:{{{code}}}}}|tt|</code>}}<!-- code end
-->{{#if:{{{full|{{#ifeq:{{{5}}}|full|1}}}}}|<span class="plainlinks"><!--
--> <kbd>(</kbd><small>[{{fullurl:Template:{{{1|{{PAGENAME}}}}}}} {{int:view}}]<!--
--> • [{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=edit}} {{int:edit}}]<!--
--> • [[:Template talk:{{{1|{{PAGENAME}}}}}|{{int:talk}}]]<!--
--> • [{{fullurl:Special:Whatlinkshere/Template:{{{1|{{PAGENAME}}}}}|limit=500}} Links]<!-- {{int:links}} needs fix
--> • [{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=history}} History]</small><kbd>)</kbd><!--
--></span>}}<!--
--><noinclude>
{{documentation|Template:T/doc}}
</noinclude>
22tv9age8m1616dns22yrih6gn23jul
10672
10671
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:T/main]]
10671
wikitext
text/x-wiki
{{#ifeq:{{lc:{{{code}}}}}|tt|<code>}}<!-- code start
-->{{#switch:{{#switch:{{{link}}}|no|n|-=1|0}}{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}<!--
-->|000|010|011|100=|{{#switch:{{{case}}}|i|n={{i18n/namespace|t|link={{{case}}}o|lang={{{i18n|}}}}}|l=template|Template}}:}}<!--
-->{{#switch:{{{link}}}|no|n={{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace;{{{style|}}}">}}<!-- link=no
-->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6={{}}<!--
-->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- when "link=no": just display
-->{{#if:{{{parm|}}}||{{{parm}}}}}<!-- optional parm display
-->{{#switch:{{{incl|{{{i|}}}}}}|0|1|2|3|4|5|6=}}}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!--
-->|{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4={{|1|5={}}}}<!-- when +: not outside
-->[[:{{#switch:{{{3|}}}|+|-|=|{{trim|{{{3}}}}}:}}<!-- language code (ISO 639-1) (and/or sisterproject prefix)
-->Template:{{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|<!-- =link=
-->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{case}}}|i|n={{i18n/namespace|t|link=no|lang={{{i18n|}}}}}|l=template|Template}}:}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|3=<span style="font-family:monospace,monospace;{{{style|}}}">}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6={{|1|5={}}<!--
-->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4={{|1|5={}}}}<!-- inside
-->{{#if:{{{code|}}}|<code>}}{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=<kbd>}}<!-- code/typewrite start
-->{{#switch:{{{2|}}}|+|-|={{#switch:{{{1|}}}|+|-|={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}|{{{2}}}}}<!-- display name
-->{{#if:{{{parm|}}}|{{#switch:||{{padleft:|1|{{{parm}}}}}|{{padleft:|6|{{{parm}}}}}=||}}{{{parm}}}}}<!-- opt. parm
-->{{#switch:{{{incl|{{{i|}}}}}}|4|5|6|9=</kbd>}}{{#if:{{{code|}}}|</code>}}<!-- typewrite/code end
-->{{#switch:{{{incl|{{{i|}}}}}}|2|3|6=}}|1|5=}}}<!--
-->{{#switch:{{{incl|{{{i|}}}}}}|3=</span>}}<!--
-->{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{#switch:{{{incl|{{{i|}}}}}}|0|4=}}|1|5=}}}}}<!-- inside
-->]]{{#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=|{{#switch:{{{incl|{{{i|}}}}}}|0|4=}}|1|5=}}}}}}}<!-- not outside
-->{{#ifeq:{{lc:{{{code}}}}}|tt|</code>}}<!-- code end
-->{{#if:{{{full|{{#ifeq:{{{5}}}|full|1}}}}}|<span class="plainlinks"><!--
--> <kbd>(</kbd><small>[{{fullurl:Template:{{{1|{{PAGENAME}}}}}}} {{int:view}}]<!--
--> • [{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=edit}} {{int:edit}}]<!--
--> • [[:Template talk:{{{1|{{PAGENAME}}}}}|{{int:talk}}]]<!--
--> • [{{fullurl:Special:Whatlinkshere/Template:{{{1|{{PAGENAME}}}}}|limit=500}} Links]<!-- {{int:links}} needs fix
--> • [{{fullurl:Template:{{{1|{{PAGENAME}}}}}|action=history}} History]</small><kbd>)</kbd><!--
--></span>}}<!--
--><noinclude>
{{documentation|Template:T/doc}}
</noinclude>
22tv9age8m1616dns22yrih6gn23jul
Tempilet:ISOdate
10
1328
10675
2022-06-20T03:22:51Z
commons>Jarekt
0
"class=" is equivalent to "class=-". In case of no "class" parameter use default "class=dtstart"
10675
wikitext
text/x-wiki
{{#invoke:ISOdate|ISOdate
|1 = {{{date|{{{1|}}}}}}
|class = {{#if:{{{class|-}}}|{{{class|-}}}|dtstart}}<!-- "class=" is equivalent to "class=-". In case of no "class" parameter use default "class=dtstart" -->
|lang = {{#if:{{{lang|{{{2|}}}}}} | {{{lang|{{{2|}}}}}} | {{int:Lang}} }}
|case = {{{case|{{{form|}}}}}}
|trim_year = {{{trim_year|{{{trim year|100-999}}}}}}
}}<noinclude>
{{heavily used template}}
{{documentation}}
</noinclude>
kqj28tw3ova94e02dlehqfpf7dor33x
10676
10675
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:ISOdate]]
10675
wikitext
text/x-wiki
{{#invoke:ISOdate|ISOdate
|1 = {{{date|{{{1|}}}}}}
|class = {{#if:{{{class|-}}}|{{{class|-}}}|dtstart}}<!-- "class=" is equivalent to "class=-". In case of no "class" parameter use default "class=dtstart" -->
|lang = {{#if:{{{lang|{{{2|}}}}}} | {{{lang|{{{2|}}}}}} | {{int:Lang}} }}
|case = {{{case|{{{form|}}}}}}
|trim_year = {{{trim_year|{{{trim year|100-999}}}}}}
}}<noinclude>
{{heavily used template}}
{{documentation}}
</noinclude>
kqj28tw3ova94e02dlehqfpf7dor33x
Tempilet:Color
10
1329
10687
2022-04-11T09:19:21Z
commons>Sarang
0
+font-weight
10687
wikitext
text/x-wiki
<span style="background:{{{bg|{{{3|transparent}}}}}};{{#invoke:String|replace|color:{{#switch:{{{1}}}|b=#000|w=#FFF|=red|{{{1}}}}};font-weight:{{{bold|{{{b|{{#switch:{{{6}}}|b=7|bold=9|4}}00}}}}}};{{{style|{{{css|{{{5|}}}}}}}}}|[
]||plain=false}}" title="{{{title|{{{bg|{{{4|transparent}}}}}}}}}">{{{2|{{0|!}}}}}</span><noinclude>
{{documentation}}
</noinclude>
rc0p6n6hke6px3112zdnsa1l2gnuhtn
10688
10687
2026-08-25T23:38:28Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Color]]
10687
wikitext
text/x-wiki
<span style="background:{{{bg|{{{3|transparent}}}}}};{{#invoke:String|replace|color:{{#switch:{{{1}}}|b=#000|w=#FFF|=red|{{{1}}}}};font-weight:{{{bold|{{{b|{{#switch:{{{6}}}|b=7|bold=9|4}}00}}}}}};{{{style|{{{css|{{{5|}}}}}}}}}|[
]||plain=false}}" title="{{{title|{{{bg|{{{4|transparent}}}}}}}}}">{{{2|{{0|!}}}}}</span><noinclude>
{{documentation}}
</noinclude>
rc0p6n6hke6px3112zdnsa1l2gnuhtn
Tempilet:Nobold
10
1330
10691
2024-08-28T08:27:12Z
commons>CptViraj
0
Protected "[[Template:Nobold]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10691
wikitext
text/x-wiki
<{{{tag|span}}} style="font-weight:normal">{{{1<noinclude>|unbolds the text given with 1=[[Category:Formatting templates|{{PAGENAME}}]]</noinclude>}}}</{{{tag|span}}}>
acoimcdc0kucys901f39nptjdmjlxby
10692
10691
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Nobold]]
10691
wikitext
text/x-wiki
<{{{tag|span}}} style="font-weight:normal">{{{1<noinclude>|unbolds the text given with 1=[[Category:Formatting templates|{{PAGENAME}}]]</noinclude>}}}</{{{tag|span}}}>
acoimcdc0kucys901f39nptjdmjlxby
Tempilet:Iffile
10
1331
10693
2019-12-10T06:46:38Z
commons>~riley
0
Changed protection level for "[[Template:Iffile]]": Allow template editors ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10693
wikitext
text/x-wiki
{{#ifexpr:{{NAMESPACENUMBER}}=6|{{{1|}}}|{{{2|}}}}}<noinclude>
{{heavily used template}}
{{Documentation}}
</noinclude>
j62gzdl49t92eveqpug7w94j2um948a
10694
10693
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Iffile]]
10693
wikitext
text/x-wiki
{{#ifexpr:{{NAMESPACENUMBER}}=6|{{{1|}}}|{{{2|}}}}}<noinclude>
{{heavily used template}}
{{Documentation}}
</noinclude>
j62gzdl49t92eveqpug7w94j2um948a
Tempilet:Mono/styles.css
10
1332
10695
2019-08-07T00:52:44Z
commons>XaosoaX
0
[[COM:AES|←]]Created page with '/* Styling for Template:Mono */ .monospaced { /* Keep it like this: "monospace, monospace". Those are the rules from [[w:en:WP:MONO]]. */ font-family: monospa...'
10695
sanitized-css
text/css
/* Styling for Template:Mono */
.monospaced {
/* Keep it like this: "monospace, monospace". Those are the rules from [[w:en:WP:MONO]]. */
font-family: monospace, monospace;
}
7nftleo0w4bj250ouquesl28ukyzx56
10696
10695
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Mono/styles.css]]
10695
sanitized-css
text/css
/* Styling for Template:Mono */
.monospaced {
/* Keep it like this: "monospace, monospace". Those are the rules from [[w:en:WP:MONO]]. */
font-family: monospace, monospace;
}
7nftleo0w4bj250ouquesl28ukyzx56
Tempilet:W
10
1333
10703
2023-07-28T19:13:19Z
commons>JoKalliauer
0
Changed protection settings for "[[Template:W]]": [[Special:MyLanguage/Commons:Protection policy|High traffic page]] ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite))
10703
wikitext
text/x-wiki
{{#switch:{{padleft:|1|{{{1|}}}}}|[|{=[[Category:Maintenance:Template W error]]{{color|red|'''Template W: parameter error'''}}<!--
-->|{{#switch:{{{link|}}}|none=<!--
-->|no|n|-|={{#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}}}<!-- option for only text without link
-->|=[[:{{#if:{{{3|}}}|{{#switch:{{{3}}}|+|c|C=w|{{{3}}}}}|w}}:{{{1|{{Projectname|w}}}}}<!-- (w=en)
-->|{{<includeonly>safesubst:</includeonly>#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}<!--
-->|{{#if:{{NAMESPACE:{{{1|}}}}}|{{NAMESPACE:{{{1|}}}}}''''':'''''{{PAGENAME:{{{1|{{Projectname|w}}}}}}}<!-- :
-->|{{#ifeq:{{padleft:|1|{{{1|W}}}}}|{{lc:{{padleft:|1|{{PAGENAME:{{{1|W}}}}}}}}}<!--"ℓ"
-->|{{lcfirst:{{PAGENAME:{{{1|{{Projectname|w}}}}}}}}}<!-- first character lower case
-->|{{PAGENAME:{{{1|{{Projectname|w}}}}} }}}}}}}}]]}}<!--
-->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{PAGENAME:{{{1}}}}}]]<!--
-->|{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{Strip|{{PAGENAME:{{{1}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]<!--
-->|{{#switch:C|{{{3}}}|{{{4}}}={{#if:{{{2|}}}|[[Category:{{Strip|{{PAGENAME:{{{2}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]}}}}}}}}<!--
-->}}<noinclude>
{{documentation}}
</noinclude>
s65gzl2fzj2ztecp2gctn8ljm6swx3l
10704
10703
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:W]]
10703
wikitext
text/x-wiki
{{#switch:{{padleft:|1|{{{1|}}}}}|[|{=[[Category:Maintenance:Template W error]]{{color|red|'''Template W: parameter error'''}}<!--
-->|{{#switch:{{{link|}}}|none=<!--
-->|no|n|-|={{#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}}}<!-- option for only text without link
-->|=[[:{{#if:{{{3|}}}|{{#switch:{{{3}}}|+|c|C=w|{{{3}}}}}|w}}:{{{1|{{Projectname|w}}}}}<!-- (w=en)
-->|{{<includeonly>safesubst:</includeonly>#if:{{{2|}}}|{{#switch:{{{2}}}|+|c={{{1}}}|{{{2}}}}}|{{{1|{{Projectname|w}}}}}<!--
-->|{{#if:{{NAMESPACE:{{{1|}}}}}|{{NAMESPACE:{{{1|}}}}}''''':'''''{{PAGENAME:{{{1|{{Projectname|w}}}}}}}<!-- :
-->|{{#ifeq:{{padleft:|1|{{{1|W}}}}}|{{lc:{{padleft:|1|{{PAGENAME:{{{1|W}}}}}}}}}<!--"ℓ"
-->|{{lcfirst:{{PAGENAME:{{{1|{{Projectname|w}}}}}}}}}<!-- first character lower case
-->|{{PAGENAME:{{{1|{{Projectname|w}}}}} }}}}}}}}]]}}<!--
-->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{PAGENAME:{{{1}}}}}]]<!--
-->|{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}=[[Category:{{Strip|{{PAGENAME:{{{1}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]<!--
-->|{{#switch:C|{{{3}}}|{{{4}}}={{#if:{{{2|}}}|[[Category:{{Strip|{{PAGENAME:{{{2}}}}}|2={{{+|0}}}|3={{{-|0}}}|h={{{h|}}}|t={{{t|}}}}}]]}}}}}}}}<!--
-->}}<noinclude>
{{documentation}}
</noinclude>
s65gzl2fzj2ztecp2gctn8ljm6swx3l
Tempilet:T0
10
1334
10705
2024-08-28T08:28:15Z
commons>CptViraj
0
Protected "[[Template:T0]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10705
wikitext
text/x-wiki
{{T/main
|1 = {{{1|}}}
|2 = {{{2|}}}
|3 = {{#if: {{{lang|}}} | {{{lang|}}} |{{{3|}}} }}
|4 = {{{4|}}}
|5 = {{{5|}}}
|incl = {{#if: {{{incl|}} | {{{incl|}} | {{#if: {{{i|}}} | {{{i|}}} | 8 }} }}
|code = {{{code|}}}
|link = {{{link|}}}
|case = {{{case|}}}
|i18n = {{{i18n|}}}
|parm = {{{parm|}}}
|full = {{{full|}}}
}}<noinclude>{{Documentation|Template:T/doc}}</noinclude>
mw5bs7tzhda3vixwsk9pg8ex6cmilxe
10706
10705
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:T0]]
10705
wikitext
text/x-wiki
{{T/main
|1 = {{{1|}}}
|2 = {{{2|}}}
|3 = {{#if: {{{lang|}}} | {{{lang|}}} |{{{3|}}} }}
|4 = {{{4|}}}
|5 = {{{5|}}}
|incl = {{#if: {{{incl|}} | {{{incl|}} | {{#if: {{{i|}}} | {{{i|}}} | 8 }} }}
|code = {{{code|}}}
|link = {{{link|}}}
|case = {{{case|}}}
|i18n = {{{i18n|}}}
|parm = {{{parm|}}}
|full = {{{full|}}}
}}<noinclude>{{Documentation|Template:T/doc}}</noinclude>
mw5bs7tzhda3vixwsk9pg8ex6cmilxe
Tempilet:F
10
1335
10707
2023-06-18T18:54:07Z
commons>WOSlinker
0
remove any px in param 3
10707
wikitext
text/x-wiki
<onlyinclude>{{#ifeq:{{{1}}}|M|{{#invoke:Dsize|f_name|{{PAGENAME}}|{{{2|}}}|{{{3|}}}}}<!--
Parameter "M" can have a parameter "+x" and/or "-y" to strip x characters left, and/or y characters right, from the filename
-->|{{{p|}}}{{#if:{{{by|}}}|{{#ifeq:{{int:lang}}|bn|{{F/beng|{{{by}}}}}}}}}{{#if:{{{3|{{{d|}}}}}}<!--
-->|{{#switch:{{lc:{{{3|}}}}}<!-- case1: file name (p#3=FFL?)
-->|g={{F/layout|{{{1|}}}|{{{2|}}}|g|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!--c1 G
-->|n|c|d|f|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c1
-->|{{{2|}}}|{{lc:{{{3}}}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!--
-->|/=<!--
#default=
-->|{{#if:{{{l|}}}|<small>''Can't [[Template:F|display]]'' "[[:{{{l}}}:File:{{PAGENAME:{{{1}}}}}|<u>{{{l}}}:</u>{{PAGENAME:{{{1}}}}}]]"</small><!--
-->|{{#ifeq:{{{2}}}|G|{{F/layout|{{{1}}}|{{{d|{{{3}}}}}}|g|{{{4|}}}|Y=2}}<!-- case2: gallery function "G" p#2
-->|{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case3: file name left (not option "l")
-->|{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (and also not option "u")
-->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c3
-->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=3}}<!--
-->{{#switch:Z|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|{{#switch:{{{3}}}|+|-=|<!--
-->{{#if:{{{T|}}}| }}{{{t|{{{T|: }}}}}}}}}}<!--
-->}}}}<!--
-->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<div><!-- (option "u": create a table) -->
{{(!}} class="multicol" role="presentation" style="float:{{#switch:r|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=right;padding:0 {{{t|0}}}px 0 0<!--
-->|left;padding:0 0 0 {{{t|0}}}px}};{{#if:{{{3|}}}|width:{{replace text|{{{3}}}|px|}}px;}}table-layout:fixed;border:0;text-align:center;{{{style|}}}"<br>
{{!}}- style="vertical-align:top"<br>
{{!}}}}<!-- now display the image:
d/3 px: display the image
-->{{#if:{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|0|b|l|n|r|u|Z|+|-=|<!--
-->{{#ifeq:/|{{padleft:|1|{{{3}}}}}||1}}}}}}|#default=1}}<!-- d/3 px: display the file
-->|{{#if:{{{1|}}}|[[File:{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--
-->{{#if:{{{lang|}}}|{{!}}lang={{{lang}}}}}<!-- now occurs the display of the image
-->{{#switch:{{{alt|∅}}}|∅=<!--missing -->|#default={{!}}alt={{{alt|}}}}}<!--
-->{{#switch:{{{link|∅}}}|∅=|*={{!}}link=File:{{PAGENAME:{{{1}}}}}|#default={{!}}link={{{link}}}}}<!--
-->{{#switch:{{{title|∅}}}|∅=<!--missing-->|#default={{!}}title={{{title}}}}}<!--
-->{{!}}{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|b|l|n|r|u|Z|+|-=<!--
-->|{{#ifeq:/|{{padleft:|1|{{{3}}}}}||{{replace text|{{{3}}}|px|}}px}}}}}}|#default={{{d}}}px}}<!--
-->{{#switch:b|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}border}}<!--
-->{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}center}}<!--
-->{{#switch:r|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}right}}<!--
-->{{#if:{{{11|}}}|{{!}}{{{11}}}}}{{#if:{{{12|}}}|{{!}}{{{12}}}}}<!--
-->{{#if:{{{13|}}}|{{!}}{{{13}}}}}{{#if:{{{14|}}}|{{!}}{{{14}}}}}]]}}}}<!-- Extended image syntax
-->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": continue table) --><br>
{{!}}-
{{!}}<!--
-->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4
-->|l|{{{3|}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!--
-->|<!--
-->{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case4: file name right (option "l")
-->{{#if:{{{T|}}}| }}{{{t|{{{T|}}}}}}<!--
-->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4
-->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!--
-->}} }}}}}}}}<!--
without parameter 3:
-->|{{#switch:{{lc:{{{2|}}}}}<!-- case5: file name (p#2=FFL?)
-->|g={{F/layout|{{{1}}}||g|{{{4|}}}|Y=5}}<!--c5 "G"
-->|n|c|d|f|l|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--
-->||{{lc:{{{2}}}}}|{{{4|}}}|l={{{l|}}}|t={{{t|}}}|Y=5}}<!-- c5
case6: file name (this is the default/standard)
-->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1<noinclude>|Sample.svg</noinclude>}}}}}}}<!--c6
-->|{{#ifeq:/|{{padleft:|1|{{{2}}}}}||{{{2|}}}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=6}}}}<!--
-->}}<!--endif 3
-->{{#switch:{{{by|}}}|:=|={{#switch:/|{{padleft:|1|{{{2}}}}}|{{padleft:|1|{{{3}}}}}|{{padleft:|1|{{{4}}}}}<!--
-->|{{padleft:|1|{{{5}}}}}|{{padleft:|1|{{{6}}}}}|{{padleft:|1|{{{7}}}}}|{{padleft:|1|{{{8}}}}}|{{padleft:|1|{{{9}}}}}<!--
-->= ''{{I18n/by}}'' {{U{{{m|{{{u|}}}}}}|{{#invoke:Iteration|byuser}}}}}}<!-- get user id when no "by=" and "/" at par3...9
-->|{{#ifeq:{{int:lang}}|bn|| ''{{I18n/by}}'' {{#switch:{{padleft:|1|{{{by}}}}}|&|(|.|<|[|{=<!-- use specified "by="
-->{{#invoke:Igenmod|remprf|{{{by}}}}}|{{U{{{m|{{{u|}}}}}}|{{{by}}}|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=+<!--
-->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=-}}}}}}}}}}<!--
-->}}{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": terminate table) --><br>
{{!)}}</div>}}}}</onlyinclude>
{{documentation}}
0039sylhbhy0vby4iq387bjr819ktba
10708
10707
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:F]]
10707
wikitext
text/x-wiki
<onlyinclude>{{#ifeq:{{{1}}}|M|{{#invoke:Dsize|f_name|{{PAGENAME}}|{{{2|}}}|{{{3|}}}}}<!--
Parameter "M" can have a parameter "+x" and/or "-y" to strip x characters left, and/or y characters right, from the filename
-->|{{{p|}}}{{#if:{{{by|}}}|{{#ifeq:{{int:lang}}|bn|{{F/beng|{{{by}}}}}}}}}{{#if:{{{3|{{{d|}}}}}}<!--
-->|{{#switch:{{lc:{{{3|}}}}}<!-- case1: file name (p#3=FFL?)
-->|g={{F/layout|{{{1|}}}|{{{2|}}}|g|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!--c1 G
-->|n|c|d|f|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c1
-->|{{{2|}}}|{{lc:{{{3}}}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|Y=1}}<!--
-->|/=<!--
#default=
-->|{{#if:{{{l|}}}|<small>''Can't [[Template:F|display]]'' "[[:{{{l}}}:File:{{PAGENAME:{{{1}}}}}|<u>{{{l}}}:</u>{{PAGENAME:{{{1}}}}}]]"</small><!--
-->|{{#ifeq:{{{2}}}|G|{{F/layout|{{{1}}}|{{{d|{{{3}}}}}}|g|{{{4|}}}|Y=2}}<!-- case2: gallery function "G" p#2
-->|{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case3: file name left (not option "l")
-->|{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (and also not option "u")
-->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c3
-->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=3}}<!--
-->{{#switch:Z|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|{{#switch:{{{3}}}|+|-=|<!--
-->{{#if:{{{T|}}}| }}{{{t|{{{T|: }}}}}}}}}}<!--
-->}}}}<!--
-->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<div><!-- (option "u": create a table) -->
{{(!}} class="multicol" role="presentation" style="float:{{#switch:r|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=right;padding:0 {{{t|0}}}px 0 0<!--
-->|left;padding:0 0 0 {{{t|0}}}px}};{{#if:{{{3|}}}|width:{{replace text|{{{3}}}|px|}}px;}}table-layout:fixed;border:0;text-align:center;{{{style|}}}"<br>
{{!}}- style="vertical-align:top"<br>
{{!}}}}<!-- now display the image:
d/3 px: display the image
-->{{#if:{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|0|b|l|n|r|u|Z|+|-=|<!--
-->{{#ifeq:/|{{padleft:|1|{{{3}}}}}||1}}}}}}|#default=1}}<!-- d/3 px: display the file
-->|{{#if:{{{1|}}}|[[File:{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--
-->{{#if:{{{lang|}}}|{{!}}lang={{{lang}}}}}<!-- now occurs the display of the image
-->{{#switch:{{{alt|∅}}}|∅=<!--missing -->|#default={{!}}alt={{{alt|}}}}}<!--
-->{{#switch:{{{link|∅}}}|∅=|*={{!}}link=File:{{PAGENAME:{{{1}}}}}|#default={{!}}link={{{link}}}}}<!--
-->{{#switch:{{{title|∅}}}|∅=<!--missing-->|#default={{!}}title={{{title}}}}}<!--
-->{{!}}{{#switch:{{{d|∅}}}|0|-|n|=|∅={{#if:{{{3|}}}|{{#switch:{{{3|}}}|b|l|n|r|u|Z|+|-=<!--
-->|{{#ifeq:/|{{padleft:|1|{{{3}}}}}||{{replace text|{{{3}}}|px|}}px}}}}}}|#default={{{d}}}px}}<!--
-->{{#switch:b|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}border}}<!--
-->{{#switch:c|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}center}}<!--
-->{{#switch:r|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}={{!}}right}}<!--
-->{{#if:{{{11|}}}|{{!}}{{{11}}}}}{{#if:{{{12|}}}|{{!}}{{{12}}}}}<!--
-->{{#if:{{{13|}}}|{{!}}{{{13}}}}}{{#if:{{{14|}}}|{{!}}{{{14}}}}}]]}}}}<!-- Extended image syntax
-->{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": continue table) --><br>
{{!}}-
{{!}}<!--
-->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4
-->|l|{{{3|}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!--
-->|<!--
-->{{#switch:l|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- case4: file name right (option "l")
-->{{#if:{{{T|}}}| }}{{{t|{{{T|}}}}}}<!--
-->{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--c4
-->|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=4}}<!--
-->}} }}}}}}}}<!--
without parameter 3:
-->|{{#switch:{{lc:{{{2|}}}}}<!-- case5: file name (p#2=FFL?)
-->|g={{F/layout|{{{1}}}||g|{{{4|}}}|Y=5}}<!--c5 "G"
-->|n|c|d|f|l|x|u|i|s|h|w|v|p={{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1}}}}}}}<!--
-->||{{lc:{{{2}}}}}|{{{4|}}}|l={{{l|}}}|t={{{t|}}}|Y=5}}<!-- c5
case6: file name (this is the default/standard)
-->|{{F/layout|{{#switch:{{NAMESPACENUMBER}}{{{1|}}}|6*|7*={{PAGENAME}}|{{PAGENAME:{{{1<noinclude>|Sample.svg</noinclude>}}}}}}}<!--c6
-->|{{#ifeq:/|{{padleft:|1|{{{2}}}}}||{{{2|}}}}}|{{{3}}}|{{{4|}}}|{{{5|}}}|{{{6|}}}|{{{7|}}}|{{{8|}}}|l={{{l|}}}|c=6}}}}<!--
-->}}<!--endif 3
-->{{#switch:{{{by|}}}|:=|={{#switch:/|{{padleft:|1|{{{2}}}}}|{{padleft:|1|{{{3}}}}}|{{padleft:|1|{{{4}}}}}<!--
-->|{{padleft:|1|{{{5}}}}}|{{padleft:|1|{{{6}}}}}|{{padleft:|1|{{{7}}}}}|{{padleft:|1|{{{8}}}}}|{{padleft:|1|{{{9}}}}}<!--
-->= ''{{I18n/by}}'' {{U{{{m|{{{u|}}}}}}|{{#invoke:Iteration|byuser}}}}}}<!-- get user id when no "by=" and "/" at par3...9
-->|{{#ifeq:{{int:lang}}|bn|| ''{{I18n/by}}'' {{#switch:{{padleft:|1|{{{by}}}}}|&|(|.|<|[|{=<!-- use specified "by="
-->{{#invoke:Igenmod|remprf|{{{by}}}}}|{{U{{{m|{{{u|}}}}}}|{{{by}}}|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=+<!--
-->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=-}}}}}}}}}}<!--
-->}}{{#switch:u|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- (option "u": terminate table) --><br>
{{!)}}</div>}}}}</onlyinclude>
{{documentation}}
0039sylhbhy0vby4iq387bjr819ktba
Tempilet:F/layout
10
1336
10709
2024-08-28T17:48:46Z
commons>CptViraj
0
Protected "[[Template:F/layout]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10709
wikitext
text/x-wiki
<includeonly>{{#switch:Z|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!--
-->|{{#if:{{{Y|}}}|{{#switch:{{{3|}}}<!--
-->|c={{#invoke:File|pageCount|file={{{1}}}}}<!--
-->|d={{#invoke:File|dateWorkCreated|file={{{1}}}}}<!--
-->|f={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}}}<!--
-->|i={{#ifexist:File:{{{1}}}|1}}<!--
-->|l=[[:File:{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}]]<!-- like "F" but linked
-->|x={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!--
-->|u={{#if:{{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!--
-->|{{#invoke:File|csExtension|file={{{1}}}}}|{{{2|png}}}}}<!-- return extension as-it-is, or "png"<!--
-->|g={{#ifeq:{{{2}}}|-<!--
-->|{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}}
|1=<div class="center">File:{{{1}}}</div><!-- {{F|filename|-|G|px}} with centering -->
|2=File:{{{1}}}}}<!-- {{F|filename|G|-|px}} without centering -->
|widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!--
-->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}}
}}
|{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}}
|1=<div class="center">{{{2|}}}</div><!-- {{F|filename|caption|G|px}} with centering -->
|2={{{2|}}}<!-- {{F|filename|G|caption|px}} without centering -->
|5=<div class="center">{{{5|}}}</div>}}<!-- {{F|filename|G|px}} with centering 5 -->
|widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!-- default width
-->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}}
}}}}<!-- end 'g'
-->|i={{#invoke:File|fileExistsRelaxed|file={{{1}}}}}<!--
-->|s={{#invoke:File|size|file={{{1}}}}}<!--
-->|h={{#invoke:File|height|file={{{1}}}}}<!--
-->|w={{#invoke:File|width|file={{{1}}}}}<!--
-->|v={{#invoke:File|valid|file={{{1}}}}}<!--
-->|p={{PAGESIZE:File:{{{1}}}}}<!--
-->|n={{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!--
-->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}}}<!--
-->|{{#switch:n|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- no 'Y':
-->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:<!--
-->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}}}<!--
-->{{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!--
-->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}<!--
-->|{{#if:{{{1|}}}|{{#if:{{{l|}}}|<span style="border:1px dotted #FC0;padding:0 4px">}}<!--
-->{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!--
-->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|File:}}}}<!--
-->{{#switch:{{{1}}}|F|X|U|S={{#switch:{{{1}}}<!-- NAMESPACENUMBER=6
-->|F={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}}}<!--
-->|X={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!--
-->|U={{#if:{{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!--
-->|{{#invoke:File|csExtension|file={{PAGENAME}}}}|none}}<!--
-->|S={{#invoke:File|size|file={{PAGENAME}}}}<!--
-->}}|<!--
-->[[:{{#if:{{{l|}}}|{{{l}}}:}}File:{{{1}}}<!--
-->|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}<!--
-->{{#switch:{{{2|}}}|b|l|n|r|u|+|-|={{{1}}}|{{{2}}}}}]]<!--
-->{{#if:{{{l|}}}|</span>}} }}<!--fxus
-->|<span style="font-weight:900;background:#FF8;color:#F00"> ''no name<!--
-->{{#ifeq:{{NAMESPACENUMBER}}|10||[[Category:Commons:Missing file name in template F|{{PAGENAME}}]] |.}}''<!--
--></span>}} }}}} }}</includeonly><noinclude>
Subtemplate to {{Tl|F}}, invoked from either of 6 positions but only once
:performs display of the file name (2{{exp|nd}} name as given, without <small><code>PAGENAME:</code></small>)
:Parameters: 1, 2, 3, 4, 5, 6, 7, 8; l; internal: Y
:When parameter 1 is missing, categorizing to {{C|Commons:Missing file name in template F}} occurs
{{Heavily used template|Template talk:F}}
Special function: just parameter 1 is F,X,U,S: like File Function Letter for <nowiki>{{PAGENAME}}</nowiki>
[[Category:Subtemplates]]
</noinclude>
osistybm8nfh0xczje47xt86wyhsrwy
10710
10709
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:F/layout]]
10709
wikitext
text/x-wiki
<includeonly>{{#switch:Z|{{{2}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!--
-->|{{#if:{{{Y|}}}|{{#switch:{{{3|}}}<!--
-->|c={{#invoke:File|pageCount|file={{{1}}}}}<!--
-->|d={{#invoke:File|dateWorkCreated|file={{{1}}}}}<!--
-->|f={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}}}<!--
-->|i={{#ifexist:File:{{{1}}}|1}}<!--
-->|l=[[:File:{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}]]<!-- like "F" but linked
-->|x={{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!--
-->|u={{#if:{{Validextension|{{{1}}}|{{#invoke:File|woExtension|file={{{1}}}}}|ext}}<!--
-->|{{#invoke:File|csExtension|file={{{1}}}}}|{{{2|png}}}}}<!-- return extension as-it-is, or "png"<!--
-->|g={{#ifeq:{{{2}}}|-<!--
-->|{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}}
|1=<div class="center">File:{{{1}}}</div><!-- {{F|filename|-|G|px}} with centering -->
|2=File:{{{1}}}}}<!-- {{F|filename|G|-|px}} without centering -->
|widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!--
-->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}}
}}
|{{#tag:gallery|{{{1}}}{{!}}{{#switch:{{{Y}}}
|1=<div class="center">{{{2|}}}</div><!-- {{F|filename|caption|G|px}} with centering -->
|2={{{2|}}}<!-- {{F|filename|G|caption|px}} without centering -->
|5=<div class="center">{{{5|}}}</div>}}<!-- {{F|filename|G|px}} with centering 5 -->
|widths={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|w}}|120}}<!-- default width
-->|heights={{#if:{{{4|}}}|{{#invoke:Galeria|converse|{{{4}}}|h}}|120}}
}}}}<!-- end 'g'
-->|i={{#invoke:File|fileExistsRelaxed|file={{{1}}}}}<!--
-->|s={{#invoke:File|size|file={{{1}}}}}<!--
-->|h={{#invoke:File|height|file={{{1}}}}}<!--
-->|w={{#invoke:File|width|file={{{1}}}}}<!--
-->|v={{#invoke:File|valid|file={{{1}}}}}<!--
-->|p={{PAGESIZE:File:{{{1}}}}}<!--
-->|n={{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!--
-->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}}}<!--
-->|{{#switch:n|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!-- no 'Y':
-->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:<!--
-->|{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}}}<!--
-->{{#switch:{{{2|}}}|n|b|l|r|+|-|={{#if:{{{1|}}}|{{PAGENAME:{{{1}}}}}<!--
-->|<span style="font-weight:900;background:#FF8"> no name </span>}}|{{{2}}}}}<!--
-->|{{#if:{{{1|}}}|{{#if:{{{l|}}}|<span style="border:1px dotted #FC0;padding:0 4px">}}<!--
-->{{#switch:-|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=<!--
-->{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=|File:}}}}<!--
-->{{#switch:{{{1}}}|F|X|U|S={{#switch:{{{1}}}<!-- NAMESPACENUMBER=6
-->|F={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}}}<!--
-->|X={{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!--
-->|U={{#if:{{Validextension|{{PAGENAME}}|{{#invoke:File|woExtension|file={{PAGENAME}}}}|ext}}<!--
-->|{{#invoke:File|csExtension|file={{PAGENAME}}}}|none}}<!--
-->|S={{#invoke:File|size|file={{PAGENAME}}}}<!--
-->}}|<!--
-->[[:{{#if:{{{l|}}}|{{{l}}}:}}File:{{{1}}}<!--
-->|{{#switch:+|{{{2}}}|{{{3}}}|{{{4}}}|{{{5}}}|{{{6}}}|{{{7}}}|{{{8|}}}=File:}}<!--
-->{{#switch:{{{2|}}}|b|l|n|r|u|+|-|={{{1}}}|{{{2}}}}}]]<!--
-->{{#if:{{{l|}}}|</span>}} }}<!--fxus
-->|<span style="font-weight:900;background:#FF8;color:#F00"> ''no name<!--
-->{{#ifeq:{{NAMESPACENUMBER}}|10||[[Category:Commons:Missing file name in template F|{{PAGENAME}}]] |.}}''<!--
--></span>}} }}}} }}</includeonly><noinclude>
Subtemplate to {{Tl|F}}, invoked from either of 6 positions but only once
:performs display of the file name (2{{exp|nd}} name as given, without <small><code>PAGENAME:</code></small>)
:Parameters: 1, 2, 3, 4, 5, 6, 7, 8; l; internal: Y
:When parameter 1 is missing, categorizing to {{C|Commons:Missing file name in template F}} occurs
{{Heavily used template|Template talk:F}}
Special function: just parameter 1 is F,X,U,S: like File Function Letter for <nowiki>{{PAGENAME}}</nowiki>
[[Category:Subtemplates]]
</noinclude>
osistybm8nfh0xczje47xt86wyhsrwy
Tempilet:U
10
1337
10711
2019-06-03T20:16:52Z
commons>4nn1l2
0
Fulfilling [[Template:Edit request|edit request]] by [[User:Sarang|Sarang]]. See [[Special:Diff/353013295]]
10711
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#switch:{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=1|0}}{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{{{{|safesubst:}}}#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}|000|010|011|100=|{{{{{|safesubst:}}}#switch:{{{case}}}|i={{i18n/namespace|u|lang={{{lang|}}}}}|l=user|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|User}}:}}{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=‍{{{{{|safesubst:}}}#switch:{{{2|}}}|+|-|={{{1<noinclude>|User</noinclude>}}}|{{{2}}}}}|[[:{{{{{|safesubst:}}}#if:{{{3|}}}|{{{{{|safesubst:}}}#switch:{{{3}}}|+|-=|{{{3}}}:}}}}User{{{par1|}}}:{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{PAGENAME:{{{1}}}}}{{{par2|}}}}}|{{safesubst:REVISIONUSER}}}}|{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{{{{|safesubst:}}}#switch:{{{case}}}|i|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|l=user|User}}:}}{{{{{|safesubst:}}}#if:{{{2|}}}|{{{{{|safesubst:}}}#switch:{{{2}}}|+|-={{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}|{{{2}}}}}|{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}}}]]}}{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|user:|[[Category:Commons User template with namespace]]}}</includeonly><noinclude>
{{documentation}}
</noinclude>
9f56qtq1ozmy5rrg5s87ig0fzqe00e9
10712
10711
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:U]]
10711
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#switch:{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=1|0}}{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}{{{{{|safesubst:}}}#switch:-|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}=1|0}}|000|010|011|100=|{{{{{|safesubst:}}}#switch:{{{case}}}|i={{i18n/namespace|u|lang={{{lang|}}}}}|l=user|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|User}}:}}{{{{{|safesubst:}}}#switch:{{{link}}}|no|n=‍{{{{{|safesubst:}}}#switch:{{{2|}}}|+|-|={{{1<noinclude>|User</noinclude>}}}|{{{2}}}}}|[[:{{{{{|safesubst:}}}#if:{{{3|}}}|{{{{{|safesubst:}}}#switch:{{{3}}}|+|-=|{{{3}}}:}}}}User{{{par1|}}}:{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{PAGENAME:{{{1}}}}}{{{par2|}}}}}|{{safesubst:REVISIONUSER}}}}|{{{{{|safesubst:}}}#switch:+|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}={{{{{|safesubst:}}}#switch:{{{case}}}|i|n={{i18n/namespace|u|link=no|lang={{{lang|}}}}}|l=user|User}}:}}{{{{{|safesubst:}}}#if:{{{2|}}}|{{{{{|safesubst:}}}#switch:{{{2}}}|+|-={{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}|{{{2}}}}}|{{{{{|safesubst:}}}#if:{{{1|}}}|{{{{{|safesubst:}}}#switch:{{{1}}}|+|-={{safesubst:REVISIONUSER}}|{{{1}}}}}|{{safesubst:REVISIONUSER}}}}}}]]}}{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|user:|[[Category:Commons User template with namespace]]}}</includeonly><noinclude>
{{documentation}}
</noinclude>
9f56qtq1ozmy5rrg5s87ig0fzqe00e9
Tempilet:Plainlinks
10
1338
10713
2019-12-29T04:53:35Z
commons>CptViraj
0
Adding {{Protected}}
10713
wikitext
text/x-wiki
<span class="plainlinks">[{{{1|}}} {{{2|{{{1|}}}}}}]</span><noinclude>
{{documentation}}
{{Protected}}
</noinclude>
q7pu6eybmt87wndvcghphyvwocebpvc
10714
10713
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Plainlinks]]
10713
wikitext
text/x-wiki
<span class="plainlinks">[{{{1|}}} {{{2|{{{1|}}}}}}]</span><noinclude>
{{documentation}}
{{Protected}}
</noinclude>
q7pu6eybmt87wndvcghphyvwocebpvc
Module:Iteration
828
1339
10715
2024-08-28T17:42:00Z
commons>CptViraj
0
Protected "[[Module:Iteration]]": [[Special:MyLanguage/Commons:Protection policy|Widely used Lua-module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10715
Scribunto
text/plain
-- This module contains the functions for different templates, solving their iteration problems.
local max = math.max
local len = string.len
local sub = string.sub
local find = string.find
local format = string.format
local insert = table.insert
local concat = table.concat
local trim = mw.text.trim
local split = mw.text.split
local titleNew = mw.title.new
local char = mw.ustring.char
local NL = char(10)
local lower = mw.ustring.lower
local upper = mw.ustring.upper
local gsub = mw.ustring.gsub
local Usub = mw.ustring.sub
local function Ucfirst(text)
text = trim(text)
return upper(Usub(text, 1, 1)) .. Usub(text, 2)
end
----------------------------------------------------------------------------------------------
-- Template expansion helpers for performance:
-- Saves CPU and time resources on large iterations by minimizing repeated recursive calls to
-- the parser, eliminating many table constructions/deletion/lookups in memory. Also allows
-- reporting CPU/time usage for expansions of costly templates inside recursive calls
-- (otherwise all CPU/time is counted inside Lua, those templates are not counted).
local currentTitle = mw.title.getCurrentTitle()
local currentNs = tonumber(currentTitle.namespace)
local currentPage = currentTitle.text
local frameCurrent = mw.getCurrentFrame()
local expandTemplateCurrent = frameCurrent.expandTemplate
local callParserFunctionCurrent = frameCurrent.callParserFunction
local contentLanguage = mw.language.getContentLanguage()
local langDefault = contentLanguage:getCode()
local langUser = lower(trim(callParserFunctionCurrent(frameCurrent, 'Int', 'Lang')))
local transclude = {}
local function expand(template, args)
transclude.title = template
transclude.args = args or {}
return expandTemplateCurrent(frameCurrent, transclude)
end
local argsOne = {}
local function expand1(title, arg1)
argsOne[1] = arg1
return expand(title, argsOne)
end
local argsLangUser = { lang = langUser }
local argsLangDefault = { lang = langDefault }
local argsLangOther = {}
local function expandWithLang(template, lang)
if type(lang) == 'string' then
lang = trim(lang)
if lang == '' then
lang = nil
else
lang = lower(lang)
end
else
lang = nil
end
if not lang or lang == langUser then
return expand(template, argsLangUser)
elseif lang == langDefault then
return expand(template, argsLangDefault)
else
argsLangOther.lang = lang
return expand(template, argsLangOther)
end
end
local Comma, ConjAnd
local function commaAnd(isLast)
if isLast then
if not ConjAnd then
ConjAnd = expand('Conj-and', argsLangUser)
end
return ConjAnd
else
if not Comma then
Comma = expand('Comma', argsLangUser)
end
return Comma
end
end
----------------------------------------------------------------------------------------------
local p = {}
-- For Template:Ifim.
local argsIfim1 = { -- Parameters for expanding 'Template:Ifim1'.
'', -- [1] = v
'', -- [2] = trim(ppar.p1 or ''),
'', -- [3] = trim(ppar.p2 or ''),
'', -- [4] = trim(ppar.p3 or ''),
'', -- [5] = trim(ppar.p4 or ''),
'', -- [6] = trim(ppar.p5 or ''),
n = '' -- ['n'] = trim(ppar.fn or ''),
}
function p.ifim1(frame)
local ppar = frameCurrent:getParent().args
argsIfim1[2] = trim(ppar.p1 or '')
argsIfim1[3] = trim(ppar.p2 or '')
argsIfim1[4] = trim(ppar.p3 or '')
argsIfim1[5] = trim(ppar.p4 or '')
argsIfim1[6] = trim(ppar.p5 or '')
argsIfim1.n = trim(ppar.fn or '')
local results = {}
for _, v in ipairs(ppar) do
argsIfim1[1] = v
insert(results, expand('Ifim1', argsIfim1))
end
return concat(results)
end -- function ifim
-- For Template:Ifimc.
local argsIfim2 = { -- Parameters for expanding 'Template:Ifim2'.
'', -- [1] = v1
'', -- [2] = trim(ppar.p1 or ''),
'', -- [3] = trim(ppar.p2 or ''),
'', -- [4] = trim(ppar.p3 or ''),
'', -- [5] = trim(ppar.p4 or ''),
'', -- [6] = v
}
function p.ifim2(frame)
local ppar = frameCurrent:getParent().args
argsIfim2[2] = trim(ppar.p1 or '')
argsIfim2[3] = trim(ppar.p2 or '')
argsIfim2[4] = trim(ppar.p3 or '')
argsIfim2[5] = trim(ppar.p4 or '')
local results = {}
for _, v in ipairs(ppar) do
argsIfim2[1] = v
argsIfim2[6] = v
insert(results, expand('Ifim2', argsIfim2))
end
return concat(results)
end -- function ifim2
-- For Template:Ifimt (param pairs).
function p.ifimt(frame)
local ppar = frameCurrent:getParent().args
argsIfim2[2] = trim(ppar.p1 or '')
argsIfim2[3] = trim(ppar.p2 or '')
argsIfim2[4] = trim(ppar.p3 or '')
argsIfim2[5] = trim(ppar.p4 or '')
local v1 = ''
local results = {}
for _, v in ipairs(ppar) do
if v1 == '' then
v1 = v
else
argsIfim2[1] = v1
argsIfim2[6] = v
insert(results, expand('Ifim2', argsIfim2))
v1 = ''
end
end
if v1 ~= '' then
argsIfim2[6] = ''
insert(results, expand('Ifim2', argsIfim2)) -- Last item.
end
return concat(results)
end -- function ifimt
-------------------------------------------------------
-- Helper function for: ownbased, and filelist
local function samefile(filename, num, first)
local filename = trim(filename or '')
if sub(filename, 1, 1) == '.' then
local part = 'Example' -- default filename
if currentNs == 6 or currentNs == 7 then
part = split(currentPage , '.', true)
part = concat(part, '.', 1, math.max(#part - 1, 1))
end
-- Supported short aliases:
if filename == '.' then filename = part .. '.png'
elseif filename == '.p' then filename = part .. '.png'
elseif filename == '.g' then filename = part .. '.gif'
elseif filename == '.j' then filename = part .. '.jpg'
elseif filename == '.s' then filename = part .. '.svg'
-- Exotics:
elseif filename == '.m' then filename = part .. '.mid'
elseif filename == '.o' then filename = part .. '.ogg'
elseif filename == '.t' then filename = part .. '.tif'
elseif filename == '.v' then filename = part .. '.wav'
elseif filename == '.x' then filename = part .. '.xcf'
-- Note: no "short alias" for '.pdf' ('.p' already used for '.png')
-- Note: short aliases for a few longer extensions:
elseif filename == '.d' then filename = part .. '.djvu'
elseif filename == '.w' then filename = part .. '.webp'
else filename = part .. filename
end
elseif filename == '' or filename == '*' then
if tonumber(num) == 1 then
filename = 'Example.svg'
if currentNs == 6 or currentNs == 7 then
filename = currentPage
end
else
filename = trim(first)
if filename == '' or filename == '*' or sub(filename, 1, 1) == '.' then
filename = 'Example.svg'
if currentNs == 6 or currentNs == 7 then
filename = currentPage
end
end
end
end
return filename
end -- function samefile
---++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Simple iterations - without many params.
function p.iterate(frame)
local gpar = frame.args -- global parms
local template = gpar[1] or '' -- template name
local args = { -- Parameters for expanding the given template.
'', -- [1] = v
gpar[2] or '',
gpar[3] or '',
}
local ppar = frameCurrent:getParent().args
local results = {}
for _, v in ipairs(ppar) do
args[1] = v
insert(results, expand(template, args))
end
return concat(results)
end -- function iterate
-- More iterations - for params, param pairs, or n-tuples.
function p.iteration(frame)
local gpar = frame.args -- Global parms.
local vmax = tonumber(gpar.n) or 2 -- Tuple number (default = 2).
local vnum = vmax + 1 -- Additional not-changing params.
local template = '' -- Template name.
local args = {} -- Parameters for expanding the given template.
for i, p in ipairs(gpar) do
p = trim(p)
if i == 1 then
template = p
else
args[vnum] = p
vnum = vnum + 1
end
end
vnum = 1
local ppar = frameCurrent:getParent().args
local results = {} -- output
for _, v in ipairs(ppar) do
args[vnum] = trim(v)
vnum = vnum + 1
if vnum > vmax then
insert(results, expand(template, args))
vnum = 1
end
end
return concat(results)
end -- function iteration
-- For different templates, for general use, e.g. Emoji.
function p.parlst(frame)
local gpar = frame.args -- Global parameters.
local template = trim(gpar.temp or '')
local results = {}
if template ~= '' then -- Slow expansion (e.g. for template = 'Emoji', which will recurse into iterations calling p.emodis)
local ff = trim(gpar.ff or '') -- Inbetween?
if ff ~= '' then
ff = expand1(ff, trim(gpar.pf or ''))
else
ff = nil
end
local nocat = trim(gpar.nocat or '')
local args = { -- Parameters for expanding the given template.
nocat = nocat ~= '' and nocat or nil
}
for k, v in pairs(gpar) do
v = trim(v)
if v ~= '' then args[k] = v end
end
local count = tonumber(args[1] or '') or 0
for i = 1, (count or 1) do -- default: go 1× for nil
if ff then insert(results, ff) end
if count then args[1] = i - 1 end
insert(results, expand(template, args))
end
else -- Template expansion not needed (much faster, without recursed iterations calling p.emodis from a specified template).
local count = tonumber(gpar[1] or '') or 0
local code = tonumber(gpar[2] or '', 16) or 0
local catlink = gpar.catlink or ''
if catlink == '' then
local args = {
'<span title="U+',
'', -- [2] = format('%04X', code + i - 1)
'">',
'', -- [4] = char(code + i - 1)
'</span>',
}
for i = 1, count do
args[2] = format('%04X', code + i - 1)
args[4] = char(code + i - 1)
insert(results, concat(args))
end
elseif catlink == 'U' then
local args = {
'[[:Category:U+',
'', -- [2] = format('%04X', code + i - 1)
'|<span title="U+',
'', -- [4] = format('%04X', code + i - 1)
'">',
'', -- [6] = char(code + i - 1)
'</span>]]',
}
for i = 1, count do
args[2] = format('%04X', code + i - 1)
args[4] = args[2]
args[6] = char(code + i - 1)
insert(results, concat(args))
end
else
local args = {
'[[:Category:',
'', -- [2] = char(code + i - 1)
'|<span title="U+',
'', -- [4] = format('%04X', code + i - 1)
'">',
'', -- [6] = char(code + i - 1)
'</span>]]',
}
for i = 1, count do
args[2] = char(code + i - 1)
args[4] = format('%04X', code + i - 1)
args[6] = args[2]
insert(results, concat(args))
end
end
end
return concat(results)
end -- function parlst
-- Global function for one filename.
function p.filename(frame)
local gpar = frame.args -- Global parameters.
return samefile(trim(gpar[1] or ''), 1)
end -- function filename
-- For Template:Own based (one filename which is '.').
function p.ownbasby(frame)
local gpar = frame.args -- Global parameters.
return expand('F', {
samefile(gpar[1] or '.', 1),
by = trim(gpar[2] or '')
})
end -- function ownbasby
-- For Template:Own based (horizontal - but vertical when "b1=").
function p.ownbased(frame)
local ppar = frameCurrent:getParent().args
local by0 = trim(ppar.b or ppar.by or ppar.u or ppar.user or '')
local dis = trim(ppar.d or ppar.dis or ppar.display or '')
local hil = trim(ppar.h or ppar.hilite or '')
local lng = trim(ppar.i or ppar.lang or '')
local wik = trim(ppar.l or ppar.w or ppar.wiki or '')
local nam = trim(ppar.n or ppar.name or '')
local opt = trim(ppar.o or ppar.opt or ppar.option or '')
local mod = trim(ppar.m or ppar.mod or '')
local pr4 = trim(ppar.par4 or ppar.qpar or '')
local pr5 = trim(ppar.par5 or ppar.rpar or '')
local btab = {}
local dtab = {}
local htab = {}
local itab = {}
local ltab = {}
local ntab = {}
local otab = {}
local qtab = {}
local rtab = {}
local ttab = {}
local utab = {}
local x = 0 -- running index, can be ~= i
local fst = 0 -- first occurrence
local cor = 0
local max = 0
local plus = ''
for i, v in ipairs(ppar) do
if v == '+' then
plus = '+'
elseif v == '-' then
if plus == '' then plus = '-' end
else
x = x + 1
if fst == 0 then fst = x end
local z = tostring(x)
btab[x] = trim(ppar['b' .. z] or ppar['by' .. z] or ppar['u' .. z] or '-')
dtab[x] = trim(ppar['d' .. z] or '-')
htab[x] = trim(ppar['h' .. z] or '-')
itab[x] = trim(ppar['i' .. z] or '-')
ltab[x] = trim(ppar['l' .. z] or ppar['w' .. z] or '-')
ntab[x] = trim(ppar['n' .. z] or '-')
otab[x] = trim(ppar['o' .. z] or '-')
qtab[x] = trim(ppar['q' .. z] or '-')
rtab[x] = trim(ppar['r' .. z] or '-')
ttab[x] = trim(ppar['t' .. z] or '-')
utab[x] = trim(ppar['m' .. z] or '-')
end
max = x
if v == 'x' or v == 'X' or v == '×' then
cor = cor + 1
end
end -- for
x = 0
if fst > 0 then
local mnm = trim(ppar[fst])
end
local hls = {
'<',
'', -- [2] = hl
'>',
'', -- [4] = (nm ~= '') and nm or vv
'</',
'', -- [6] = hl
'>',
}
local args = { -- Parameters for expanding 'Template:F'.
'', -- [1] = vv,
'', -- [2] = nm
'', -- [3] = ds
'', -- [4] = op
'', -- [5] = p4
'', -- [6] = p5
plus,
l = '', -- ['l'] = il
lang = '', -- ['lang'] = lg
p = '', -- ['p'] = px
by = '', -- ['by'] = by
u = '', -- ['u'] = um
}
local results = {}
for _, v in ipairs(ppar) do
if v ~= '+' and v ~= '-' then
x = x + 1
local by = btab[x] ~= '-' and btab[x] or by0
local ds = dtab[x] ~= '-' and dtab[x] or dis
local hl = htab[x] ~= '-' and htab[x] or hil
local il = ltab[x] ~= '-' and ltab[x] or wik
local lg = itab[x] ~= '-' and itab[x] or lng
local op = otab[x] ~= '-' and otab[x] or opt
local p4 = qtab[x] ~= '-' and qtab[x] or pr4
local p5 = rtab[x] ~= '-' and rtab[x] or pr5
local um = utab[x] ~= '-' and utab[x] or mod
local nm = ntab[x] ~= '-' and ntab[x] or ''
local tx = ttab[x] ~= '-' and ttab[x] or ''
local vv = trim(v)
if find(vv, '/') == nil then
vv = samefile(vv, x, mnm)
if x == 1 then mnm = vv end
end
if vv ~= '' and vv ~= '×' then
local px = ''
if ppar.b1 == nil then -- parameter missing
if x == 1 then
px = ' '
else
insert(results, commaAnd(x == max))
end
else -- ppar.b1 is defined (with value, or empty)
px = '<br /> <span style=color:#69F>✦ </span>' -- "list" item
end
if sub(ds, -2) == 'px' then
ds = sub(ds, 1, -3)
end
if nm == '' and x == 1 then
nm = nam
end
if hl ~= '' then
hls[2] = hl
hls[4] = (nm ~= '') and nm or vv
hls[6] = hl
nm = concat(hls)
end
-- if il ~= '' then ds = '' end -- ? (discrepancy)
if vv == 'x' then ds = '' end -- this should be the last "file"
if by == '' then -- check for abbreviating '/'
local sby = find(vv, '/')
if sby ~= nil then
by = sub(vv, sby + 1)
vv = sub(vv, 1, sby - 1)
vv = samefile(vv, x, mnm)
if x == 1 then mnm = vv end
end
end
args[1] = vv
args[2] = nm
args[3] = ds
args[4] = op
args[5] = p4
args[6] = p5
args.l = il
args.lang = lg
args.p = px
args.by = by
args.u = um
insert(results, expand('F', args))
if tx ~= '' then
insert(results, expand1('=', tx))
end
end
end
end -- for
if max - cor > 9 then
insert(results, expand1('Igen/cat', 'Own-based with more than 9 files|' .. max))
end
return concat(results)
end -- function ownbased
-- Horizontal file list for: Template:SVG lang, Template:Lang gallery, and others.
function p.svglang(frame)
local gpar = frame.args -- Global parameters.
local template = gpar[1] or 'Source thumb' -- 'SVG lang', 'Lang gallery/thumb'
local ppar = frameCurrent:getParent().args
args = { -- Parameters to expand the given template.
trim(ppar.file or ''),
'', -- [2] = lang
p = trim(ppar.p or ''),
}
local results = {}
for _, v in ipairs(ppar) do
local lang = trim(v)
if lang > ' ' then
args[2] = lang
insert(results, trim(expand(template, args)))
insert(results, NL)
end
end
return concat(results)
end -- function svglang
-- Elements count for: Template:SVG lang, Template:Lang gallery, and others.
function p.elemct (frame)
local ppar = frameCurrent:getParent().args
local count = 0
for _, v in ipairs(ppar) do
if trim(v) ~= '' then
count = count + 1
end
end
return count
end -- function elemct
-- Horizontal file list for: Template:Filelist, Template:File.
-- Vertical file list for: Template:Other versions, Template:Derived from, Template:Derivative versions.
function p.filelist(frame)
local gpar = frame.args -- Global parameters.
local ppar = frameCurrent:getParent().args
local spa = trim(ppar.spa or ppar.s or '-')
local pfx = trim(ppar.x or ppar.pfx or ppar.prefix or '') -- "List" item {{Comma}}
local dir = gpar[1] or 'none'
if dir == 'vert' and pfx == '' then
pfx = '\n* ' -- "list" item
end
local nam = trim(ppar.n or ppar.name or '')
local dis = trim(ppar.d or ppar.z or ppar.dis or ppar.display or '')
if sub(dis, -2) == 'px' then dis = sub(dis, 1, -3) end
local opt = trim(ppar.o or ppar.opt or ppar.option or '')
local pr4 = trim(ppar.par4 or ppar.qpar or '')
local pr5 = trim(ppar.par5 or ppar.rpar or '')
local pr6 = trim(ppar.par6 or ppar.vpar or '')
local wik = trim(ppar.w or ppar.k or ppar.wiki or ppar.sisterproject or '')
local int = trim(ppar.i or ppar.int or ppar.ind or ppar.inter or '')
local pre = trim(ppar.p or ppar.pre or ppar.pretext or '')
local by0 = trim(ppar.user or ppar.by or '')
local mod = trim(ppar.m or ppar.mod or '')
local lnk = trim(ppar.l or ppar.lnk or ppar.link or '')
local con = trim(ppar.conj or ppar.con or ppar.c or '')
con = sub(con, 1, 1)
if ppar.z then
if con == '' then con = 'n' end
if opt == '' then opt = 'Z' end
if pre == '' then pre = ' ' end
end
local vary = trim(ppar.vary or ppar.v or '') -- Variable pattern
local var1 = trim(ppar.var1 or ppar.v1 or '') -- Variable filling space before
local var2 = trim(ppar.var2 or ppar.v2 or '') -- Variable filling space after
local replacement = {
(var1 == 'space') and ' ' or var1,
'', -- [2] = (sp == '+' and ' ' or '')
'', -- [3] = vv
(var2 == 'space') and ' ' or var2,
}
local stab = {}
local xtab = {}
local ntab = {}
local dtab = {}
local otab = {}
local qtab = {}
local rtab = {}
local vtab = {}
local ktab = {}
local itab = {}
local ptab = {}
local btab = {}
local utab = {}
local ltab = {}
local ttab = {}
local loop = {}
local mnum = 0 -- maximum index reached in the previous tables of indexed parameters
for i, v in ipairs(ppar) do
local z = tostring(i)
stab[i] = trim(ppar['s' .. z] or '~')
xtab[i] = trim(ppar['x' .. z] or '-')
ntab[i] = trim(ppar['n' .. z] or ppar['l' .. z] or '-')
dtab[i] = trim(ppar['d' .. z] or '-')
otab[i] = trim(ppar['o' .. z] or '-')
qtab[i] = trim(ppar['q' .. z] or '-')
rtab[i] = trim(ppar['r' .. z] or '-')
vtab[i] = trim(ppar['v' .. z] or '-')
ktab[i] = trim(ppar['k' .. z] or '-')
itab[i] = trim(ppar['i' .. z] or '-')
ptab[i] = trim(ppar['p' .. z] or '-')
btab[i] = trim(ppar['b' .. z] or ppar['by' .. z] or '-')
utab[i] = trim(ppar['m' .. z] or '-')
ltab[i] = trim(ppar['l' .. z] or '-')
ttab[i] = trim(ppar['t' .. z] or '-')
mnum = i
end
local args = { -- Parameters for expanding 'Template:F'.
'', -- [1] = vv
'', -- [2] = nm
'', -- [3] = ds
'', -- [4] = op
'', -- [5] = p4
'', -- [6] = p5
'', -- [7] = p6
l = '', -- ['l'] = pk
lang = '', -- ['lang'] = pi
p = '', -- ['p'] = pr
by = '', -- ['by'] = by
u = '', -- ['u'] = um
link = '', -- ['link'] = (ln ~= '' and ln or nil)
}
local results = {}
local lcnt = 0 -- Loop count.
local i = 1 -- While index.
while ppar[i] ~= nil do -- for i, v in ipairs(ppar) do
local j = 1
local vv = trim(ppar[i])
if vary ~= '' and sub(vv, 1, 1) == '#' and sub(vv, -1) == '#' then -- Loop processing?
loop = split(vv, '#', true--[[plain]])
local llow = tonumber(loop[2]) or -1
local lupp = tonumber(loop[3]) or -1
if llow >= 0 and lupp >= llow then
llow = llow + lcnt
vv = tostring(llow)
lcnt = lcnt + 1
if llow < lupp then
j = 0 -- Iterate this index.
else
lcnt = 0 -- Loop ended.
end
end
end -- End loop processing.
if sub(vv, 1, 1) == '"' and sub(vv, -1) == '"' then -- Text processing?
insert(results, expand1('=', sub(vv, 2, -2)))
elseif vary == '' or i > 1 then
local sp = stab[i] ~= '~' and stab[i] or spa
local px = xtab[i] ~= '-' and xtab[i] or pfx
local nm = ntab[i] ~= '-' and ntab[i] or nam
local ds = dtab[i] ~= '-' and dtab[i] or dis
local op = otab[i] ~= '-' and otab[i] or opt
local p4 = qtab[i] ~= '-' and qtab[i] or pr4
local p5 = rtab[i] ~= '-' and rtab[i] or pr5
local p6 = vtab[i] ~= '-' and vtab[i] or pr6
local pk = ktab[i] ~= '-' and ktab[i] or wik
local pi = itab[i] ~= '-' and itab[i] or int
local pr = ptab[i] ~= '-' and ptab[i] or pre
local by = btab[i] ~= '-' and btab[i] or by0
local um = utab[i] ~= '-' and utab[i] or mod
local ln = ltab[i] ~= '-' and ltab[i] or lnk
local tx = ttab[i] ~= '-' and ttab[i] or ''
if vary ~= '' then
replacement[2] = (sp == '+' and ' ' or '')
replacement[3] = vv
vv = gsub(ppar[1], vary, concat(replacement))
else
vv = samefile(vv, i, ppar[1])
end
if vv ~= '' and vv ~= '×' then
if dir == 'hori' and con ~= 'n' then -- Horizontal list.
px = (i == 1) and ' ' or commaAnd(i == mnum)
else -- elseif dir == 'vert' then -- Vertical list.
px = (i == 1) and ' ' or px
end
if px ~= '' then insert(results, px) end
if by == '' then -- Check for abbreviating '/'.
local sby = find(vv, '/')
if sby ~= nil then
by = sub(vv, sby + 1)
vv = sub(vv, 1, sby - 1)
end
end
args[1] = vv
args[2] = nm
args[3] = ds
args[4] = op
args[5] = p4
args[6] = p5
args[7] = p6
args.l = pk
args.lang = pi
args.p = pr
args.by = by
args.u = um
args.link = (ln ~= '' and ln or nil)
insert(results, expand('F', args))
if tx ~= '' then insert(results, expand1('=', tx)) end
end -- if vary
end -- if vv
i = i + j -- next in do loop
end -- while
return concat(results)
end -- function filelist
-- For Template:Attribs (param pairs; but also for single params).
function p.attribs(frame)
local ppar = frameCurrent:getParent().args
local un = trim(ppar.by or ppar.U or ppar.u or '')
local md = trim(ppar.m or ppar.mod or '')
local tt = trim(ppar.t or ppar.to or '') -- "to" topic.
local f = trim(ppar.f or ppar.from or tt) -- "from".
local p = trim(ppar.p or ppar.part or '')
local args = { -- Parameters for expandnig 'Template:Attrib'.
'', -- [1] = vx
'', -- [2] = ux
'-',
trim(ppar.type or 'SVG'), -- Needs check.
'',
ux, -- [6] = ux
tt,
'', -- [8] = (ftab[hnum] ~= '.') and ftab[hnum] or f
'', -- [9] = (ptab[hnum] ~= '.') and ptab[hnum] or p
m = '', -- ['m'] = (mtab[hnum] ~= '.') and mtab[hnum] or md
s = trim(ppar.s or ppar.style or 's'), -- default
}
local ftab = {} -- "from" topic.
local ptab = {} -- Parts.
local mtab = {} -- Modification.
local rtab = {} -- Working table.
local fnum = 0
local rnum = 0
local hnum = 0
for i, v in ipairs(ppar) do
fnum = fnum + 1 -- Input parm number.
if fnum % 2 == 0 then -- Even: should be a username.
local enam = trim(v)
-- A rough check: is_extension?
local snam = lower(sub(enam, -4))
if snam == '.png'
or snam == '.gif'
or snam == '.jpg'
or snam == '.svg'
-- Exotics:
or snam == '.mid'
or snam == '.ogg'
or snam == '.tif'
or snam == '.wav'
or snam == '.xcf'
or snam == '.pdf' -- Note: no "short alias" in samefile()
-- Note: Longer extensions still not supported (need check):
-- snam == '.djvu'
-- snam == '.webp'
then -- No - it's the next filename.
insert(rtab, '') -- Empty username inbetween.
rnum = rnum + 1
fnum = fnum + 1 -- Make it odd.
end
end
if fnum % 2 == 1 then -- Odd (now): is a filename.
hnum = (fnum + 1) / 2
local z = tostring(hnum)
ftab[hnum] = ppar['f' .. z] or '.'
ptab[hnum] = ppar['p' .. z] or '.'
mtab[hnum] = ppar['m' .. z] or '.'
end
-- table.maxnum(ppar) does not work; therefore the "rtab" workaround.
insert(rtab, ppar[i]) -- = enam
rnum = rnum + 1
end
if rnum % 2 == 1 then -- Plus one item when odd number.
insert(rtab, '') -- Empty user name, to get a pair.
end
local results = {} -- Output.
local vx = ''
for i, v in ipairs(rtab) do
if i % 2 == 1 then -- odd: 1st value in pair is a filename
vx = trim(v) -- this 1st 'v' should not be empty
else -- even: 2nd value in pair is a user name (possibly empty)
local ux = trim(v) -- this 2nd 'v' can be empty
if ux == '' then ux = un end -- Does not work otherwise?
hnum = i / 2
args[1] = vx -- a filename
args[2] = ux -- a username
args[6] = ux -- a username
args[8] = (ftab[hnum] ~= '.') and ftab[hnum] or f
args[9] = (ptab[hnum] ~= '.') and ptab[hnum] or p
args.m = (mtab[hnum] ~= '.') and mtab[hnum] or md
insert(results, expand('Attrib', args))
vx = '' -- reset the filename for the next pairs
end
end
return concat(results)
end -- function attribs
-- Get the user id: the (last) parameter which is prefixed by '/'.
function p.byuser(frame)
local ppar = frameCurrent:getParent().args
local user = ''
for _, value in pairs(ppar) do
if value ~= nil and user == '' and sub(value, 1, 1) == '/' then
user = sub(value, 2) -- remove the '/'
end
-- TODO: Test whether userID exists?
end
return user
end -- function byuser, for template:F
-- for Template:userlist (horizontal - but vertical when dir=I/O/U/D/V).
function p.userlist(frame)
local gpar = frame.args -- global parms (par/P, dir/V)
local ppar = frameCurrent:getParent().args
local mod = ppar.m or ppar.mod or ppar.user or ppar.u or ppar.page or ppar.p or ''
local hil = ppar.h or ppar.hilite or ''
local nam = ppar.n or ppar.name or ''
local wik = ppar.w or ppar.wiki or ppar.lang or ''
local opt = ppar.o or ppar.opt or ppar.option or ''
local lnk = ppar.l or ppar.link or ''
--@ local pr4 = ppar.q or ppar.qpar or ppar.par4 or ''
--@ local pr5 = ppar.r or ppar.rpar or ppar.par5 or ''
local cas = ppar.c or ppar.case or ''
local trl = ppar.t or ppar.i18n or ppar.translate or ''
-- If ever template expansion of prim, prfx, sufx, or pend is needed,
-- this must be done once here (out of the loop below).
local prim, prfx, sufx, pend = '', '', '', ''
if gpar.dir == 'O' then -- Ordered/numbered vertical list.
prim, prfx, sufx, pend = '<ol>', '<li>', '</li>', '</ol>'
elseif gpar.dir == 'U' then -- Unordered/bulleted vertical list.
prim, prfx, sufx, pend = '<ul>', '<li>', '</li>', '</ul>'
elseif gpar.dir == 'D' then -- Simple definition/indented vertical list.
prim, prfx, sufx, pend = '<dl>', '<dt>', '</dt>', '</dl>'
elseif gpar.dir == 'V' then -- Custom vertical list of users.
prim, prfx, sufx, pend = '<dl style="margin:.3em 0">', '<dt><span style="color:#69F">✦ </span>', '</dt>', '</dl>'
else --'I': Inline horizontal list.
-- prim, prfx, sufx, pend: not used; replaced by separators, expanded by commaAnd()
end
local mtab = {} -- u_mod c/t/w/wt (aka utab, mtab, ptab)
local htab = {} -- hilite
local ntab = {} -- 2 display name
local wtab = {} -- 3 interwiki
local otab = {} -- 4 +/- option
local ltab = {} -- link option
--@ local qtab = {}
--@ local rtab = {}
local ctab = {} -- case
local ttab = {} -- translate i18n
local xtab = {} -- postfix text
local x = 0 -- running index, can be ~= i
local y = 0 -- running index, can be ~= i
local plus = '' -- opt
local xmax = 0
for _, v in ipairs(ppar) do
v = mw.text.trim ( v )
if v == '+' then
plus = '+'
elseif v == '-' then
if plus == '' then
plus = '-'
end
else
y = y + 1
if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 0 --[[1=user, 0=name]] then
x = x
else
x = x + 1
local z = tostring(x)
mtab[x] = ppar['m' .. z] or ppar['u' .. z] or ppar['p' .. z] or '-'
htab[x] = ppar['h' .. z] or '-'
ntab[x] = ppar['n' .. z] or '-'
wtab[x] = ppar['w' .. z] or '-'
otab[x] = ppar['o' .. z] or '/'
ltab[x] = ppar['l' .. z] or '-'
--@ qtab[x] = ppar['q' .. z] or '-'
--@ rtab[x] = ppar['r' .. z] or '-'
ctab[x] = ppar['c' .. z] or '-'
ttab[x] = ppar['t' .. z] or '-'
xtab[x] = ppar['x' .. z] or '-'
end
end
xmax = x
end -- for
if plus ~= '' and opt == '' then
opt = plus --[[discrepancy? opt has priority]]
end
local odd = y % 2 --[[1 when last one not paired]]
local p2s = {
'~',
'', -- [2] = (wk ~= '') and wk or 'commons'
'wiki',
}
local hls = {
'<',
'', -- [2] = hl
'>',
'', -- [4] = (nm ~= '') and nm or vv
'</',
'', -- [6] = hl
'>',
}
local args = { -- Parameters for expanding 'Tempplate:U/main'.
'', -- [1] = vv,
'', -- [2] = nm,
'', -- [3] = wk,
'', -- [4] = op,
link = '', -- ['link'] = lk
par1 = '', -- ['par1'] = p1
par2 = '', -- ['par2'] = p2
--@ par4 = '', -- ['par4'] = p4
--@ par5 = '', -- ['par5'] = p5
case = '', -- ['case'] = cs
i18n = '', -- ['i18n'] = tr
}
local results = {}
local out = 0
local vv = ''
x = 0
y = 0
for _, v in ipairs(ppar) do
v = trim(v)
if v ~= '+' and v ~= '-' then
y = y + 1
if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 1 --[[1=user, 0=name]] and odd == 0 then -- last one paired
vv = v -- userid
else
x = x + 1
local md = (mtab[x] ~= '-') and mtab[x] or mod
local hl = (htab[x] ~= '-') and htab[x] or hil
local nm = (ntab[x] ~= '-') and ntab[x] or nam
local wk = (wtab[x] ~= '-') and wtab[x] or wik
local op = (otab[x] ~= '/') and otab[x] or opt
local lk = (ltab[x] ~= '-') and ltab[x] or lnk
--@ local p4 = (qtab[x] ~= '-') and qtab[x] or pr4
--@ local p5 = (rtab[x] ~= '-') and rtab[x] or pr5
local cs = (ctab[x] ~= '-') and ctab[x] or cas
local tr = (ttab[x] ~= '-') and ttab[x] or trl
local tx = (xtab[x] ~= '-') and xtab[x] or ''
if gpar.par == 'P' then -- y%2 = 0 (name)
if odd == 1 then --[[no: last user:]]
vv = v --[[user]]
else
nm = v --[[name]]
end
else
vv = v
end
if hl ~= '' then
hls[2] = hl
hls[4] = (nm ~= '') and nm or vv
hls[6] = hl
nm = concat(hls)
end
if md == 'n' or md == 'no' then
lk = md -- no link
end
local p1 = '' -- prefix
if md == 't' or md == 'wt' or md == 'tw' then
p1 = ' talk'
end
local p2 = '' -- postfix
if md == 'w' or md == 'wt' or md == 'tw' then
p2s[2] = (wk ~= '') and wk or 'commons'
p2 = concat(p2s)
end
if vv ~= '' and vv ~= '×' then
if md == 'c' then vv = 'Special:Contributions/' .. vv end
if gpar.dir == 'I' or gpar.dir == 'O' or gpar.dir == 'U' or gpar.dir == 'V' then
-- Vertical list (uses: prim, prfx, sufx, pend).
if out == 0 then
insert(results, prim) -- expansion of prim not needed
end
insert(results, prfx) -- expansion of prefx not needed
out = out + 1
else -- Horizontal inline list.
if x ~= 1 then
insert(results, commaAnd(x == xmax))
end
end
if sub(vv, 1, 2) == '{{' or sub(vv, 1, 2) == '[[' then
insert(results, expand1('=', vv))
else
args[1] = vv
args[2] = nm
args[3] = wk
args[4] = op
args.link = lk
args.par1 = p1
args.par2 = p2
--@ args.par4 = p4
--@ args.par5 = p5
args.case = cs
args.i18n = tr
insert(results, expand('U/main', args))
end
if tx ~= '' then
insert(results, expand1('=', tx))
end
if sufx ~= '' then
insert(results, sufx) -- expansion of sufx not needed
end
end
end
end
end -- for
if out > 0 and pend ~= '' then
insert(results, pend) -- expansion of pend not needed
end
return concat(results)
end -- function userlist
-- Table for templates: Legend; Legend-line, Legend2, Legend-small... (param pairs)
function p.legendt (frame)
local ppar = frameCurrent:getParent().args
local ttip = trim(ppar.tt or ppar.ttip or ppar.tooltipping or '')
local frmp = frame.args
local template = trim(frmp[1] or 'Legend')
local args = { -- Parameters for expanding the given template.
'', -- [1] = v1
'', -- [2] = v
lang = trim(ppar.lang or ''),
p = trim(frmp[2] or ''),
size = trim(frmp[3] or ''),
css = '', -- ['css'] = '" title="' .. upper(v1)
}
local results = {}
local v1 = ''
for _, v in ipairs(ppar) do
if v1 == '' then
v1 = v
if ttip == 'yes' and v1 ~= '' then -- Tooltip the colors.
-- HACK: terminates the style="..." attribute and opens another attribute
args.css = '" title="' .. Ucfirst(v1)
end
else
args[1] = v1
args[2] = v
insert(results, expand(template, args))
v1 = ''
args.css = ''
end
end
if v1 ~= '' then -- Last item: problem when not a last pair
insert(results, expand(template, args))
end
return concat(results)
end -- function legendt
-- For Template:ColorString (Igen/cbox, param pairs).
local argsColorbox = { -- Parameters for expanding 'Template:Igen/cbox'.
'', -- [1] -- (striped; border)
'', -- [2] -- color value
'', -- [3] -- either code-2 ( BCDLMST-), or color value
0, -- [4] -- count of spaces
'', -- [5] -- ?
'', -- [6] -- 'char' or 'file'
'', -- ['lang'] = ppar.lang or content language,
}
function p.colorbox(frame)
local ppar = frameCurrent:getParent().args
argsColorbox.lang = ppar.lang or mw.getContentLanguage():getCode()
local results = {}
local v1 = ''
for i, v in ipairs(ppar) do
if i <= 2 then
argsColorbox[3] = v -- either code-2 ( BCDLMST-), or color value
elseif v1 == '' then
v1 = v -- (striped; border)
local ct = 0 -- count of spaces
local bp = 0 -- position of first space
for c = 1, len(v1) do
if sub(v1, c, c) == ' ' then
ct = ct + 1 -- space count
if bp == 0 then bp = c end
end
end
local bc = ''
if ct >= 3 then -- 3 = border, 4 = line
bc = sub(v1, bp + 1)
v1 = sub(v1, 1, bp - 1)
end
local cf = ''
if ct == 1 then -- 'char' or 'file'
bc = sub(v1, bp + 1)
v1 = sub(v1, 1, bp - 1)
cf = (sub(bc, -4, -4 ) == '.') and 'file' or 'char'
end
argsColorbox[4] = ct -- count of spaces
argsColorbox[5] = bc
argsColorbox[6] = cf -- 'char' or 'file'
else
argsColorbox[1] = v1
argsColorbox[2] = v
insert(results, expand('Igen/cbox', argsColorbox))
v1 = ''
end
end
if v1 ~= '' then
argsColorbox[1] = v1
argsColorbox[2] = ''
insert(results, expand('Igen/cbox', argsColorbox)) -- last item
end
return concat(results)
end -- function colorbox
--------------------------------------------------------------------------------
-- Returns a parameter list: (replacement of «#» or «~» by «=»: not necessary).
function p.plist(frame)
local ppar = frameCurrent:getParent().args
return concat(ppar, '|') -- return gsub(concat(ppar, '|'), '#', '='), not necessary
end -- function plist
-- Repeats a text string.
function p.loop (frame)
local ppar = frameCurrent:getParent().args
return string.rep(ppar[2] or ' ', tonumber(ppar[1] or 1))
end -- function loop
-- Increment a hex number by a ±decimal value
function p.incrhx(frame)
local gpar = frame.args -- global parms
return format('%X', tonumber(gpar[1], 16) + gpar[2])
end -- function incrhx
-- Display inline a range of characters with their Unicode code point in tool tip, such as emojis for Template:Emoji, with optional
-- line breaks to limit lines to at most 16 characters (breaks after every code point which is the last one in a UCS column):
-- {{#invoke:Iteration|parlst |temp=Emoji |1=(nb of characters) |2=(4- to 6-digits uppercase hexadecimal code point)
-- |3=(border or 0) |4=(padding or 0) |5=(font size in px or -)
-- |6=(styles or -) |(nocat=1)
-- }}
local argsEmodis = {
-- WARNING: partial HTML (see the template using this function)
-- This function can only be used after an UNTERMINATED opening HTML tag,
-- whose LAST attribute MUST BE ' title=' not followed by quotes.
-- This returned value closes the opening HTML tag of the template
-- The calling template will then append itself the closing HTML tag.
'"U+',
'', -- [2] = format('%04X', code)
'">',
'', -- [4] = char(code)
nil -- [5] = optional line break
}
function p.emodis(frame)
local gpar = frame.args -- global parms
local code = tonumber(gpar[1], 16) + gpar[2]
argsEmodis[2] = format('%04X', code)
argsEmodis[4] = char(code)
argsEmodis[5] = gpar[3] == '16' and (code % 16 == 15 and '<br />') or nil
return concat(argsEmodis)
end -- function emodis
-- For Template:Emoji table: {{#invoke:Iteration|emotab|prefix=1F250|par1=... | ... }}
local argsEmotab = { -- Parameters for expanding 'Template:F'.
'', -- [1] = file
'', -- [2] = 'Z'
'', -- [3] = '49'
'', -- [4] = 'b'
'', -- [5] = 'l'
'', -- [6] = ''
link = '*',
}
function p.emotab(frame)
local gpar = frame.args -- global parms
local codp
codp = trim(gpar.par1 or '') --[['Z' ]] argsEmotab[2] = (codp ~= '') and codp or nil
codp = trim(gpar.par2 or '') --[['49']] argsEmotab[3] = (codp ~= '') and codp or nil
codp = trim(gpar.par3 or '') --[['b' ]] argsEmotab[4] = (codp ~= '') and codp or nil
codp = trim(gpar.par4 or '') --[['l' ]] argsEmotab[5] = (codp ~= '') and codp or nil
codp = trim(gpar.par5 or '') --[['' ]] argsEmotab[6] = (codp ~= '') and codp or nil
codp = trim(gpar.codp or '')
local parts = {
'', -- [1] = v
'', -- [2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp)
'.svg',
}
local results = {}
for _, v in ipairs(gpar) do
local file = sub(v, 1, 6)
parts[1] = v
parts[2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp)
file = concat(parts)
if titleNew(file, 6).exists then
argsEmotab[1] = file
insert(results, expand('F', argsEmotab))
end
end
return concat(results)
end -- function emotab
-- For template: Navcat (via Navcattab).
function p.navcat(frame)
local gpar = frame.args -- global parms
local cats = { -- Categories to generate.
trim(gpar.c1 or ''),
'', -- [2] = ctxt
trim(gpar.c2 or ''),
}
local args = { -- Parameters for expanding 'Template:Navcat'.
'', -- [1] = (ccod = vtab[2] --[[opt.]])
'', -- [2] = concat(cats)
'', -- [3] = (dtxt = Ucfirst(ctxt))
'', -- [4] = (cnam = vtab[3] or ccod or ctxt)
span = trim(gpar.span or ''),
}
local ppar = frameCurrent:getParent().args
local results = {}
for _, v in ipairs(ppar) do
v = trim(v)
if v == '' or v == 'nl' then
insert(results, '<br /> ')
else
local vtab = split(v, '/')
local ctxt = vtab[1] or ' ' --[[requ.]]
local ccod = vtab[2] --[[opt.]]
cats[2] = ctxt
args[1] = ccod
args[2] = concat(cats)
args[3] = Ucfirst(ctxt)
args[4] = vtab[3] or ccod or ctxt
insert(results, expand('Navcat', args))
end
end
return concat(results)
end -- function navcat
-- For Template:Tle.
function p.tleparm(frame)
local ppar = frameCurrent:getParent().args
local parnumber = trim(ppar.number or '')
local parkbd = trim(ppar.kbd or '')
if parkbd ~= '' then
parkbd = {
'<kbd>',
'', -- [2] = par1
'</kbd>',
}
else
parkbd = nil
end
local args = { -- Parameters for expanding 'Template:Tle/parm'.
'', -- [1] = par1
'', -- [2] = v
trim(ppar.f or ''), -- form feed
trim(ppar.style or ''), -- style for parameter value
trim(ppar.style2 or ''), -- style for parameter name
}
local results = {}
for i, v in ipairs(ppar) do
local z = tostring(i)
local par1 = trim(ppar['p' .. z] or '')
if par1 ~= '' and parkbd then
parkbd[2] = par1
par1 = concat(parkbd)
end
if par1 == '' and parnumber ~= '' then
par1 = z
end
if par1 ~= '' then -- keep parameter value as is if positional (and not parnumberd explicitly)
v = trim(v)
if v == '' then v = ' ' --[[Note: ' ' would change the semantics.]] end
end
args[1] = par1
args[2] = v
insert(results, expand('Tle/parm', args))
end
return concat(results)
end -- function tleparm
-- for Template:Variate.
function p.variation(frame)
local ppar = frameCurrent:getParent().args
local sept = ppar.sept or '|' -- separator before
local sample = trim(ppar[1] or '') -- sample string
local pattern = ppar.pttn or '?' -- pattern
local var1 = ppar.var1 or '' -- filling space before
local var2 = ppar.var2 or '' -- filling space after
local sep2 = ppar.sep2 or '' -- separator after
local parts = { -- Replacement parts for gsub().
(var1 == 'space') and ' ' or var1,
'', -- [2] = trim(v)
(var2 == 'space') and ' ' or var2,
}
local results = {}
for i, v in ipairs(ppar) do
if i > 1 then
insert(results, sept)
parts[2] = trim(v)
insert(results, gsub(sample, pattern, concat(parts)))
insert(results, sep2)
end
end
return concat(results)
end
return p
l0to3835hvw8ivav31inqbtlaogtgnw
10716
10715
2026-08-25T23:38:29Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Iteration]]
10715
Scribunto
text/plain
-- This module contains the functions for different templates, solving their iteration problems.
local max = math.max
local len = string.len
local sub = string.sub
local find = string.find
local format = string.format
local insert = table.insert
local concat = table.concat
local trim = mw.text.trim
local split = mw.text.split
local titleNew = mw.title.new
local char = mw.ustring.char
local NL = char(10)
local lower = mw.ustring.lower
local upper = mw.ustring.upper
local gsub = mw.ustring.gsub
local Usub = mw.ustring.sub
local function Ucfirst(text)
text = trim(text)
return upper(Usub(text, 1, 1)) .. Usub(text, 2)
end
----------------------------------------------------------------------------------------------
-- Template expansion helpers for performance:
-- Saves CPU and time resources on large iterations by minimizing repeated recursive calls to
-- the parser, eliminating many table constructions/deletion/lookups in memory. Also allows
-- reporting CPU/time usage for expansions of costly templates inside recursive calls
-- (otherwise all CPU/time is counted inside Lua, those templates are not counted).
local currentTitle = mw.title.getCurrentTitle()
local currentNs = tonumber(currentTitle.namespace)
local currentPage = currentTitle.text
local frameCurrent = mw.getCurrentFrame()
local expandTemplateCurrent = frameCurrent.expandTemplate
local callParserFunctionCurrent = frameCurrent.callParserFunction
local contentLanguage = mw.language.getContentLanguage()
local langDefault = contentLanguage:getCode()
local langUser = lower(trim(callParserFunctionCurrent(frameCurrent, 'Int', 'Lang')))
local transclude = {}
local function expand(template, args)
transclude.title = template
transclude.args = args or {}
return expandTemplateCurrent(frameCurrent, transclude)
end
local argsOne = {}
local function expand1(title, arg1)
argsOne[1] = arg1
return expand(title, argsOne)
end
local argsLangUser = { lang = langUser }
local argsLangDefault = { lang = langDefault }
local argsLangOther = {}
local function expandWithLang(template, lang)
if type(lang) == 'string' then
lang = trim(lang)
if lang == '' then
lang = nil
else
lang = lower(lang)
end
else
lang = nil
end
if not lang or lang == langUser then
return expand(template, argsLangUser)
elseif lang == langDefault then
return expand(template, argsLangDefault)
else
argsLangOther.lang = lang
return expand(template, argsLangOther)
end
end
local Comma, ConjAnd
local function commaAnd(isLast)
if isLast then
if not ConjAnd then
ConjAnd = expand('Conj-and', argsLangUser)
end
return ConjAnd
else
if not Comma then
Comma = expand('Comma', argsLangUser)
end
return Comma
end
end
----------------------------------------------------------------------------------------------
local p = {}
-- For Template:Ifim.
local argsIfim1 = { -- Parameters for expanding 'Template:Ifim1'.
'', -- [1] = v
'', -- [2] = trim(ppar.p1 or ''),
'', -- [3] = trim(ppar.p2 or ''),
'', -- [4] = trim(ppar.p3 or ''),
'', -- [5] = trim(ppar.p4 or ''),
'', -- [6] = trim(ppar.p5 or ''),
n = '' -- ['n'] = trim(ppar.fn or ''),
}
function p.ifim1(frame)
local ppar = frameCurrent:getParent().args
argsIfim1[2] = trim(ppar.p1 or '')
argsIfim1[3] = trim(ppar.p2 or '')
argsIfim1[4] = trim(ppar.p3 or '')
argsIfim1[5] = trim(ppar.p4 or '')
argsIfim1[6] = trim(ppar.p5 or '')
argsIfim1.n = trim(ppar.fn or '')
local results = {}
for _, v in ipairs(ppar) do
argsIfim1[1] = v
insert(results, expand('Ifim1', argsIfim1))
end
return concat(results)
end -- function ifim
-- For Template:Ifimc.
local argsIfim2 = { -- Parameters for expanding 'Template:Ifim2'.
'', -- [1] = v1
'', -- [2] = trim(ppar.p1 or ''),
'', -- [3] = trim(ppar.p2 or ''),
'', -- [4] = trim(ppar.p3 or ''),
'', -- [5] = trim(ppar.p4 or ''),
'', -- [6] = v
}
function p.ifim2(frame)
local ppar = frameCurrent:getParent().args
argsIfim2[2] = trim(ppar.p1 or '')
argsIfim2[3] = trim(ppar.p2 or '')
argsIfim2[4] = trim(ppar.p3 or '')
argsIfim2[5] = trim(ppar.p4 or '')
local results = {}
for _, v in ipairs(ppar) do
argsIfim2[1] = v
argsIfim2[6] = v
insert(results, expand('Ifim2', argsIfim2))
end
return concat(results)
end -- function ifim2
-- For Template:Ifimt (param pairs).
function p.ifimt(frame)
local ppar = frameCurrent:getParent().args
argsIfim2[2] = trim(ppar.p1 or '')
argsIfim2[3] = trim(ppar.p2 or '')
argsIfim2[4] = trim(ppar.p3 or '')
argsIfim2[5] = trim(ppar.p4 or '')
local v1 = ''
local results = {}
for _, v in ipairs(ppar) do
if v1 == '' then
v1 = v
else
argsIfim2[1] = v1
argsIfim2[6] = v
insert(results, expand('Ifim2', argsIfim2))
v1 = ''
end
end
if v1 ~= '' then
argsIfim2[6] = ''
insert(results, expand('Ifim2', argsIfim2)) -- Last item.
end
return concat(results)
end -- function ifimt
-------------------------------------------------------
-- Helper function for: ownbased, and filelist
local function samefile(filename, num, first)
local filename = trim(filename or '')
if sub(filename, 1, 1) == '.' then
local part = 'Example' -- default filename
if currentNs == 6 or currentNs == 7 then
part = split(currentPage , '.', true)
part = concat(part, '.', 1, math.max(#part - 1, 1))
end
-- Supported short aliases:
if filename == '.' then filename = part .. '.png'
elseif filename == '.p' then filename = part .. '.png'
elseif filename == '.g' then filename = part .. '.gif'
elseif filename == '.j' then filename = part .. '.jpg'
elseif filename == '.s' then filename = part .. '.svg'
-- Exotics:
elseif filename == '.m' then filename = part .. '.mid'
elseif filename == '.o' then filename = part .. '.ogg'
elseif filename == '.t' then filename = part .. '.tif'
elseif filename == '.v' then filename = part .. '.wav'
elseif filename == '.x' then filename = part .. '.xcf'
-- Note: no "short alias" for '.pdf' ('.p' already used for '.png')
-- Note: short aliases for a few longer extensions:
elseif filename == '.d' then filename = part .. '.djvu'
elseif filename == '.w' then filename = part .. '.webp'
else filename = part .. filename
end
elseif filename == '' or filename == '*' then
if tonumber(num) == 1 then
filename = 'Example.svg'
if currentNs == 6 or currentNs == 7 then
filename = currentPage
end
else
filename = trim(first)
if filename == '' or filename == '*' or sub(filename, 1, 1) == '.' then
filename = 'Example.svg'
if currentNs == 6 or currentNs == 7 then
filename = currentPage
end
end
end
end
return filename
end -- function samefile
---++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Simple iterations - without many params.
function p.iterate(frame)
local gpar = frame.args -- global parms
local template = gpar[1] or '' -- template name
local args = { -- Parameters for expanding the given template.
'', -- [1] = v
gpar[2] or '',
gpar[3] or '',
}
local ppar = frameCurrent:getParent().args
local results = {}
for _, v in ipairs(ppar) do
args[1] = v
insert(results, expand(template, args))
end
return concat(results)
end -- function iterate
-- More iterations - for params, param pairs, or n-tuples.
function p.iteration(frame)
local gpar = frame.args -- Global parms.
local vmax = tonumber(gpar.n) or 2 -- Tuple number (default = 2).
local vnum = vmax + 1 -- Additional not-changing params.
local template = '' -- Template name.
local args = {} -- Parameters for expanding the given template.
for i, p in ipairs(gpar) do
p = trim(p)
if i == 1 then
template = p
else
args[vnum] = p
vnum = vnum + 1
end
end
vnum = 1
local ppar = frameCurrent:getParent().args
local results = {} -- output
for _, v in ipairs(ppar) do
args[vnum] = trim(v)
vnum = vnum + 1
if vnum > vmax then
insert(results, expand(template, args))
vnum = 1
end
end
return concat(results)
end -- function iteration
-- For different templates, for general use, e.g. Emoji.
function p.parlst(frame)
local gpar = frame.args -- Global parameters.
local template = trim(gpar.temp or '')
local results = {}
if template ~= '' then -- Slow expansion (e.g. for template = 'Emoji', which will recurse into iterations calling p.emodis)
local ff = trim(gpar.ff or '') -- Inbetween?
if ff ~= '' then
ff = expand1(ff, trim(gpar.pf or ''))
else
ff = nil
end
local nocat = trim(gpar.nocat or '')
local args = { -- Parameters for expanding the given template.
nocat = nocat ~= '' and nocat or nil
}
for k, v in pairs(gpar) do
v = trim(v)
if v ~= '' then args[k] = v end
end
local count = tonumber(args[1] or '') or 0
for i = 1, (count or 1) do -- default: go 1× for nil
if ff then insert(results, ff) end
if count then args[1] = i - 1 end
insert(results, expand(template, args))
end
else -- Template expansion not needed (much faster, without recursed iterations calling p.emodis from a specified template).
local count = tonumber(gpar[1] or '') or 0
local code = tonumber(gpar[2] or '', 16) or 0
local catlink = gpar.catlink or ''
if catlink == '' then
local args = {
'<span title="U+',
'', -- [2] = format('%04X', code + i - 1)
'">',
'', -- [4] = char(code + i - 1)
'</span>',
}
for i = 1, count do
args[2] = format('%04X', code + i - 1)
args[4] = char(code + i - 1)
insert(results, concat(args))
end
elseif catlink == 'U' then
local args = {
'[[:Category:U+',
'', -- [2] = format('%04X', code + i - 1)
'|<span title="U+',
'', -- [4] = format('%04X', code + i - 1)
'">',
'', -- [6] = char(code + i - 1)
'</span>]]',
}
for i = 1, count do
args[2] = format('%04X', code + i - 1)
args[4] = args[2]
args[6] = char(code + i - 1)
insert(results, concat(args))
end
else
local args = {
'[[:Category:',
'', -- [2] = char(code + i - 1)
'|<span title="U+',
'', -- [4] = format('%04X', code + i - 1)
'">',
'', -- [6] = char(code + i - 1)
'</span>]]',
}
for i = 1, count do
args[2] = char(code + i - 1)
args[4] = format('%04X', code + i - 1)
args[6] = args[2]
insert(results, concat(args))
end
end
end
return concat(results)
end -- function parlst
-- Global function for one filename.
function p.filename(frame)
local gpar = frame.args -- Global parameters.
return samefile(trim(gpar[1] or ''), 1)
end -- function filename
-- For Template:Own based (one filename which is '.').
function p.ownbasby(frame)
local gpar = frame.args -- Global parameters.
return expand('F', {
samefile(gpar[1] or '.', 1),
by = trim(gpar[2] or '')
})
end -- function ownbasby
-- For Template:Own based (horizontal - but vertical when "b1=").
function p.ownbased(frame)
local ppar = frameCurrent:getParent().args
local by0 = trim(ppar.b or ppar.by or ppar.u or ppar.user or '')
local dis = trim(ppar.d or ppar.dis or ppar.display or '')
local hil = trim(ppar.h or ppar.hilite or '')
local lng = trim(ppar.i or ppar.lang or '')
local wik = trim(ppar.l or ppar.w or ppar.wiki or '')
local nam = trim(ppar.n or ppar.name or '')
local opt = trim(ppar.o or ppar.opt or ppar.option or '')
local mod = trim(ppar.m or ppar.mod or '')
local pr4 = trim(ppar.par4 or ppar.qpar or '')
local pr5 = trim(ppar.par5 or ppar.rpar or '')
local btab = {}
local dtab = {}
local htab = {}
local itab = {}
local ltab = {}
local ntab = {}
local otab = {}
local qtab = {}
local rtab = {}
local ttab = {}
local utab = {}
local x = 0 -- running index, can be ~= i
local fst = 0 -- first occurrence
local cor = 0
local max = 0
local plus = ''
for i, v in ipairs(ppar) do
if v == '+' then
plus = '+'
elseif v == '-' then
if plus == '' then plus = '-' end
else
x = x + 1
if fst == 0 then fst = x end
local z = tostring(x)
btab[x] = trim(ppar['b' .. z] or ppar['by' .. z] or ppar['u' .. z] or '-')
dtab[x] = trim(ppar['d' .. z] or '-')
htab[x] = trim(ppar['h' .. z] or '-')
itab[x] = trim(ppar['i' .. z] or '-')
ltab[x] = trim(ppar['l' .. z] or ppar['w' .. z] or '-')
ntab[x] = trim(ppar['n' .. z] or '-')
otab[x] = trim(ppar['o' .. z] or '-')
qtab[x] = trim(ppar['q' .. z] or '-')
rtab[x] = trim(ppar['r' .. z] or '-')
ttab[x] = trim(ppar['t' .. z] or '-')
utab[x] = trim(ppar['m' .. z] or '-')
end
max = x
if v == 'x' or v == 'X' or v == '×' then
cor = cor + 1
end
end -- for
x = 0
if fst > 0 then
local mnm = trim(ppar[fst])
end
local hls = {
'<',
'', -- [2] = hl
'>',
'', -- [4] = (nm ~= '') and nm or vv
'</',
'', -- [6] = hl
'>',
}
local args = { -- Parameters for expanding 'Template:F'.
'', -- [1] = vv,
'', -- [2] = nm
'', -- [3] = ds
'', -- [4] = op
'', -- [5] = p4
'', -- [6] = p5
plus,
l = '', -- ['l'] = il
lang = '', -- ['lang'] = lg
p = '', -- ['p'] = px
by = '', -- ['by'] = by
u = '', -- ['u'] = um
}
local results = {}
for _, v in ipairs(ppar) do
if v ~= '+' and v ~= '-' then
x = x + 1
local by = btab[x] ~= '-' and btab[x] or by0
local ds = dtab[x] ~= '-' and dtab[x] or dis
local hl = htab[x] ~= '-' and htab[x] or hil
local il = ltab[x] ~= '-' and ltab[x] or wik
local lg = itab[x] ~= '-' and itab[x] or lng
local op = otab[x] ~= '-' and otab[x] or opt
local p4 = qtab[x] ~= '-' and qtab[x] or pr4
local p5 = rtab[x] ~= '-' and rtab[x] or pr5
local um = utab[x] ~= '-' and utab[x] or mod
local nm = ntab[x] ~= '-' and ntab[x] or ''
local tx = ttab[x] ~= '-' and ttab[x] or ''
local vv = trim(v)
if find(vv, '/') == nil then
vv = samefile(vv, x, mnm)
if x == 1 then mnm = vv end
end
if vv ~= '' and vv ~= '×' then
local px = ''
if ppar.b1 == nil then -- parameter missing
if x == 1 then
px = ' '
else
insert(results, commaAnd(x == max))
end
else -- ppar.b1 is defined (with value, or empty)
px = '<br /> <span style=color:#69F>✦ </span>' -- "list" item
end
if sub(ds, -2) == 'px' then
ds = sub(ds, 1, -3)
end
if nm == '' and x == 1 then
nm = nam
end
if hl ~= '' then
hls[2] = hl
hls[4] = (nm ~= '') and nm or vv
hls[6] = hl
nm = concat(hls)
end
-- if il ~= '' then ds = '' end -- ? (discrepancy)
if vv == 'x' then ds = '' end -- this should be the last "file"
if by == '' then -- check for abbreviating '/'
local sby = find(vv, '/')
if sby ~= nil then
by = sub(vv, sby + 1)
vv = sub(vv, 1, sby - 1)
vv = samefile(vv, x, mnm)
if x == 1 then mnm = vv end
end
end
args[1] = vv
args[2] = nm
args[3] = ds
args[4] = op
args[5] = p4
args[6] = p5
args.l = il
args.lang = lg
args.p = px
args.by = by
args.u = um
insert(results, expand('F', args))
if tx ~= '' then
insert(results, expand1('=', tx))
end
end
end
end -- for
if max - cor > 9 then
insert(results, expand1('Igen/cat', 'Own-based with more than 9 files|' .. max))
end
return concat(results)
end -- function ownbased
-- Horizontal file list for: Template:SVG lang, Template:Lang gallery, and others.
function p.svglang(frame)
local gpar = frame.args -- Global parameters.
local template = gpar[1] or 'Source thumb' -- 'SVG lang', 'Lang gallery/thumb'
local ppar = frameCurrent:getParent().args
args = { -- Parameters to expand the given template.
trim(ppar.file or ''),
'', -- [2] = lang
p = trim(ppar.p or ''),
}
local results = {}
for _, v in ipairs(ppar) do
local lang = trim(v)
if lang > ' ' then
args[2] = lang
insert(results, trim(expand(template, args)))
insert(results, NL)
end
end
return concat(results)
end -- function svglang
-- Elements count for: Template:SVG lang, Template:Lang gallery, and others.
function p.elemct (frame)
local ppar = frameCurrent:getParent().args
local count = 0
for _, v in ipairs(ppar) do
if trim(v) ~= '' then
count = count + 1
end
end
return count
end -- function elemct
-- Horizontal file list for: Template:Filelist, Template:File.
-- Vertical file list for: Template:Other versions, Template:Derived from, Template:Derivative versions.
function p.filelist(frame)
local gpar = frame.args -- Global parameters.
local ppar = frameCurrent:getParent().args
local spa = trim(ppar.spa or ppar.s or '-')
local pfx = trim(ppar.x or ppar.pfx or ppar.prefix or '') -- "List" item {{Comma}}
local dir = gpar[1] or 'none'
if dir == 'vert' and pfx == '' then
pfx = '\n* ' -- "list" item
end
local nam = trim(ppar.n or ppar.name or '')
local dis = trim(ppar.d or ppar.z or ppar.dis or ppar.display or '')
if sub(dis, -2) == 'px' then dis = sub(dis, 1, -3) end
local opt = trim(ppar.o or ppar.opt or ppar.option or '')
local pr4 = trim(ppar.par4 or ppar.qpar or '')
local pr5 = trim(ppar.par5 or ppar.rpar or '')
local pr6 = trim(ppar.par6 or ppar.vpar or '')
local wik = trim(ppar.w or ppar.k or ppar.wiki or ppar.sisterproject or '')
local int = trim(ppar.i or ppar.int or ppar.ind or ppar.inter or '')
local pre = trim(ppar.p or ppar.pre or ppar.pretext or '')
local by0 = trim(ppar.user or ppar.by or '')
local mod = trim(ppar.m or ppar.mod or '')
local lnk = trim(ppar.l or ppar.lnk or ppar.link or '')
local con = trim(ppar.conj or ppar.con or ppar.c or '')
con = sub(con, 1, 1)
if ppar.z then
if con == '' then con = 'n' end
if opt == '' then opt = 'Z' end
if pre == '' then pre = ' ' end
end
local vary = trim(ppar.vary or ppar.v or '') -- Variable pattern
local var1 = trim(ppar.var1 or ppar.v1 or '') -- Variable filling space before
local var2 = trim(ppar.var2 or ppar.v2 or '') -- Variable filling space after
local replacement = {
(var1 == 'space') and ' ' or var1,
'', -- [2] = (sp == '+' and ' ' or '')
'', -- [3] = vv
(var2 == 'space') and ' ' or var2,
}
local stab = {}
local xtab = {}
local ntab = {}
local dtab = {}
local otab = {}
local qtab = {}
local rtab = {}
local vtab = {}
local ktab = {}
local itab = {}
local ptab = {}
local btab = {}
local utab = {}
local ltab = {}
local ttab = {}
local loop = {}
local mnum = 0 -- maximum index reached in the previous tables of indexed parameters
for i, v in ipairs(ppar) do
local z = tostring(i)
stab[i] = trim(ppar['s' .. z] or '~')
xtab[i] = trim(ppar['x' .. z] or '-')
ntab[i] = trim(ppar['n' .. z] or ppar['l' .. z] or '-')
dtab[i] = trim(ppar['d' .. z] or '-')
otab[i] = trim(ppar['o' .. z] or '-')
qtab[i] = trim(ppar['q' .. z] or '-')
rtab[i] = trim(ppar['r' .. z] or '-')
vtab[i] = trim(ppar['v' .. z] or '-')
ktab[i] = trim(ppar['k' .. z] or '-')
itab[i] = trim(ppar['i' .. z] or '-')
ptab[i] = trim(ppar['p' .. z] or '-')
btab[i] = trim(ppar['b' .. z] or ppar['by' .. z] or '-')
utab[i] = trim(ppar['m' .. z] or '-')
ltab[i] = trim(ppar['l' .. z] or '-')
ttab[i] = trim(ppar['t' .. z] or '-')
mnum = i
end
local args = { -- Parameters for expanding 'Template:F'.
'', -- [1] = vv
'', -- [2] = nm
'', -- [3] = ds
'', -- [4] = op
'', -- [5] = p4
'', -- [6] = p5
'', -- [7] = p6
l = '', -- ['l'] = pk
lang = '', -- ['lang'] = pi
p = '', -- ['p'] = pr
by = '', -- ['by'] = by
u = '', -- ['u'] = um
link = '', -- ['link'] = (ln ~= '' and ln or nil)
}
local results = {}
local lcnt = 0 -- Loop count.
local i = 1 -- While index.
while ppar[i] ~= nil do -- for i, v in ipairs(ppar) do
local j = 1
local vv = trim(ppar[i])
if vary ~= '' and sub(vv, 1, 1) == '#' and sub(vv, -1) == '#' then -- Loop processing?
loop = split(vv, '#', true--[[plain]])
local llow = tonumber(loop[2]) or -1
local lupp = tonumber(loop[3]) or -1
if llow >= 0 and lupp >= llow then
llow = llow + lcnt
vv = tostring(llow)
lcnt = lcnt + 1
if llow < lupp then
j = 0 -- Iterate this index.
else
lcnt = 0 -- Loop ended.
end
end
end -- End loop processing.
if sub(vv, 1, 1) == '"' and sub(vv, -1) == '"' then -- Text processing?
insert(results, expand1('=', sub(vv, 2, -2)))
elseif vary == '' or i > 1 then
local sp = stab[i] ~= '~' and stab[i] or spa
local px = xtab[i] ~= '-' and xtab[i] or pfx
local nm = ntab[i] ~= '-' and ntab[i] or nam
local ds = dtab[i] ~= '-' and dtab[i] or dis
local op = otab[i] ~= '-' and otab[i] or opt
local p4 = qtab[i] ~= '-' and qtab[i] or pr4
local p5 = rtab[i] ~= '-' and rtab[i] or pr5
local p6 = vtab[i] ~= '-' and vtab[i] or pr6
local pk = ktab[i] ~= '-' and ktab[i] or wik
local pi = itab[i] ~= '-' and itab[i] or int
local pr = ptab[i] ~= '-' and ptab[i] or pre
local by = btab[i] ~= '-' and btab[i] or by0
local um = utab[i] ~= '-' and utab[i] or mod
local ln = ltab[i] ~= '-' and ltab[i] or lnk
local tx = ttab[i] ~= '-' and ttab[i] or ''
if vary ~= '' then
replacement[2] = (sp == '+' and ' ' or '')
replacement[3] = vv
vv = gsub(ppar[1], vary, concat(replacement))
else
vv = samefile(vv, i, ppar[1])
end
if vv ~= '' and vv ~= '×' then
if dir == 'hori' and con ~= 'n' then -- Horizontal list.
px = (i == 1) and ' ' or commaAnd(i == mnum)
else -- elseif dir == 'vert' then -- Vertical list.
px = (i == 1) and ' ' or px
end
if px ~= '' then insert(results, px) end
if by == '' then -- Check for abbreviating '/'.
local sby = find(vv, '/')
if sby ~= nil then
by = sub(vv, sby + 1)
vv = sub(vv, 1, sby - 1)
end
end
args[1] = vv
args[2] = nm
args[3] = ds
args[4] = op
args[5] = p4
args[6] = p5
args[7] = p6
args.l = pk
args.lang = pi
args.p = pr
args.by = by
args.u = um
args.link = (ln ~= '' and ln or nil)
insert(results, expand('F', args))
if tx ~= '' then insert(results, expand1('=', tx)) end
end -- if vary
end -- if vv
i = i + j -- next in do loop
end -- while
return concat(results)
end -- function filelist
-- For Template:Attribs (param pairs; but also for single params).
function p.attribs(frame)
local ppar = frameCurrent:getParent().args
local un = trim(ppar.by or ppar.U or ppar.u or '')
local md = trim(ppar.m or ppar.mod or '')
local tt = trim(ppar.t or ppar.to or '') -- "to" topic.
local f = trim(ppar.f or ppar.from or tt) -- "from".
local p = trim(ppar.p or ppar.part or '')
local args = { -- Parameters for expandnig 'Template:Attrib'.
'', -- [1] = vx
'', -- [2] = ux
'-',
trim(ppar.type or 'SVG'), -- Needs check.
'',
ux, -- [6] = ux
tt,
'', -- [8] = (ftab[hnum] ~= '.') and ftab[hnum] or f
'', -- [9] = (ptab[hnum] ~= '.') and ptab[hnum] or p
m = '', -- ['m'] = (mtab[hnum] ~= '.') and mtab[hnum] or md
s = trim(ppar.s or ppar.style or 's'), -- default
}
local ftab = {} -- "from" topic.
local ptab = {} -- Parts.
local mtab = {} -- Modification.
local rtab = {} -- Working table.
local fnum = 0
local rnum = 0
local hnum = 0
for i, v in ipairs(ppar) do
fnum = fnum + 1 -- Input parm number.
if fnum % 2 == 0 then -- Even: should be a username.
local enam = trim(v)
-- A rough check: is_extension?
local snam = lower(sub(enam, -4))
if snam == '.png'
or snam == '.gif'
or snam == '.jpg'
or snam == '.svg'
-- Exotics:
or snam == '.mid'
or snam == '.ogg'
or snam == '.tif'
or snam == '.wav'
or snam == '.xcf'
or snam == '.pdf' -- Note: no "short alias" in samefile()
-- Note: Longer extensions still not supported (need check):
-- snam == '.djvu'
-- snam == '.webp'
then -- No - it's the next filename.
insert(rtab, '') -- Empty username inbetween.
rnum = rnum + 1
fnum = fnum + 1 -- Make it odd.
end
end
if fnum % 2 == 1 then -- Odd (now): is a filename.
hnum = (fnum + 1) / 2
local z = tostring(hnum)
ftab[hnum] = ppar['f' .. z] or '.'
ptab[hnum] = ppar['p' .. z] or '.'
mtab[hnum] = ppar['m' .. z] or '.'
end
-- table.maxnum(ppar) does not work; therefore the "rtab" workaround.
insert(rtab, ppar[i]) -- = enam
rnum = rnum + 1
end
if rnum % 2 == 1 then -- Plus one item when odd number.
insert(rtab, '') -- Empty user name, to get a pair.
end
local results = {} -- Output.
local vx = ''
for i, v in ipairs(rtab) do
if i % 2 == 1 then -- odd: 1st value in pair is a filename
vx = trim(v) -- this 1st 'v' should not be empty
else -- even: 2nd value in pair is a user name (possibly empty)
local ux = trim(v) -- this 2nd 'v' can be empty
if ux == '' then ux = un end -- Does not work otherwise?
hnum = i / 2
args[1] = vx -- a filename
args[2] = ux -- a username
args[6] = ux -- a username
args[8] = (ftab[hnum] ~= '.') and ftab[hnum] or f
args[9] = (ptab[hnum] ~= '.') and ptab[hnum] or p
args.m = (mtab[hnum] ~= '.') and mtab[hnum] or md
insert(results, expand('Attrib', args))
vx = '' -- reset the filename for the next pairs
end
end
return concat(results)
end -- function attribs
-- Get the user id: the (last) parameter which is prefixed by '/'.
function p.byuser(frame)
local ppar = frameCurrent:getParent().args
local user = ''
for _, value in pairs(ppar) do
if value ~= nil and user == '' and sub(value, 1, 1) == '/' then
user = sub(value, 2) -- remove the '/'
end
-- TODO: Test whether userID exists?
end
return user
end -- function byuser, for template:F
-- for Template:userlist (horizontal - but vertical when dir=I/O/U/D/V).
function p.userlist(frame)
local gpar = frame.args -- global parms (par/P, dir/V)
local ppar = frameCurrent:getParent().args
local mod = ppar.m or ppar.mod or ppar.user or ppar.u or ppar.page or ppar.p or ''
local hil = ppar.h or ppar.hilite or ''
local nam = ppar.n or ppar.name or ''
local wik = ppar.w or ppar.wiki or ppar.lang or ''
local opt = ppar.o or ppar.opt or ppar.option or ''
local lnk = ppar.l or ppar.link or ''
--@ local pr4 = ppar.q or ppar.qpar or ppar.par4 or ''
--@ local pr5 = ppar.r or ppar.rpar or ppar.par5 or ''
local cas = ppar.c or ppar.case or ''
local trl = ppar.t or ppar.i18n or ppar.translate or ''
-- If ever template expansion of prim, prfx, sufx, or pend is needed,
-- this must be done once here (out of the loop below).
local prim, prfx, sufx, pend = '', '', '', ''
if gpar.dir == 'O' then -- Ordered/numbered vertical list.
prim, prfx, sufx, pend = '<ol>', '<li>', '</li>', '</ol>'
elseif gpar.dir == 'U' then -- Unordered/bulleted vertical list.
prim, prfx, sufx, pend = '<ul>', '<li>', '</li>', '</ul>'
elseif gpar.dir == 'D' then -- Simple definition/indented vertical list.
prim, prfx, sufx, pend = '<dl>', '<dt>', '</dt>', '</dl>'
elseif gpar.dir == 'V' then -- Custom vertical list of users.
prim, prfx, sufx, pend = '<dl style="margin:.3em 0">', '<dt><span style="color:#69F">✦ </span>', '</dt>', '</dl>'
else --'I': Inline horizontal list.
-- prim, prfx, sufx, pend: not used; replaced by separators, expanded by commaAnd()
end
local mtab = {} -- u_mod c/t/w/wt (aka utab, mtab, ptab)
local htab = {} -- hilite
local ntab = {} -- 2 display name
local wtab = {} -- 3 interwiki
local otab = {} -- 4 +/- option
local ltab = {} -- link option
--@ local qtab = {}
--@ local rtab = {}
local ctab = {} -- case
local ttab = {} -- translate i18n
local xtab = {} -- postfix text
local x = 0 -- running index, can be ~= i
local y = 0 -- running index, can be ~= i
local plus = '' -- opt
local xmax = 0
for _, v in ipairs(ppar) do
v = mw.text.trim ( v )
if v == '+' then
plus = '+'
elseif v == '-' then
if plus == '' then
plus = '-'
end
else
y = y + 1
if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 0 --[[1=user, 0=name]] then
x = x
else
x = x + 1
local z = tostring(x)
mtab[x] = ppar['m' .. z] or ppar['u' .. z] or ppar['p' .. z] or '-'
htab[x] = ppar['h' .. z] or '-'
ntab[x] = ppar['n' .. z] or '-'
wtab[x] = ppar['w' .. z] or '-'
otab[x] = ppar['o' .. z] or '/'
ltab[x] = ppar['l' .. z] or '-'
--@ qtab[x] = ppar['q' .. z] or '-'
--@ rtab[x] = ppar['r' .. z] or '-'
ctab[x] = ppar['c' .. z] or '-'
ttab[x] = ppar['t' .. z] or '-'
xtab[x] = ppar['x' .. z] or '-'
end
end
xmax = x
end -- for
if plus ~= '' and opt == '' then
opt = plus --[[discrepancy? opt has priority]]
end
local odd = y % 2 --[[1 when last one not paired]]
local p2s = {
'~',
'', -- [2] = (wk ~= '') and wk or 'commons'
'wiki',
}
local hls = {
'<',
'', -- [2] = hl
'>',
'', -- [4] = (nm ~= '') and nm or vv
'</',
'', -- [6] = hl
'>',
}
local args = { -- Parameters for expanding 'Tempplate:U/main'.
'', -- [1] = vv,
'', -- [2] = nm,
'', -- [3] = wk,
'', -- [4] = op,
link = '', -- ['link'] = lk
par1 = '', -- ['par1'] = p1
par2 = '', -- ['par2'] = p2
--@ par4 = '', -- ['par4'] = p4
--@ par5 = '', -- ['par5'] = p5
case = '', -- ['case'] = cs
i18n = '', -- ['i18n'] = tr
}
local results = {}
local out = 0
local vv = ''
x = 0
y = 0
for _, v in ipairs(ppar) do
v = trim(v)
if v ~= '+' and v ~= '-' then
y = y + 1
if gpar.par == 'P' --[[pairs of (user, name)]] and y % 2 == 1 --[[1=user, 0=name]] and odd == 0 then -- last one paired
vv = v -- userid
else
x = x + 1
local md = (mtab[x] ~= '-') and mtab[x] or mod
local hl = (htab[x] ~= '-') and htab[x] or hil
local nm = (ntab[x] ~= '-') and ntab[x] or nam
local wk = (wtab[x] ~= '-') and wtab[x] or wik
local op = (otab[x] ~= '/') and otab[x] or opt
local lk = (ltab[x] ~= '-') and ltab[x] or lnk
--@ local p4 = (qtab[x] ~= '-') and qtab[x] or pr4
--@ local p5 = (rtab[x] ~= '-') and rtab[x] or pr5
local cs = (ctab[x] ~= '-') and ctab[x] or cas
local tr = (ttab[x] ~= '-') and ttab[x] or trl
local tx = (xtab[x] ~= '-') and xtab[x] or ''
if gpar.par == 'P' then -- y%2 = 0 (name)
if odd == 1 then --[[no: last user:]]
vv = v --[[user]]
else
nm = v --[[name]]
end
else
vv = v
end
if hl ~= '' then
hls[2] = hl
hls[4] = (nm ~= '') and nm or vv
hls[6] = hl
nm = concat(hls)
end
if md == 'n' or md == 'no' then
lk = md -- no link
end
local p1 = '' -- prefix
if md == 't' or md == 'wt' or md == 'tw' then
p1 = ' talk'
end
local p2 = '' -- postfix
if md == 'w' or md == 'wt' or md == 'tw' then
p2s[2] = (wk ~= '') and wk or 'commons'
p2 = concat(p2s)
end
if vv ~= '' and vv ~= '×' then
if md == 'c' then vv = 'Special:Contributions/' .. vv end
if gpar.dir == 'I' or gpar.dir == 'O' or gpar.dir == 'U' or gpar.dir == 'V' then
-- Vertical list (uses: prim, prfx, sufx, pend).
if out == 0 then
insert(results, prim) -- expansion of prim not needed
end
insert(results, prfx) -- expansion of prefx not needed
out = out + 1
else -- Horizontal inline list.
if x ~= 1 then
insert(results, commaAnd(x == xmax))
end
end
if sub(vv, 1, 2) == '{{' or sub(vv, 1, 2) == '[[' then
insert(results, expand1('=', vv))
else
args[1] = vv
args[2] = nm
args[3] = wk
args[4] = op
args.link = lk
args.par1 = p1
args.par2 = p2
--@ args.par4 = p4
--@ args.par5 = p5
args.case = cs
args.i18n = tr
insert(results, expand('U/main', args))
end
if tx ~= '' then
insert(results, expand1('=', tx))
end
if sufx ~= '' then
insert(results, sufx) -- expansion of sufx not needed
end
end
end
end
end -- for
if out > 0 and pend ~= '' then
insert(results, pend) -- expansion of pend not needed
end
return concat(results)
end -- function userlist
-- Table for templates: Legend; Legend-line, Legend2, Legend-small... (param pairs)
function p.legendt (frame)
local ppar = frameCurrent:getParent().args
local ttip = trim(ppar.tt or ppar.ttip or ppar.tooltipping or '')
local frmp = frame.args
local template = trim(frmp[1] or 'Legend')
local args = { -- Parameters for expanding the given template.
'', -- [1] = v1
'', -- [2] = v
lang = trim(ppar.lang or ''),
p = trim(frmp[2] or ''),
size = trim(frmp[3] or ''),
css = '', -- ['css'] = '" title="' .. upper(v1)
}
local results = {}
local v1 = ''
for _, v in ipairs(ppar) do
if v1 == '' then
v1 = v
if ttip == 'yes' and v1 ~= '' then -- Tooltip the colors.
-- HACK: terminates the style="..." attribute and opens another attribute
args.css = '" title="' .. Ucfirst(v1)
end
else
args[1] = v1
args[2] = v
insert(results, expand(template, args))
v1 = ''
args.css = ''
end
end
if v1 ~= '' then -- Last item: problem when not a last pair
insert(results, expand(template, args))
end
return concat(results)
end -- function legendt
-- For Template:ColorString (Igen/cbox, param pairs).
local argsColorbox = { -- Parameters for expanding 'Template:Igen/cbox'.
'', -- [1] -- (striped; border)
'', -- [2] -- color value
'', -- [3] -- either code-2 ( BCDLMST-), or color value
0, -- [4] -- count of spaces
'', -- [5] -- ?
'', -- [6] -- 'char' or 'file'
'', -- ['lang'] = ppar.lang or content language,
}
function p.colorbox(frame)
local ppar = frameCurrent:getParent().args
argsColorbox.lang = ppar.lang or mw.getContentLanguage():getCode()
local results = {}
local v1 = ''
for i, v in ipairs(ppar) do
if i <= 2 then
argsColorbox[3] = v -- either code-2 ( BCDLMST-), or color value
elseif v1 == '' then
v1 = v -- (striped; border)
local ct = 0 -- count of spaces
local bp = 0 -- position of first space
for c = 1, len(v1) do
if sub(v1, c, c) == ' ' then
ct = ct + 1 -- space count
if bp == 0 then bp = c end
end
end
local bc = ''
if ct >= 3 then -- 3 = border, 4 = line
bc = sub(v1, bp + 1)
v1 = sub(v1, 1, bp - 1)
end
local cf = ''
if ct == 1 then -- 'char' or 'file'
bc = sub(v1, bp + 1)
v1 = sub(v1, 1, bp - 1)
cf = (sub(bc, -4, -4 ) == '.') and 'file' or 'char'
end
argsColorbox[4] = ct -- count of spaces
argsColorbox[5] = bc
argsColorbox[6] = cf -- 'char' or 'file'
else
argsColorbox[1] = v1
argsColorbox[2] = v
insert(results, expand('Igen/cbox', argsColorbox))
v1 = ''
end
end
if v1 ~= '' then
argsColorbox[1] = v1
argsColorbox[2] = ''
insert(results, expand('Igen/cbox', argsColorbox)) -- last item
end
return concat(results)
end -- function colorbox
--------------------------------------------------------------------------------
-- Returns a parameter list: (replacement of «#» or «~» by «=»: not necessary).
function p.plist(frame)
local ppar = frameCurrent:getParent().args
return concat(ppar, '|') -- return gsub(concat(ppar, '|'), '#', '='), not necessary
end -- function plist
-- Repeats a text string.
function p.loop (frame)
local ppar = frameCurrent:getParent().args
return string.rep(ppar[2] or ' ', tonumber(ppar[1] or 1))
end -- function loop
-- Increment a hex number by a ±decimal value
function p.incrhx(frame)
local gpar = frame.args -- global parms
return format('%X', tonumber(gpar[1], 16) + gpar[2])
end -- function incrhx
-- Display inline a range of characters with their Unicode code point in tool tip, such as emojis for Template:Emoji, with optional
-- line breaks to limit lines to at most 16 characters (breaks after every code point which is the last one in a UCS column):
-- {{#invoke:Iteration|parlst |temp=Emoji |1=(nb of characters) |2=(4- to 6-digits uppercase hexadecimal code point)
-- |3=(border or 0) |4=(padding or 0) |5=(font size in px or -)
-- |6=(styles or -) |(nocat=1)
-- }}
local argsEmodis = {
-- WARNING: partial HTML (see the template using this function)
-- This function can only be used after an UNTERMINATED opening HTML tag,
-- whose LAST attribute MUST BE ' title=' not followed by quotes.
-- This returned value closes the opening HTML tag of the template
-- The calling template will then append itself the closing HTML tag.
'"U+',
'', -- [2] = format('%04X', code)
'">',
'', -- [4] = char(code)
nil -- [5] = optional line break
}
function p.emodis(frame)
local gpar = frame.args -- global parms
local code = tonumber(gpar[1], 16) + gpar[2]
argsEmodis[2] = format('%04X', code)
argsEmodis[4] = char(code)
argsEmodis[5] = gpar[3] == '16' and (code % 16 == 15 and '<br />') or nil
return concat(argsEmodis)
end -- function emodis
-- For Template:Emoji table: {{#invoke:Iteration|emotab|prefix=1F250|par1=... | ... }}
local argsEmotab = { -- Parameters for expanding 'Template:F'.
'', -- [1] = file
'', -- [2] = 'Z'
'', -- [3] = '49'
'', -- [4] = 'b'
'', -- [5] = 'l'
'', -- [6] = ''
link = '*',
}
function p.emotab(frame)
local gpar = frame.args -- global parms
local codp
codp = trim(gpar.par1 or '') --[['Z' ]] argsEmotab[2] = (codp ~= '') and codp or nil
codp = trim(gpar.par2 or '') --[['49']] argsEmotab[3] = (codp ~= '') and codp or nil
codp = trim(gpar.par3 or '') --[['b' ]] argsEmotab[4] = (codp ~= '') and codp or nil
codp = trim(gpar.par4 or '') --[['l' ]] argsEmotab[5] = (codp ~= '') and codp or nil
codp = trim(gpar.par5 or '') --[['' ]] argsEmotab[6] = (codp ~= '') and codp or nil
codp = trim(gpar.codp or '')
local parts = {
'', -- [1] = v
'', -- [2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp)
'.svg',
}
local results = {}
for _, v in ipairs(gpar) do
local file = sub(v, 1, 6)
parts[1] = v
parts[2] = ((file == 'Emojio' or file == 'Fxemoj' or file == 'OpenMo') and upper or lower)(codp)
file = concat(parts)
if titleNew(file, 6).exists then
argsEmotab[1] = file
insert(results, expand('F', argsEmotab))
end
end
return concat(results)
end -- function emotab
-- For template: Navcat (via Navcattab).
function p.navcat(frame)
local gpar = frame.args -- global parms
local cats = { -- Categories to generate.
trim(gpar.c1 or ''),
'', -- [2] = ctxt
trim(gpar.c2 or ''),
}
local args = { -- Parameters for expanding 'Template:Navcat'.
'', -- [1] = (ccod = vtab[2] --[[opt.]])
'', -- [2] = concat(cats)
'', -- [3] = (dtxt = Ucfirst(ctxt))
'', -- [4] = (cnam = vtab[3] or ccod or ctxt)
span = trim(gpar.span or ''),
}
local ppar = frameCurrent:getParent().args
local results = {}
for _, v in ipairs(ppar) do
v = trim(v)
if v == '' or v == 'nl' then
insert(results, '<br /> ')
else
local vtab = split(v, '/')
local ctxt = vtab[1] or ' ' --[[requ.]]
local ccod = vtab[2] --[[opt.]]
cats[2] = ctxt
args[1] = ccod
args[2] = concat(cats)
args[3] = Ucfirst(ctxt)
args[4] = vtab[3] or ccod or ctxt
insert(results, expand('Navcat', args))
end
end
return concat(results)
end -- function navcat
-- For Template:Tle.
function p.tleparm(frame)
local ppar = frameCurrent:getParent().args
local parnumber = trim(ppar.number or '')
local parkbd = trim(ppar.kbd or '')
if parkbd ~= '' then
parkbd = {
'<kbd>',
'', -- [2] = par1
'</kbd>',
}
else
parkbd = nil
end
local args = { -- Parameters for expanding 'Template:Tle/parm'.
'', -- [1] = par1
'', -- [2] = v
trim(ppar.f or ''), -- form feed
trim(ppar.style or ''), -- style for parameter value
trim(ppar.style2 or ''), -- style for parameter name
}
local results = {}
for i, v in ipairs(ppar) do
local z = tostring(i)
local par1 = trim(ppar['p' .. z] or '')
if par1 ~= '' and parkbd then
parkbd[2] = par1
par1 = concat(parkbd)
end
if par1 == '' and parnumber ~= '' then
par1 = z
end
if par1 ~= '' then -- keep parameter value as is if positional (and not parnumberd explicitly)
v = trim(v)
if v == '' then v = ' ' --[[Note: ' ' would change the semantics.]] end
end
args[1] = par1
args[2] = v
insert(results, expand('Tle/parm', args))
end
return concat(results)
end -- function tleparm
-- for Template:Variate.
function p.variation(frame)
local ppar = frameCurrent:getParent().args
local sept = ppar.sept or '|' -- separator before
local sample = trim(ppar[1] or '') -- sample string
local pattern = ppar.pttn or '?' -- pattern
local var1 = ppar.var1 or '' -- filling space before
local var2 = ppar.var2 or '' -- filling space after
local sep2 = ppar.sep2 or '' -- separator after
local parts = { -- Replacement parts for gsub().
(var1 == 'space') and ' ' or var1,
'', -- [2] = trim(v)
(var2 == 'space') and ' ' or var2,
}
local results = {}
for i, v in ipairs(ppar) do
if i > 1 then
insert(results, sept)
parts[2] = trim(v)
insert(results, gsub(sample, pattern, concat(parts)))
insert(results, sep2)
end
end
return concat(results)
end
return p
l0to3835hvw8ivav31inqbtlaogtgnw
Tempilet:C/display
10
1340
10721
2024-11-20T18:04:49Z
commons>Verdy p
0
10721
wikitext
text/x-wiki
{{#switch: +
|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}} = {{#switch: {{{c|}}}
|i|n = {{i18n/namespace|c|link={{{v|}}}|lang={{{l|}}}}}|l=category|Category}}:
}}{{#switch: {{{2|}}}
||+|-|X|x|B|b = {{{1|}}}
|#default = {{{2|}}}
}}<noinclude>{{Documentation
|1 = Template:C/doc
|content = Subtemplate (used by {{Tlx|C|category name|...}}) to ''display'' a category name, with or without preceding by the namespace (as a part of the link). Needs (possibly empty) parameters:
* 1 = (default label to display)
* 2 = (alternate label to display)
* 3
* 4
The following parameters are used only if "{1}{2}{3}{4}"="+" to prepend a prefix before the label:
* c = i or n
* l = lang
* v = link
}}</noinclude>
dn3e5n9ijrqhgoksp2xicjwllhigghq
10722
10721
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:C/display]]
10721
wikitext
text/x-wiki
{{#switch: +
|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}} = {{#switch: {{{c|}}}
|i|n = {{i18n/namespace|c|link={{{v|}}}|lang={{{l|}}}}}|l=category|Category}}:
}}{{#switch: {{{2|}}}
||+|-|X|x|B|b = {{{1|}}}
|#default = {{{2|}}}
}}<noinclude>{{Documentation
|1 = Template:C/doc
|content = Subtemplate (used by {{Tlx|C|category name|...}}) to ''display'' a category name, with or without preceding by the namespace (as a part of the link). Needs (possibly empty) parameters:
* 1 = (default label to display)
* 2 = (alternate label to display)
* 3
* 4
The following parameters are used only if "{1}{2}{3}{4}"="+" to prepend a prefix before the label:
* c = i or n
* l = lang
* v = link
}}</noinclude>
dn3e5n9ijrqhgoksp2xicjwllhigghq
Module:Transclude
828
1341
10723
2023-02-22T11:10:12Z
commons>ExE Boss
0
Update `@require` doc comment
10723
Scribunto
text/plain
-- <nowiki>
--------------------------------------------------------------------------------
-- Module that allows transcluding a template with all parent arguments.
-- Useful in `/i18n` template subpages that delegate to a `/layout` subpage.
--
-- @module transclude
-- @author [[User:ExE Boss]]
--------------------------------------------------------------------------------
require('strict')
local checkType = require('libraryUtil').checkType;
local p = {}
local INVALID_TITLES = {
["."] = true,
[".."] = true,
};
local function _ne(value)
return value and value ~= ''
end
--------------------------------------------------------------------------------
-- Helper function that merges argument tables.
--
-- @function mergeArgs
-- @param {table} inArgs
-- @param {table} outArgs
--------------------------------------------------------------------------------
local function mergeArgs(inArgs, outArgs, opts)
checkType("mergeArgs", 1, inArgs, "table");
checkType("mergeArgs", 2, outArgs, "table");
checkType("mergeArgs", 3, opts, "table", true);
opts = opts or {}
local ignoredParams = opts.ignoredParams;
local ignoredPrefix = opts.ignoredPrefix;
for name, value in pairs(inArgs) do
if (type(name) == "string") then
if not (
(ignoredParams and ignoredParams[name] == true)
or (ignoredPrefix and
ignoredPrefix == name:sub(1, ignoredPrefix:len()))
) then
outArgs[name] = value;
end
else
outArgs[name] = value;
end
end
return outArgs;
end
-- Exported for testing:
p['#mergeArgs'] = mergeArgs;
local mt = {};
function mt.__index(_, name)
if (
type(name) ~= "string"
or INVALID_TITLES[name]
or mw.ustring.find(name, "#", nil, true)
) then
return nil;
end
local title = mw.title.new(name, "Template")
if (not title) then
return nil;
end
return function (frame)
checkType('transclude["' .. name .. '"]', 1, frame, "table");
local parentFrame = frame:getParent();
local ignoredParams, ignoredPrefix;
if _ne(frame.args["#ignoredParams"]) then
ignoredParams = {};
for m in mw.text.gsplit(frame.args["#ignoredParams"], '|', true) do
ignoredParams[mw.text.trim(m)] = true;
end
end
if _ne(frame.args['#ignoredPrefix']) then
ignoredPrefix = frame.args['#ignoredPrefix'];
end
local args = {};
if (parentFrame) then
mergeArgs(parentFrame.args, args, {
ignoredParams = ignoredParams,
ignoredPrefix = ignoredPrefix,
});
end
mergeArgs(frame.args, args, {
ignoredPrefix = "#",
});
if (not title.exists) then
return "[[:" .. title.fullText .. "]]";
end
return frame:expandTemplate{
title = title,
args = args,
};
end
end
return setmetatable(p, mt);
hysh2nsdh3zjyxf0x9i4gz5mnkh4mhj
10724
10723
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Transclude]]
10723
Scribunto
text/plain
-- <nowiki>
--------------------------------------------------------------------------------
-- Module that allows transcluding a template with all parent arguments.
-- Useful in `/i18n` template subpages that delegate to a `/layout` subpage.
--
-- @module transclude
-- @author [[User:ExE Boss]]
--------------------------------------------------------------------------------
require('strict')
local checkType = require('libraryUtil').checkType;
local p = {}
local INVALID_TITLES = {
["."] = true,
[".."] = true,
};
local function _ne(value)
return value and value ~= ''
end
--------------------------------------------------------------------------------
-- Helper function that merges argument tables.
--
-- @function mergeArgs
-- @param {table} inArgs
-- @param {table} outArgs
--------------------------------------------------------------------------------
local function mergeArgs(inArgs, outArgs, opts)
checkType("mergeArgs", 1, inArgs, "table");
checkType("mergeArgs", 2, outArgs, "table");
checkType("mergeArgs", 3, opts, "table", true);
opts = opts or {}
local ignoredParams = opts.ignoredParams;
local ignoredPrefix = opts.ignoredPrefix;
for name, value in pairs(inArgs) do
if (type(name) == "string") then
if not (
(ignoredParams and ignoredParams[name] == true)
or (ignoredPrefix and
ignoredPrefix == name:sub(1, ignoredPrefix:len()))
) then
outArgs[name] = value;
end
else
outArgs[name] = value;
end
end
return outArgs;
end
-- Exported for testing:
p['#mergeArgs'] = mergeArgs;
local mt = {};
function mt.__index(_, name)
if (
type(name) ~= "string"
or INVALID_TITLES[name]
or mw.ustring.find(name, "#", nil, true)
) then
return nil;
end
local title = mw.title.new(name, "Template")
if (not title) then
return nil;
end
return function (frame)
checkType('transclude["' .. name .. '"]', 1, frame, "table");
local parentFrame = frame:getParent();
local ignoredParams, ignoredPrefix;
if _ne(frame.args["#ignoredParams"]) then
ignoredParams = {};
for m in mw.text.gsplit(frame.args["#ignoredParams"], '|', true) do
ignoredParams[mw.text.trim(m)] = true;
end
end
if _ne(frame.args['#ignoredPrefix']) then
ignoredPrefix = frame.args['#ignoredPrefix'];
end
local args = {};
if (parentFrame) then
mergeArgs(parentFrame.args, args, {
ignoredParams = ignoredParams,
ignoredPrefix = ignoredPrefix,
});
end
mergeArgs(frame.args, args, {
ignoredPrefix = "#",
});
if (not title.exists) then
return "[[:" .. title.fullText .. "]]";
end
return frame:expandTemplate{
title = title,
args = args,
};
end
end
return setmetatable(p, mt);
hysh2nsdh3zjyxf0x9i4gz5mnkh4mhj
Tempilet:Transclude
10
1342
10725
2019-07-16T10:41:02Z
commons>4nn1l2
0
Changed protection level for "[[Template:Transclude]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite))
10725
wikitext
text/x-wiki
{{#switch: {{NAMESPACE: {{{1}}} }}
|#default = {{FULLPAGENAME: {{{1}}} }} <!-- eg "User:Foo" -->
|{{ns:0}} =
{{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }}
| Template:{{{1}}} <!-- no leading colon, eg "Foo" -->
| {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article -->
}}
}}<noinclude>
{{documentation}}
</noinclude>
ob9m2b913drxlie5tgekieudupfrl9n
10726
10725
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Transclude]]
10725
wikitext
text/x-wiki
{{#switch: {{NAMESPACE: {{{1}}} }}
|#default = {{FULLPAGENAME: {{{1}}} }} <!-- eg "User:Foo" -->
|{{ns:0}} =
{{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }}
| Template:{{{1}}} <!-- no leading colon, eg "Foo" -->
| {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article -->
}}
}}<noinclude>
{{documentation}}
</noinclude>
ob9m2b913drxlie5tgekieudupfrl9n
Tempilet:I18n/COA
10
1343
10729
2026-05-28T10:24:15Z
commons>Kontributor 2K
0
nc
10729
wikitext
text/x-wiki
{{#switch: {{{1|}}}
|COA_of = {{LangSwitch
|ar = {{WA|شعار النبالة}}
|ca={{WC|Escut d'armes}}
|cs={{Wc|Znak (heraldika)|Znak}}
|da={{Wda|Våben (heraldisk)|Våben}}
|de={{Wd|Wappen}}
|en={{W|Coat of arms|Coat of arms}}
|eo={{WE|Blazono}}
|es={{We|Escudo (heráldica)|Escudo de armas}}
|et={{Wet|Vapp}}
|eu={{W|Armarri||eu}}a
|fi={{Wfi|Vaakuna}}
|fr={{Wf|Blason (héraldique)|Blason}}
|gl=Escudo
|he=סמל
|hsb=wopon
|hu={{Wh|Címer}}
|it={{Wi|Stemma}}
|is={{W|Skjaldarmerki||is}}
|lv={{Wlv|Ģerbonis}}
|mk={{Wm|Грб}}
|ml={{W|Coat of arms|ഔദ്യോഗിക മുദ്ര}}
|nds={{W|Wapen (Heraldik)|Wapen|nds}}
|nl={{Wn|Wapen (heraldiek)|Wapen}}
|nn={{W|Heraldiske våpen|Våpen|nn}}
|no={{W|Våpen (heraldikk)|Våpen|no}}
|pl={{WP|Herb}}
|pt={{Wp|Brasão}} de armas
|ru={{Wr|Герб}}
|sk={{Wsk|Erb}}
|sl={{Wsl|Grb}}
|sv={{Wsv|Heraldiskt vapen|Vapen}}
|tr={{Wtr|Arma}}
|zh-hans={{Wz|紋章}}
|zh-hant={{Wz|紋章}}
|lang={{{lang|}}}
|default={{label|Q14659}}
}}
|blazon = {{LangSwitch
|ar = {{WA|وصف شعار النبالة}}
|ca={{WC|Blasonament}}
|cs={{Wc|Blason}}
|da={{Wda|Blasonering}}
|de={{Wd|Blasonierung}}
|en={{W|Blazon}}
|eo=Blazonado
|es={{We|Blasonamiento}}
|et=heraldiline kirjeldus
|eu=Armarriaren antolaketa
|fi={{Wfi|Heraldinen selitys|Vaakunaselitys}}
|fr={{Wf|Blasonnement}}
|gl=Blasonamento
|he={{Whe|בלאזון}}
|hu={{Wh|Címerleírás}}
|it={{Wi|Blasonatura}}
|lv=Blazonēšana
|mk={{Wm|Блазонирање|Блазон}}
|ml={{W|Blazon|ബ്ലേസൺ}}
|nds={{W|Blasonerung||nds}}
|nl={{Wn|Blazoenering}}<!--redirect-->
|nn={{W|Blasonering||no}}
|no={{W|Blasonering||no}}
|pl={{WP|Blazonowanie}}
|pt={{Wp|Brasonamento}}
|ru={{Wr|Геральдический язык|Блазонирование}}
|sk={{Wsk|Blazón}}
|sl=Blazon<!--{{Wsl|Blazon}} no page-->
|sv={{Wsv|Blasonering}}
|tr=Blazon<!--{{Wtr|Blazon}} no page-->
|zh-hans=纹章描述
|zh-hant=紋章描述
|lang={{{lang|}}}
|default={{label|Q494452}}
}}
|tincture ={{LangSwitch
|ca={{WC|Esmalt (heràldica)|Esmalt}}
|cs={{Wc|Tinktura (heraldika)|Tinktura}}
|da={{Wda|Tinktur}}
|de={{Wd|Tingierung}}
|de-ch={{Wd|Tingierung}}
|en={{W|Tincture (heraldry)|Tincture}}
|eo={{WE|Heraldikaj koloroj}}
|es={{We|Esmalte (heráldica)|Esmalte}}
|et=Värvused
|fi={{Wfi|Tinktuuri}}
|fr={{Wf|Couleur (héraldique)|Couleur}}
|gl={{Wg|Esmalte (heráldica)|Esmalte}}
|he={{Whe|טינקטורה}}
|hu={{Wh|Színek (heraldika)|Szín}}
|it={{Wi|Smalto (araldica)|Smalto}}
|ja={{W日|ティンクチャー (紋章学)|ティンクチャー}}
|kk={{W|Тинктура (геральдика)|Тинктура|kk}}
|la={{W|Tinctura heraldica|Tinctura|la}}
|lt={{Wlt|Spalvos (heraldika)|Spalvos}}
|lv=Krāsas heraldikā
|mk=Боја<!--{{Wm|Боја (хералдика)|Боја}} no page -->
|ml={{W|Tincture (heraldry)|ടിങ്ചർ}}
|nb={{W|Tincture (heraldry)|Tinkturer}}
|nds-nl={{W|nds-nl:Heraldische kleur|Heraldische kleur}}
|nl={{Wn|Heraldische kleur}}
|no={{W|Tinkturer||no}}
|pl={{WP|Tynktura (heraldyka)|Tynktura}}
|pt={{Wp|Esmalte (heráldica)|Esmalte}}
|pt-br={{Wp|Esmalte (heráldica)|Esmalte}}
|ru={{Wr|Тинктуры}}
|simple={{W|Tincture (heraldry)|Tincture}}
|sv={{Wsv|Tinktur (heraldik)|Tinktur}}
|th={{Wth|ผิวตรา (มุทราศาสตร์)|ผิวตรา}}
|tr=Tentür<!--{{Wtr|Tentür (hanedanlık armaları)|Tentür}} no page -->
|uk={{Wu|Тинктури}}
|zh-hans={{Wz|颜色 (纹章学)|纹章颜色}}
|zh-hant={{Wz|顏色 (紋章學)|紋章顏色}}
|lang={{{lang|}}}
|default={{label|Q3404720}}
}}
|reference = {{LangSwitch
|ar = مرجع الوصف
|en = Blazon reference
|lv = Atsauce
|mk = Извор на блазонот
|ml = ബ്ലേസൺ അവലംബം
|nl = Blazoeneringsbron
|pl = Referencja blazonowania
|tr = Blazon kaynağı
|zh-hans=纹章描述参考资料
|zh-hant=紋章描述參考資料
|default = {{int:wm-license-artwork-references}}
|lang={{{lang|}}}
}}
|element = {{LangSwitch
|ar = عنصر شعار النبالة
|de = Heraldische Figur
|en = Element of coat of arms
|es = Figura heráldica
|fr = Élément pour le dessin de blasons
|nl = Heraldisch element
|mk = Грбна фигура
|ml = ഔദ്യോഗികമുദ്രയുടെ ഘടകം
|it = Figura araldica
|lv = Heraldiskās figūras
|pl = [[:pl:Heraldyka#Elementy_herbu|Element herbu]]
|pt = Elemento do brasão
|ru = Гербовая фигура
|tr = Arması unsuru
|zh-hans=纹章的元素
|zh-hant=紋章的元素
|lang={{{lang|}}}
}}
|ecclesial = {{LangSwitch
|ca = escut eclesiàstic
|cs = znak církevní
|de = Kirchenwappen
|en = ecclesiastical coat of arms
|eo = blazono eklezia
|es = escudo eclesiástico
|fi = vaakuna kirkollinen
|fr = blason ecclésiastique
|hu = címer egyházi
|it = stemma ecclesiastico
|nn = våpen kirkollinen
|nl = wapen kerkelijk
|pl = herb eklezjalny
|pt = brasão eclesial
|sv = vapen kyrklig
|zh-hans=基督教会纹章
|zh-hant=基督教會紋章
|lang={{{lang|}}}
}}
|development = {{LangSwitch
|ar= منشأ الملف
|bg= развитие
|cs= vývoj
|da= udvikling
|de=‑Erstellung
|el= ανάπτυξη
|en= development
|es= desarrollo
|fi= kehittely
|fr= information
|he=התפתחות
|hu= kód
|it= sviluppo
|ja= 開発
|ko= 발전
|lv= veidošana
|mk= разработка
|ml= വികസനം
|nl= ontwikkeling
|no= utvikling
|pl= rozwój
|pt= desenvolvimento
|ro= dezvoltare
|ru=‑разработка
|sl= razvoj
|sv= utveckling
|te= పెరుగుదల
|tr= gelişimi
|uk= розвиток
|zh-hans=开发
|zh-hant=開發
|default= {{T0|I18n/COA|genesis}}
}}
|#default={{{1|}}}<!-- return the unknown argument as-it-is -->
}}<noinclude>Internationalization page used by {{t|COAInformation}} <small>(and {{t|Igen}})</small>
[[Category:Templates using LangSwitch for internationalisation]]</noinclude>
m2xitulqlmnnjrqzpzd9ikcb6i1n4wo
10730
10729
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:I18n/COA]]
10729
wikitext
text/x-wiki
{{#switch: {{{1|}}}
|COA_of = {{LangSwitch
|ar = {{WA|شعار النبالة}}
|ca={{WC|Escut d'armes}}
|cs={{Wc|Znak (heraldika)|Znak}}
|da={{Wda|Våben (heraldisk)|Våben}}
|de={{Wd|Wappen}}
|en={{W|Coat of arms|Coat of arms}}
|eo={{WE|Blazono}}
|es={{We|Escudo (heráldica)|Escudo de armas}}
|et={{Wet|Vapp}}
|eu={{W|Armarri||eu}}a
|fi={{Wfi|Vaakuna}}
|fr={{Wf|Blason (héraldique)|Blason}}
|gl=Escudo
|he=סמל
|hsb=wopon
|hu={{Wh|Címer}}
|it={{Wi|Stemma}}
|is={{W|Skjaldarmerki||is}}
|lv={{Wlv|Ģerbonis}}
|mk={{Wm|Грб}}
|ml={{W|Coat of arms|ഔദ്യോഗിക മുദ്ര}}
|nds={{W|Wapen (Heraldik)|Wapen|nds}}
|nl={{Wn|Wapen (heraldiek)|Wapen}}
|nn={{W|Heraldiske våpen|Våpen|nn}}
|no={{W|Våpen (heraldikk)|Våpen|no}}
|pl={{WP|Herb}}
|pt={{Wp|Brasão}} de armas
|ru={{Wr|Герб}}
|sk={{Wsk|Erb}}
|sl={{Wsl|Grb}}
|sv={{Wsv|Heraldiskt vapen|Vapen}}
|tr={{Wtr|Arma}}
|zh-hans={{Wz|紋章}}
|zh-hant={{Wz|紋章}}
|lang={{{lang|}}}
|default={{label|Q14659}}
}}
|blazon = {{LangSwitch
|ar = {{WA|وصف شعار النبالة}}
|ca={{WC|Blasonament}}
|cs={{Wc|Blason}}
|da={{Wda|Blasonering}}
|de={{Wd|Blasonierung}}
|en={{W|Blazon}}
|eo=Blazonado
|es={{We|Blasonamiento}}
|et=heraldiline kirjeldus
|eu=Armarriaren antolaketa
|fi={{Wfi|Heraldinen selitys|Vaakunaselitys}}
|fr={{Wf|Blasonnement}}
|gl=Blasonamento
|he={{Whe|בלאזון}}
|hu={{Wh|Címerleírás}}
|it={{Wi|Blasonatura}}
|lv=Blazonēšana
|mk={{Wm|Блазонирање|Блазон}}
|ml={{W|Blazon|ബ്ലേസൺ}}
|nds={{W|Blasonerung||nds}}
|nl={{Wn|Blazoenering}}<!--redirect-->
|nn={{W|Blasonering||no}}
|no={{W|Blasonering||no}}
|pl={{WP|Blazonowanie}}
|pt={{Wp|Brasonamento}}
|ru={{Wr|Геральдический язык|Блазонирование}}
|sk={{Wsk|Blazón}}
|sl=Blazon<!--{{Wsl|Blazon}} no page-->
|sv={{Wsv|Blasonering}}
|tr=Blazon<!--{{Wtr|Blazon}} no page-->
|zh-hans=纹章描述
|zh-hant=紋章描述
|lang={{{lang|}}}
|default={{label|Q494452}}
}}
|tincture ={{LangSwitch
|ca={{WC|Esmalt (heràldica)|Esmalt}}
|cs={{Wc|Tinktura (heraldika)|Tinktura}}
|da={{Wda|Tinktur}}
|de={{Wd|Tingierung}}
|de-ch={{Wd|Tingierung}}
|en={{W|Tincture (heraldry)|Tincture}}
|eo={{WE|Heraldikaj koloroj}}
|es={{We|Esmalte (heráldica)|Esmalte}}
|et=Värvused
|fi={{Wfi|Tinktuuri}}
|fr={{Wf|Couleur (héraldique)|Couleur}}
|gl={{Wg|Esmalte (heráldica)|Esmalte}}
|he={{Whe|טינקטורה}}
|hu={{Wh|Színek (heraldika)|Szín}}
|it={{Wi|Smalto (araldica)|Smalto}}
|ja={{W日|ティンクチャー (紋章学)|ティンクチャー}}
|kk={{W|Тинктура (геральдика)|Тинктура|kk}}
|la={{W|Tinctura heraldica|Tinctura|la}}
|lt={{Wlt|Spalvos (heraldika)|Spalvos}}
|lv=Krāsas heraldikā
|mk=Боја<!--{{Wm|Боја (хералдика)|Боја}} no page -->
|ml={{W|Tincture (heraldry)|ടിങ്ചർ}}
|nb={{W|Tincture (heraldry)|Tinkturer}}
|nds-nl={{W|nds-nl:Heraldische kleur|Heraldische kleur}}
|nl={{Wn|Heraldische kleur}}
|no={{W|Tinkturer||no}}
|pl={{WP|Tynktura (heraldyka)|Tynktura}}
|pt={{Wp|Esmalte (heráldica)|Esmalte}}
|pt-br={{Wp|Esmalte (heráldica)|Esmalte}}
|ru={{Wr|Тинктуры}}
|simple={{W|Tincture (heraldry)|Tincture}}
|sv={{Wsv|Tinktur (heraldik)|Tinktur}}
|th={{Wth|ผิวตรา (มุทราศาสตร์)|ผิวตรา}}
|tr=Tentür<!--{{Wtr|Tentür (hanedanlık armaları)|Tentür}} no page -->
|uk={{Wu|Тинктури}}
|zh-hans={{Wz|颜色 (纹章学)|纹章颜色}}
|zh-hant={{Wz|顏色 (紋章學)|紋章顏色}}
|lang={{{lang|}}}
|default={{label|Q3404720}}
}}
|reference = {{LangSwitch
|ar = مرجع الوصف
|en = Blazon reference
|lv = Atsauce
|mk = Извор на блазонот
|ml = ബ്ലേസൺ അവലംബം
|nl = Blazoeneringsbron
|pl = Referencja blazonowania
|tr = Blazon kaynağı
|zh-hans=纹章描述参考资料
|zh-hant=紋章描述參考資料
|default = {{int:wm-license-artwork-references}}
|lang={{{lang|}}}
}}
|element = {{LangSwitch
|ar = عنصر شعار النبالة
|de = Heraldische Figur
|en = Element of coat of arms
|es = Figura heráldica
|fr = Élément pour le dessin de blasons
|nl = Heraldisch element
|mk = Грбна фигура
|ml = ഔദ്യോഗികമുദ്രയുടെ ഘടകം
|it = Figura araldica
|lv = Heraldiskās figūras
|pl = [[:pl:Heraldyka#Elementy_herbu|Element herbu]]
|pt = Elemento do brasão
|ru = Гербовая фигура
|tr = Arması unsuru
|zh-hans=纹章的元素
|zh-hant=紋章的元素
|lang={{{lang|}}}
}}
|ecclesial = {{LangSwitch
|ca = escut eclesiàstic
|cs = znak církevní
|de = Kirchenwappen
|en = ecclesiastical coat of arms
|eo = blazono eklezia
|es = escudo eclesiástico
|fi = vaakuna kirkollinen
|fr = blason ecclésiastique
|hu = címer egyházi
|it = stemma ecclesiastico
|nn = våpen kirkollinen
|nl = wapen kerkelijk
|pl = herb eklezjalny
|pt = brasão eclesial
|sv = vapen kyrklig
|zh-hans=基督教会纹章
|zh-hant=基督教會紋章
|lang={{{lang|}}}
}}
|development = {{LangSwitch
|ar= منشأ الملف
|bg= развитие
|cs= vývoj
|da= udvikling
|de=‑Erstellung
|el= ανάπτυξη
|en= development
|es= desarrollo
|fi= kehittely
|fr= information
|he=התפתחות
|hu= kód
|it= sviluppo
|ja= 開発
|ko= 발전
|lv= veidošana
|mk= разработка
|ml= വികസനം
|nl= ontwikkeling
|no= utvikling
|pl= rozwój
|pt= desenvolvimento
|ro= dezvoltare
|ru=‑разработка
|sl= razvoj
|sv= utveckling
|te= పెరుగుదల
|tr= gelişimi
|uk= розвиток
|zh-hans=开发
|zh-hant=開發
|default= {{T0|I18n/COA|genesis}}
}}
|#default={{{1|}}}<!-- return the unknown argument as-it-is -->
}}<noinclude>Internationalization page used by {{t|COAInformation}} <small>(and {{t|Igen}})</small>
[[Category:Templates using LangSwitch for internationalisation]]</noinclude>
m2xitulqlmnnjrqzpzd9ikcb6i1n4wo
Tempilet:Igen/par
10
1344
10731
2025-04-24T09:21:48Z
commons>Auntof6
0
Moving from [[Category:Miscellaneous subtemplates]] to [[Category:Subtemplates]]
10731
wikitext
text/x-wiki
{{#switch:{{{1|}}}|/|+|-|$|%|%f|%r|%s|%t|%T|%i|%n|%u|%v|%w|g-|gb|gc|gd|ge|gf|gh|gi|gj|gl|gP|gr|gw|~|!|?|§|&|<|<v|<i|<n|^|>|×|\|*|@|(|)|°|Ɨ|←|→|⇒|_=
|s|n|v=
|#default={{{1|}}}
}}<noinclude>
[[Category:Subtemplates|Imgen]]
<br>
{{Heavily used template}}
This {{T0|Image generation|Image generation subtemplate}} evaluates and excludes all values that can be set
*at parameter 1 - ''without'' being a tool name or abbr.
*at parameter 2 - ''without'' being an error count (can be: "-1", "0", or any numeric value)
<!--
Note: currently used by
*Igen for param1 ( tool )
*Igen for param2 (errors)
*Graphic Lab for errors (p2)
*Igen/amp for tool name (p1)
-->
</noinclude>
ls58ucss2eq6gwcq90wrmwyrb1508em
10732
10731
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Igen/par]]
10731
wikitext
text/x-wiki
{{#switch:{{{1|}}}|/|+|-|$|%|%f|%r|%s|%t|%T|%i|%n|%u|%v|%w|g-|gb|gc|gd|ge|gf|gh|gi|gj|gl|gP|gr|gw|~|!|?|§|&|<|<v|<i|<n|^|>|×|\|*|@|(|)|°|Ɨ|←|→|⇒|_=
|s|n|v=
|#default={{{1|}}}
}}<noinclude>
[[Category:Subtemplates|Imgen]]
<br>
{{Heavily used template}}
This {{T0|Image generation|Image generation subtemplate}} evaluates and excludes all values that can be set
*at parameter 1 - ''without'' being a tool name or abbr.
*at parameter 2 - ''without'' being an error count (can be: "-1", "0", or any numeric value)
<!--
Note: currently used by
*Igen for param1 ( tool )
*Igen for param2 (errors)
*Graphic Lab for errors (p2)
*Igen/amp for tool name (p1)
-->
</noinclude>
ls58ucss2eq6gwcq90wrmwyrb1508em
Tempilet:Created with/en
10
1345
10733
2020-06-10T17:01:00Z
commons>Sarang
0
upon request [[Template talk:Created with Inkscape#W3C-unspecified]]
10733
wikitext
text/x-wiki
{{Created with
|logo={{{logo|}}}
|toolcat={{{toolcat|}}}
|iconsize={{{iconsize|}}}
|width={{{width|}}}
|style={{{style|}}}
|category={{{category|}}}
|key={{{key|}}}
|sub={{{sub|}}}
|err={{{err|}}}
|w3c={{{w3c|}}}
|c_text={{{c_text|}}}
|text=This {{#ifeq:{{{big}}}|>|''oversized'' }}<!--
-->{{#switch:{{{w3c}}}|I=W3C-{{#ifeq:{{{err}}}|-1|uncheckable|''invalid''}}<!--
-->|S|s=''W3C-unspecified''}} <!--
-->{{#if:{{{top|}}}|{{Igen/top|{{{top}}}|{{{what|graphics}}}|lang=en}}<!--
-->|{{{what|graphics}}}}} <!--
-->was {{#if:{{{c_text|}}}|{{{c_text|}}}|created with}} {{{tool}}}{{#if:{{{1|}}}|<nowiki/> by {{{1}}}}}{{{more|.}}}
|lang=en}}<noinclude>{{TrRq|d|+}}</noinclude>
0wbzpqzeeutqqct6si8uhigsj6zn654
10734
10733
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with/en]]
10733
wikitext
text/x-wiki
{{Created with
|logo={{{logo|}}}
|toolcat={{{toolcat|}}}
|iconsize={{{iconsize|}}}
|width={{{width|}}}
|style={{{style|}}}
|category={{{category|}}}
|key={{{key|}}}
|sub={{{sub|}}}
|err={{{err|}}}
|w3c={{{w3c|}}}
|c_text={{{c_text|}}}
|text=This {{#ifeq:{{{big}}}|>|''oversized'' }}<!--
-->{{#switch:{{{w3c}}}|I=W3C-{{#ifeq:{{{err}}}|-1|uncheckable|''invalid''}}<!--
-->|S|s=''W3C-unspecified''}} <!--
-->{{#if:{{{top|}}}|{{Igen/top|{{{top}}}|{{{what|graphics}}}|lang=en}}<!--
-->|{{{what|graphics}}}}} <!--
-->was {{#if:{{{c_text|}}}|{{{c_text|}}}|created with}} {{{tool}}}{{#if:{{{1|}}}|<nowiki/> by {{{1}}}}}{{{more|.}}}
|lang=en}}<noinclude>{{TrRq|d|+}}</noinclude>
0wbzpqzeeutqqct6si8uhigsj6zn654
Tempilet:Created with
10
1346
10735
2024-09-25T13:13:59Z
commons>Lucas Werkmeister
0
fulfilling edit request by [[User:Chealer]] – fix |width=
10735
wikitext
text/x-wiki
{{Created with/layout|logo={{{logo|}}}|iconsize={{#if:{{{iconsize|}}}|{{{iconsize}}}}}<!--
-->|text={{{text|}}}|more={{{more|}}}|lang={{{lang|}}}|width={{{width|}}}<!--
-->|style={{#ifeq:{{{w3c}}}|s|background:#FEE;border:1px solid #600}};{{{style|}}}}}<!--
== Category ==
-->{{#if:{{#ifeq:{{NAMESPACE}}|File||1}}<!-- no when not "FILE"
-->{{#ifeq:{{{category|}}}|-|1}}|<!-- no when suppr "-"
-->|{{#ifeq:{{padleft:|2|{{{category|}}}}}|[[|{{{category}}}<!-- as-it-is when "[[…"
-->|{{#if:{{{category|}}}{{{toolcat|}}}<!-- either one is necessary
-->|[[Category:{{#if:{{{category|}}}|{{{category}}}<!-- category: value without brackets
== prefix ==
-->|{{#switch:{{{w3c}}}<!-- (uncheckable SVG solved otherwise) - only some main templates
-->|V=Valid SVG <!--
-->|I=Invalid SVG <!--
-->|s=Unspec SVG <!-- this is a maintenance situation
-->|N|n=PNG <!-- or other raster graphics images
-->|S=SVG }}<!--
-->{{#switch:{{{w3c}}}|V|I|s|N|n|S= {{lcfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}<!--
-->|{{ucfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}}}}}<!--
== subcat ==
-->{{#ifeq:{{{w3c}}}|s||{{#if:{{{sub|}}}|{{#ifeq:{{{sub}}}|-|<!--
-->|{{#ifeq:{{padleft:|1|{{{sub}}}}}|:|{{#invoke:Igenmod|subst|{{{sub}}}}}|{{{sub}}}}}}}}}}}<!--
== sortkey ==
-->{{#switch:{{{key}}}|~=|<!--
-->|{{!}}{{#switch:{{{w3c}}}<!--
-->|I={{#if:{{{err|}}}|{{#iferror:{{#ifexpr:{{{err|1}}}}}|2222<!-- (not when unspec)
-->|{{padleft:{{#expr:1000*{{#expr:1/{{{err|}}} round 3}}}}|4|0}}}}<!-- sort desc.
-->|{{#ifeq:{{{w3c}}}|I|3333}}}}<!--
-->|s={{#invoke:Igenmod|invdate}}}}}}<!-- sortkey for Unspec
== key & PN ==
-->{{#switch:{{{key}}}|n|-|~=|={{PAGENAME}}|{{{key}}}}}]]<!--
error: toolcat missing
-->|}}}}}}<noinclude>
{{Documentation|{{ifsandbox|doc}}}}
</noinclude>
akfhd8ij2n0lr3pjlz47nxhcxncoq4f
10736
10735
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with]]
10735
wikitext
text/x-wiki
{{Created with/layout|logo={{{logo|}}}|iconsize={{#if:{{{iconsize|}}}|{{{iconsize}}}}}<!--
-->|text={{{text|}}}|more={{{more|}}}|lang={{{lang|}}}|width={{{width|}}}<!--
-->|style={{#ifeq:{{{w3c}}}|s|background:#FEE;border:1px solid #600}};{{{style|}}}}}<!--
== Category ==
-->{{#if:{{#ifeq:{{NAMESPACE}}|File||1}}<!-- no when not "FILE"
-->{{#ifeq:{{{category|}}}|-|1}}|<!-- no when suppr "-"
-->|{{#ifeq:{{padleft:|2|{{{category|}}}}}|[[|{{{category}}}<!-- as-it-is when "[[…"
-->|{{#if:{{{category|}}}{{{toolcat|}}}<!-- either one is necessary
-->|[[Category:{{#if:{{{category|}}}|{{{category}}}<!-- category: value without brackets
== prefix ==
-->|{{#switch:{{{w3c}}}<!-- (uncheckable SVG solved otherwise) - only some main templates
-->|V=Valid SVG <!--
-->|I=Invalid SVG <!--
-->|s=Unspec SVG <!-- this is a maintenance situation
-->|N|n=PNG <!-- or other raster graphics images
-->|S=SVG }}<!--
-->{{#switch:{{{w3c}}}|V|I|s|N|n|S= {{lcfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}<!--
-->|{{ucfirst:{{#if:{{{c_text|}}}|{{{c_text}}}|created with}} {{{toolcat}}}}}}}}}<!--
== subcat ==
-->{{#ifeq:{{{w3c}}}|s||{{#if:{{{sub|}}}|{{#ifeq:{{{sub}}}|-|<!--
-->|{{#ifeq:{{padleft:|1|{{{sub}}}}}|:|{{#invoke:Igenmod|subst|{{{sub}}}}}|{{{sub}}}}}}}}}}}<!--
== sortkey ==
-->{{#switch:{{{key}}}|~=|<!--
-->|{{!}}{{#switch:{{{w3c}}}<!--
-->|I={{#if:{{{err|}}}|{{#iferror:{{#ifexpr:{{{err|1}}}}}|2222<!-- (not when unspec)
-->|{{padleft:{{#expr:1000*{{#expr:1/{{{err|}}} round 3}}}}|4|0}}}}<!-- sort desc.
-->|{{#ifeq:{{{w3c}}}|I|3333}}}}<!--
-->|s={{#invoke:Igenmod|invdate}}}}}}<!-- sortkey for Unspec
== key & PN ==
-->{{#switch:{{{key}}}|n|-|~=|={{PAGENAME}}|{{{key}}}}}]]<!--
error: toolcat missing
-->|}}}}}}<noinclude>
{{Documentation|{{ifsandbox|doc}}}}
</noinclude>
akfhd8ij2n0lr3pjlz47nxhcxncoq4f
Tempilet:Igen/top
10
1347
10737
2026-07-17T13:55:04Z
commons>Matrix
0
fulfilling edit request by [[User:Alhadis]] thx!!
10737
wikitext
text/x-wiki
{{#switch:{{lc:{{{1|}}}}}
|c|ce|eh|mlw={{LangSwitch
|bar=Des {{Wd|Wappen|Woppm}}
|bn=কুলচিহ্ন
|ca=Escut d'armes
|cs=Znak
|da=Våben
|de=Dieses {{#ifeq:{{{1}}}|eh|kirchliche}} {{Wd|Wappen}}{{#ifeq:{{{1}}}|ce|element}}
|en={{{enp|}}}{{#switch:{{{1}}}|ce={{W|coat of arms|CoA}} element|eh=ecclesial {{W|coat of arms|CoA}}|{{W|coat of arms}}}}
|eo=Blazono
|es=Este {{#switch:{{{1}}}|ce=elemento heráldico|{{We|Escudo (heráldica)|escudo}}{{#ifeq:{{{1}}}|eh| eclesiástico}}}}
|eu=Armarria
|fa={{wfa|نشان (آرم)|نشان}}
|fi=Vaakuna
|fr=Ce {{#switch:{{{1}}}|ce=meuble héraldique|{{Wf|Blason (héraldique)|blason}}{{#ifeq:{{{1}}}|eh| ecclésiastique}}}}
|gl=Escudo
|he=סמל
|hu={{Wh|címer}}
|it=Questo {{#switch:{{{1}}}|ce=elemento araldico|{{Wi|stemma}}{{#ifeq:{{{1}}}|eh| ecclesiastico}}}}
|ja=紋章
|ko=문장
|mk=Грб
|nds=Wapen
|nl=Dit {{Wn|Wapen (heraldiek)|wapen}}
|nn|no=Dette {{W|Våpen (heraldikk)|våpen|no}}
|pl=Ten {{WP|herb}}
|pt=Este {{wp|brasão}}
|ru={{wr|Герб}}
|sk=Erb <!-- n -->
|sl=Grb
|sv=Det Vapen <!-- n -->
|zh=紋章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|ch={{LangSwitch
|bn=লেখচিত্র
|de=Dieses {{wd|Chart}}
|en={{{enp|}}}{{w|chart}}
|fa={{wfa|نمودار}}
|fr=Ce {{wf|Visualisation de données|graphique}}
|it=Questo {{wi|Rappresentazione grafica dei dati|grafico}}
|ja={{W日|データ可視化|統計図表}}
|sv=Det chart
|zh-hans=统计图
|zh-hant=統計圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|cp={{LangSwitch
|bar=Dea Plån
|de=Dieser Kirchengrundriss
|nl=Dit plan
|en={{{enp|}}}{{w|church plan}}
|fa=نقشهٔ کلیسا
|fr=Ce plan d'église
|it=Questa planimetria
|ja=教会の見取り図<!-- 正しいか疑問 -->
|sv=Det karta
|zh-hans=教堂平面图
|zh-hant=教堂平面圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|cr={{LangSwitch
|bn=মুকুট
|de=Diese {{wd|Krone}}
|en={{{enp|}}}{{w|crown}}
|es=Esta {{we|Corona (tocado)|corona}}
|fa={{wfa|تاج}}
|fr=Cette {{wf|Couronne (attribut)|couronne}}
|it=Questa {{wi|Corona (copricapo)|corona}}
|ja={{W日|西洋の冠|冠}}
|nl=Dit {{wn|Kroon (hoofddeksel)|kroon}}
<!-- |ru=!! Эта {{wr|корона}}-->
|pt=Esta {{wp|Coroa (monarquia)|coroa}}
|zh=冠冕
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|d|ed|sd|esd|hd|t={{LangSwitch
|bar=Des Diagramm
|bn={{wb|ডায়াগ্রাম}}
|de=Dieses {{wd|Diagramm}}
|en={{{enp|}}}{{#switch:{{{1}}}|t=trigonometry|diagram}}
|fa={{wfa|نمودار}}
|fr=Ce {{wf|diagramme}}
|it=Questo {{wi|diagramma}}
|ja={{#switch:{{{1}}}|t={{w日|三角法}}|{{w日|図式}}}}
|ko={{w|다이어그램||ko}}
|es/pt=Este {{W|diagrama||{{{lang|{{int:lang|}}}}}}}
|pl=Ten {{WP|diagram}}
|nl=Dit {{wn|diagram}}
|no={{w|diagramet||no}}
|sv=Det diagram
|zh-hans=示意图
|zh-hant=示意圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|dr|draw|oc={{LangSwitch
|de=Diese Zeichnung
|en={{{enp|}}}{{w|drawing}}
|es=Este dibujo
|fa={{wfa|ترسیم}}
|fr=Ce {{Wf|dessin}}
|it=Questo {{wi|disegno}}
|ja={{w日|素描}}
|pt=Este desenho
|zh=素描
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|e|jc|je={{LangSwitch
|bar=Des {{Wd|Emblem}}
|bn=প্রতীক
|de=Dieses {{Wd|Emblem}}
|en={{{enp|}}}emblem
|fa={{wfa|نشان}}
|fr=Cet {{wf|emblème}}
|it=Questo {{Wi|emblema}}
|ja={{w日|紋章}}
|es/pt=Este {{W|emblema||{{{lang|{{int:lang|}}}}}}}
|pl=Ten emblemat
|ko=문장
|nl=Dit {{w|embleem}}
|sv=Det emblem
|zh=徽章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|em|o={{LangSwitch
|bar=Des {{Wd|Åbzeichn}}
|bn=পদচিহ্ন
|de=Dieses {{wd|Abzeichen}}
|en={{{enp|}}}{{#switch:{{{1}}}|o=military }}insignia
|fa=نشان
|fr=Cet {{wf|insigne}}
|it=Questo {{wi|emblema}}
|ja={{#switch:{{{1}}}|o=軍事}}{{w日|記章}}
|es=Este {{we|distintivo}}
|ko=휘장
|pt=Este {{wp|insígnia}}
|pl=Ta {{WP|różnica}}
|fi=arvomerkki <!-- tunnus -->
|nl=Dit {{wn|insigne}}
|sv=Det orden
|zh=徽章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|eq={{LangSwitch
|ast=ecuación química
|be=Хімічнае ўраўненне
|bg=Химично уравнение
|bs=Hemijska jednačina
|ca=esta {{WC|equació química}}
|ckb=ھاوکێشەی کیمیایی
|cs={{Wc|chemická rovnice}}
|da=reaktionsskema
|de=Diese {{Wd|Reaktionsgleichung}}
|el=Χημική εξίσωση
|en={{{enp|}}}{{w|chemical equation}}
|es=Esta {{We|ecuación química}}
|et=reaktsioonivõrrand
|eu=Ekuazio kimiko
|fa={{wfa|معادله شیمیایی|معادلهٔ شیمیایی}}
|fi=Reaktioyhtälö
|fr=Cette {{wf|équation chimique}}
|ga=cothromóid cheimiceach
|he=תגובה כימית
|hi=रासायनिक समीकरण
|hr=kemijska jednadžba�
|ht=ekwasyon chimik
|hu={{Wh|kémiai egyenletek}}
|id=persamaan reaksi
|it=Questa {{Wi|equazione chimica}}
|ja={{w日|化学反応式}}
|kab=Tagda takrurant
|kk=Химиялық теңдеулер
|ko=화학반응식
|ky=Химиялык теңдеме
|ln=mokokano
|mk=Хемиска реакција
|ml={{വി|രാസസമവാക്യം}}
|ms=persamaan kimia
|nl=Dit {{Wn|reactievergelijking}}
|no=kjemisk reaksjonsligning
|pa=ਰਸਾਇਣਕ ਸਮੀਕਰਨ
|pl=Ten {{WP|równanie reakcji}}
|pt={{Wp|equação química}}
|ro=ecuație chimică
|qu=Ruranakuy paqtachani
|ru={{Wr|Химическое уравнение}}
|sk=chemická rovnica
|sl=Kemijska enačba
|sr=Хемијске једначине
|sh=Hemijska jednačina
|av={{Wsv|reaktionsformel}}
|tl=Ekwasyong kimikal
|ta=வேதியியற் சமன்பாடு
|tt=Химик тигезләмә
|te=రసాయన సమీకరణాలు
|tr=kimyasal denklem
|uk={{Wu|Хімічне рівняння}}
|vi=phương trình hóa học
|zh={{Wz|化学方程式}}
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|esl={{LangSwitch
|cs=elektronické schémat
|de=Diese elektrische Schaltung
|en={{{enp|}}}{{W|circuit diagram}}
|es=Este circuito<!-- Esta esquema eléctrico -->
|fa={{wfa|نمودار مدار}}
|fr=Ce {{Wf|schéma électrique}}
|hu=kapcsolási rajz
|hy=էլէկտրական ուրվագծի պատկեր
|it=Questo {{wi|Schema elettrico|diagramma elettrico}}
|ja={{w日|回路図}}
|ko=전기 회로
|mk=електрична шема
|nl=Dit elektrisch netwerk<!-- elektrische schema -->
|pt=Este circuito elétrico<!-- Esta esquema eléctrico -->
|ro=diagramă electrică
|ru=изображение электрической схемы
|sv=Det elektriskt kopplingsschema
|uk=електричної схеми
|zh-hans=电路图
|zh-hant=電工圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|f|fd|ffi|jf|rf={{LangSwitch
|bar=Dé Fahna
|bn=পতাকা
|de=Diese Fahne
|en={{{enp|}}}flag {{#ifeq:{{{1}}}|ffi|icon}}
|fa={{#ifeq:{{{1}}}|ffi|آیکون}} {{wfa|پرچم}}
|fr=Ce {{wf|drapeau}}
|it=Questa {{wi|bandiera}}
|ko=깃발
|ja={{#ifeq:{{{1}}}|ffi|のアイコン|{{w日|旗}}}}
|pt=Esta bandeira
|es=Esta bandera
|nl=Deze {{wn|vlag}}
|pl=Ta flaga
|sv=Det flagga
|zh-hans=旗帜
|zh-hant=旗幟
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|go={{LangSwitch
|de=Diese {{wd|gonfanon}}
|en={{{enp|}}}{{w|gonfalon}}
|fa=عَلَم
|es=Este {{we|confalón}}
|fr=Ce {{wf|gonfanon}}
|it=Questo {{wi|gonfalone}}
|nl=Dit {{wn|gonfalone}}
|pl=Ten {{WP|gonfalon}}
|pt=Este {{wp|gonfalão}}
|ru={{wr|гонфалон}}
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|g={{LangSwitch
|bar=Dé {{wd|Geometrii}}
|bn={{wb|জ্যামিতি}}
|de=Diese {{wd|Geometrie}}
|en={{{enp|}}}{{w|geometry}}
|es=Esta {{we|geometría}}
|fa={{wfa|هندسه|شکل هندسی}}
|fr=Cette {{wf|forme (géométrie)|figure géométrique}}
|it=Questa {{wi|Figura (geometria)|figura geometrica}}
|ja={{w日|幾何学}}
|nl=Deze geometrie
|pl=Ten {{WP|geometria}}
|pt=Esta {{wp|geometria}}
|sv=Det geometri
|zh-hans=几何图
|zh-hant=幾何圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|gl={{LangSwitch
|bn=গ্লিফ
|de=Diese Glyphe
|en={{{enp|}}}{{w|glyph}}
|fa={{wfa|گلیف}}
|fr=Ce {{wf|glyphe}}
|it=Questo {{wi|glifo}}
|ja={{w日|グリフ}}
|sv=Det glyf
|zh=字形
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|b|i|ai|bi|bri|ci|cti|ei|et|fi|gi|ni|npi|oi|pi|tai|ti={{LangSwitch
|bar=Dea Icon
|bn=আইকন
|de=Dieses {{#switch:{{{1}}}|bi=BSicon|Icon}}
|en={{{enp|}}}{{#switch:{{{1}}}|b=button|bi=BSicon|icon}}
|es=Este icono
|fa={{wfa|آیکن_(رایانش)|آیکون}}
|fr=Cette {{wf|Icône (informatique)|icône}}
|it=Quest'{{Wi|icona}}
|ja={{w日|アイコン}}
|ko=아이콘
|nl=Deze {{wn|icoon}}
|pl=Ta ikona
|pt=Este ícone
|sv=Det ikon
|zh-hans=图标
|zh-hant=圖形
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|b={{LangSwitch
|en={{{enp|}}}button
|fa={{wfa|دکمه (رایانش)|دکمه}}
|ja={{w日|ボタン}}
|sv=Det knapp
|zh-hans=按钮
|zh-hant=按鈕
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|l|tl={{LangSwitch
|bar=Des Logo
|bn=লোগো
|de=Dieses {{#switch:{{{1}}}|tl=Textl|L}}ogo
|en={{{enp|}}}{{#switch:{{{1}}}|tl=text-}}logo
|fa={{wfa|نشانواره|نشانواره}}
|fr=Ce {{wf|logotype}}
|it=Questo logotipo
|ja={{w日|ロゴタイプ}}
|ko=로고
|es/pt=Este {{W|logotipo||{{{lang|{{int:lang|}}}}}}}
|pl=To logo
|nl=Dit {{wn|logo}}
|sv=Det logo
|zh-hans=文字标识
|zh-hant=文字標識
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|lb={{LangSwitch
|en={{{enp|}}}label
|fa={{wfa|برچسب}}
|ja=ラベル
|sv=Det etikett
|zh-hans=标签
|zh-hant=標籖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|m|acm|fm|lm|wm|wmd|ggg|mbs|pom={{LangSwitch
|bar=Dé Kartn
|bn=মানচিত্র
|de=Diese {{wd|{{#switch:{{{1}}}|wm|wmd|ggg=Welt|Land}}karte}}<!-- kartografische Darstellung -->
|en={{{enp|}}}{{w|{{#switch:{{{1}}}|wm|wmd|ggg=world |fm=flag |lm=locator |acm=census }}map}}
|fa={{wfa|نقشه {{#switch:{{{1}}}|wm|wmd|ggg=جهان |fm=پرچم |lm=جانما |acm=سرشماری }}}}
|fr=Cette {{wf|carte géographique|carte}}
|it=Questa mappa
|es=Este mapa
|pt=Esta carta geográfica
|ja=地図
|ko=지도
|nl=Deze {{wn|kaart}}
|pl=Ta mapa
|sv=Det karta
|zh-hans=地图
|zh-hant=地圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|♫|mn={{LangSwitch
|de=Diese Notation
|en={{{enp|}}}{{w|notation}}
|fa={{wfa|نمادگان}}
|es=Esta notatión
|ja=楽譜
|ko=기보법
|zh-hans=乐谱
|zh-hant=樂譜
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|p|sp={{LangSwitch
|bar=Des Piktogramm
|bn=চিত্রলিপি
|de=Dieses Piktogramm
|en={{{enp|}}}pictogram
|es/pt=Este {{W|pictograma||{{{lang|{{int:lang|}}}}}}}
|fa={{wfa|تصویرنگاشت}}
|fr=Ce {{wf|pictogramme}}
|it=Questa pittografia
|ja={{w日|絵表示}}
|ko=그림문자
|nl=Dit {{wn|pictogram}}
|pl=Ten {{WP|piktogram}}
|sv=Det {{Ws|piktogram}}
|zh-hans=象形图
|zh-hant=象形圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|rm={{LangSwitch
|de=Dieses Monogramm
|en={{{enp|}}}{{w|monogram}}
|fa={{wfa|مونوگرام}}
|it=Questo {{wi|monogramma}}
|ja={{w日|組合せ文字}}
|sv=Det monogram
|zh-hans=文字组合
|zh-hant=文字組合
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|s={{LangSwitch
|bar=Des {{wd|Siegl}}
|bn=সীল
|de=Dieses {{Wd|Siegel}}
|en={{{enp|}}}{{w|seal}}
|fa={{wfa|مهر (علامت)|مُهر}}
|fr=Ce {{wf|sceau}}
|it=Questo {{Wi|sigillo}}
|es=Este sello
|ja={{w日|印章}}
|pt=Este selo
|sv=Det sigill
|zh=印章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|sf={{LangSwitch
|de=Diese Strukturformel
|en={{{enp|}}}{{w|structural formula}}
|fa={{wfa|فرمول ساختاری}}
|fr=Cette {{wf|formule développée plane}}
|ja={{w日|構造式}}
|sv=Det strukturformel
|zh-hans=结构式
|zh-hant=結構式
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|sig={{LangSwitch
|bar=Dé Signatar
|bn=স্বাক্ষর
|de=Diese Signatur
|en={{{enp|}}}signature
|es=Esta firma
|fa={{wfa|امضا}}
|fr=Cette {{wf|signature}}
|it=Questa {{wi|firma}}
|ja={{w日|署名}}
|pt=Esta assinatura
|pl=Ten podpis
|nl=Dit {{wn|handtekening}}
|sv=Det signatur
|zh-hans=签名
|zh-hant=簽名
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|ts={{LangSwitch
|bar=Dea Schriftsåtz
|cs=sazba
|de=Dieser Schriftsatz
|en={{{enp|}}}typeset
|es=Esta composición tipográfica
|fa={{wfa|حروفچینی}}
|fi=adottiin
|fr=Cette {{wf|mise en page}}
|hu=betűszedett
|it=Questa impaginazione
|ja={{w日|組版}}
|mk=типографски сложен
|nl=Dit typeset
|pl=Ten skład tekstu
|pt=Esta formatação de texto
|ru=свёрстанное
|sv=Det textsättnings
|uk=зверстаний документ
|zh=排版
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|u={{LangSwitch
|bar=Des Unicode-Zeichn
|bn=ইউনিকোড অক্ষর
|de=Dieses Unicode-Zeichen
|en={{{enp|}}}Unicode character
|fa={{wfa|یونیکد|نویسهٔ یونیکد}}
|it=Questo carattere {{wi|Unicode}}
|ja=Unicode文字
|pt=Este caractere Unicode
|fr=Ce caractère {{wf|Unicode}}
|zh-hans=Unicode字符
|zh-hant=Unicode字元
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|bs={{LangSwitch
|bar=Dea Barnstar
|de=Dieser Barnstar
|en={{{enp|}}}barnstar
|fa={{wfa|ستاره انبار|ستارهٔ انبار}}
|ja={{w日|バーンスター}}
|zh=星章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|v|gv={{LangSwitch
|bar=Des Zeichn
|bn=চিহ্ন
|de=Dieses Zeichen
|de-at=Dieses Verkehrszeichen
|en={{{enp|}}}sign
|fa={{wfa|نشانه}}
|fr=Ce {{wf|panneau}}
|it=Questo {{wi|segnale}}
|pt=Esta placa
|es=Esta señal
|ja={{w日|標識}}
|ko=교통표지<!-- (交通標誌) -->
|nl=Dit bordje
|pl=Ten {{WP|znak}}
|sv=Det tecken
|zh-hans=交通标志
|zh-hant=交通標誌
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|lp={{LangSwitch
|bn=লাইসেন্স প্লেট
|de=Dieses Kennzeichen
|de-at=Diese Nummerntafel
|en-us|en={{{enp|}}}license plate
|en-ca|en-gb={{{enp|}}}licence plate
|fa={{wfa|پلاک خودرو}}
|it=Questa targa
|ja={{w日|ナンバープレート}}
|zh-hans=号牌
|zh-hant=號牌
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|wp={{LangSwitch
|bn=প্যাটার্ন
|de=Dieses Muster
|en={{{enp|}}}{{w|pattern}}
|fa={{wfa|الگو}}
|fr=Ce {{wf|modèle}}
|ja={{w日|紋様}}
|sv=Det mönster
|zh-hans=纹样
|zh-hant=紋樣
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|r|y|ey={{LangSwitch
|bar=Des Symbol
|bn=প্রতীক
|de=Dieses Symbol
|en={{{enp|}}}{{#switch:{{{1}}}|r=roundel|symbol}}
|es/pt=Este {{W|símbolo||{{{lang|{{int:lang|}}}}}}}
|fa={{wfa|نماد}}
|fr=Ce {{wf|symbole}}
|ja={{#switch:{{{1}}}|r={{w日|蛇の目}}|{{w日|記号}}}}
|it=Questo {{wi|simbolo}}
|ko=상징
|nl=Dit {{wn|symbool}}
|pl=Ten {{WP|symbol}}
|sv=Det symbol<!-- kula -->
|zh-hans=徽标
|zh-hant=徽標
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|a={{LangSwitch
|bn=তীর
|de=Dieser Pfeil
|en={{{enp|}}}{{w|arrow}}
|fa={{wfa|فلش (نماد)|پیکان}}
|it=Questa freccia
|ja={{w日|矢印}}
|sv=Det pil
|zh-hans=箭头
|zh-hant=箭頭
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|7={{LangSwitch
|bn=সংখ্যা
|de=Diese Ziffer
|en={{{enp|}}}{{w|digit}}
|es/pt=Este {{W|dígito||{{{lang|{{int:lang|}}}}}}}
|fa={{wfa|رقم}}
|fr=Ce chiffre
|ja={{w日|数字}}
|zh-hans=数字
|zh-hant=數字
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
<!-- Created with ... templates (mainly non-SVG) -->
|bitm={{LangSwitch
|de=Diese Rastergrafik
|en={{{enp|}}}{{w|raster image}}
|fa={{wfa|گرافیک شطرنجی}}
|fr=Cette {{wf|image matricielle}}
|ja={{w日|ビットマップ画像}}
|nl=Deze raster afbeelding
|zh-hans=位图
|zh-hant=點陣圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|file={{LangSwitch
|cs=Tento soubor
|da=Denne fil
|de=Diese Datei
|eo=La dosiero
|en={{{enp|}}}file
|fa=پرونده
|es=Este archivo
|et=See fail
|fi=Tämä tiedosto
|fr=Ce fichier
|he=Αυτό το αρχείο
|hu=Ez a fájl
|it=Questo flusso<!--file-->
|ja=このファイル
|lt=Šis failas
|lv=Šis fails
|mk=Оваа податотека
|nl=Dit bestand
|no=Dette fil
|pl=Ten plikз
|pt=Este arquivo<!--ficheiro-->
|ro=Acest fișier
|ru=Этот файл
|sl=Ta datoteka
|sk=Tento súbor
|sv=Denna fil
|zh-hans=这个文件
|zh-hant=這個檔案
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|math={{LangSwitch
|en={{{enp|}}}{{w|image (mathematics)|mathematical image}}
|fa={{wfa|تصویر (ریاضیات)|تصویر ریاضی}}
|bn=গাণিতিক চিত্র
|de=Diese mathematische Darstellung
|fr=Cette {{wf|Image (mathématiques)|image mathématique}}
|ja={{w日|像 (数学)|数学の像}}
|zh-hans=数学像点
|zh-hant=數學像點
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|pano={{LangSwitch
|bn={{w|Autostitch|অটোস্টিকচ}} {{W|Panorama|সামগ্রিক দৃশ্যের চিত্র}}
|de=Dieses Panoramabild
|en={{{enp|}}}{{w|Panorama|panoramic image}}
|es=Esta imagen panorámica
|fa={{wfa|سراسرنما|نگارهٔ سراسرنما}}
|fi={{w|panoraamakuva||fi}}
|fr=Cette image {{wf|panorama|panoramique}}
|hu={{wh|Panoráma|panorámakép}}
|it=Questa fotografia panoramica
|ja={{w日|パノラマ写真}}
|nl=Deze panoramische afbeelding
|pl=Ta {{w|panorama (zdjęcie)|panorama|pl}}
|pt=Esta imagem panorâmica
|sv=Det panoramabilden
|zh-hans=全景图
|zh-hant=全景圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|plot={{LangSwitch
|bar=Dea Plot
|de=Dieser Plot
|en={{{enp|}}}plot
|fa=نمودار
|fr=Cette {{Wf|représentation graphique}}
|Ja={{w日|プロット図}}
|zh-hans=图表
|zh-hant=圖表
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|pres={{LangSwitch
|de=Diese Präsentation
|en={{{enp|}}}{{w|presentation}}
|es=Esta presentación
|fa={{wfa|ارائه}}
|fr=Cette présentation
|it=Questa presentazione
|ja={{w日|プレゼンテーション}}
|nl=Deze presentatie
|pl=Ta grafika prezentacyjna
|pt=Esta apresentação
|zh-hans=演示
|zh-hant=簡報
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
<!-- when code exists but no translation for that language -->
<!-- With |default=~ the English translation is returned -->
<!-- With |#default= value of parameter 2 will be returned -->
<!-- Therefore parameter 2 should be the standard "what" name-->
<!-- for code not in the list, either the 2nd parameter, or -->
<!-- if no 2nd parameter, the code itself will be displayed -->
|-={{#ifeq:{{{2}}}|~||{{{2|}}}}}
|#default=<includeonly>{{#ifeq:{{padright:{{{1}}}|3|%}}|{{padright:|3|{{{1}}}%%%%}}<!--
-->|{{#if:{{{2|}}}|{{#ifeq:{{{2}}}|~|~?~|{{{2}}}}}|{{#if:{{{1|}}}<!-- code does not exist
-->|[[Category:Commons:Unspecified topic|{{{1|-}}}]]}}}}<!-- + maintenance category
-->|{{#invoke:Char|subst|1={{{1|}}}}}}}<!-- more than 3 chars: display them --></includeonly>
<!-- {{#ifeq:{{padleft:|1|{{{1|}}}}}|:|[[Category:Commons:Unspecified topic|{{{1|}}}]]}} -->
}}<noinclude>
Internationalization page, used by e.g. <!-- {{t|Igen}} and --> the {{C|SVG created with ... templates}} and others
:This template is used by many templates like e.g. {{t0|Created with Other tool/de}} with two parameters:
:# the short code (mostly one letter, or a few letters) like for {{T0|Igen/sub}},
:# the default value if no code fits. To avoid the wrong use of "en" the <code>|#default= </code> option is necessary.
:
:{{T0|Igen/sub}} often spreads short codes to different subcategories while Igen/top uses fewer names.
:The short code defined with <code>s=</code> is passed from {{t0|Image generation}} and other templates;
:if another code should be used it can be defined with <code>w=</code>; to just ''suppress'' the usage of <code>s=</code> use <code>w=</code> without a value.
:
:{{0}}
:
:For languages with different {{W|Grammatical gender|genders}} (like de, fr, it, pl, pt...) the names must be defined ''with'' the {{W|demonstratives}}.
{{Use sandbox|testcase= }}
See also the [[Template talk:Igen/top|talk page]] for a table of all codes.
{{Heavily used template}}
The system can only display ''topics'' (f=flags, i=icons, l=logos, m=maps, ...) when a translation is provided within this template for ''that'' topic in ''that'' language. <br>When the translation fails, the output depends on
:when the code exists in that template, but no translation for that language, it depends on the value of parameter 2:
:* (none) an error code like "_?_" is returned (that should never happen!)
:* "~" the (''always existing'') English translation is returned
:* otherwise the value of parameter 2 (the standard text) is returned.
:when the code does not exist in that template, parameter 1 is checked:<br>
:* when it contains ''more than 3 characters'' it is displayed; otherwise it depends on the value of parameter 2:
:** (none) the untranslated value of parameter 1 is returned,
:** "~" an error code like "~?~" is returned,
:** otherwise the value of parameter 2 (the standard text) is returned,
: '''and''' categorization to a {{C|Commons:Unspecified topic|maintenance category}} occurs.
The skeleton is prepared, and when users want to see things in their language they ought to maintain and to expand that template.<br>
If a translation is missing in the current display language, only the standard text is shown, as it had been before.
[[Category:Templates using LangSwitch for internationalisation]]</noinclude>
psfwu0awktv3p3hrgfyvkco4o57wd95
10738
10737
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Igen/top]]
10737
wikitext
text/x-wiki
{{#switch:{{lc:{{{1|}}}}}
|c|ce|eh|mlw={{LangSwitch
|bar=Des {{Wd|Wappen|Woppm}}
|bn=কুলচিহ্ন
|ca=Escut d'armes
|cs=Znak
|da=Våben
|de=Dieses {{#ifeq:{{{1}}}|eh|kirchliche}} {{Wd|Wappen}}{{#ifeq:{{{1}}}|ce|element}}
|en={{{enp|}}}{{#switch:{{{1}}}|ce={{W|coat of arms|CoA}} element|eh=ecclesial {{W|coat of arms|CoA}}|{{W|coat of arms}}}}
|eo=Blazono
|es=Este {{#switch:{{{1}}}|ce=elemento heráldico|{{We|Escudo (heráldica)|escudo}}{{#ifeq:{{{1}}}|eh| eclesiástico}}}}
|eu=Armarria
|fa={{wfa|نشان (آرم)|نشان}}
|fi=Vaakuna
|fr=Ce {{#switch:{{{1}}}|ce=meuble héraldique|{{Wf|Blason (héraldique)|blason}}{{#ifeq:{{{1}}}|eh| ecclésiastique}}}}
|gl=Escudo
|he=סמל
|hu={{Wh|címer}}
|it=Questo {{#switch:{{{1}}}|ce=elemento araldico|{{Wi|stemma}}{{#ifeq:{{{1}}}|eh| ecclesiastico}}}}
|ja=紋章
|ko=문장
|mk=Грб
|nds=Wapen
|nl=Dit {{Wn|Wapen (heraldiek)|wapen}}
|nn|no=Dette {{W|Våpen (heraldikk)|våpen|no}}
|pl=Ten {{WP|herb}}
|pt=Este {{wp|brasão}}
|ru={{wr|Герб}}
|sk=Erb <!-- n -->
|sl=Grb
|sv=Det Vapen <!-- n -->
|zh=紋章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|ch={{LangSwitch
|bn=লেখচিত্র
|de=Dieses {{wd|Chart}}
|en={{{enp|}}}{{w|chart}}
|fa={{wfa|نمودار}}
|fr=Ce {{wf|Visualisation de données|graphique}}
|it=Questo {{wi|Rappresentazione grafica dei dati|grafico}}
|ja={{W日|データ可視化|統計図表}}
|sv=Det chart
|zh-hans=统计图
|zh-hant=統計圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|cp={{LangSwitch
|bar=Dea Plån
|de=Dieser Kirchengrundriss
|nl=Dit plan
|en={{{enp|}}}{{w|church plan}}
|fa=نقشهٔ کلیسا
|fr=Ce plan d'église
|it=Questa planimetria
|ja=教会の見取り図<!-- 正しいか疑問 -->
|sv=Det karta
|zh-hans=教堂平面图
|zh-hant=教堂平面圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|cr={{LangSwitch
|bn=মুকুট
|de=Diese {{wd|Krone}}
|en={{{enp|}}}{{w|crown}}
|es=Esta {{we|Corona (tocado)|corona}}
|fa={{wfa|تاج}}
|fr=Cette {{wf|Couronne (attribut)|couronne}}
|it=Questa {{wi|Corona (copricapo)|corona}}
|ja={{W日|西洋の冠|冠}}
|nl=Dit {{wn|Kroon (hoofddeksel)|kroon}}
<!-- |ru=!! Эта {{wr|корона}}-->
|pt=Esta {{wp|Coroa (monarquia)|coroa}}
|zh=冠冕
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|d|ed|sd|esd|hd|t={{LangSwitch
|bar=Des Diagramm
|bn={{wb|ডায়াগ্রাম}}
|de=Dieses {{wd|Diagramm}}
|en={{{enp|}}}{{#switch:{{{1}}}|t=trigonometry|diagram}}
|fa={{wfa|نمودار}}
|fr=Ce {{wf|diagramme}}
|it=Questo {{wi|diagramma}}
|ja={{#switch:{{{1}}}|t={{w日|三角法}}|{{w日|図式}}}}
|ko={{w|다이어그램||ko}}
|es/pt=Este {{W|diagrama||{{{lang|{{int:lang|}}}}}}}
|pl=Ten {{WP|diagram}}
|nl=Dit {{wn|diagram}}
|no={{w|diagramet||no}}
|sv=Det diagram
|zh-hans=示意图
|zh-hant=示意圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|dr|draw|oc={{LangSwitch
|de=Diese Zeichnung
|en={{{enp|}}}{{w|drawing}}
|es=Este dibujo
|fa={{wfa|ترسیم}}
|fr=Ce {{Wf|dessin}}
|it=Questo {{wi|disegno}}
|ja={{w日|素描}}
|pt=Este desenho
|zh=素描
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|e|jc|je={{LangSwitch
|bar=Des {{Wd|Emblem}}
|bn=প্রতীক
|de=Dieses {{Wd|Emblem}}
|en={{{enp|}}}emblem
|fa={{wfa|نشان}}
|fr=Cet {{wf|emblème}}
|it=Questo {{Wi|emblema}}
|ja={{w日|紋章}}
|es/pt=Este {{W|emblema||{{{lang|{{int:lang|}}}}}}}
|pl=Ten emblemat
|ko=문장
|nl=Dit {{w|embleem}}
|sv=Det emblem
|zh=徽章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|em|o={{LangSwitch
|bar=Des {{Wd|Åbzeichn}}
|bn=পদচিহ্ন
|de=Dieses {{wd|Abzeichen}}
|en={{{enp|}}}{{#switch:{{{1}}}|o=military }}insignia
|fa=نشان
|fr=Cet {{wf|insigne}}
|it=Questo {{wi|emblema}}
|ja={{#switch:{{{1}}}|o=軍事}}{{w日|記章}}
|es=Este {{we|distintivo}}
|ko=휘장
|pt=Este {{wp|insígnia}}
|pl=Ta {{WP|różnica}}
|fi=arvomerkki <!-- tunnus -->
|nl=Dit {{wn|insigne}}
|sv=Det orden
|zh=徽章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|eq={{LangSwitch
|ast=ecuación química
|be=Хімічнае ўраўненне
|bg=Химично уравнение
|bs=Hemijska jednačina
|ca=esta {{WC|equació química}}
|ckb=ھاوکێشەی کیمیایی
|cs={{Wc|chemická rovnice}}
|da=reaktionsskema
|de=Diese {{Wd|Reaktionsgleichung}}
|el=Χημική εξίσωση
|en={{{enp|}}}{{w|chemical equation}}
|es=Esta {{We|ecuación química}}
|et=reaktsioonivõrrand
|eu=Ekuazio kimiko
|fa={{wfa|معادله شیمیایی|معادلهٔ شیمیایی}}
|fi=Reaktioyhtälö
|fr=Cette {{wf|équation chimique}}
|ga=cothromóid cheimiceach
|he=תגובה כימית
|hi=रासायनिक समीकरण
|hr=kemijska jednadžba�
|ht=ekwasyon chimik
|hu={{Wh|kémiai egyenletek}}
|id=persamaan reaksi
|it=Questa {{Wi|equazione chimica}}
|ja={{w日|化学反応式}}
|kab=Tagda takrurant
|kk=Химиялық теңдеулер
|ko=화학반응식
|ky=Химиялык теңдеме
|ln=mokokano
|mk=Хемиска реакција
|ml={{വി|രാസസമവാക്യം}}
|ms=persamaan kimia
|nl=Dit {{Wn|reactievergelijking}}
|no=kjemisk reaksjonsligning
|pa=ਰਸਾਇਣਕ ਸਮੀਕਰਨ
|pl=Ten {{WP|równanie reakcji}}
|pt={{Wp|equação química}}
|ro=ecuație chimică
|qu=Ruranakuy paqtachani
|ru={{Wr|Химическое уравнение}}
|sk=chemická rovnica
|sl=Kemijska enačba
|sr=Хемијске једначине
|sh=Hemijska jednačina
|av={{Wsv|reaktionsformel}}
|tl=Ekwasyong kimikal
|ta=வேதியியற் சமன்பாடு
|tt=Химик тигезләмә
|te=రసాయన సమీకరణాలు
|tr=kimyasal denklem
|uk={{Wu|Хімічне рівняння}}
|vi=phương trình hóa học
|zh={{Wz|化学方程式}}
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|esl={{LangSwitch
|cs=elektronické schémat
|de=Diese elektrische Schaltung
|en={{{enp|}}}{{W|circuit diagram}}
|es=Este circuito<!-- Esta esquema eléctrico -->
|fa={{wfa|نمودار مدار}}
|fr=Ce {{Wf|schéma électrique}}
|hu=kapcsolási rajz
|hy=էլէկտրական ուրվագծի պատկեր
|it=Questo {{wi|Schema elettrico|diagramma elettrico}}
|ja={{w日|回路図}}
|ko=전기 회로
|mk=електрична шема
|nl=Dit elektrisch netwerk<!-- elektrische schema -->
|pt=Este circuito elétrico<!-- Esta esquema eléctrico -->
|ro=diagramă electrică
|ru=изображение электрической схемы
|sv=Det elektriskt kopplingsschema
|uk=електричної схеми
|zh-hans=电路图
|zh-hant=電工圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|f|fd|ffi|jf|rf={{LangSwitch
|bar=Dé Fahna
|bn=পতাকা
|de=Diese Fahne
|en={{{enp|}}}flag {{#ifeq:{{{1}}}|ffi|icon}}
|fa={{#ifeq:{{{1}}}|ffi|آیکون}} {{wfa|پرچم}}
|fr=Ce {{wf|drapeau}}
|it=Questa {{wi|bandiera}}
|ko=깃발
|ja={{#ifeq:{{{1}}}|ffi|のアイコン|{{w日|旗}}}}
|pt=Esta bandeira
|es=Esta bandera
|nl=Deze {{wn|vlag}}
|pl=Ta flaga
|sv=Det flagga
|zh-hans=旗帜
|zh-hant=旗幟
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|go={{LangSwitch
|de=Diese {{wd|gonfanon}}
|en={{{enp|}}}{{w|gonfalon}}
|fa=عَلَم
|es=Este {{we|confalón}}
|fr=Ce {{wf|gonfanon}}
|it=Questo {{wi|gonfalone}}
|nl=Dit {{wn|gonfalone}}
|pl=Ten {{WP|gonfalon}}
|pt=Este {{wp|gonfalão}}
|ru={{wr|гонфалон}}
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|g={{LangSwitch
|bar=Dé {{wd|Geometrii}}
|bn={{wb|জ্যামিতি}}
|de=Diese {{wd|Geometrie}}
|en={{{enp|}}}{{w|geometry}}
|es=Esta {{we|geometría}}
|fa={{wfa|هندسه|شکل هندسی}}
|fr=Cette {{wf|forme (géométrie)|figure géométrique}}
|it=Questa {{wi|Figura (geometria)|figura geometrica}}
|ja={{w日|幾何学}}
|nl=Deze geometrie
|pl=Ten {{WP|geometria}}
|pt=Esta {{wp|geometria}}
|sv=Det geometri
|zh-hans=几何图
|zh-hant=幾何圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|gl={{LangSwitch
|bn=গ্লিফ
|de=Diese Glyphe
|en={{{enp|}}}{{w|glyph}}
|fa={{wfa|گلیف}}
|fr=Ce {{wf|glyphe}}
|it=Questo {{wi|glifo}}
|ja={{w日|グリフ}}
|sv=Det glyf
|zh=字形
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|b|i|ai|bi|bri|ci|cti|ei|et|fi|gi|ni|npi|oi|pi|tai|ti={{LangSwitch
|bar=Dea Icon
|bn=আইকন
|de=Dieses {{#switch:{{{1}}}|bi=BSicon|Icon}}
|en={{{enp|}}}{{#switch:{{{1}}}|b=button|bi=BSicon|icon}}
|es=Este icono
|fa={{wfa|آیکن_(رایانش)|آیکون}}
|fr=Cette {{wf|Icône (informatique)|icône}}
|it=Quest'{{Wi|icona}}
|ja={{w日|アイコン}}
|ko=아이콘
|nl=Deze {{wn|icoon}}
|pl=Ta ikona
|pt=Este ícone
|sv=Det ikon
|zh-hans=图标
|zh-hant=圖形
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|b={{LangSwitch
|en={{{enp|}}}button
|fa={{wfa|دکمه (رایانش)|دکمه}}
|ja={{w日|ボタン}}
|sv=Det knapp
|zh-hans=按钮
|zh-hant=按鈕
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|l|tl={{LangSwitch
|bar=Des Logo
|bn=লোগো
|de=Dieses {{#switch:{{{1}}}|tl=Textl|L}}ogo
|en={{{enp|}}}{{#switch:{{{1}}}|tl=text-}}logo
|fa={{wfa|نشانواره|نشانواره}}
|fr=Ce {{wf|logotype}}
|it=Questo logotipo
|ja={{w日|ロゴタイプ}}
|ko=로고
|es/pt=Este {{W|logotipo||{{{lang|{{int:lang|}}}}}}}
|pl=To logo
|nl=Dit {{wn|logo}}
|sv=Det logo
|zh-hans=文字标识
|zh-hant=文字標識
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|lb={{LangSwitch
|en={{{enp|}}}label
|fa={{wfa|برچسب}}
|ja=ラベル
|sv=Det etikett
|zh-hans=标签
|zh-hant=標籖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|m|acm|fm|lm|wm|wmd|ggg|mbs|pom={{LangSwitch
|bar=Dé Kartn
|bn=মানচিত্র
|de=Diese {{wd|{{#switch:{{{1}}}|wm|wmd|ggg=Welt|Land}}karte}}<!-- kartografische Darstellung -->
|en={{{enp|}}}{{w|{{#switch:{{{1}}}|wm|wmd|ggg=world |fm=flag |lm=locator |acm=census }}map}}
|fa={{wfa|نقشه {{#switch:{{{1}}}|wm|wmd|ggg=جهان |fm=پرچم |lm=جانما |acm=سرشماری }}}}
|fr=Cette {{wf|carte géographique|carte}}
|it=Questa mappa
|es=Este mapa
|pt=Esta carta geográfica
|ja=地図
|ko=지도
|nl=Deze {{wn|kaart}}
|pl=Ta mapa
|sv=Det karta
|zh-hans=地图
|zh-hant=地圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|♫|mn={{LangSwitch
|de=Diese Notation
|en={{{enp|}}}{{w|notation}}
|fa={{wfa|نمادگان}}
|es=Esta notatión
|ja=楽譜
|ko=기보법
|zh-hans=乐谱
|zh-hant=樂譜
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|p|sp={{LangSwitch
|bar=Des Piktogramm
|bn=চিত্রলিপি
|de=Dieses Piktogramm
|en={{{enp|}}}pictogram
|es/pt=Este {{W|pictograma||{{{lang|{{int:lang|}}}}}}}
|fa={{wfa|تصویرنگاشت}}
|fr=Ce {{wf|pictogramme}}
|it=Questa pittografia
|ja={{w日|絵表示}}
|ko=그림문자
|nl=Dit {{wn|pictogram}}
|pl=Ten {{WP|piktogram}}
|sv=Det {{Ws|piktogram}}
|zh-hans=象形图
|zh-hant=象形圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|rm={{LangSwitch
|de=Dieses Monogramm
|en={{{enp|}}}{{w|monogram}}
|fa={{wfa|مونوگرام}}
|it=Questo {{wi|monogramma}}
|ja={{w日|組合せ文字}}
|sv=Det monogram
|zh-hans=文字组合
|zh-hant=文字組合
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|s={{LangSwitch
|bar=Des {{wd|Siegl}}
|bn=সীল
|de=Dieses {{Wd|Siegel}}
|en={{{enp|}}}{{w|seal}}
|fa={{wfa|مهر (علامت)|مُهر}}
|fr=Ce {{wf|sceau}}
|it=Questo {{Wi|sigillo}}
|es=Este sello
|ja={{w日|印章}}
|pt=Este selo
|sv=Det sigill
|zh=印章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|sf={{LangSwitch
|de=Diese Strukturformel
|en={{{enp|}}}{{w|structural formula}}
|fa={{wfa|فرمول ساختاری}}
|fr=Cette {{wf|formule développée plane}}
|ja={{w日|構造式}}
|sv=Det strukturformel
|zh-hans=结构式
|zh-hant=結構式
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|sig={{LangSwitch
|bar=Dé Signatar
|bn=স্বাক্ষর
|de=Diese Signatur
|en={{{enp|}}}signature
|es=Esta firma
|fa={{wfa|امضا}}
|fr=Cette {{wf|signature}}
|it=Questa {{wi|firma}}
|ja={{w日|署名}}
|pt=Esta assinatura
|pl=Ten podpis
|nl=Dit {{wn|handtekening}}
|sv=Det signatur
|zh-hans=签名
|zh-hant=簽名
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|ts={{LangSwitch
|bar=Dea Schriftsåtz
|cs=sazba
|de=Dieser Schriftsatz
|en={{{enp|}}}typeset
|es=Esta composición tipográfica
|fa={{wfa|حروفچینی}}
|fi=adottiin
|fr=Cette {{wf|mise en page}}
|hu=betűszedett
|it=Questa impaginazione
|ja={{w日|組版}}
|mk=типографски сложен
|nl=Dit typeset
|pl=Ten skład tekstu
|pt=Esta formatação de texto
|ru=свёрстанное
|sv=Det textsättnings
|uk=зверстаний документ
|zh=排版
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|u={{LangSwitch
|bar=Des Unicode-Zeichn
|bn=ইউনিকোড অক্ষর
|de=Dieses Unicode-Zeichen
|en={{{enp|}}}Unicode character
|fa={{wfa|یونیکد|نویسهٔ یونیکد}}
|it=Questo carattere {{wi|Unicode}}
|ja=Unicode文字
|pt=Este caractere Unicode
|fr=Ce caractère {{wf|Unicode}}
|zh-hans=Unicode字符
|zh-hant=Unicode字元
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|bs={{LangSwitch
|bar=Dea Barnstar
|de=Dieser Barnstar
|en={{{enp|}}}barnstar
|fa={{wfa|ستاره انبار|ستارهٔ انبار}}
|ja={{w日|バーンスター}}
|zh=星章
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|v|gv={{LangSwitch
|bar=Des Zeichn
|bn=চিহ্ন
|de=Dieses Zeichen
|de-at=Dieses Verkehrszeichen
|en={{{enp|}}}sign
|fa={{wfa|نشانه}}
|fr=Ce {{wf|panneau}}
|it=Questo {{wi|segnale}}
|pt=Esta placa
|es=Esta señal
|ja={{w日|標識}}
|ko=교통표지<!-- (交通標誌) -->
|nl=Dit bordje
|pl=Ten {{WP|znak}}
|sv=Det tecken
|zh-hans=交通标志
|zh-hant=交通標誌
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|lp={{LangSwitch
|bn=লাইসেন্স প্লেট
|de=Dieses Kennzeichen
|de-at=Diese Nummerntafel
|en-us|en={{{enp|}}}license plate
|en-ca|en-gb={{{enp|}}}licence plate
|fa={{wfa|پلاک خودرو}}
|it=Questa targa
|ja={{w日|ナンバープレート}}
|zh-hans=号牌
|zh-hant=號牌
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|wp={{LangSwitch
|bn=প্যাটার্ন
|de=Dieses Muster
|en={{{enp|}}}{{w|pattern}}
|fa={{wfa|الگو}}
|fr=Ce {{wf|modèle}}
|ja={{w日|紋様}}
|sv=Det mönster
|zh-hans=纹样
|zh-hant=紋樣
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|r|y|ey={{LangSwitch
|bar=Des Symbol
|bn=প্রতীক
|de=Dieses Symbol
|en={{{enp|}}}{{#switch:{{{1}}}|r=roundel|symbol}}
|es/pt=Este {{W|símbolo||{{{lang|{{int:lang|}}}}}}}
|fa={{wfa|نماد}}
|fr=Ce {{wf|symbole}}
|ja={{#switch:{{{1}}}|r={{w日|蛇の目}}|{{w日|記号}}}}
|it=Questo {{wi|simbolo}}
|ko=상징
|nl=Dit {{wn|symbool}}
|pl=Ten {{WP|symbol}}
|sv=Det symbol<!-- kula -->
|zh-hans=徽标
|zh-hant=徽標
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|a={{LangSwitch
|bn=তীর
|de=Dieser Pfeil
|en={{{enp|}}}{{w|arrow}}
|fa={{wfa|فلش (نماد)|پیکان}}
|it=Questa freccia
|ja={{w日|矢印}}
|sv=Det pil
|zh-hans=箭头
|zh-hant=箭頭
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|7={{LangSwitch
|bn=সংখ্যা
|de=Diese Ziffer
|en={{{enp|}}}{{w|digit}}
|es/pt=Este {{W|dígito||{{{lang|{{int:lang|}}}}}}}
|fa={{wfa|رقم}}
|fr=Ce chiffre
|ja={{w日|数字}}
|zh-hans=数字
|zh-hant=數字
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
<!-- Created with ... templates (mainly non-SVG) -->
|bitm={{LangSwitch
|de=Diese Rastergrafik
|en={{{enp|}}}{{w|raster image}}
|fa={{wfa|گرافیک شطرنجی}}
|fr=Cette {{wf|image matricielle}}
|ja={{w日|ビットマップ画像}}
|nl=Deze raster afbeelding
|zh-hans=位图
|zh-hant=點陣圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|file={{LangSwitch
|cs=Tento soubor
|da=Denne fil
|de=Diese Datei
|eo=La dosiero
|en={{{enp|}}}file
|fa=پرونده
|es=Este archivo
|et=See fail
|fi=Tämä tiedosto
|fr=Ce fichier
|he=Αυτό το αρχείο
|hu=Ez a fájl
|it=Questo flusso<!--file-->
|ja=このファイル
|lt=Šis failas
|lv=Šis fails
|mk=Оваа податотека
|nl=Dit bestand
|no=Dette fil
|pl=Ten plikз
|pt=Este arquivo<!--ficheiro-->
|ro=Acest fișier
|ru=Этот файл
|sl=Ta datoteka
|sk=Tento súbor
|sv=Denna fil
|zh-hans=这个文件
|zh-hant=這個檔案
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|math={{LangSwitch
|en={{{enp|}}}{{w|image (mathematics)|mathematical image}}
|fa={{wfa|تصویر (ریاضیات)|تصویر ریاضی}}
|bn=গাণিতিক চিত্র
|de=Diese mathematische Darstellung
|fr=Cette {{wf|Image (mathématiques)|image mathématique}}
|ja={{w日|像 (数学)|数学の像}}
|zh-hans=数学像点
|zh-hant=數學像點
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|pano={{LangSwitch
|bn={{w|Autostitch|অটোস্টিকচ}} {{W|Panorama|সামগ্রিক দৃশ্যের চিত্র}}
|de=Dieses Panoramabild
|en={{{enp|}}}{{w|Panorama|panoramic image}}
|es=Esta imagen panorámica
|fa={{wfa|سراسرنما|نگارهٔ سراسرنما}}
|fi={{w|panoraamakuva||fi}}
|fr=Cette image {{wf|panorama|panoramique}}
|hu={{wh|Panoráma|panorámakép}}
|it=Questa fotografia panoramica
|ja={{w日|パノラマ写真}}
|nl=Deze panoramische afbeelding
|pl=Ta {{w|panorama (zdjęcie)|panorama|pl}}
|pt=Esta imagem panorâmica
|sv=Det panoramabilden
|zh-hans=全景图
|zh-hant=全景圖
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|plot={{LangSwitch
|bar=Dea Plot
|de=Dieser Plot
|en={{{enp|}}}plot
|fa=نمودار
|fr=Cette {{Wf|représentation graphique}}
|Ja={{w日|プロット図}}
|zh-hans=图表
|zh-hant=圖表
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
|pres={{LangSwitch
|de=Diese Präsentation
|en={{{enp|}}}{{w|presentation}}
|es=Esta presentación
|fa={{wfa|ارائه}}
|fr=Cette présentation
|it=Questa presentazione
|ja={{w日|プレゼンテーション}}
|nl=Deze presentatie
|pl=Ta grafika prezentacyjna
|pt=Esta apresentação
|zh-hans=演示
|zh-hant=簡報
|default={{#ifeq:{{{2}}}|~||{{#if:{{{2|}}}|{{{2}}}|_?_}}}}
|lang={{{lang|}}}}}
<!-- when code exists but no translation for that language -->
<!-- With |default=~ the English translation is returned -->
<!-- With |#default= value of parameter 2 will be returned -->
<!-- Therefore parameter 2 should be the standard "what" name-->
<!-- for code not in the list, either the 2nd parameter, or -->
<!-- if no 2nd parameter, the code itself will be displayed -->
|-={{#ifeq:{{{2}}}|~||{{{2|}}}}}
|#default=<includeonly>{{#ifeq:{{padright:{{{1}}}|3|%}}|{{padright:|3|{{{1}}}%%%%}}<!--
-->|{{#if:{{{2|}}}|{{#ifeq:{{{2}}}|~|~?~|{{{2}}}}}|{{#if:{{{1|}}}<!-- code does not exist
-->|[[Category:Commons:Unspecified topic|{{{1|-}}}]]}}}}<!-- + maintenance category
-->|{{#invoke:Char|subst|1={{{1|}}}}}}}<!-- more than 3 chars: display them --></includeonly>
<!-- {{#ifeq:{{padleft:|1|{{{1|}}}}}|:|[[Category:Commons:Unspecified topic|{{{1|}}}]]}} -->
}}<noinclude>
Internationalization page, used by e.g. <!-- {{t|Igen}} and --> the {{C|SVG created with ... templates}} and others
:This template is used by many templates like e.g. {{t0|Created with Other tool/de}} with two parameters:
:# the short code (mostly one letter, or a few letters) like for {{T0|Igen/sub}},
:# the default value if no code fits. To avoid the wrong use of "en" the <code>|#default= </code> option is necessary.
:
:{{T0|Igen/sub}} often spreads short codes to different subcategories while Igen/top uses fewer names.
:The short code defined with <code>s=</code> is passed from {{t0|Image generation}} and other templates;
:if another code should be used it can be defined with <code>w=</code>; to just ''suppress'' the usage of <code>s=</code> use <code>w=</code> without a value.
:
:{{0}}
:
:For languages with different {{W|Grammatical gender|genders}} (like de, fr, it, pl, pt...) the names must be defined ''with'' the {{W|demonstratives}}.
{{Use sandbox|testcase= }}
See also the [[Template talk:Igen/top|talk page]] for a table of all codes.
{{Heavily used template}}
The system can only display ''topics'' (f=flags, i=icons, l=logos, m=maps, ...) when a translation is provided within this template for ''that'' topic in ''that'' language. <br>When the translation fails, the output depends on
:when the code exists in that template, but no translation for that language, it depends on the value of parameter 2:
:* (none) an error code like "_?_" is returned (that should never happen!)
:* "~" the (''always existing'') English translation is returned
:* otherwise the value of parameter 2 (the standard text) is returned.
:when the code does not exist in that template, parameter 1 is checked:<br>
:* when it contains ''more than 3 characters'' it is displayed; otherwise it depends on the value of parameter 2:
:** (none) the untranslated value of parameter 1 is returned,
:** "~" an error code like "~?~" is returned,
:** otherwise the value of parameter 2 (the standard text) is returned,
: '''and''' categorization to a {{C|Commons:Unspecified topic|maintenance category}} occurs.
The skeleton is prepared, and when users want to see things in their language they ought to maintain and to expand that template.<br>
If a translation is missing in the current display language, only the standard text is shown, as it had been before.
[[Category:Templates using LangSwitch for internationalisation]]</noinclude>
psfwu0awktv3p3hrgfyvkco4o57wd95
Module:Igenmod
828
1348
10739
2023-03-04T15:11:52Z
commons>Sarang
0
expansion
10739
Scribunto
text/plain
local p = {}
-----------------------------------------------------------------------
-- get workdate via "Module:File"
function p.wrkdate ( )
local str = mw.getCurrentFrame():preprocess('{{REVISIONTIMESTAMP}}')
return str:sub(1,4) .. '-' .. str:sub(5,6) .. '-' .. str:sub(7,8)
end -- end function wrkDate
-- invert the workdate (for a descending sortkey)
function p.invdate ()
local invt = ""
local wdat = p.wrkdate () or "2020-00-00"
invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) )
return invt
end -- end function invDate
-- get extension text (uppercased)
function p.exttext ( )
local page = mw.title.getCurrentTitle().text;
local ptab = mw.text.split(page , '.', true)
return mw.ustring.upper( table.concat(ptab, '', #ptab ) )
end -- end function extText
-- get extension code: "s" for SVG, "n" for anything else
function p.extcode ( )
if p.exttext () == "SVG"
then return "s"
else return "n"
end
end -- end function extCode
-- get default tag: "v" for SVG, "n" for anything else
function p.default ( )
if p.exttext () == "SVG"
then return "v"
else return "n"
end
end -- end function default
-- get unspec tag: "" for SVG, "n" for anything else
function p.unspec ( )
if p.exttext () ~= "SVG"
then return "n"
end
end -- end function unspec
-- replace a final dot
function p.dotrepl ( frame )
local lpar = frame.args
local strg = mw.text.trim( lpar[1] or '' )
local repl = mw.text.trim( lpar[2] or '' )
if mw.ustring.sub(strg, #strg) == "." then
strg = mw.ustring.sub(strg, 1, #strg-1) .. repl
end
return strg
end -- function dotrepl
-- invert the workdate, for a descending sortkey
function p.sortkey ()
local invt = ""
local wdat = p.wrkdate () or "2020-00-00"
invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) )
return invt
end -- end function sortKey
-- get categ:sub: "SVG" for SVG, "PNG" for anything else
function p.categ ( )
if p.exttext () == "SVG"
then return "SVG"
else return "PNG"
end
end -- end function categ
-- function: changes #/*/:/; to \35/\42/\58/\59
function p.subst ( frame )
local gpar = frame.args
local char = mw.text.trim ( gpar[1] )
if mw.ustring.sub ( char, 1, 1 ) == '#' then
return '#' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == '*' then
return '*' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ':' then
return ':' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ';' then
return ';' .. mw.ustring.sub( char, 2, #char );
else
return char;
end
end -- end function subst
-- replace slash by pipe
function p.gsubst (frame)
local frmp = frame.args
return mw.ustring.gsub( frmp[1], "/" , "|" ),_; -- replace slash by pipe
end -- function gsubst
function p.catsort (frame)
local frmp = frame.args
local strg = frmp [1] or " "
strg = mw.ustring.gsub( strg, "/" , "|" ),_; -- replace slash by pipe
strg = mw.ustring.gsub( strg, "[\n]" , "]]\n[[Category:" ); -- replace lfeed by Cat
return strg
end -- function catsort
-- function textsplit (for Colorbox and COAInf.)
function p.split ( frame )
local lpar = frame.args
local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz';
local tmplte = mw.text.trim( lpar[2] or 'Igen/cbx' ); -- or 'Igen/coa'
local argtab = mw.text.split( parstr, "/" );
-- for (trim loop) ?
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };
end
-- function cmdsplit
function p.c_split ( frame )
local lpar = frame.args
local tmplte = mw.text.trim( lpar[1] or '!' );
local parstr = mw.text.trim( lpar[2] ) or 'xx/yy/zz';
local argtab = mw.text.split( parstr, '/', true );
local indx = 1;
local splt = {};
local ppar = {}
for i, v in ipairs(lpar) do
if v ~= nil and lpar [i+2] ~= nil then
splt = mw.text.split( lpar [i+2], '/', true )
if splt [2] == nil then
indx = indx + 1
ppar [indx] = splt [1]
else
splt [1] = mw.text.trim( splt[1] or 'a' )
splt [2] = mw.text.trim( splt[2] or 'b' )
local xxx = splt [1]
ppar [splt [1]] = splt [2]
-- indx = indx + 1
-- ppar [indx] = splt [2] .. splt [1]
end
end
end
local cmdtab = {}
for v = 1, #argtab do
ppar [1] = mw.text.trim( argtab [v] )
table.insert( cmdtab, frame:expandTemplate{ title = tmplte, args = ppar } );
end
return table.concat (cmdtab)
end -- function c_split
-- function textsplit (for geo locations, with wrong "?")
function p.g_split ( frame )
local lpar = frame.args
local parstr = mw.ustring.gsub( mw.text.trim( lpar[1] ), '?', '″', 2 ) or 'xx/yy/zz';
local tmplte = mw.text.trim( lpar[2] or 'Location' ); -- or 'Object location'
local argtab = mw.text.split( parstr, "/" );
-- for (trim loop) ?
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };
end -- function g_split
-- function textsplit (for parameter names, with equal signs)
function p.q_split ( frame )
local lpar = frame.args
local parstr = mw.text.trim( lpar[1] ) or ' ';
local tmplte = mw.text.trim( lpar[2] ) or 'Igen'; --
local outtab = {};
local parind = 0;
local argtab = mw.text.split( parstr, "/" ); -- becomes "|"
local fpos = nil;
for i, v in ipairs(argtab) do
-- if v ~= '' then
v = mw.ustring.gsub( v, "¦" , "/" ); -- repl brokenbar by slash ,_
fpos = mw.ustring.find( v, '~' ); -- "~" becomes "="
if fpos == nil then
if v ~= '+' then
parind = parind + 1;
outtab [ parind ] = v; -- positional
end
else
if '+' ~= mw.ustring.sub ( v, fpos+1 ) then
outtab [ mw.ustring.sub ( v, 1, fpos-1 ) ] = mw.ustring.sub ( v, fpos+1 );
end
end
-- end
end
if mw.ustring.sub (tmplte,1,4) == 'Igen' then -- Showname
fpos = mw.ustring.find( outtab [1], ':' ); -- shortcut:
if fpos ~= nil then -- "T;xx:yy" > "T", "s=xx", "w=yy"
outtab['w'] = mw.ustring.sub ( outtab [1], fpos+1 );
outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 );
end
fpos = mw.ustring.find( outtab [1], ';' ); -- shortcut:
if fpos ~= nil then -- "Tool;d" > "Tool", "s=d"
outtab['s'] = mw.ustring.sub ( outtab [1], fpos+1 );
outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 );
end
-- if mw.ustring.sub (tmplte,5) ~= '/coa' then
table.insert( outtab, '+' ); -- re_insert the "+"
-- end
end
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = outtab };
end -- function q_split
-- function t_split: 1 parm "templte/p1/p2/.."
function p.t_split ( frame )
local lpar = frame.args
local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz';
local argtab = mw.text.split( parstr, "/" );
local tmplte = mw.text.trim( table.remove ( argtab, 1 ) );
-- for (trim loop) ?
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };
end -- function t_split
-- global function with 1 parm: can remove special prefixes
-- the pairs [], <>, (), {}
-- doubles as <<, .., ((, && but of course ''not'' [[ and {{
function p.remprf ( frame )
local lpar = frame.args;
if mw.ustring.sub (lpar[1], 1, 2) == '[]'
or mw.ustring.sub (lpar[1], 1, 2) == '<>'
or mw.ustring.sub (lpar[1], 1, 2) == '()'
or mw.ustring.sub (lpar[1], 1, 2) == '{}'
or mw.ustring.sub (lpar[1], 1, 1) == mw.ustring.sub (lpar[1], 2, 2)
and mw.ustring.sub (lpar[1], 1, 2) ~= '[['
and mw.ustring.sub (lpar[1], 1, 2) ~= '{{' then
return mw.ustring.sub (lpar[1], 3 ) -- remove that prefix
else
return lpar[1]
end
end -- function remprf
-- global function with 1 parm: remove any 2-byte prefix
function p.rem2bp ( frame )
local lpar = frame.args;
return mw.ustring.sub (lpar[1], 3 )
end -- function rem2bp
-- check whether it is a new Inkscape file
function p.inkscape ( frame )
local otab = {}
if p.exttext () ~= "SVG" then
table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } );
else
local cat = "Unspec New SVG created with Inkscape"
local key = "{{padleft:{{#expr:{{CURRENTYEAR}} -{{REVISIONYEAR}}}}|2|0}}"
key = key .."{{padleft:{{#expr:{{CURRENTMONTH2}}-{{REVISIONMONTH}}}}|2|0}}"
key = key .."{{padleft:{{#expr:{{CURRENTDAY2}} -{{REVISIONDAY2}}}}|2|0}}"
table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } });
end
return table.concat (otab);
end -- end function inkscape
----------------------- TEST ------------------------------------------
-- check whether it is a new Inkscape file
function p.newscape ( frame )
local otab = {}
if p.exttext () ~= "SVG" then
table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } );
else
local wdat = p.wrkdate () or "2020-00-00"
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08"
if mw.ustring.sub (wdat, 1, 7) == mw.ustring.sub (sdat, 1, 7) then
local cat = "Unspec new SVG created with Inkscape"
local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) )
table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } });
-- local msg = " Template [[Template:Inkscape|{{Inkscape}}]] without W3C-specification is deprecated ! "
-- table.insert(otab, frame:expandTemplate{ title = "error", args = {msg} } );
else
table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } );
-- table.insert(otab, frame:expandTemplate{ title = "=", args = {wdat..sdat} } ); -- test output
end
end
return table.concat (otab);
end -- end function newscape
-- function: invert date
function p.invtest ( frame )
local gpar = frame.args
local wdat = mw.text.trim ( gpar[1] ) or '2020-00-00'
-- local leng = tonumber ( gpar[2] ) or 7
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08-30"
local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) )
return key
end -- end function invTest
-- check whether it is a new file
function p.newfile ( frame )
if p.exttext () ~= "SVG" then
return "n"
else
local leng = frame [1] or 7;
local wdat = p.wrkdate () or "2020-00-00"
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} )
local leng = tonumber ( frame.args[1] or 7 )
if mw.ustring.sub (wdat, 1, leng) ~= mw.ustring.sub (sdat, 1, leng)
then return "s"
else return "newcat"
end
end
end -- end function newFile
function p.cattest (args)
local categ = mw.ext.cattools
local category = args[1] or "Category:Igen/top subtemplates"
local page = args[2] or "Template:Igen/top:d"
if categ.hasPage( category, page )
then return page .. " ist in category " .. category .. " enthalten"
else return page .. " gibt es nicht in " .. category .. " !"
end
end
function p.sysdate ( )
return os.date ( )
end
function p.compare ( )
local wdat = p.wrkdate () or "2020-00-00"
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} )
return "W="..wdat ..", S="..sdat.."."
end
-----------------------------------------------------------------------
return p
t5v2kkfo6h17xx4z55z62l1179tcggd
10740
10739
2026-08-25T23:38:30Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Igenmod]]
10739
Scribunto
text/plain
local p = {}
-----------------------------------------------------------------------
-- get workdate via "Module:File"
function p.wrkdate ( )
local str = mw.getCurrentFrame():preprocess('{{REVISIONTIMESTAMP}}')
return str:sub(1,4) .. '-' .. str:sub(5,6) .. '-' .. str:sub(7,8)
end -- end function wrkDate
-- invert the workdate (for a descending sortkey)
function p.invdate ()
local invt = ""
local wdat = p.wrkdate () or "2020-00-00"
invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) )
return invt
end -- end function invDate
-- get extension text (uppercased)
function p.exttext ( )
local page = mw.title.getCurrentTitle().text;
local ptab = mw.text.split(page , '.', true)
return mw.ustring.upper( table.concat(ptab, '', #ptab ) )
end -- end function extText
-- get extension code: "s" for SVG, "n" for anything else
function p.extcode ( )
if p.exttext () == "SVG"
then return "s"
else return "n"
end
end -- end function extCode
-- get default tag: "v" for SVG, "n" for anything else
function p.default ( )
if p.exttext () == "SVG"
then return "v"
else return "n"
end
end -- end function default
-- get unspec tag: "" for SVG, "n" for anything else
function p.unspec ( )
if p.exttext () ~= "SVG"
then return "n"
end
end -- end function unspec
-- replace a final dot
function p.dotrepl ( frame )
local lpar = frame.args
local strg = mw.text.trim( lpar[1] or '' )
local repl = mw.text.trim( lpar[2] or '' )
if mw.ustring.sub(strg, #strg) == "." then
strg = mw.ustring.sub(strg, 1, #strg-1) .. repl
end
return strg
end -- function dotrepl
-- invert the workdate, for a descending sortkey
function p.sortkey ()
local invt = ""
local wdat = p.wrkdate () or "2020-00-00"
invt = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
invt = invt .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
invt = invt .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9, 10 )) )
return invt
end -- end function sortKey
-- get categ:sub: "SVG" for SVG, "PNG" for anything else
function p.categ ( )
if p.exttext () == "SVG"
then return "SVG"
else return "PNG"
end
end -- end function categ
-- function: changes #/*/:/; to \35/\42/\58/\59
function p.subst ( frame )
local gpar = frame.args
local char = mw.text.trim ( gpar[1] )
if mw.ustring.sub ( char, 1, 1 ) == '#' then
return '#' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == '*' then
return '*' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ':' then
return ':' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ';' then
return ';' .. mw.ustring.sub( char, 2, #char );
else
return char;
end
end -- end function subst
-- replace slash by pipe
function p.gsubst (frame)
local frmp = frame.args
return mw.ustring.gsub( frmp[1], "/" , "|" ),_; -- replace slash by pipe
end -- function gsubst
function p.catsort (frame)
local frmp = frame.args
local strg = frmp [1] or " "
strg = mw.ustring.gsub( strg, "/" , "|" ),_; -- replace slash by pipe
strg = mw.ustring.gsub( strg, "[\n]" , "]]\n[[Category:" ); -- replace lfeed by Cat
return strg
end -- function catsort
-- function textsplit (for Colorbox and COAInf.)
function p.split ( frame )
local lpar = frame.args
local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz';
local tmplte = mw.text.trim( lpar[2] or 'Igen/cbx' ); -- or 'Igen/coa'
local argtab = mw.text.split( parstr, "/" );
-- for (trim loop) ?
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };
end
-- function cmdsplit
function p.c_split ( frame )
local lpar = frame.args
local tmplte = mw.text.trim( lpar[1] or '!' );
local parstr = mw.text.trim( lpar[2] ) or 'xx/yy/zz';
local argtab = mw.text.split( parstr, '/', true );
local indx = 1;
local splt = {};
local ppar = {}
for i, v in ipairs(lpar) do
if v ~= nil and lpar [i+2] ~= nil then
splt = mw.text.split( lpar [i+2], '/', true )
if splt [2] == nil then
indx = indx + 1
ppar [indx] = splt [1]
else
splt [1] = mw.text.trim( splt[1] or 'a' )
splt [2] = mw.text.trim( splt[2] or 'b' )
local xxx = splt [1]
ppar [splt [1]] = splt [2]
-- indx = indx + 1
-- ppar [indx] = splt [2] .. splt [1]
end
end
end
local cmdtab = {}
for v = 1, #argtab do
ppar [1] = mw.text.trim( argtab [v] )
table.insert( cmdtab, frame:expandTemplate{ title = tmplte, args = ppar } );
end
return table.concat (cmdtab)
end -- function c_split
-- function textsplit (for geo locations, with wrong "?")
function p.g_split ( frame )
local lpar = frame.args
local parstr = mw.ustring.gsub( mw.text.trim( lpar[1] ), '?', '″', 2 ) or 'xx/yy/zz';
local tmplte = mw.text.trim( lpar[2] or 'Location' ); -- or 'Object location'
local argtab = mw.text.split( parstr, "/" );
-- for (trim loop) ?
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };
end -- function g_split
-- function textsplit (for parameter names, with equal signs)
function p.q_split ( frame )
local lpar = frame.args
local parstr = mw.text.trim( lpar[1] ) or ' ';
local tmplte = mw.text.trim( lpar[2] ) or 'Igen'; --
local outtab = {};
local parind = 0;
local argtab = mw.text.split( parstr, "/" ); -- becomes "|"
local fpos = nil;
for i, v in ipairs(argtab) do
-- if v ~= '' then
v = mw.ustring.gsub( v, "¦" , "/" ); -- repl brokenbar by slash ,_
fpos = mw.ustring.find( v, '~' ); -- "~" becomes "="
if fpos == nil then
if v ~= '+' then
parind = parind + 1;
outtab [ parind ] = v; -- positional
end
else
if '+' ~= mw.ustring.sub ( v, fpos+1 ) then
outtab [ mw.ustring.sub ( v, 1, fpos-1 ) ] = mw.ustring.sub ( v, fpos+1 );
end
end
-- end
end
if mw.ustring.sub (tmplte,1,4) == 'Igen' then -- Showname
fpos = mw.ustring.find( outtab [1], ':' ); -- shortcut:
if fpos ~= nil then -- "T;xx:yy" > "T", "s=xx", "w=yy"
outtab['w'] = mw.ustring.sub ( outtab [1], fpos+1 );
outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 );
end
fpos = mw.ustring.find( outtab [1], ';' ); -- shortcut:
if fpos ~= nil then -- "Tool;d" > "Tool", "s=d"
outtab['s'] = mw.ustring.sub ( outtab [1], fpos+1 );
outtab[1] = mw.ustring.sub ( outtab [1],1, fpos-1 );
end
-- if mw.ustring.sub (tmplte,5) ~= '/coa' then
table.insert( outtab, '+' ); -- re_insert the "+"
-- end
end
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = outtab };
end -- function q_split
-- function t_split: 1 parm "templte/p1/p2/.."
function p.t_split ( frame )
local lpar = frame.args
local parstr = mw.text.trim( lpar[1] ) or 'xx/yy/zz';
local argtab = mw.text.split( parstr, "/" );
local tmplte = mw.text.trim( table.remove ( argtab, 1 ) );
-- for (trim loop) ?
return mw.getCurrentFrame(): expandTemplate { title = tmplte, args = argtab };
end -- function t_split
-- global function with 1 parm: can remove special prefixes
-- the pairs [], <>, (), {}
-- doubles as <<, .., ((, && but of course ''not'' [[ and {{
function p.remprf ( frame )
local lpar = frame.args;
if mw.ustring.sub (lpar[1], 1, 2) == '[]'
or mw.ustring.sub (lpar[1], 1, 2) == '<>'
or mw.ustring.sub (lpar[1], 1, 2) == '()'
or mw.ustring.sub (lpar[1], 1, 2) == '{}'
or mw.ustring.sub (lpar[1], 1, 1) == mw.ustring.sub (lpar[1], 2, 2)
and mw.ustring.sub (lpar[1], 1, 2) ~= '[['
and mw.ustring.sub (lpar[1], 1, 2) ~= '{{' then
return mw.ustring.sub (lpar[1], 3 ) -- remove that prefix
else
return lpar[1]
end
end -- function remprf
-- global function with 1 parm: remove any 2-byte prefix
function p.rem2bp ( frame )
local lpar = frame.args;
return mw.ustring.sub (lpar[1], 3 )
end -- function rem2bp
-- check whether it is a new Inkscape file
function p.inkscape ( frame )
local otab = {}
if p.exttext () ~= "SVG" then
table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } );
else
local cat = "Unspec New SVG created with Inkscape"
local key = "{{padleft:{{#expr:{{CURRENTYEAR}} -{{REVISIONYEAR}}}}|2|0}}"
key = key .."{{padleft:{{#expr:{{CURRENTMONTH2}}-{{REVISIONMONTH}}}}|2|0}}"
key = key .."{{padleft:{{#expr:{{CURRENTDAY2}} -{{REVISIONDAY2}}}}|2|0}}"
table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } });
end
return table.concat (otab);
end -- end function inkscape
----------------------- TEST ------------------------------------------
-- check whether it is a new Inkscape file
function p.newscape ( frame )
local otab = {}
if p.exttext () ~= "SVG" then
table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } );
else
local wdat = p.wrkdate () or "2020-00-00"
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08"
if mw.ustring.sub (wdat, 1, 7) == mw.ustring.sub (sdat, 1, 7) then
local cat = "Unspec new SVG created with Inkscape"
local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) )
table.insert(otab, frame:expandTemplate{ title = "Igen/cat", args = {cat, key } });
-- local msg = " Template [[Template:Inkscape|{{Inkscape}}]] without W3C-specification is deprecated ! "
-- table.insert(otab, frame:expandTemplate{ title = "error", args = {msg} } );
else
table.insert(otab, frame:expandTemplate{ title = "=", args = {" "} } );
-- table.insert(otab, frame:expandTemplate{ title = "=", args = {wdat..sdat} } ); -- test output
end
end
return table.concat (otab);
end -- end function newscape
-- function: invert date
function p.invtest ( frame )
local gpar = frame.args
local wdat = mw.text.trim ( gpar[1] ) or '2020-00-00'
-- local leng = tonumber ( gpar[2] ) or 7
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} ) or "2020-08-30"
local key = string.format ( "%.4u" , 2030 - tonumber ( string.sub ( wdat, 1, 4 )) )
key = key .. string.format ( "%.2u" , 12 - tonumber ( string.sub ( wdat, 6, 7 )) )
key = key .. string.format ( "%.2u" , 31 - tonumber ( string.sub ( wdat, 9,10 )) )
return key
end -- end function invTest
-- check whether it is a new file
function p.newfile ( frame )
if p.exttext () ~= "SVG" then
return "n"
else
local leng = frame [1] or 7;
local wdat = p.wrkdate () or "2020-00-00"
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} )
local leng = tonumber ( frame.args[1] or 7 )
if mw.ustring.sub (wdat, 1, leng) ~= mw.ustring.sub (sdat, 1, leng)
then return "s"
else return "newcat"
end
end
end -- end function newFile
function p.cattest (args)
local categ = mw.ext.cattools
local category = args[1] or "Category:Igen/top subtemplates"
local page = args[2] or "Template:Igen/top:d"
if categ.hasPage( category, page )
then return page .. " ist in category " .. category .. " enthalten"
else return page .. " gibt es nicht in " .. category .. " !"
end
end
function p.sysdate ( )
return os.date ( )
end
function p.compare ( )
local wdat = p.wrkdate () or "2020-00-00"
local sdat = mw.getCurrentFrame():callParserFunction( "#time", { 'Y-m-d', datestr} )
return "W="..wdat ..", S="..sdat.."."
end
-----------------------------------------------------------------------
return p
t5v2kkfo6h17xx4z55z62l1179tcggd
Module:Char
828
1349
10741
2020-10-18T12:01:19Z
commons>CptViraj
0
Protected "[[Module:Char]]": [[Commons:Protection policy|High-risk Lua module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10741
Scribunto
text/plain
-- This function can substitute some critical leading characters
-- by their decimal numeric character references
-- to avoid their interpretion as wiki syntax
local ncr = {}
-- function: removes characters at the start of the string: '#', '*', ':', ';'
function ncr.subst ( frame )
local gpar = frame.args
local char = ''
if gpar then char = mw.text.trim ( gpar[1] )-- global
else char = mw.text.trim ( frame ) -- local
end
if mw.ustring.sub ( char, 1, 1 ) == '#' then
return '#' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == '*' then
return '*' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ':' then
return ':' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ';' then
return ';' .. mw.ustring.sub( char, 2, #char );
else
return char;
end
end -- end function subst
-- alias long function name for abbreviation
function ncr.substitute ( frame )
local gpar = frame.args
return ncr.subst ( gpar[1] );
end -- end function substitute
-- function: removes characters: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}'
function ncr.nowiki ( frame )
local gpar = frame.args
return mw.text.nowiki( gpar[1] );
end -- end function nowiki
return ncr;
bnr3b7ned5uocz6fk4wt0cv08y7bm7t
10742
10741
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Char]]
10741
Scribunto
text/plain
-- This function can substitute some critical leading characters
-- by their decimal numeric character references
-- to avoid their interpretion as wiki syntax
local ncr = {}
-- function: removes characters at the start of the string: '#', '*', ':', ';'
function ncr.subst ( frame )
local gpar = frame.args
local char = ''
if gpar then char = mw.text.trim ( gpar[1] )-- global
else char = mw.text.trim ( frame ) -- local
end
if mw.ustring.sub ( char, 1, 1 ) == '#' then
return '#' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == '*' then
return '*' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ':' then
return ':' .. mw.ustring.sub( char, 2, #char );
elseif mw.ustring.sub ( char, 1, 1 ) == ';' then
return ';' .. mw.ustring.sub( char, 2, #char );
else
return char;
end
end -- end function subst
-- alias long function name for abbreviation
function ncr.substitute ( frame )
local gpar = frame.args
return ncr.subst ( gpar[1] );
end -- end function substitute
-- function: removes characters: '"', '&', "'", '<', '=', '>', '[', ']', '{', '|', '}'
function ncr.nowiki ( frame )
local gpar = frame.args
return mw.text.nowiki( gpar[1] );
end -- end function nowiki
return ncr;
bnr3b7ned5uocz6fk4wt0cv08y7bm7t
Tempilet:Str right
10
1350
10745
2024-08-29T08:13:46Z
commons>CptViraj
0
Protected "[[Template:Str right]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10745
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0
|{{{1}}}
|{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | |
{{{{{|safesubst:}}}#Invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }}
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
raeguzl7cqrijrzy29szve4880insxv
10746
10745
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Str_right]]
10745
wikitext
text/x-wiki
<includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0
|{{{1}}}
|{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | |
{{{{{|safesubst:}}}#Invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }}
}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
raeguzl7cqrijrzy29szve4880insxv
Tempilet:Custom edit
10
1351
10747
2024-08-08T13:28:51Z
commons>Jarekt
0
10747
wikitext
text/x-wiki
<span class="noprint plainlinks">[{{FULLURL:{{#if: {{{1|}}}
| {{{1|}}}
| {{FULLPAGENAME}}
}}|action=edit{{#if: {{{oldid|}}}
| &oldid={{URLENCODE:{{{oldid|}}}|QUERY}}
}}{{#if: {{{section|}}}
| §ion={{URLENCODE:{{{section|}}}|QUERY}}
}}{{#if: {{{editintro|}}}
| &editintro={{URLENCODE:{{FULLPAGENAME:{{{editintro|}}}}}|QUERY}}
}}{{#if: {{{preloadtitle|}}}
| &preloadtitle={{URLENCODE:{{{preloadtitle|}}}|QUERY}}
}}{{#if: {{{preload|}}}
| &preload={{URLENCODE:{{FULLPAGENAME:{{{preload|}}}}}|QUERY}}
}}
}} {{#if: {{{2|}}}
| {{{2|}}}
| {{#if: {{{text|}}}
| {{{text|}}}
| {{lcfirst:{{int:Edit}}}}
}}
}}]</span><noinclude>
{{Documentation}}
</noinclude>
rjzghwltag85tw4y1cbqaw5aowct9f2
10748
10747
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Custom_edit]]
10747
wikitext
text/x-wiki
<span class="noprint plainlinks">[{{FULLURL:{{#if: {{{1|}}}
| {{{1|}}}
| {{FULLPAGENAME}}
}}|action=edit{{#if: {{{oldid|}}}
| &oldid={{URLENCODE:{{{oldid|}}}|QUERY}}
}}{{#if: {{{section|}}}
| §ion={{URLENCODE:{{{section|}}}|QUERY}}
}}{{#if: {{{editintro|}}}
| &editintro={{URLENCODE:{{FULLPAGENAME:{{{editintro|}}}}}|QUERY}}
}}{{#if: {{{preloadtitle|}}}
| &preloadtitle={{URLENCODE:{{{preloadtitle|}}}|QUERY}}
}}{{#if: {{{preload|}}}
| &preload={{URLENCODE:{{FULLPAGENAME:{{{preload|}}}}}|QUERY}}
}}
}} {{#if: {{{2|}}}
| {{{2|}}}
| {{#if: {{{text|}}}
| {{{text|}}}
| {{lcfirst:{{int:Edit}}}}
}}
}}]</span><noinclude>
{{Documentation}}
</noinclude>
rjzghwltag85tw4y1cbqaw5aowct9f2
Tempilet:Clickable button/iconclass
10
1352
10751
2013-09-14T10:25:00Z
commons>Rillke
0
evaluating text arg
10751
wikitext
text/x-wiki
{{#if:{{{3|}}}
|<!-- a text was specified
-->{{#if:{{{1|}}}
|<!-- a primary icon was specified -->{{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-text-icons
|<!-- no secondary icon was specified --> ui-button-text-icon-primary
}}
|<!-- no primary icon specified --> {{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-text-icon-secondary
|<!-- no secondary icon was specified --> ui-button-text-only
}}
}}
|<!-- no text was specified
-->{{#if:{{{1|}}}
|<!-- a primary icon was specified -->{{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-icons-only
|<!-- no secondary icon was specified --> ui-button-icon-only
}}
|<!-- no primary icon specified --> {{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-icon-only
|<!-- no secondary icon was specified --> error
}}
}}
}}
lhcosganbcjza7n61x8xc8wjmog8aka
10752
10751
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Clickable_button/iconclass]]
10751
wikitext
text/x-wiki
{{#if:{{{3|}}}
|<!-- a text was specified
-->{{#if:{{{1|}}}
|<!-- a primary icon was specified -->{{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-text-icons
|<!-- no secondary icon was specified --> ui-button-text-icon-primary
}}
|<!-- no primary icon specified --> {{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-text-icon-secondary
|<!-- no secondary icon was specified --> ui-button-text-only
}}
}}
|<!-- no text was specified
-->{{#if:{{{1|}}}
|<!-- a primary icon was specified -->{{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-icons-only
|<!-- no secondary icon was specified --> ui-button-icon-only
}}
|<!-- no primary icon specified --> {{#if:{{{2|}}}
|<!-- a secondary icon was specified --> ui-button-icon-only
|<!-- no secondary icon was specified --> error
}}
}}
}}
lhcosganbcjza7n61x8xc8wjmog8aka
Module:Fallback
828
1353
10753
2018-11-08T14:08:56Z
commons>Jarekt
0
Splitting [[Module:Fallback]] into [[Module:Autotranslate]], [[Module:LangSwitch]] and [[Module:Fallback]]
10753
Scribunto
text/plain
--[[
__ __ _ _ _____ _ _ _ _
| \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __
| |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ /
| | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| <
|_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\
Authors and maintainers:
* User:Zolo - original version
* User:Jarekt
]]
local p = {}
--[[
translatelua
Allows easy translation or internalization of pages in Lua.
Example Usage from a template:
{{#invoke: fallback|translatelua| i18n/oil on canvas|lang={{{lang|}}}}}
Parameters:
frame.args.1 - name of translation module
frame.args.2 - field name of the structure in Module:[frame.args.1] to use
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.translatelua(frame)
local lang = mw.text.trim(frame.args.lang)
local page = require('Module:' .. mw.text.trim(frame.args[1])) -- page should only contain a simple of translations
if not lang or lang == '' then
lang = frame:callParserFunction("int", "lang")
end
if frame.args[2] then
page = page[mw.text.trim(frame.args[2])]
end
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
for _,language in ipairs(langList) do
if page[language] then
return page[language]
end
end
end
--[[
fblist
Similar to mw.language.getFallbacksFor(lang) but uses Commons old fallback chain
Parameters:
lang - desired language (often user's native language)
Error Handling:
]]
function p.fblist(lang) -- list the full fallback chain from a language to en
local fbtable = p.fallbackloop{lang:lower()}
table.insert(fbtable, 'default')
table.insert(fbtable, 'en')
return fbtable
end
local function _inArray(x, t)
for i, v in ipairs(t) do
if v == x then return i end
end
return -1
end
function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables)
local langlist = require('Module:Fallbacklist')
local changes = false
for i, j in ipairs(fbtable) do
local seq = langlist[j]
if seq then
for k, l in ipairs(seq) do
if _inArray(l, fbtable) == -1 then
table.insert(fbtable, l)
changes = true
end
end
end
end
if changes then
return p.fallbackloop(fbtable)
end
return fbtable
end
return p
c8daj99p9kviuy2a7je2kzj9emhj009
10754
10753
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Fallback]]
10753
Scribunto
text/plain
--[[
__ __ _ _ _____ _ _ _ _
| \/ | ___ __| |_ _| | ___ _| ___|_ _| | | |__ __ _ ___| | __
| |\/| |/ _ \ / _` | | | | |/ _ (_) |_ / _` | | | '_ \ / _` |/ __| |/ /
| | | | (_) | (_| | |_| | | __/_| _| (_| | | | |_) | (_| | (__| <
|_| |_|\___/ \__,_|\__,_|_|\___(_)_| \__,_|_|_|_.__/ \__,_|\___|_|\_\
Authors and maintainers:
* User:Zolo - original version
* User:Jarekt
]]
local p = {}
--[[
translatelua
Allows easy translation or internalization of pages in Lua.
Example Usage from a template:
{{#invoke: fallback|translatelua| i18n/oil on canvas|lang={{{lang|}}}}}
Parameters:
frame.args.1 - name of translation module
frame.args.2 - field name of the structure in Module:[frame.args.1] to use
frame.args.lang - desired language (often user's native language)
Error Handling:
]]
function p.translatelua(frame)
local lang = mw.text.trim(frame.args.lang)
local page = require('Module:' .. mw.text.trim(frame.args[1])) -- page should only contain a simple of translations
if not lang or lang == '' then
lang = frame:callParserFunction("int", "lang")
end
if frame.args[2] then
page = page[mw.text.trim(frame.args[2])]
end
local langList = mw.language.getFallbacksFor(lang)
table.insert(langList,1,lang)
for _,language in ipairs(langList) do
if page[language] then
return page[language]
end
end
end
--[[
fblist
Similar to mw.language.getFallbacksFor(lang) but uses Commons old fallback chain
Parameters:
lang - desired language (often user's native language)
Error Handling:
]]
function p.fblist(lang) -- list the full fallback chain from a language to en
local fbtable = p.fallbackloop{lang:lower()}
table.insert(fbtable, 'default')
table.insert(fbtable, 'en')
return fbtable
end
local function _inArray(x, t)
for i, v in ipairs(t) do
if v == x then return i end
end
return -1
end
function p.fallbackloop(fbtable) --list of fallback languages in string format (more convenient than tables)
local langlist = require('Module:Fallbacklist')
local changes = false
for i, j in ipairs(fbtable) do
local seq = langlist[j]
if seq then
for k, l in ipairs(seq) do
if _inArray(l, fbtable) == -1 then
table.insert(fbtable, l)
changes = true
end
end
end
end
if changes then
return p.fallbackloop(fbtable)
end
return fbtable
end
return p
c8daj99p9kviuy2a7je2kzj9emhj009
Tempilet:Tmpl
10
1354
10755
2021-08-06T17:03:07Z
commons>CptViraj
0
Protected "[[Template:Tmpl]]": [[Commons:Protection policy|Widely used template]]: [[Special:PermaLink/578762431#Template:Tmpl and Module:Tmpl|Request at COM:ANB]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10755
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude>
{{Documentation}}
pd3axhqea7nbo7qxiyq3aicgysk00ym
10756
10755
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Tmpl]]
10755
wikitext
text/x-wiki
<onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude>
{{Documentation}}
pd3axhqea7nbo7qxiyq3aicgysk00ym
Module:Tmpl
828
1355
10757
2021-08-06T17:03:50Z
commons>CptViraj
0
Protected "[[Module:Tmpl]]": [[Commons:Protection policy|High-risk Lua module]]: [[Special:PermaLink/578762431#Template:Tmpl and Module:Tmpl|Request at COM:ANB]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10757
Scribunto
text/plain
-- This is a helper module for Template:tmpl
local this = {}
function this.renderTmpl(frame)
local args = frame.args
local pargs = (frame:getParent() or {}).args
local result = pargs[0] or ''
for k, v in pairs(pargs) do
local n = tonumber(k) or -1
if (n >= 1 and n <= 9) then
result = mw.ustring.gsub( result, '$' .. n, mw.text.trim(v) )
end
end
return result
end
return this
ep2bcs460ax2usm6nvg7v90dlm9e09v
10758
10757
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Tmpl]]
10757
Scribunto
text/plain
-- This is a helper module for Template:tmpl
local this = {}
function this.renderTmpl(frame)
local args = frame.args
local pargs = (frame:getParent() or {}).args
local result = pargs[0] or ''
for k, v in pairs(pargs) do
local n = tonumber(k) or -1
if (n >= 1 and n <= 9) then
result = mw.ustring.gsub( result, '$' .. n, mw.text.trim(v) )
end
end
return result
end
return this
ep2bcs460ax2usm6nvg7v90dlm9e09v
Tempilet:Str left
10
1356
10759
2016-05-02T13:27:20Z
commons>Jarekt
0
Fulfilling [[Template:Edit request|edit request]] by [[User:Riley Huntley|Riley Huntley]]. Thanks for helping!
10759
wikitext
text/x-wiki
<includeonly>{{ {{{|safesubst:}}}padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude>
{{heavily used template}}
{{documentation}}
</noinclude>
tqfq8u3hctmwbhh4pvher9gkphm721b
10760
10759
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Str_left]]
10759
wikitext
text/x-wiki
<includeonly>{{ {{{|safesubst:}}}padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude>
{{heavily used template}}
{{documentation}}
</noinclude>
tqfq8u3hctmwbhh4pvher9gkphm721b
Tempilet:Tle/parm
10
1357
10761
2020-07-28T05:27:26Z
commons>Sarang
0
typo
10761
wikitext
text/x-wiki
{{#if:{{{2|}}}|{{{3|}}} | {{#if:{{{1|}}}<!--
-->|<span style="font-family:Courier,sans;font-size:110%;{{{5|}}}">{{{1}}}</span> = }}<!--
--><span style="font-family:Verdana,serif;font-style:italic;font-size:96%;{{{4|}}}">{{#invoke:Char|subst|1={{{2}}}}}</span>}}<noinclude>
{{#ifexist:{{PAGENAME}}/doc|{{Documentation}}|
subtemplate of {{Tl|Tle}}, for editing a single parameter entry}}
</noinclude>
roz1amjierwx4r3wdug5tii5rkeama6
10762
10761
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Tle/parm]]
10761
wikitext
text/x-wiki
{{#if:{{{2|}}}|{{{3|}}} | {{#if:{{{1|}}}<!--
-->|<span style="font-family:Courier,sans;font-size:110%;{{{5|}}}">{{{1}}}</span> = }}<!--
--><span style="font-family:Verdana,serif;font-style:italic;font-size:96%;{{{4|}}}">{{#invoke:Char|subst|1={{{2}}}}}</span>}}<noinclude>
{{#ifexist:{{PAGENAME}}/doc|{{Documentation}}|
subtemplate of {{Tl|Tle}}, for editing a single parameter entry}}
</noinclude>
roz1amjierwx4r3wdug5tii5rkeama6
Tempilet:Data
10
1358
10763
2019-07-16T02:19:48Z
commons>4nn1l2
0
Changed protection level for "[[Template:Data]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10763
wikitext
text/x-wiki
{{{{{|safesubst:}}}#if:{{{item|}}}|{{{{{|safesubst:}}}#invoke:Wikidata|formatStatementsE}}}}<noinclude>{{documentation}}</noinclude>
i0as49f56uj28b1dj096g710aipyz61
10764
10763
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Data]]
10763
wikitext
text/x-wiki
{{{{{|safesubst:}}}#if:{{{item|}}}|{{{{{|safesubst:}}}#invoke:Wikidata|formatStatementsE}}}}<noinclude>{{documentation}}</noinclude>
i0as49f56uj28b1dj096g710aipyz61
Module:Wikidata
828
1359
10765
2021-05-03T11:07:41Z
commons>Marsupium
0
fix rendering for snaktype 'somevalue' and 'novalue'
10765
Scribunto
text/plain
--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
local p = {}
local linguistic = require('Module:Linguistic')
local selectClaims = require('Module:Wikidata/GetClaims')
local tools = require('Module:Wikidata/Tools')
local entities = require('Module:Wikidata/FormatEntity')
local dates = require('Module:Wikidata/Dates')
local weblink = require('Module:Weblink')
local langSwitch = require('Module:LangSwitch')._langSwitch
local fb = require('Module:Fallback')
local i18nmessages = mw.loadData('Module:i18n/wikidata')
-- Wiki-specific parameters
local defaultlang = mw.getCurrentFrame():callParserFunction('Int', 'Lang')
local defaultlink = 'wikidata'
local function i18n(str, lang)
local message = i18nmessages[str]
if type(message) == 'string' then
return message
end
return langSwitch(message, lang or defaultlang)
end
local function formatError(key, text)
return error(i18n(key) .. ' ' .. (text or ''), 2)
end
p.getClaims = selectClaims.getClaims
local function removeBlanks(args)
for i = #args, 1, -1 do
if (args[i] == '') or (args[i] == '-') then
table.remove(args, i)
end
end
return args
end
local function getQualifiers(statement, qualifs, params)
if not statement.qualifiers then
return nil
end
if type(qualifs) == 'string' then
qualifs = mw.text.split(qualifs, ',')
end
local vals = {}
for i, j in pairs(qualifs) do
j = string.upper(j)
if statement.qualifiers[j] then
local inserted = false
if statement.qualifiers[j][1].datatype == 'monolingualtext' then
local in_preferred_lang
for _, language in pairs(fb.fblist(params.lang or defaultlang)) do
for _, snak in pairs(statement.qualifiers[j]) do
if isInLanguage(snak, language) then
in_preferred_lang = snak
break
end
end
if in_preferred_lang then
break
end
end
if in_preferred_lang then
table.insert(vals, in_preferred_lang)
inserted = true
end
end
if not inserted then
for _, snak in pairs(statement.qualifiers[j]) do
table.insert(vals, snak)
end
end
end
end
if #vals == 0 then
return nil
end
return vals
end
function p.formatSnak(snak, params)
-- special values: 'novalue' and 'somevalue'
local datatype = snak.datatype
if snak.snaktype == 'somevalue' then
return i18n('somevalue')
elseif snak.snaktype == 'novalue' then
return i18n('novalue')
end
local value = snak.datavalue.value
-- user-defined displayformat
local displayformat = params.displayformat
if type(displayformat) == 'function' then
return displayformat(snak, params)
end
if datatype == 'wikibase-item' or datatype == 'wikibase-property' then
return entities.formatEntity(tools.getId(snak), params)
elseif datatype == 'url' then
return weblink.makelink(value, params.text, params.displayformat)
elseif datatype == 'math' then
return mw.getCurrentFrame():extensionTag('math', value)
elseif datatype == 'string' or datatype == 'external-id' or datatype == 'commonsMedia' then
if params.urlpattern then
local urlpattern = params.urlpattern
if type(urlpattern) == 'function' then
urlpattern = urlpattern(value)
end
value = '[' .. mw.ustring.gsub(urlpattern, '$1', value) .. ' ' .. (params.text or value) .. ']'
end
return value
elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z
return dates.formatTimeSnak(snak, params)
elseif datatype == 'globe-coordinate' then
-- default return a table with latitude, longitude, precision and globe that can be used by another module
if displayformat == 'latitude' then
return value.latitude
elseif displayformat == 'longitude' then
return value.longitude
elseif displayformat == 'qualifier' then
local coord = require('Module:Coordinates')
value.globe = require('Module:Wikidata/Globes')[value.globe]
value.precision = nil
return coord._coord(value)
else
value.globe = require('Module:Wikidata/Globes')[value.globe] -- get English name for geohack
return value
end
elseif datatype == 'quantity' then
-- TODO: handle precision parameters
if displayformat == 'raw' then
return tonumber(value.amount)
else
local formatNum = require('Module:Formatnum')
local number = formatNum.formatNum(value.amount)
local unit = mw.ustring.match(value.unit, '(Q%d+)')
if unit then
number = number .. ' ' .. entities.formatEntity(unit, params)
end
return number
end
elseif datatype == 'monolingualtext' then
if displayformat == 'raw' then
-- Don't use HTML
local byte, char = string.byte, mw.ustring.char
local lang = value.language:lower()
local tag = {}
table.insert(tag, char(0x2068)) -- U+2068: First Strong Isolate (FSI)
table.insert(tag, char(0xE0001)) -- U+E0001: Language tag
for i = 1, #lang do
local b = byte(lang, i)
if b >= 0x61 and b <= 0x7A or b == 0x2D or b == 0x5F then -- 'a'..'z', '-', '_'
table.insert(tag, char(0xE0000 + b)) -- U+E0020..U+E007E: Tag characters (remaps ASCII only)
end
end
table.insert(tag, value.text)
table.insert(tag, char(0xE007F)) -- U+E007F: Cancel Tag
table.insert(tag, char(0x2069)) -- U+2069: Pop Directional Isolate (PDI)
return table.concat(tag)
else
return '<bdi lang="' .. value.language .. '">' .. value.text .. '</bdi>'
end
else
return formatError('unknown-datavalue-type', datatype )
end
end
function p.formatStatementQualifiers(statement, qualifs, params)
if not params then params = {} end
local qualiftable = getQualifiers(statement, qualifs, params)
if not qualiftable then
return nil
end
for i, j in pairs(qualiftable) do
local params = params
if j.datatype == 'globe-coordinate' then
params.displayformat = 'qualifier'
end
qualiftable[i] = p.formatSnak(j, params)
end
return linguistic.conj(qualiftable, params.lang or defaultlang)
end
function p.formatStatement(statement, args)
if not statement.type or statement.type ~= 'statement' then
return formatError('unknown-claim-type', statement.type)
end
if not args then args = {} end
local lang = args.lang or defaultlang
local str = p.formatSnak(statement.mainsnak, args)
local qualifs = args.showqualifiers
if qualifs then
local qualifStr = p.formatStatementQualifiers(statement, qualifs, args)
if qualifStr then
if args.delimiter then
str = str .. args.delimiter .. qualifStr
else
-- str = str .. linguistic.inparentheses(qualifStr, lang)
str = str .. ' (' .. qualifStr .. ')'
end
end
end
if args.showdate then -- when `showdate` and `p.chronosort` are both set, date retrieval is performed twice
local params
local date = dates.getFormattedDate(statement, params)
if date then
-- str = str .. ' <small>' .. linguistic.inparentheses(date, lang) .. '</small>'
str = str .. ' <small>(' .. date ..')</small>'
end
end
if args.showsource and statement.references then
local cite = require('Module:Cite')
local frame = mw.getCurrentFrame()
local sourcestring = ''
for i, ref in pairs(statement.references) do
if ref.snaks.P248 then
for j, source in pairs(ref.snaks.P248) do
if not tools.isSpecial(source) then
local page
if ref.snaks.P304 and not tools.isSpecial(ref.snaks.P304[1]) then
page = ref.snaks.P304[1].datavalue.value
end
local s = cite.citeitem('Q' .. source.datavalue.value['numeric-id'], lang, page)
s = frame:extensionTag('ref', s)
sourcestring = sourcestring .. s
end
end
elseif ref.snaks.P854 and not tools.isSpecial(ref.snaks.P854[1]) then
s = frame:extensionTag('ref', p.getDatavalue(ref.snaks.P854[1]))
sourcestring = sourcestring .. s
end
end
str = str .. sourcestring
end
return str
end
function p._getDescription(entity, lang)
if not entity then
return i18n('no description')
end
if type(entity) == 'string' and (not lang or lang == defaultlang) then
return mw.wikibase.description(entity)
end
entity = mw.wikibase.getEntity(entity)
local descriptions = entity.descriptions
if not descriptions then
return i18n('no description')
end
local langlist = fb.fblist(lang or defaultlang) -- list of fallback languages if no label in the desired language
for i, lg in pairs(langlist) do
if descriptions[lg] then
return descriptions[lg].value
end
end
return i18n('no description')
end
-- == FUNCTIONS HANDLING SEVERAL STATEMENTS ===
function p.stringTable(args) -- find the relevant claims, and formats them as a list of strings
-- Get claims
local claims = p.getClaims(args)
if not claims then
return nil
end
-- Define the formatter function
local formatterFun = p.formatStatement
if args.type == 'date' then
formatterFun = dates.getFormattedDate
elseif args.type == 'qualifiers' then
formatterFun = formatStatementQualifiers
end
-- Format claims
for i = #claims, 1, -1 do
claims[i] = formatterFun(claims[i], args)
if not claims[i] then
table.remove(claims, i)
end
end
return claims
end
function p.formatStatements(args)--Format statements and concat them cleanly
-- If a value is already set, use it
if args.value == '-' then
return nil
end
if args.value then
return args.value
end
-- Obsolete parameters
if args.item then
args.entity = args.item
end
local values = p.stringTable(args) -- gets statements, and format each of them
if not values then
return nil
end
return linguistic.conj(values, args.lang or defaultlang, args.conjtype) -- concatenate them
end
-- == FRAME FUNCTIONS ==
function p.getDescription(frame) -- simple for simple templates like {{Q|}}}
local entity = frame.args.entity
local lang = frame.args.lang
return p._getDescription(entity, lang)
end
function p.formatStatementsE(frame)
local args = {}
if frame == mw.getCurrentFrame() then
args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?)
for k, v in pairs(frame.args) do
args[k] = v
end
else
args = frame
end
args = removeBlanks(args)
return p.formatStatements(args)
end
function p._getLabel(entity, args)
return entities.formatEntity(entity, args)
end
function p.getLabel(frame) -- simple for simple templates like {{Q|}}}
local args = removeBlanks(frame.args)
local entity = args.entity or args[1]
if string.sub(entity, 1, 10) == 'Property:P' then
entity = string.sub(entity, 10)
elseif string.sub(entity, 1, 1) ~= 'P' and string.sub(entity, 1, 1) ~= 'Q'
or not tonumber(string.sub(entity, 2)) then
return i18n('invalid-id')
end
return entities.formatEntity(entity, args)
end
function p._wikidataDate(prop, item, params)
local claims = p.getClaims{entity = item, property = prop}
if not claims then
return nil
end
params = params or {}
local vals = {}
for i, j in pairs(claims) do
local v = dates.getFormattedDate(j, params)
if v then
table.insert(vals, v)
end
end
return linguistic.conj(vals, params.conjtype or 'or')
end
function p.wikidataDate(frame)
p._wikidataDate(frame.args[property], frame.args[params], frame.args)
end
function p._main_date(entity)
-- First try with P580/P582
local startpoint = p._wikidataDate('P580', entity)
local endpoint = p._wikidataDate('P582', entity)
if startpoint or endpoint then
return (startpoint or '') .. ' – ' .. (endpoint or '')
end
-- Else use P585
return p._wikidataDate('P585', entity)
end
function p.main_date(frame)
return p._main_date(frame.args[1])
end
-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
function p.pageId(frame)
local entity = mw.wikibase.getEntityObject()
return entity and entity.id
end
return p
ga2ggpqkipmdb65kqakkj4ry3ejp2pc
10766
10765
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Wikidata]]
10765
Scribunto
text/plain
--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
local p = {}
local linguistic = require('Module:Linguistic')
local selectClaims = require('Module:Wikidata/GetClaims')
local tools = require('Module:Wikidata/Tools')
local entities = require('Module:Wikidata/FormatEntity')
local dates = require('Module:Wikidata/Dates')
local weblink = require('Module:Weblink')
local langSwitch = require('Module:LangSwitch')._langSwitch
local fb = require('Module:Fallback')
local i18nmessages = mw.loadData('Module:i18n/wikidata')
-- Wiki-specific parameters
local defaultlang = mw.getCurrentFrame():callParserFunction('Int', 'Lang')
local defaultlink = 'wikidata'
local function i18n(str, lang)
local message = i18nmessages[str]
if type(message) == 'string' then
return message
end
return langSwitch(message, lang or defaultlang)
end
local function formatError(key, text)
return error(i18n(key) .. ' ' .. (text or ''), 2)
end
p.getClaims = selectClaims.getClaims
local function removeBlanks(args)
for i = #args, 1, -1 do
if (args[i] == '') or (args[i] == '-') then
table.remove(args, i)
end
end
return args
end
local function getQualifiers(statement, qualifs, params)
if not statement.qualifiers then
return nil
end
if type(qualifs) == 'string' then
qualifs = mw.text.split(qualifs, ',')
end
local vals = {}
for i, j in pairs(qualifs) do
j = string.upper(j)
if statement.qualifiers[j] then
local inserted = false
if statement.qualifiers[j][1].datatype == 'monolingualtext' then
local in_preferred_lang
for _, language in pairs(fb.fblist(params.lang or defaultlang)) do
for _, snak in pairs(statement.qualifiers[j]) do
if isInLanguage(snak, language) then
in_preferred_lang = snak
break
end
end
if in_preferred_lang then
break
end
end
if in_preferred_lang then
table.insert(vals, in_preferred_lang)
inserted = true
end
end
if not inserted then
for _, snak in pairs(statement.qualifiers[j]) do
table.insert(vals, snak)
end
end
end
end
if #vals == 0 then
return nil
end
return vals
end
function p.formatSnak(snak, params)
-- special values: 'novalue' and 'somevalue'
local datatype = snak.datatype
if snak.snaktype == 'somevalue' then
return i18n('somevalue')
elseif snak.snaktype == 'novalue' then
return i18n('novalue')
end
local value = snak.datavalue.value
-- user-defined displayformat
local displayformat = params.displayformat
if type(displayformat) == 'function' then
return displayformat(snak, params)
end
if datatype == 'wikibase-item' or datatype == 'wikibase-property' then
return entities.formatEntity(tools.getId(snak), params)
elseif datatype == 'url' then
return weblink.makelink(value, params.text, params.displayformat)
elseif datatype == 'math' then
return mw.getCurrentFrame():extensionTag('math', value)
elseif datatype == 'string' or datatype == 'external-id' or datatype == 'commonsMedia' then
if params.urlpattern then
local urlpattern = params.urlpattern
if type(urlpattern) == 'function' then
urlpattern = urlpattern(value)
end
value = '[' .. mw.ustring.gsub(urlpattern, '$1', value) .. ' ' .. (params.text or value) .. ']'
end
return value
elseif datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z
return dates.formatTimeSnak(snak, params)
elseif datatype == 'globe-coordinate' then
-- default return a table with latitude, longitude, precision and globe that can be used by another module
if displayformat == 'latitude' then
return value.latitude
elseif displayformat == 'longitude' then
return value.longitude
elseif displayformat == 'qualifier' then
local coord = require('Module:Coordinates')
value.globe = require('Module:Wikidata/Globes')[value.globe]
value.precision = nil
return coord._coord(value)
else
value.globe = require('Module:Wikidata/Globes')[value.globe] -- get English name for geohack
return value
end
elseif datatype == 'quantity' then
-- TODO: handle precision parameters
if displayformat == 'raw' then
return tonumber(value.amount)
else
local formatNum = require('Module:Formatnum')
local number = formatNum.formatNum(value.amount)
local unit = mw.ustring.match(value.unit, '(Q%d+)')
if unit then
number = number .. ' ' .. entities.formatEntity(unit, params)
end
return number
end
elseif datatype == 'monolingualtext' then
if displayformat == 'raw' then
-- Don't use HTML
local byte, char = string.byte, mw.ustring.char
local lang = value.language:lower()
local tag = {}
table.insert(tag, char(0x2068)) -- U+2068: First Strong Isolate (FSI)
table.insert(tag, char(0xE0001)) -- U+E0001: Language tag
for i = 1, #lang do
local b = byte(lang, i)
if b >= 0x61 and b <= 0x7A or b == 0x2D or b == 0x5F then -- 'a'..'z', '-', '_'
table.insert(tag, char(0xE0000 + b)) -- U+E0020..U+E007E: Tag characters (remaps ASCII only)
end
end
table.insert(tag, value.text)
table.insert(tag, char(0xE007F)) -- U+E007F: Cancel Tag
table.insert(tag, char(0x2069)) -- U+2069: Pop Directional Isolate (PDI)
return table.concat(tag)
else
return '<bdi lang="' .. value.language .. '">' .. value.text .. '</bdi>'
end
else
return formatError('unknown-datavalue-type', datatype )
end
end
function p.formatStatementQualifiers(statement, qualifs, params)
if not params then params = {} end
local qualiftable = getQualifiers(statement, qualifs, params)
if not qualiftable then
return nil
end
for i, j in pairs(qualiftable) do
local params = params
if j.datatype == 'globe-coordinate' then
params.displayformat = 'qualifier'
end
qualiftable[i] = p.formatSnak(j, params)
end
return linguistic.conj(qualiftable, params.lang or defaultlang)
end
function p.formatStatement(statement, args)
if not statement.type or statement.type ~= 'statement' then
return formatError('unknown-claim-type', statement.type)
end
if not args then args = {} end
local lang = args.lang or defaultlang
local str = p.formatSnak(statement.mainsnak, args)
local qualifs = args.showqualifiers
if qualifs then
local qualifStr = p.formatStatementQualifiers(statement, qualifs, args)
if qualifStr then
if args.delimiter then
str = str .. args.delimiter .. qualifStr
else
-- str = str .. linguistic.inparentheses(qualifStr, lang)
str = str .. ' (' .. qualifStr .. ')'
end
end
end
if args.showdate then -- when `showdate` and `p.chronosort` are both set, date retrieval is performed twice
local params
local date = dates.getFormattedDate(statement, params)
if date then
-- str = str .. ' <small>' .. linguistic.inparentheses(date, lang) .. '</small>'
str = str .. ' <small>(' .. date ..')</small>'
end
end
if args.showsource and statement.references then
local cite = require('Module:Cite')
local frame = mw.getCurrentFrame()
local sourcestring = ''
for i, ref in pairs(statement.references) do
if ref.snaks.P248 then
for j, source in pairs(ref.snaks.P248) do
if not tools.isSpecial(source) then
local page
if ref.snaks.P304 and not tools.isSpecial(ref.snaks.P304[1]) then
page = ref.snaks.P304[1].datavalue.value
end
local s = cite.citeitem('Q' .. source.datavalue.value['numeric-id'], lang, page)
s = frame:extensionTag('ref', s)
sourcestring = sourcestring .. s
end
end
elseif ref.snaks.P854 and not tools.isSpecial(ref.snaks.P854[1]) then
s = frame:extensionTag('ref', p.getDatavalue(ref.snaks.P854[1]))
sourcestring = sourcestring .. s
end
end
str = str .. sourcestring
end
return str
end
function p._getDescription(entity, lang)
if not entity then
return i18n('no description')
end
if type(entity) == 'string' and (not lang or lang == defaultlang) then
return mw.wikibase.description(entity)
end
entity = mw.wikibase.getEntity(entity)
local descriptions = entity.descriptions
if not descriptions then
return i18n('no description')
end
local langlist = fb.fblist(lang or defaultlang) -- list of fallback languages if no label in the desired language
for i, lg in pairs(langlist) do
if descriptions[lg] then
return descriptions[lg].value
end
end
return i18n('no description')
end
-- == FUNCTIONS HANDLING SEVERAL STATEMENTS ===
function p.stringTable(args) -- find the relevant claims, and formats them as a list of strings
-- Get claims
local claims = p.getClaims(args)
if not claims then
return nil
end
-- Define the formatter function
local formatterFun = p.formatStatement
if args.type == 'date' then
formatterFun = dates.getFormattedDate
elseif args.type == 'qualifiers' then
formatterFun = formatStatementQualifiers
end
-- Format claims
for i = #claims, 1, -1 do
claims[i] = formatterFun(claims[i], args)
if not claims[i] then
table.remove(claims, i)
end
end
return claims
end
function p.formatStatements(args)--Format statements and concat them cleanly
-- If a value is already set, use it
if args.value == '-' then
return nil
end
if args.value then
return args.value
end
-- Obsolete parameters
if args.item then
args.entity = args.item
end
local values = p.stringTable(args) -- gets statements, and format each of them
if not values then
return nil
end
return linguistic.conj(values, args.lang or defaultlang, args.conjtype) -- concatenate them
end
-- == FRAME FUNCTIONS ==
function p.getDescription(frame) -- simple for simple templates like {{Q|}}}
local entity = frame.args.entity
local lang = frame.args.lang
return p._getDescription(entity, lang)
end
function p.formatStatementsE(frame)
local args = {}
if frame == mw.getCurrentFrame() then
args = frame:getParent().args -- paramètres du modèle appelant (est-ce vraiment une bonne idée ?)
for k, v in pairs(frame.args) do
args[k] = v
end
else
args = frame
end
args = removeBlanks(args)
return p.formatStatements(args)
end
function p._getLabel(entity, args)
return entities.formatEntity(entity, args)
end
function p.getLabel(frame) -- simple for simple templates like {{Q|}}}
local args = removeBlanks(frame.args)
local entity = args.entity or args[1]
if string.sub(entity, 1, 10) == 'Property:P' then
entity = string.sub(entity, 10)
elseif string.sub(entity, 1, 1) ~= 'P' and string.sub(entity, 1, 1) ~= 'Q'
or not tonumber(string.sub(entity, 2)) then
return i18n('invalid-id')
end
return entities.formatEntity(entity, args)
end
function p._wikidataDate(prop, item, params)
local claims = p.getClaims{entity = item, property = prop}
if not claims then
return nil
end
params = params or {}
local vals = {}
for i, j in pairs(claims) do
local v = dates.getFormattedDate(j, params)
if v then
table.insert(vals, v)
end
end
return linguistic.conj(vals, params.conjtype or 'or')
end
function p.wikidataDate(frame)
p._wikidataDate(frame.args[property], frame.args[params], frame.args)
end
function p._main_date(entity)
-- First try with P580/P582
local startpoint = p._wikidataDate('P580', entity)
local endpoint = p._wikidataDate('P582', entity)
if startpoint or endpoint then
return (startpoint or '') .. ' – ' .. (endpoint or '')
end
-- Else use P585
return p._wikidataDate('P585', entity)
end
function p.main_date(frame)
return p._main_date(frame.args[1])
end
-- returns the page id (Q...) of the current page or nothing of the page is not connected to Wikidata
function p.pageId(frame)
local entity = mw.wikibase.getEntityObject()
return entity and entity.id
end
return p
ga2ggpqkipmdb65kqakkj4ry3ejp2pc
Module:Wikidata/GetClaims
828
1360
10767
2019-06-20T20:26:21Z
commons>Verdy p
0
Undo revision 355512581 by [[Special:Contributions/Verdy p|Verdy p]] ([[User talk:Verdy p|talk]]) still not
10767
Scribunto
text/plain
local p = {}
local datequalifiers = {'P585', 'P571', 'P580', 'P582'}
local tools = require "Module:Wikidata/Tools"
--local datemod = require "Module:Date complexe"
local function notSpecial(claim)
return tools.isValue(claim.mainsnak)
end
function p.hastargetvalue(claim, targets) -- retourne true si la valeur est dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = tools.getMainId(claim)
local targets = tools.splitStr(targets)
return tools.isHere(targets, id) or tools.isSpecial(claim.mainsnak)
end
local function excludevalues(claim, values) -- true si la valeur n'est pas dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return tools.isSpecial(claim.mainsnak) or not ( p.hastargetvalue(claim, values) )
end
local function bestranked(claims)
if not claims then
return nil
end
local preferred, normal = {}, {}
for i, j in pairs(claims) do
if j.rank == 'preferred' then
table.insert(preferred, j)
elseif j.rank == 'normal' then
table.insert(normal, j)
end
end
if #preferred > 0 then
return preferred
else
return normal
end
end
local function withrank(claims, target)
if target == 'best' then
return bestranked(claims)
end
local newclaims = {}
for pos, claim in pairs(claims) do
if target == 'valid' then
if claim.rank ~= 'deprecated' then
table.insert(newclaims, claim)
end
elseif claim.rank == target then
table.insert(newclaims, claim)
end
end
return newclaims
end
function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = tools.splitStr(acceptedqualifs)
acceptedvals = tools.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if tools.getId(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
local function hassource(claim, targetsource, sourceproperty)
sourceproperty = sourceproperty or 'P248'
if not claim.references or not claim.references[sourceproperty] then
return false
end
if not targetsource then -- si toutes les sources sont valides, du moment qu'elles utilisent sourceproperty
return true
end
targetsource = tools.splitStr(targetsource)
for _, source in pairs(claim.references[sourceproperty]) do
local s = tools.getId(source)
for i, target in pairs(targetsource) do
if s == target then return true end
end
end
return true
end
local function excludequalifier(claim, qualifier, qualifiervalues)
return not p.hasqualifier(claim, qualifier, qualifiervalues)
end
local function hasdate(claim)
local claimqualifs = claim.qualifiers
if not claimqualifs then
return false
end
for _, qualif in pairs(claimqualifs) do
if claimqualifs[qualif] and claimqualifs[qualif][1].snaktype == 'value' then
return true
end
end
return false
end
local function haslink(claim, site, lang)
if not(tools.isValue(claim.mainsnak)) then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça
return true
end
local id = tools.getMainId(claim)
local link = tools.siteLink(id, site, lang)
if link then
return true
end
end
local function isinlanguage(claim, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?
local snak = claim.mainsnak
if tools.isSpecial(snak) then
return false
end
if snak.datavalue.type == 'monolingualtext' and snak.datavalue.value.language == lang then
return true
end
return false
end
local function firstvals(claims, numval) -- retourn les numval premières valeurs de la table claims
local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
while (#claims > numval) do
table.remove(claims)
end
return claims
end
local function valinQualif(claim, qualifs)
local claimqualifs = claim.qualifiers
if not claimqualifs then
return nil
end
for i, qualif in pairs(qualifs) do
local vals = claimqualifs[qualif]
if vals and tools.isValue(vals[1]) then
return tools.getValue(vals[1]).time
end
end
end
local function chronosort(claims, inverted)
table.sort(
claims,
function(a,b)
local timeA = valinQualif(a, datequalifiers) or ''
local timeB = valinQualif(b, datequalifiers) or ''
if inverted then
return timeA > timeB -- marche sauf pour les dates < 10 000 av-JC utiliser datemod.before produit un bug
else
return timeB > timeA
end
end
)
return claims
end
local function atDate(claim, mydate)
local newclaims = {}
local mindate = valinQualif(claim, {'P580'})
local maxdate = valinQualif(claim, {'P582'})
if datemod.before(mydate, mindate) and datemod.before(maxdate, mydate) then
return true
end
end
local function check(claim, condition)
if type(condition) == 'function' then -- cas standard
return condition(claim)
end
local msg = "args.condition should be a function"
return error(msg)
end
function p.sortclaims(claims, sorttype)
if not claims then
return nil
end
if sorttype == 'chronological' then
return chronosort(claims)
elseif sorttype == 'inverted' then
return chronosort(claims, true)
elseif type(sorttype) == 'function' then
table.sort(claims, sorttype)
return claims
end
return claims
end
function p.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters
local function filter(condition, filterfunction, funargs)
if not args[condition] then
return
end
for i = #claims, 1, -1 do
if not( filterfunction(claims[i], args[funargs[1]], args[funargs[2]], args[funargs[3]]) ) then
table.remove(claims, i)
end
end
end
filter('targetvalue', p.hastargetvalue, {'targetvalue'} )
filter('isinlang', isinlanguage, {'isinlang'} )
filter('atdate', atDate, {'atdate'} )
filter('qualifier', p.hasqualifier, {'qualifier', 'qualifiervalue'} )
filter('excludequalifier', excludequalifier, {'excludequalifier', 'excludequalifiervalue'} )
filter('source', hassource, {'source', 'sourceproperty'} )
filter('withdate', hasdate, {} )
filter('excludespecial', notSpecial, {} )
filter('excludevalues', excludevalues, {'excludevalues'})
filter('withlink', haslink, {'withlink', 'linklang'} )
filter('condition', check, {'condition'})
claims = withrank(claims, args.rank or 'best')
if args.sorttype then
claims = p.sortclaims(claims, args.sorttype)
end
if #claims == 0 then
return nil
end
if args.numval then
claims = firstvals(claims, args.numval)
end
return claims
end
function p.loadEntity(entity, cache)
if type(entity) ~= 'table' then
if cache then
if not cache[entity] then
cache[entity] = mw.wikibase.getEntity(entity)
mw.log("cached")
end
return cache[entity]
else
return mw.wikibase.getEntity(entity)
end
else
return entity
end
end
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args
if args.claims then -- if claims have already been set, return them
return args.claims
end
local properties = tools.splitStr(args.property)
if not properties then
return error( 'property-param-not-provided' )
end
--Get entity
local entity = args.entity
entity = p.loadEntity(args.entity, args.cache)
if (not entity) or (not entity.claims) then
return nil
end
local claims = {}
for i, prop in pairs(properties) do
prop = string.upper(prop)
for j, claim in pairs(entity.claims[prop] or {}) do
table.insert(claims, claim)
end
end
if (#claims == 0) then
return nil
end
return p.filterClaims(claims, args)
end
return p
dsgny1qywczu0egn7rhuc8gdrkyeela
10768
10767
2026-08-25T23:38:31Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Wikidata/GetClaims]]
10767
Scribunto
text/plain
local p = {}
local datequalifiers = {'P585', 'P571', 'P580', 'P582'}
local tools = require "Module:Wikidata/Tools"
--local datemod = require "Module:Date complexe"
local function notSpecial(claim)
return tools.isValue(claim.mainsnak)
end
function p.hastargetvalue(claim, targets) -- retourne true si la valeur est dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = tools.getMainId(claim)
local targets = tools.splitStr(targets)
return tools.isHere(targets, id) or tools.isSpecial(claim.mainsnak)
end
local function excludevalues(claim, values) -- true si la valeur n'est pas dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return tools.isSpecial(claim.mainsnak) or not ( p.hastargetvalue(claim, values) )
end
local function bestranked(claims)
if not claims then
return nil
end
local preferred, normal = {}, {}
for i, j in pairs(claims) do
if j.rank == 'preferred' then
table.insert(preferred, j)
elseif j.rank == 'normal' then
table.insert(normal, j)
end
end
if #preferred > 0 then
return preferred
else
return normal
end
end
local function withrank(claims, target)
if target == 'best' then
return bestranked(claims)
end
local newclaims = {}
for pos, claim in pairs(claims) do
if target == 'valid' then
if claim.rank ~= 'deprecated' then
table.insert(newclaims, claim)
end
elseif claim.rank == target then
table.insert(newclaims, claim)
end
end
return newclaims
end
function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = tools.splitStr(acceptedqualifs)
acceptedvals = tools.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if tools.getId(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
local function hassource(claim, targetsource, sourceproperty)
sourceproperty = sourceproperty or 'P248'
if not claim.references or not claim.references[sourceproperty] then
return false
end
if not targetsource then -- si toutes les sources sont valides, du moment qu'elles utilisent sourceproperty
return true
end
targetsource = tools.splitStr(targetsource)
for _, source in pairs(claim.references[sourceproperty]) do
local s = tools.getId(source)
for i, target in pairs(targetsource) do
if s == target then return true end
end
end
return true
end
local function excludequalifier(claim, qualifier, qualifiervalues)
return not p.hasqualifier(claim, qualifier, qualifiervalues)
end
local function hasdate(claim)
local claimqualifs = claim.qualifiers
if not claimqualifs then
return false
end
for _, qualif in pairs(claimqualifs) do
if claimqualifs[qualif] and claimqualifs[qualif][1].snaktype == 'value' then
return true
end
end
return false
end
local function haslink(claim, site, lang)
if not(tools.isValue(claim.mainsnak)) then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça
return true
end
local id = tools.getMainId(claim)
local link = tools.siteLink(id, site, lang)
if link then
return true
end
end
local function isinlanguage(claim, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?
local snak = claim.mainsnak
if tools.isSpecial(snak) then
return false
end
if snak.datavalue.type == 'monolingualtext' and snak.datavalue.value.language == lang then
return true
end
return false
end
local function firstvals(claims, numval) -- retourn les numval premières valeurs de la table claims
local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
while (#claims > numval) do
table.remove(claims)
end
return claims
end
local function valinQualif(claim, qualifs)
local claimqualifs = claim.qualifiers
if not claimqualifs then
return nil
end
for i, qualif in pairs(qualifs) do
local vals = claimqualifs[qualif]
if vals and tools.isValue(vals[1]) then
return tools.getValue(vals[1]).time
end
end
end
local function chronosort(claims, inverted)
table.sort(
claims,
function(a,b)
local timeA = valinQualif(a, datequalifiers) or ''
local timeB = valinQualif(b, datequalifiers) or ''
if inverted then
return timeA > timeB -- marche sauf pour les dates < 10 000 av-JC utiliser datemod.before produit un bug
else
return timeB > timeA
end
end
)
return claims
end
local function atDate(claim, mydate)
local newclaims = {}
local mindate = valinQualif(claim, {'P580'})
local maxdate = valinQualif(claim, {'P582'})
if datemod.before(mydate, mindate) and datemod.before(maxdate, mydate) then
return true
end
end
local function check(claim, condition)
if type(condition) == 'function' then -- cas standard
return condition(claim)
end
local msg = "args.condition should be a function"
return error(msg)
end
function p.sortclaims(claims, sorttype)
if not claims then
return nil
end
if sorttype == 'chronological' then
return chronosort(claims)
elseif sorttype == 'inverted' then
return chronosort(claims, true)
elseif type(sorttype) == 'function' then
table.sort(claims, sorttype)
return claims
end
return claims
end
function p.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters
local function filter(condition, filterfunction, funargs)
if not args[condition] then
return
end
for i = #claims, 1, -1 do
if not( filterfunction(claims[i], args[funargs[1]], args[funargs[2]], args[funargs[3]]) ) then
table.remove(claims, i)
end
end
end
filter('targetvalue', p.hastargetvalue, {'targetvalue'} )
filter('isinlang', isinlanguage, {'isinlang'} )
filter('atdate', atDate, {'atdate'} )
filter('qualifier', p.hasqualifier, {'qualifier', 'qualifiervalue'} )
filter('excludequalifier', excludequalifier, {'excludequalifier', 'excludequalifiervalue'} )
filter('source', hassource, {'source', 'sourceproperty'} )
filter('withdate', hasdate, {} )
filter('excludespecial', notSpecial, {} )
filter('excludevalues', excludevalues, {'excludevalues'})
filter('withlink', haslink, {'withlink', 'linklang'} )
filter('condition', check, {'condition'})
claims = withrank(claims, args.rank or 'best')
if args.sorttype then
claims = p.sortclaims(claims, args.sorttype)
end
if #claims == 0 then
return nil
end
if args.numval then
claims = firstvals(claims, args.numval)
end
return claims
end
function p.loadEntity(entity, cache)
if type(entity) ~= 'table' then
if cache then
if not cache[entity] then
cache[entity] = mw.wikibase.getEntity(entity)
mw.log("cached")
end
return cache[entity]
else
return mw.wikibase.getEntity(entity)
end
else
return entity
end
end
function p.getClaims( args ) -- returns a table of the claims matching some conditions given in args
if args.claims then -- if claims have already been set, return them
return args.claims
end
local properties = tools.splitStr(args.property)
if not properties then
return error( 'property-param-not-provided' )
end
--Get entity
local entity = args.entity
entity = p.loadEntity(args.entity, args.cache)
if (not entity) or (not entity.claims) then
return nil
end
local claims = {}
for i, prop in pairs(properties) do
prop = string.upper(prop)
for j, claim in pairs(entity.claims[prop] or {}) do
table.insert(claims, claim)
end
end
if (#claims == 0) then
return nil
end
return p.filterClaims(claims, args)
end
return p
dsgny1qywczu0egn7rhuc8gdrkyeela
Module:Wikidata/Tools
828
1361
10769
2019-07-16T11:23:04Z
commons>4nn1l2
0
Changed protection level for "[[Module:Wikidata/Tools]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite))
10769
Scribunto
text/plain
--Fonctions élémentaires de gestion des snaks Wikidata
local p = {}
p.i18n = require "Module:I18n/wikidata"
local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang")
function p.translate(str, rep1, rep2)
str = p.i18n[str] or str
if rep1 then
str = str:gsub('$1', rep1)
end
if rep2 then
str = str:gsub('$2', rep2)
end
return str
end
function p.snaktype(snak)
return snak.snaktype
end
function p.isSpecial(snak)
return (snak.snaktype ~= 'value')
end
function p.isValue(snak)
return (snak.snaktype == 'value')
end
function p.getId(snak)
if p.isValue(snak) and (snak.datatype == 'wikibase-item') then
return 'Q' .. snak.datavalue.value['numeric-id']
elseif p.isValue(snak) and (snak.datatype == 'wikibase-property') then
return 'P' .. snak.datavalue.value['numeric-id']
end
end
function p.getNumericId(snak)
if p.isValue(snak) then
return snak.datavalue.value['numeric-id']
end
end
function p.getMainId(claim)
return p.getId(claim.mainsnak)
end
function p.EntityId(entity)
if type(entity) == 'string' then
return entity
end
return entity.id
end
function p.getValue(snak)
if (snak.snaktype ~= "value") then
return nil
end
return snak.datavalue.value
end
function p.formatError( key )
return error(p.i18n[key] or key)
end
function p.getEntity( val )
if type(val) == 'table' then
return val
end
if val == '-' then
return nil
end
return mw.wikibase.getEntityObject(val)
end
function p.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparatin
if type(val) == 'string' then
val = mw.text.split(val, ",")
end
return val
end
function p.isHere(searchset, val)
for i, j in pairs(searchset) do
if val == j then
return true
end
end
return false
end
local function wikidataLink(entity)
local name =':d:'
if type(entity) == 'string' then
if entity:match("P[0-9+]") then
entity = "Property:" .. entity
end
return name .. entity
elseif type(entity) == 'table' then
if entity["type"] == "property" then
name = ":d:Property:"
end
return name .. entity.id
elseif type(entity) == nil then
return formatError('entity-not-found')
end
end
function p.siteLink(entity, project, lang)
local id = entity
if type(id) == "table" then
id = id.id
end
if (not id) then
return nil
end
-- default: directly return link to the current wiki
if (not project) or (mw.text.trim(project) == "") then
return mw.wikibase.sitelink(id)
end
-- cleanup up paramaters
project = project:lower()
lang = lang or defaultlang
-- special case: link to wikidata
if project == 'wikidata' then
return ":d:" .. id
end
-- link to other projects
local projects = {
-- parametername = {prefix in wikidata, prefix in wikipedia, is multilingual}
wikipedia = {'wiki', nil, true}, -- wikipedia
commons = {'commonswiki', 'c', false},
commonswiki = {'commonswiki', 'c', false},
wikiquote = {'wikiquote', 'wikiquote', true},
wikivoyage = {'wikivoyage', 'wikivoyage', true},
wikibooks = {'wikibooks', 'wikibooks', true},
wikinews = {'wikinews', 'wikinews', true},
-- meta
-- mediawiki
}
local projectdata = projects[project]
if not projectdata then
return p.formatError('invalid project code: ' .. (project or '?'))
end
local linkcode = projectdata[1]
local prefix = projectdata[2]
local multilang = projectdata[3]
if multilang then
linkcode = lang .. linkcode
end
entity = p.getEntity(entity)
local link = entity:getSitelink(linkcode)
if not link then
return nil
end
link = ':' .. link
if prefix then
link = ':' .. prefix .. link
end
if multilang then
link = ':' .. lang .. link
end
return link
end
function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = p.splitStr(acceptedqualifs)
acceptedvals = p.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if p.getId(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
-- add new values to a list, avoiding duplicates
function p.addnewvalues(old, new)
if not new then
return old
end
for _, j in pairs(new) do
if not p.isHere(old, j) then
table.insert(old, j)
end
end
return old
end
return p
87pvikbk2og4nes5gpjta2a2rbd1jqm
10770
10769
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Wikidata/Tools]]
10769
Scribunto
text/plain
--Fonctions élémentaires de gestion des snaks Wikidata
local p = {}
p.i18n = require "Module:I18n/wikidata"
local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang")
function p.translate(str, rep1, rep2)
str = p.i18n[str] or str
if rep1 then
str = str:gsub('$1', rep1)
end
if rep2 then
str = str:gsub('$2', rep2)
end
return str
end
function p.snaktype(snak)
return snak.snaktype
end
function p.isSpecial(snak)
return (snak.snaktype ~= 'value')
end
function p.isValue(snak)
return (snak.snaktype == 'value')
end
function p.getId(snak)
if p.isValue(snak) and (snak.datatype == 'wikibase-item') then
return 'Q' .. snak.datavalue.value['numeric-id']
elseif p.isValue(snak) and (snak.datatype == 'wikibase-property') then
return 'P' .. snak.datavalue.value['numeric-id']
end
end
function p.getNumericId(snak)
if p.isValue(snak) then
return snak.datavalue.value['numeric-id']
end
end
function p.getMainId(claim)
return p.getId(claim.mainsnak)
end
function p.EntityId(entity)
if type(entity) == 'string' then
return entity
end
return entity.id
end
function p.getValue(snak)
if (snak.snaktype ~= "value") then
return nil
end
return snak.datavalue.value
end
function p.formatError( key )
return error(p.i18n[key] or key)
end
function p.getEntity( val )
if type(val) == 'table' then
return val
end
if val == '-' then
return nil
end
return mw.wikibase.getEntityObject(val)
end
function p.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparatin
if type(val) == 'string' then
val = mw.text.split(val, ",")
end
return val
end
function p.isHere(searchset, val)
for i, j in pairs(searchset) do
if val == j then
return true
end
end
return false
end
local function wikidataLink(entity)
local name =':d:'
if type(entity) == 'string' then
if entity:match("P[0-9+]") then
entity = "Property:" .. entity
end
return name .. entity
elseif type(entity) == 'table' then
if entity["type"] == "property" then
name = ":d:Property:"
end
return name .. entity.id
elseif type(entity) == nil then
return formatError('entity-not-found')
end
end
function p.siteLink(entity, project, lang)
local id = entity
if type(id) == "table" then
id = id.id
end
if (not id) then
return nil
end
-- default: directly return link to the current wiki
if (not project) or (mw.text.trim(project) == "") then
return mw.wikibase.sitelink(id)
end
-- cleanup up paramaters
project = project:lower()
lang = lang or defaultlang
-- special case: link to wikidata
if project == 'wikidata' then
return ":d:" .. id
end
-- link to other projects
local projects = {
-- parametername = {prefix in wikidata, prefix in wikipedia, is multilingual}
wikipedia = {'wiki', nil, true}, -- wikipedia
commons = {'commonswiki', 'c', false},
commonswiki = {'commonswiki', 'c', false},
wikiquote = {'wikiquote', 'wikiquote', true},
wikivoyage = {'wikivoyage', 'wikivoyage', true},
wikibooks = {'wikibooks', 'wikibooks', true},
wikinews = {'wikinews', 'wikinews', true},
-- meta
-- mediawiki
}
local projectdata = projects[project]
if not projectdata then
return p.formatError('invalid project code: ' .. (project or '?'))
end
local linkcode = projectdata[1]
local prefix = projectdata[2]
local multilang = projectdata[3]
if multilang then
linkcode = lang .. linkcode
end
entity = p.getEntity(entity)
local link = entity:getSitelink(linkcode)
if not link then
return nil
end
link = ':' .. link
if prefix then
link = ':' .. prefix .. link
end
if multilang then
link = ':' .. lang .. link
end
return link
end
function p.hasqualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = p.splitStr(acceptedqualifs)
acceptedvals = p.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if p.getId(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
-- add new values to a list, avoiding duplicates
function p.addnewvalues(old, new)
if not new then
return old
end
for _, j in pairs(new) do
if not p.isHere(old, j) then
table.insert(old, j)
end
end
return old
end
return p
87pvikbk2og4nes5gpjta2a2rbd1jqm
Module:I18n/wikidata
828
1362
10771
2024-06-07T12:12:42Z
commons>Ebrahim
0
add Persian translation
10771
Scribunto
text/plain
return {
["trackingcat"] = "Page using data from Wikidata", -- DON'T TRANSLATE
-- SPECIAL VALUES
["novalue"] = {
ar = "غير قابل للتطبيق",
cs = "nelze použít",
de = "nicht anwendbar",
en = "not applicable",
fa = "غیر قابل اطلاق",
fr = "pas applicable",
mk = "неприменливо",
nb = "gjelder ikke",
nl = "niet van toepassing",
nn = "gjeld ikkje",
['pt-br'] = "não aplicável",
['zh-hans'] = "不可用",
['zh-hant'] = "不可用",
},
["somevalue"] = {
ar = "غير معروف",
cs = "neznámé",
de = "unbekannt",
en = "unknown",
fa = "ناشناخته",
fr = "inconnu",
mk = "непознато",
nb = "ukjent",
nl = "onbekend",
nn = "ukjent",
['pt-br'] = "desconhecido",
['zh-hans'] = "未知",
['zh-hant'] = "不明",
},
-- MISSING DATA
["no-label"] = {
ar = "بدون تسمية",
cs = "bez štítku",
de = "keine Bezeichnung",
en = "no label",
fa = "بدون برچسب",
fr = "pas de libellé",
mk = "нема натпис",
nb = "ingen etikett",
nl = "geen label",
nn = "ingen etikett",
['pt-br'] = "sem rótulo",
['zh-hans'] = "无标签",
['zh-hant'] = "無標籤",
},
["no description"] = {
ar = "بدون وصف",
cs = "bez popisu",
de = "keine Beschreibung",
en = "no description",
fa = "بدون توضیح",
fr = "pas de description",
mk = "нема опис",
nb = "ingen beskrivelse",
nl = "geen omschrijving",
nn = "inga skildring",
['pt-br'] = "sem descrição",
['zh-hans'] = "无描述",
['zh-hant'] = "無描述",
},
-- ERRORS
["property-param-not-provided"] = { -- MERGE WITH qualifier-param-not-provided
ar = "وسائط الخاصية غير موجودة",
cs = "chybí parametr „property“",
de = "Parameter 'property' fehlt",
en = "'property' parameter missing",
fa = "فقدان پارامتر 'ویژگی'",
fr = "paramètre 'property' manquant",
mk = "Недостасува параметарот „property“",
nb = "parameteren 'property' mangler",
nl = "parameter 'property' ontbreekt",
nn = "parameteren 'property' manglar",
['pt-br'] = "parâmetro 'property' em falta",
['zh-hans'] = "缺少'property'参数",
['zh-hant'] = "缺少'property'參數",
},
["qualifier-param-not-provided"] = {
ar = "وسائط التصانيف غير موجودة",
cs = "chybí parametr „qualifier“",
de = "Parameter 'qualifier' fehlt",
en = "'qualifier' parameter missing",
fa = "فقدان پارامتر 'توصیفکننده'",
fr = "paramètre 'qualifier' manquant",
mk = "Недостасува параметарот „qualifier“",
nb = "parameteren 'qualifier' mangler",
nl = "parameter 'qualifier' ontbreekt",
nn = "parameteren 'qualifier' manglar",
['pt-br'] = "parâmetro 'qualificador' em falta",
['zh-hans'] = "缺少'qualifier'参数",
['zh-hant'] = "缺少'qualifier'參數",
},
["entity-not-found"] = {
ar = "بدون إدخال",
cs = "entita nenalezena",
de = "Objekt nicht gefunden",
en = "entity not found",
fa = "موجودیت یافت نشده",
fr = "entité non trouvée",
mk = "единицата не е пронајдена",
nb = "entitet ikke funnet",
nl = "entiteit niet gevonden",
nn = "entiteten vart ikkje funnen",
['pt-br'] = "entidade não encontrada",
['zh-hans'] = "找不到实体",
['zh-hant'] = "查無實體",
},
["unknown-claim-type"] = {
ar = "نوع الإدعاء غير معروف",
cs = "neznámý typ tvrzení",
de = "unbekannter Abfragetyp",
en = "unknown claim type",
fa = "نوع ادعای ناشناخته",
fr = "type d'affirmation inconnu",
mk = "непознат тип на тврдење",
nb = "ukjent påstandstype",
nl = "onbekend type claim",
nn = "ukjend påstandstype",
['pt-br'] = "tipo de afirmação desconhecida",
['zh-hans'] = "未知的声称类型",
['zh-hant'] = "不明的主張類型",
},
["unknown-snak-type"] = {
ar = "نوع الكلام غير معروف",
cs = "neznámý typ snaku",
de = "unbekannter ''snak''-Typ",
en = "unknown snak type",
fa = "نوع snak ناشناخته",
fr = "type de snak inconnu",
mk = "непознат тип на спојница",
nb = "ukjent snaktype",
nl = "onbekend snaktype",
nn = "ukjend snaktype",
['pt-br'] = "tipo de conector (''snak'') desconhecido",
['zh-hans'] = "未知的snak类型",
['zh-hant'] = "不明的snak類型",
},
["unknown-datavalue-type"] = {
ar = "نوع قيم البيانات غير معروف.",
cs = "neznámý typ datové hodnoty",
de = "unbekannter Datentyp.",
en = "unknown datavalue type.",
fa = "نوع datavalue ناشناخته.",
fr = "type de donnée inconnu.",
mk = "непознат тип на податочна вредност",
nb = "ukjent dataverditype.",
nl = "onbekend type gegevenswaarde.",
nn = "ukjend dataverditype.",
['pt-br'] = "tipo de dado desconhecido.",
['zh-hans'] = "未知的数据值类型。",
['zh-hant'] = "不明的資料值類型。",
},
["unknown-entity-type"] = {
ar = "نوع الإدخال غير معروف",
cs = "neznámý typ entity",
de = "unbekannter Objekttyp",
en = "unknown entity type",
fa = "نوع موجودیت ناشناخته",
fr = "type d'entité inconnu",
mk = "непознат тип на единица",
nb = "ukjent entitetstype",
nl = "onbekend type entiteit",
nn = "ukjend entitetstype",
['pt-br'] = "tipo de entidade desconhecida",
['zh-hans'] = "未知的实体类型",
['zh-hant'] = "不明的實體類型",
},
["invalid-id"] = {
ar = "المُعرف غير صحيح",
cs = "neplatné ID",
de = "ungültige ID",
en = "invalid ID",
fa = "شناسهٔ نامعتبر",
fr = "identifiant inconnu",
mk = "неважечка назнака",
nb = "ugyldig ID",
nl = "onbekend identificatienummer",
nn = "ugyldig ID",
['pt-br'] = "identificador inválido",
['zh-hans'] = "无效ID",
['zh-hant'] = "無效ID",
},
}
q1u7wdi6uv50emqpctfj5z1o91lrabc
10772
10771
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:I18n/wikidata]]
10771
Scribunto
text/plain
return {
["trackingcat"] = "Page using data from Wikidata", -- DON'T TRANSLATE
-- SPECIAL VALUES
["novalue"] = {
ar = "غير قابل للتطبيق",
cs = "nelze použít",
de = "nicht anwendbar",
en = "not applicable",
fa = "غیر قابل اطلاق",
fr = "pas applicable",
mk = "неприменливо",
nb = "gjelder ikke",
nl = "niet van toepassing",
nn = "gjeld ikkje",
['pt-br'] = "não aplicável",
['zh-hans'] = "不可用",
['zh-hant'] = "不可用",
},
["somevalue"] = {
ar = "غير معروف",
cs = "neznámé",
de = "unbekannt",
en = "unknown",
fa = "ناشناخته",
fr = "inconnu",
mk = "непознато",
nb = "ukjent",
nl = "onbekend",
nn = "ukjent",
['pt-br'] = "desconhecido",
['zh-hans'] = "未知",
['zh-hant'] = "不明",
},
-- MISSING DATA
["no-label"] = {
ar = "بدون تسمية",
cs = "bez štítku",
de = "keine Bezeichnung",
en = "no label",
fa = "بدون برچسب",
fr = "pas de libellé",
mk = "нема натпис",
nb = "ingen etikett",
nl = "geen label",
nn = "ingen etikett",
['pt-br'] = "sem rótulo",
['zh-hans'] = "无标签",
['zh-hant'] = "無標籤",
},
["no description"] = {
ar = "بدون وصف",
cs = "bez popisu",
de = "keine Beschreibung",
en = "no description",
fa = "بدون توضیح",
fr = "pas de description",
mk = "нема опис",
nb = "ingen beskrivelse",
nl = "geen omschrijving",
nn = "inga skildring",
['pt-br'] = "sem descrição",
['zh-hans'] = "无描述",
['zh-hant'] = "無描述",
},
-- ERRORS
["property-param-not-provided"] = { -- MERGE WITH qualifier-param-not-provided
ar = "وسائط الخاصية غير موجودة",
cs = "chybí parametr „property“",
de = "Parameter 'property' fehlt",
en = "'property' parameter missing",
fa = "فقدان پارامتر 'ویژگی'",
fr = "paramètre 'property' manquant",
mk = "Недостасува параметарот „property“",
nb = "parameteren 'property' mangler",
nl = "parameter 'property' ontbreekt",
nn = "parameteren 'property' manglar",
['pt-br'] = "parâmetro 'property' em falta",
['zh-hans'] = "缺少'property'参数",
['zh-hant'] = "缺少'property'參數",
},
["qualifier-param-not-provided"] = {
ar = "وسائط التصانيف غير موجودة",
cs = "chybí parametr „qualifier“",
de = "Parameter 'qualifier' fehlt",
en = "'qualifier' parameter missing",
fa = "فقدان پارامتر 'توصیفکننده'",
fr = "paramètre 'qualifier' manquant",
mk = "Недостасува параметарот „qualifier“",
nb = "parameteren 'qualifier' mangler",
nl = "parameter 'qualifier' ontbreekt",
nn = "parameteren 'qualifier' manglar",
['pt-br'] = "parâmetro 'qualificador' em falta",
['zh-hans'] = "缺少'qualifier'参数",
['zh-hant'] = "缺少'qualifier'參數",
},
["entity-not-found"] = {
ar = "بدون إدخال",
cs = "entita nenalezena",
de = "Objekt nicht gefunden",
en = "entity not found",
fa = "موجودیت یافت نشده",
fr = "entité non trouvée",
mk = "единицата не е пронајдена",
nb = "entitet ikke funnet",
nl = "entiteit niet gevonden",
nn = "entiteten vart ikkje funnen",
['pt-br'] = "entidade não encontrada",
['zh-hans'] = "找不到实体",
['zh-hant'] = "查無實體",
},
["unknown-claim-type"] = {
ar = "نوع الإدعاء غير معروف",
cs = "neznámý typ tvrzení",
de = "unbekannter Abfragetyp",
en = "unknown claim type",
fa = "نوع ادعای ناشناخته",
fr = "type d'affirmation inconnu",
mk = "непознат тип на тврдење",
nb = "ukjent påstandstype",
nl = "onbekend type claim",
nn = "ukjend påstandstype",
['pt-br'] = "tipo de afirmação desconhecida",
['zh-hans'] = "未知的声称类型",
['zh-hant'] = "不明的主張類型",
},
["unknown-snak-type"] = {
ar = "نوع الكلام غير معروف",
cs = "neznámý typ snaku",
de = "unbekannter ''snak''-Typ",
en = "unknown snak type",
fa = "نوع snak ناشناخته",
fr = "type de snak inconnu",
mk = "непознат тип на спојница",
nb = "ukjent snaktype",
nl = "onbekend snaktype",
nn = "ukjend snaktype",
['pt-br'] = "tipo de conector (''snak'') desconhecido",
['zh-hans'] = "未知的snak类型",
['zh-hant'] = "不明的snak類型",
},
["unknown-datavalue-type"] = {
ar = "نوع قيم البيانات غير معروف.",
cs = "neznámý typ datové hodnoty",
de = "unbekannter Datentyp.",
en = "unknown datavalue type.",
fa = "نوع datavalue ناشناخته.",
fr = "type de donnée inconnu.",
mk = "непознат тип на податочна вредност",
nb = "ukjent dataverditype.",
nl = "onbekend type gegevenswaarde.",
nn = "ukjend dataverditype.",
['pt-br'] = "tipo de dado desconhecido.",
['zh-hans'] = "未知的数据值类型。",
['zh-hant'] = "不明的資料值類型。",
},
["unknown-entity-type"] = {
ar = "نوع الإدخال غير معروف",
cs = "neznámý typ entity",
de = "unbekannter Objekttyp",
en = "unknown entity type",
fa = "نوع موجودیت ناشناخته",
fr = "type d'entité inconnu",
mk = "непознат тип на единица",
nb = "ukjent entitetstype",
nl = "onbekend type entiteit",
nn = "ukjend entitetstype",
['pt-br'] = "tipo de entidade desconhecida",
['zh-hans'] = "未知的实体类型",
['zh-hant'] = "不明的實體類型",
},
["invalid-id"] = {
ar = "المُعرف غير صحيح",
cs = "neplatné ID",
de = "ungültige ID",
en = "invalid ID",
fa = "شناسهٔ نامعتبر",
fr = "identifiant inconnu",
mk = "неважечка назнака",
nb = "ugyldig ID",
nl = "onbekend identificatienummer",
nn = "ugyldig ID",
['pt-br'] = "identificador inválido",
['zh-hans'] = "无效ID",
['zh-hant'] = "無效ID",
},
}
q1u7wdi6uv50emqpctfj5z1o91lrabc
Module:Wikidata/FormatEntity
828
1363
10773
2024-04-16T19:23:23Z
commons>Uzume
0
update mw.wikibase API
10773
Scribunto
text/plain
local p = {}
local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang")
local defaultlinktype = {'commonswiki', 'wikipedia'} -- sites accepted for internal links
local fb = require "Module:Fallback"
local tools = require 'Module:Wikidata/Tools'
local getClaims = require "Module:Wikidata/GetClaims".getClaims
local i18n = tools.i18n
local formatError = tools.formatError
local function fblist(lang)
return fb.fblist(lang or defaultlang)
end
function p.getLabel(entity, lang, labelformat)
if (not entity) or (entity == "") then
return nil -- error handling ?
end
if (not lang) or (lang == "") then
lang = defaultlang
end
if type(labelformat) == 'function' then
return labelformat(entity)
end
--[[ using mw.wikibase.getLabel (much more memory efficient) but
* incompatible with ?uselang
* useful only when the Wikidata entity is not loaded, so useless when a Wikipedia link is required
if (type(entity) == 'string') and (lang == defaultlang) then -- much more memory efficient
return mw.wikibase.getLabel(entity)
end
]]--
if type(entity) == 'string' then
entity = mw.wikibase.getEntity(entity)
end
if entity and entity.labels then
for i, lg in pairs(fblist(lang)) do
if entity.labels[lg] then
return entity.labels[lg].value
end
end
end
end
function p.formatEntity( entity, params )
-- UNFOLD PARAMETERS
if (not entity) or (entity == "") then
return nil --formatError('entity-not-found')
end
local id = entity
if type(id) == 'table' then
id = id.id
end
params = params or {}
local lang = params.lang or defaultlang
local speciallabels = params.speciallabels
local displayformat = params.displayformat
local labelformat = params.labelformat
local defaultlabel = params.defaultlabel or id
local linktype = params.link or defaultlinktype
local defaultlinktype = params.defaultlink
local defaultlinkquery = params.defaultlinkquery
if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination
return speciallabels[id]
end
if params.displayformat == 'raw' then
return id
end
local link, label
local str = '' -- text to be returned
-- GET LABEL
label = p.getLabel(entity, lang, labelformat)
-- if no label, return ID + link to WIkidata to make it intelligible
if not label then
if (defaultlabel == '-') then
return nil
end
link = tools.siteLink(id, 'wikidata')
return str .. '[[' .. link .. '|' .. id .. ']]'
end
-- GET LINK
if (linktype == '-') then
return str .. label
end
-- use the linktype parameter to know which site to use
if type(linktype) == 'string' then
linktype = {linktype}
end
for i, lg in pairs(fblist(lang)) do
link = tools.siteLink(entity, linktype[1], lg)
if link or (linktype == "commons") then -- if we have a link or if site has only one language: break
break
end
end
if (not link) and (linktype[2]) then
link = tools.siteLink(entity, linktype[2], lang)
end
-- if no link, use arg defaultlinkquery
if (not link) and defaultlinkquery then
defaultlinkquery.excludespecial = true
defaultlinkquery.entity = entity
local claims = getClaims(defaultlinkquery)
if claims then
for i, j in pairs(claims) do
local id = tools.getMainId(j)
link = tools.siteLink(id, linktype, lang)
if link then
break
end
end
end
end
if link then
return str .. '[[' .. link .. '|' .. label .. ']]'
end
return str .. label
end
return p
tfy0cbix4etcffb6ghy2ehyc39rl60u
10774
10773
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Wikidata/FormatEntity]]
10773
Scribunto
text/plain
local p = {}
local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang")
local defaultlinktype = {'commonswiki', 'wikipedia'} -- sites accepted for internal links
local fb = require "Module:Fallback"
local tools = require 'Module:Wikidata/Tools'
local getClaims = require "Module:Wikidata/GetClaims".getClaims
local i18n = tools.i18n
local formatError = tools.formatError
local function fblist(lang)
return fb.fblist(lang or defaultlang)
end
function p.getLabel(entity, lang, labelformat)
if (not entity) or (entity == "") then
return nil -- error handling ?
end
if (not lang) or (lang == "") then
lang = defaultlang
end
if type(labelformat) == 'function' then
return labelformat(entity)
end
--[[ using mw.wikibase.getLabel (much more memory efficient) but
* incompatible with ?uselang
* useful only when the Wikidata entity is not loaded, so useless when a Wikipedia link is required
if (type(entity) == 'string') and (lang == defaultlang) then -- much more memory efficient
return mw.wikibase.getLabel(entity)
end
]]--
if type(entity) == 'string' then
entity = mw.wikibase.getEntity(entity)
end
if entity and entity.labels then
for i, lg in pairs(fblist(lang)) do
if entity.labels[lg] then
return entity.labels[lg].value
end
end
end
end
function p.formatEntity( entity, params )
-- UNFOLD PARAMETERS
if (not entity) or (entity == "") then
return nil --formatError('entity-not-found')
end
local id = entity
if type(id) == 'table' then
id = id.id
end
params = params or {}
local lang = params.lang or defaultlang
local speciallabels = params.speciallabels
local displayformat = params.displayformat
local labelformat = params.labelformat
local defaultlabel = params.defaultlabel or id
local linktype = params.link or defaultlinktype
local defaultlinktype = params.defaultlink
local defaultlinkquery = params.defaultlinkquery
if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination
return speciallabels[id]
end
if params.displayformat == 'raw' then
return id
end
local link, label
local str = '' -- text to be returned
-- GET LABEL
label = p.getLabel(entity, lang, labelformat)
-- if no label, return ID + link to WIkidata to make it intelligible
if not label then
if (defaultlabel == '-') then
return nil
end
link = tools.siteLink(id, 'wikidata')
return str .. '[[' .. link .. '|' .. id .. ']]'
end
-- GET LINK
if (linktype == '-') then
return str .. label
end
-- use the linktype parameter to know which site to use
if type(linktype) == 'string' then
linktype = {linktype}
end
for i, lg in pairs(fblist(lang)) do
link = tools.siteLink(entity, linktype[1], lg)
if link or (linktype == "commons") then -- if we have a link or if site has only one language: break
break
end
end
if (not link) and (linktype[2]) then
link = tools.siteLink(entity, linktype[2], lang)
end
-- if no link, use arg defaultlinkquery
if (not link) and defaultlinkquery then
defaultlinkquery.excludespecial = true
defaultlinkquery.entity = entity
local claims = getClaims(defaultlinkquery)
if claims then
for i, j in pairs(claims) do
local id = tools.getMainId(j)
link = tools.siteLink(id, linktype, lang)
if link then
break
end
end
end
end
if link then
return str .. '[[' .. link .. '|' .. label .. ']]'
end
return str .. label
end
return p
tfy0cbix4etcffb6ghy2ehyc39rl60u
Module:Wikidata/Dates
828
1364
10775
2019-02-27T02:36:08Z
commons>Jarekt
0
patch errors with global variables
10775
Scribunto
text/plain
local p = {}
local formatDate = require "Module:Complex date"
local tools = require "Module:Wikidata/Tools"
local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang")
local function splitTimestamp(timestamp, calendar)
local pattern = "(%W)(%d+)%-(%d+)%-(%d+)"
local era, year, month, day = timestamp:match(pattern)
if calendar == 'julian' then
--todo year, month, day = formatDate.gregorianToJulian( era .. year, month, day )
end
return era, year, month, day
end
local function dateObject(snak, params) --[[
transforms a Wikibase snak into a simpler table readable by Module:Complex date
{
type = "dateobject"
valuetype = corresponds to the snaktype (value, somevalue or novalue)
year = number
month = number
day = number
calendar = julian or gregorian
}
]]--
if not params then
params = {}
end
local obj = {type = "dateobject", valuetype = snak.snaktype}
if snak.snaktype == "value" then
local value = tools.getValue(snak)
obj.era, obj.year, obj.month, obj.day = splitTimestamp(value.time, value.calendar)
obj.precision = params.precision or value.precision
end
return obj
end
local function rangeObject(begin, ending)
-- object containing one or two dateobject {type = "rangeobject", begin = dateobject, ending = rangeobject}
local timestamp
if begin then
timestamp = begin.timestamp
elseif ending then
timestamp = ending.timestamp
end
return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}
end
-- Functions transforming dateobjects into date strings
local function standardDisplay(obj, precision, lang) -- returns a date in a natural language string
if obj.valuetype == "somevalue" then
return formatDate._complex_date("unknown", "", "", "", "", "", "", "", "", lang)
elseif obj.valuetype == "novalue" then
return "" -- ?
end
if precision >= 11 then
return formatDate._complex_date("", "", obj.year .. '-' .. obj.month .. '-' .. obj.day, "", "", "" , "", "", "", lang)
elseif precision == 10 then
return formatDate._complex_date("", "", obj.year .. '-' .. obj.month, "", "", "" , "", "", "", lang)
elseif precision == 9 then
return formatDate._complex_date("", "", obj.year, "", "", "" , "", "", "", lang)
elseif precision == 8 then
return formatDate._complex_date("", "", string.sub(tostring(obj.year), 1, 3) .. '0', "decade", "", "" , "", "", "", lang)
elseif precision == 7 then
return formatDate._complex_date("", "", string.sub(tostring(obj.year + 100), 1, 2), "century", "", "" , "", "", "", lang)
end
end
--- ISO format
local function ISOdate(obj, precision)
local str = ""
if obj.valuetype ~= 'value' then
return nil
end
if (precision >= 9) then
str = obj.year
end
if (precision >= 10) then
str = str .. "-" .. obj.month
end
if (precision >= 11) then
str = str .. "-" .. obj.day
end
return str
end
local function formatDatepoint(obj, params) -- takes in "datobject" and transforms it into a string
if not obj then
return nil
end
if not params then
params = {}
end
local lang = params.lang or defaultlang
local precision
if obj.valuetype == "value" then
precision = math.min(obj.precision, params.precision or 15)
end
if params.displayformat == "year" then
return obj.year
elseif params.displayformat == "isodate" then
return ISOdate(obj, precision)
else
return standardDisplay(obj, precision, lang)
end
end
local function formatDaterange(obj, params) --takes "rangeobject" and transforms it into a string
local begin = formatDatepoint(obj.begin, params)
local ending = formatDatepoint(obj.ending, params)
local str = ""
if begin then
str = str .. "from " .. begin
end
if begin and ending then
str = str .. " "
end
if ending then
str = str .. "until " .. ending
end
return str
end
local function objectToText(obj, params) -- takes any date table and transforms it into a string
if obj.type == 'dateobject' then
return formatDatepoint(obj, params)
elseif obj.type == 'rangeobject' then
return formatDaterange(obj, params)
end
return nil
end
-- Functions retrieving data from Wikidata
local function getDatefromQualif(statement, qualif)
if not(tools.hasqualifier(statement, qualif) )then
return nil
end
local v = statement.qualifiers[qualif][1]
if v.snaktype ~= 'value' then
return nil -- ?
end
return dateObject(v)
end
function p.getDate(statement) -- looks for a date in a statement (either qualifiers or main value) and returns it in the form of a "dateobject" or a "rangeobject"
-- try to use qualifiers, that can have more accurate values than the main snak
local period = getDatefromQualif(statement, 'P585') -- retourne un dateobject
if period then
return period
end
local begin, ending = getDatefromQualif(statement, 'P580'), getDatefromQualif(statement, 'P582')
if begin or ending then
return rangeObject(begin, ending) -- a rangeobject contains two dates
end
local begin, ending = getDatefromQualif(statement, 'P1319'), getDatefromQualif(statement, 'P1326')
local obj
if begin or ending then
return rangeObject(begin, ending) -- should have another parameter stating that these are not the same as with usual qualifs
end
-- else, if the main value is a time value, then return it
local mainsnak = statement.mainsnak
if mainsnak.datatype ~= 'time' then
return nil -- if the property datatype is not time, then do not use it
end
local params
return dateObject(mainsnak, params)
end
function p.getFormattedDate(statement, params)
if not statement then
return nil
end
local str
local datetable = p.getDate(statement)
if datetable then
str = objectToText(datetable, params)
end
local fuzzy = tools.hasqualifier(statement, {"P1480"}, {"Q5727902"}) -- should be moved to the getDate function
if fuzzy then
fuzzy = true
end
if fuzzy then
str = formatDate._complex_date("", "circa", str)
end
return str
end
function p.formatTimeSnak(snak, params)
local displayformat = params.displayformat
if displayformat == 'raw' then
return snak.datavalue.value.time
end
local dateobj = dateObject(snak)
return objectToText(dateobj, params)
end
return p
5fpbxebvd317adjd6eeoxlr7b6i69ut
10776
10775
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Wikidata/Dates]]
10775
Scribunto
text/plain
local p = {}
local formatDate = require "Module:Complex date"
local tools = require "Module:Wikidata/Tools"
local defaultlang = mw.getCurrentFrame():callParserFunction("int", "lang")
local function splitTimestamp(timestamp, calendar)
local pattern = "(%W)(%d+)%-(%d+)%-(%d+)"
local era, year, month, day = timestamp:match(pattern)
if calendar == 'julian' then
--todo year, month, day = formatDate.gregorianToJulian( era .. year, month, day )
end
return era, year, month, day
end
local function dateObject(snak, params) --[[
transforms a Wikibase snak into a simpler table readable by Module:Complex date
{
type = "dateobject"
valuetype = corresponds to the snaktype (value, somevalue or novalue)
year = number
month = number
day = number
calendar = julian or gregorian
}
]]--
if not params then
params = {}
end
local obj = {type = "dateobject", valuetype = snak.snaktype}
if snak.snaktype == "value" then
local value = tools.getValue(snak)
obj.era, obj.year, obj.month, obj.day = splitTimestamp(value.time, value.calendar)
obj.precision = params.precision or value.precision
end
return obj
end
local function rangeObject(begin, ending)
-- object containing one or two dateobject {type = "rangeobject", begin = dateobject, ending = rangeobject}
local timestamp
if begin then
timestamp = begin.timestamp
elseif ending then
timestamp = ending.timestamp
end
return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}
end
-- Functions transforming dateobjects into date strings
local function standardDisplay(obj, precision, lang) -- returns a date in a natural language string
if obj.valuetype == "somevalue" then
return formatDate._complex_date("unknown", "", "", "", "", "", "", "", "", lang)
elseif obj.valuetype == "novalue" then
return "" -- ?
end
if precision >= 11 then
return formatDate._complex_date("", "", obj.year .. '-' .. obj.month .. '-' .. obj.day, "", "", "" , "", "", "", lang)
elseif precision == 10 then
return formatDate._complex_date("", "", obj.year .. '-' .. obj.month, "", "", "" , "", "", "", lang)
elseif precision == 9 then
return formatDate._complex_date("", "", obj.year, "", "", "" , "", "", "", lang)
elseif precision == 8 then
return formatDate._complex_date("", "", string.sub(tostring(obj.year), 1, 3) .. '0', "decade", "", "" , "", "", "", lang)
elseif precision == 7 then
return formatDate._complex_date("", "", string.sub(tostring(obj.year + 100), 1, 2), "century", "", "" , "", "", "", lang)
end
end
--- ISO format
local function ISOdate(obj, precision)
local str = ""
if obj.valuetype ~= 'value' then
return nil
end
if (precision >= 9) then
str = obj.year
end
if (precision >= 10) then
str = str .. "-" .. obj.month
end
if (precision >= 11) then
str = str .. "-" .. obj.day
end
return str
end
local function formatDatepoint(obj, params) -- takes in "datobject" and transforms it into a string
if not obj then
return nil
end
if not params then
params = {}
end
local lang = params.lang or defaultlang
local precision
if obj.valuetype == "value" then
precision = math.min(obj.precision, params.precision or 15)
end
if params.displayformat == "year" then
return obj.year
elseif params.displayformat == "isodate" then
return ISOdate(obj, precision)
else
return standardDisplay(obj, precision, lang)
end
end
local function formatDaterange(obj, params) --takes "rangeobject" and transforms it into a string
local begin = formatDatepoint(obj.begin, params)
local ending = formatDatepoint(obj.ending, params)
local str = ""
if begin then
str = str .. "from " .. begin
end
if begin and ending then
str = str .. " "
end
if ending then
str = str .. "until " .. ending
end
return str
end
local function objectToText(obj, params) -- takes any date table and transforms it into a string
if obj.type == 'dateobject' then
return formatDatepoint(obj, params)
elseif obj.type == 'rangeobject' then
return formatDaterange(obj, params)
end
return nil
end
-- Functions retrieving data from Wikidata
local function getDatefromQualif(statement, qualif)
if not(tools.hasqualifier(statement, qualif) )then
return nil
end
local v = statement.qualifiers[qualif][1]
if v.snaktype ~= 'value' then
return nil -- ?
end
return dateObject(v)
end
function p.getDate(statement) -- looks for a date in a statement (either qualifiers or main value) and returns it in the form of a "dateobject" or a "rangeobject"
-- try to use qualifiers, that can have more accurate values than the main snak
local period = getDatefromQualif(statement, 'P585') -- retourne un dateobject
if period then
return period
end
local begin, ending = getDatefromQualif(statement, 'P580'), getDatefromQualif(statement, 'P582')
if begin or ending then
return rangeObject(begin, ending) -- a rangeobject contains two dates
end
local begin, ending = getDatefromQualif(statement, 'P1319'), getDatefromQualif(statement, 'P1326')
local obj
if begin or ending then
return rangeObject(begin, ending) -- should have another parameter stating that these are not the same as with usual qualifs
end
-- else, if the main value is a time value, then return it
local mainsnak = statement.mainsnak
if mainsnak.datatype ~= 'time' then
return nil -- if the property datatype is not time, then do not use it
end
local params
return dateObject(mainsnak, params)
end
function p.getFormattedDate(statement, params)
if not statement then
return nil
end
local str
local datetable = p.getDate(statement)
if datetable then
str = objectToText(datetable, params)
end
local fuzzy = tools.hasqualifier(statement, {"P1480"}, {"Q5727902"}) -- should be moved to the getDate function
if fuzzy then
fuzzy = true
end
if fuzzy then
str = formatDate._complex_date("", "circa", str)
end
return str
end
function p.formatTimeSnak(snak, params)
local displayformat = params.displayformat
if displayformat == 'raw' then
return snak.datavalue.value.time
end
local dateobj = dateObject(snak)
return objectToText(dateobj, params)
end
return p
5fpbxebvd317adjd6eeoxlr7b6i69ut
Module:Weblink
828
1365
10777
2019-07-16T11:22:44Z
commons>4nn1l2
0
Changed protection level for "[[Module:Weblink]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Move=Allow only template editors and administrators] (indefinite) [Edit=Allow only template editors and administrators] (indefinite))
10777
Scribunto
text/plain
local p = {}
function p.makelink(url, showntext, displayformat)
if (not url) or (url == "-") then
return nil
end
url = mw.text.trim(url)
if displayformat == "raw" then
return url
end
if showntext == "-" then
return "[" .. url .. "]"
end
if not showntext then
local space = mw.ustring.find(url, ' ') -- si le nom du site est passé par mégarde dans l'URL, le séparer
if space then
local full = url
url = mw.ustring.sub(full, 1, space - 1)
showntext = mw.ustring.sub(full, space + 1)
else
showntext = string.gsub( url, 'https?://', '')
end
end
if string.sub(showntext, #showntext, #showntext) == '/' then -- remove trailing slash
showntext = string.sub(showntext, 1, #showntext - 1)
end
return '[' .. url .. ' ' .. showntext .. ']'
end
function p.makelinks(stringlist, separator)
if not type(stringlist) == table then
return error('stringlist should be table')
end
if not separator then
separator = '<br />'
end
for i, j in pairs(stringlist) do
stringlist[i] = p.makelink(k)
return table.concat(stringlist, separator )
end
end
return p
bqp4dm87jbdi14jphi5fltb0a3kko1k
10778
10777
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Weblink]]
10777
Scribunto
text/plain
local p = {}
function p.makelink(url, showntext, displayformat)
if (not url) or (url == "-") then
return nil
end
url = mw.text.trim(url)
if displayformat == "raw" then
return url
end
if showntext == "-" then
return "[" .. url .. "]"
end
if not showntext then
local space = mw.ustring.find(url, ' ') -- si le nom du site est passé par mégarde dans l'URL, le séparer
if space then
local full = url
url = mw.ustring.sub(full, 1, space - 1)
showntext = mw.ustring.sub(full, space + 1)
else
showntext = string.gsub( url, 'https?://', '')
end
end
if string.sub(showntext, #showntext, #showntext) == '/' then -- remove trailing slash
showntext = string.sub(showntext, 1, #showntext - 1)
end
return '[' .. url .. ' ' .. showntext .. ']'
end
function p.makelinks(stringlist, separator)
if not type(stringlist) == table then
return error('stringlist should be table')
end
if not separator then
separator = '<br />'
end
for i, j in pairs(stringlist) do
stringlist[i] = p.makelink(k)
return table.concat(stringlist, separator )
end
end
return p
bqp4dm87jbdi14jphi5fltb0a3kko1k
Tempilet:Full stop
10
1366
10781
2024-06-11T09:45:12Z
commons>Ebrahim
0
Protected "[[Template:Full stop]]": used in the interface, MediaWiki:Userrights-summary ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10781
wikitext
text/x-wiki
<noinclude>This shows a localized full stop at end of this sentence<span style="background:yellow"><!--
--></noinclude>{{#switch: {{LangSwitch|lang={{#if:{{{lang|}}}|{{{lang|}}}|{{PAGELANGUAGE}}}}
| default = Latn
| aee = Aran
| ar = Arab
| ary = Arab
| arz = Arab
| azb = Aran
| bal = Aran
| bcc = Aran
| bg = Cyrl
| bgn = Aran
| bgp = Aran
| bh = Deva
| bn = Beng
| bqi = Aran
| el = Grek
| fa = Aran
| gu = Guru
| gj = Gujr
| glh = Aran
| glk = Aran
| hi = Deva
| hy = Armn
| ja = Jpan
| jbo = Latn-Zs-i-Zs
| ka = Geor
| ko = Hang
| ktl = Aran
| kn = Knda
| ks-arab = Aran
| la = Laoo
| lrc = Aran
| luz = Aran
| lzh = Hant
| mzn = Aran
| km = Khmr
| mk = Cyrl
| ml = Mlym
| or = Orya
| ne = Deva
| new = Deva
| ps = Aran
| psh = Aran
| ps i= Aran
| pnt = Grek
| ru = Cyrl
| sa = Deva
| sd = Aran
| si = Sinh
| sr = Cyrl
| srz = Aran
| te = Telu
| th = Thai
| tly = Aran
| uk = Cyrl
| ug = Aran
| ur = Aran
| yue = Hant
| zh = Hans
| zh-hans = Hans
| zh-hant = Hant
}}
| Arab | Cyrl | Geor | Grek | Hang | Laoo | Latn
| Zinh-Pe-Zs | #default = .{{#ifeq:{{{nospace|}}}|y|| }}
| Aran
| Aran-Pe-Zs = <!-- Note: U+0640 (Arabic Tatween) is an "joining" format control, NOT an *isolated* punctuation like U+06D4 (Nastaliq Arabic Full Stop) -->۔{{#ifeq:{{{nospace|}}}|y|| }}
| Armn = <!-- U+0589 Armenian full stop (it's NOT an ASCII colon!) -->։{{#ifeq:{{{nospace|}}}|y|| }}
| Beng | Deva | Guru | Gujr | Knda | Mlym | Orya | Sinh | Taml | Telu
| Deva-Pe-Zs = <!-- U+0964 Devanagari Danda -->।{{#ifeq:{{{nospace|}}}|y|| }}
| Bpmf | Hani | Hans | Hant | Jpan | Phpa
| Hani-Pe = 。
| Khmr
| Khmr-Pe-Zs = <!-- U+17D4 Khmer sign Khan -->។{{#ifeq:{{{nospace|}}}|y|| }}
| Latn-Zs-i-Zs = i{{#ifeq:{{{nospace|}}}|y|| }}
| Thai
| Zinh-space =  
}}<noinclude></span>Or its equivalent in the relevant language.
{{Documentation}}</noinclude>
llsx4k7i1spq3axrmhlfbpy0m6emrnj
10782
10781
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Full_stop]]
10781
wikitext
text/x-wiki
<noinclude>This shows a localized full stop at end of this sentence<span style="background:yellow"><!--
--></noinclude>{{#switch: {{LangSwitch|lang={{#if:{{{lang|}}}|{{{lang|}}}|{{PAGELANGUAGE}}}}
| default = Latn
| aee = Aran
| ar = Arab
| ary = Arab
| arz = Arab
| azb = Aran
| bal = Aran
| bcc = Aran
| bg = Cyrl
| bgn = Aran
| bgp = Aran
| bh = Deva
| bn = Beng
| bqi = Aran
| el = Grek
| fa = Aran
| gu = Guru
| gj = Gujr
| glh = Aran
| glk = Aran
| hi = Deva
| hy = Armn
| ja = Jpan
| jbo = Latn-Zs-i-Zs
| ka = Geor
| ko = Hang
| ktl = Aran
| kn = Knda
| ks-arab = Aran
| la = Laoo
| lrc = Aran
| luz = Aran
| lzh = Hant
| mzn = Aran
| km = Khmr
| mk = Cyrl
| ml = Mlym
| or = Orya
| ne = Deva
| new = Deva
| ps = Aran
| psh = Aran
| ps i= Aran
| pnt = Grek
| ru = Cyrl
| sa = Deva
| sd = Aran
| si = Sinh
| sr = Cyrl
| srz = Aran
| te = Telu
| th = Thai
| tly = Aran
| uk = Cyrl
| ug = Aran
| ur = Aran
| yue = Hant
| zh = Hans
| zh-hans = Hans
| zh-hant = Hant
}}
| Arab | Cyrl | Geor | Grek | Hang | Laoo | Latn
| Zinh-Pe-Zs | #default = .{{#ifeq:{{{nospace|}}}|y|| }}
| Aran
| Aran-Pe-Zs = <!-- Note: U+0640 (Arabic Tatween) is an "joining" format control, NOT an *isolated* punctuation like U+06D4 (Nastaliq Arabic Full Stop) -->۔{{#ifeq:{{{nospace|}}}|y|| }}
| Armn = <!-- U+0589 Armenian full stop (it's NOT an ASCII colon!) -->։{{#ifeq:{{{nospace|}}}|y|| }}
| Beng | Deva | Guru | Gujr | Knda | Mlym | Orya | Sinh | Taml | Telu
| Deva-Pe-Zs = <!-- U+0964 Devanagari Danda -->।{{#ifeq:{{{nospace|}}}|y|| }}
| Bpmf | Hani | Hans | Hant | Jpan | Phpa
| Hani-Pe = 。
| Khmr
| Khmr-Pe-Zs = <!-- U+17D4 Khmer sign Khan -->។{{#ifeq:{{{nospace|}}}|y|| }}
| Latn-Zs-i-Zs = i{{#ifeq:{{{nospace|}}}|y|| }}
| Thai
| Zinh-space =  
}}<noinclude></span>Or its equivalent in the relevant language.
{{Documentation}}</noinclude>
llsx4k7i1spq3axrmhlfbpy0m6emrnj
Tempilet:Multilingual description
10
1367
10783
2019-07-16T04:03:23Z
commons>4nn1l2
0
Changed protection level for "[[Template:Multilingual description]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10783
wikitext
text/x-wiki
<includeonly><div class="multilingual"><!--
Ordered by direction (all LTR scripts first, then RTL scripts), then by script, then alphabetically (by name) in each script:
-->{{#invoke:Multilingual description|mld}}<!--
--></div></includeonly><noinclude>
{{Documentation}}
{{DEFAULTSORT:Multilingual description}}
[[Category:Internationalization templates]]
</noinclude>
8a4cowrrr73pjzxypl037gvgk0djlmm
10784
10783
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Multilingual_description]]
10783
wikitext
text/x-wiki
<includeonly><div class="multilingual"><!--
Ordered by direction (all LTR scripts first, then RTL scripts), then by script, then alphabetically (by name) in each script:
-->{{#invoke:Multilingual description|mld}}<!--
--></div></includeonly><noinclude>
{{Documentation}}
{{DEFAULTSORT:Multilingual description}}
[[Category:Internationalization templates]]
</noinclude>
8a4cowrrr73pjzxypl037gvgk0djlmm
Tempilet:Ls
10
1368
10785
2024-08-09T17:23:14Z
commons>Jarekt
0
use #dir parser function
10785
wikitext
text/x-wiki
<includeonly><div class="{{{classes|}}} {{{1|{{Int:Lang}}}}} lang-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" dir="{{#switch:{{lc:{{{dir|}}}}}|ltr|rtl={{lc:{{{dir|}}}}}|#default={{#dir:{{{1|}}}}}}}" style="margin:.25em 0;line-height:normal;{{#if:{{{update|}}}|background:#FDD;}}{{{CSS-box|}}}"><span class="language langlabel-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" style="font-weight:bold;{{#switch:{{{1|{{Int:Lang}}}}}|und=color:#F00;}}{{{CSS-label|}}}"><bdi>{{ucfirst:{{#language:{{{1|{{Int:Lang}}}}}}}}}</bdi>{{Colon|lang={{{1|{{Int:Lang}}}}}}}</span>{{#if:{{{update|}}}| <bdi>[<small>{{Snippets/update needed|{{{1}}}}}{{Colon|lang={{{1|{{Int:Lang}}}}}}} {{{update|}}}</small>]</bdi>}} {{{2}}}</div></includeonly><noinclude>{{documentation}}</noinclude>
3ye8l6p30na2gzu9keu598jx0o18k6a
10786
10785
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Ls]]
10785
wikitext
text/x-wiki
<includeonly><div class="{{{classes|}}} {{{1|{{Int:Lang}}}}} lang-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" dir="{{#switch:{{lc:{{{dir|}}}}}|ltr|rtl={{lc:{{{dir|}}}}}|#default={{#dir:{{{1|}}}}}}}" style="margin:.25em 0;line-height:normal;{{#if:{{{update|}}}|background:#FDD;}}{{{CSS-box|}}}"><span class="language langlabel-{{{1|{{Int:Lang}}}}}" lang="{{{1|{{Int:Lang}}}}}" style="font-weight:bold;{{#switch:{{{1|{{Int:Lang}}}}}|und=color:#F00;}}{{{CSS-label|}}}"><bdi>{{ucfirst:{{#language:{{{1|{{Int:Lang}}}}}}}}}</bdi>{{Colon|lang={{{1|{{Int:Lang}}}}}}}</span>{{#if:{{{update|}}}| <bdi>[<small>{{Snippets/update needed|{{{1}}}}}{{Colon|lang={{{1|{{Int:Lang}}}}}}} {{{update|}}}</small>]</bdi>}} {{{2}}}</div></includeonly><noinclude>{{documentation}}</noinclude>
3ye8l6p30na2gzu9keu598jx0o18k6a
Module:Multilingual description
828
1369
10787
2026-04-25T23:20:54Z
commons>Verdy p
0
10787
Scribunto
text/plain
local p = {}
local sortedKnownLanguageTags = require('Module:Multilingual description/sort')
local dir = require('Module:Dir').select
--[==[
Remap some "valid" language codes that are still unknown, but are known by another code
in order to get a visible language name (and if possible, BCP 47 conformance)!
--]==]
local remappedLanguages = {
['als'] = 'gsw', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'als' on Wikimedia for Alemannic conflicts with the standard 'als' which actually refers to the unrelated stardard variant of the Albanian language.
['nrm'] = 'nrf', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'nrm' on Wikimedia for Norman conflicts with the standard 'nrm' which actually refers to the unrelated Narom language
['bat-smg'] = 'sgs', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki
['be-x-old'] = 'be-tarask', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki
['fiu-vro'] = 'vro', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki
['roa-rup'] = 'rup', -- code not conforming to BCP 47 (legacy interwiki still supported, newer code supported as well), the new standard code should be used (and is now recognized as interwiki)
['roa-tara'] = 'nap-taran', -- code not conforming to BCP 47 (continental variant of Neapolitan), should be replaced by a conforming variant code
['zh-classical'] = 'lzh', -- code not conforming to BCP 47, replaced by standard code also supported in interwiki
['bh'] = 'bho', -- legacy interwiki still supported but ambiguous as a family, newer code now supported as well in interwiki; 'bh' was used in Wikimedia to refer to Bhojpuri only and not the whole Bihari family
['bu'] = 'my', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki
['iw'] = 'he', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki
['jw'] = 'jv', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki
['zh-min-nan'] = 'nan', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki
['zh-wuu'] = 'wuu', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki
['zh-yue'] = 'yue', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki
-- Standard BCP 47 codes that can't be used in MediaWiki yet, and must be replaced for now by valid BCP 47 codes (ignoring the specific variant).
['en-us'] = 'en', -- both codes are conforming and supported, only the second one is known (there's no support for the US variant which is implicit, unlike variants in CA, GB, IN, ZA)
['fa-af'] = 'fa', -- both codes are conforming and supported, only the second one is known, actually means "Eastern Dari"
['fr-x-galo'] = 'fr', -- both codes are conforming and supported, only the second one is known
['ha-latn'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s
['ha-arab'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Arabic script is historic, without clear orthography
['ko-kr'] = 'ko', -- both codes are conforming and supported, only the second one is known, regional variant used in South Korea (kr-kp for the variant in North Korea is supported)
['ku-cyrl'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Cyrillic script is still used
['ku-latn'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s
['no'] = 'nb', -- both codes are conforming and supported, but the 1st one is now used only for meaning the second one in MediaWiki
['prd'] = 'fa', -- both codes are conforming and supported, only the second one is known; 'prd' is "Parsi-Dari", and means the same as 'fa-af'
['tgl'] = 'tl', -- both codes are conforming and supported, only the second one is known (but may have alternate forms written in the Tagal script and not Latin for modern Filipino)
-- Standard BCP 47 codes for variants that can't be used in MediaWiki yet, and must be replaced for now by legacy codes, valid only in Wikimedia wikis but not conforming to BCP 47.
['sr-cyrl'] = 'sr-ec', -- this alternate known code is non-standard and in fact not supported, but has a correct native name
['sr-latn'] = 'sr-el', -- same remark
['cmn'] = 'zh', -- BCP 47 code for the most common spoken variant of Chinese (i.e. Mandarin Chinese), not favored in the MediaWiki repos yet
['cmn-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet
['zh-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet
}
local currentFrame = mw.getCurrentFrame()
local mwlog = mw.log
local trim = mw.text.trim
local isSupportedLanguage = mw.language.isSupportedLanguage
local isKnownLanguageTag = mw.language.isKnownLanguageTag
local insert = table.insert
local function addDescription(descriptions, lang, description, update)
if type(description) == 'string' then
if trim(description):len() > 0 then
insert(descriptions, currentFrame:expandTemplate{
title = 'Ls',
args = {
lang,
description,
dir = dir(lang, 'rtl', 'ltr'),
classes = 'description',
update = update
}
})
end
end
end
-- Kind is either 'deprecated', 'conflicting', or 'unsupported'.
local function addTracking(descriptions, kind)
insert(descriptions, '[[Category:Multilingual descriptions using ' .. kind .. ' language codes]]')
end
local function _mld(args)
--[==[
Shallow copy of arguments (because keys in args cannot be unset if args is hollow, in a parent
frame outside Lua). DO NOT copy the metatable that exposes only a *read-only* interface with
accessors to PHP arrays (mw.clone does NOT work)!
--]==]
local descriptions, conflicting = {}, false
for lang, description in pairs(args) do
if type(lang) == 'string' and lang ~= 'class' and lang~= 'style' and type(description) == 'string' then
--[==[
MediaWiki trims the names of named argument and their values, but does not remove HTML comments
in these names (some Mld contain parameters like "| sk <!--Slovensko--> = ...") or "nowiki" tags.
After removing them, we still need to trim the rest in language codes and in descriptions, to
detect conflicting descriptions for the same language code.
--]==]
description = description
:gsub('<!%-%-.-%-%->', '')
:gsub('</?nowiki%s*/?>', '')
:gsub('^%s*(.-)%s*$','%1')
--[==[
Split multiple language codes (or default) assigned with the same description.
Valid BCP 47 language codes contain only ASCII letters, digits, hyphens or
underscores: canonicalize them to lowercase with hyphens replacing underscores
(other characters are considered separators between language codes).
--]==]
for code in lang
:gsub('<!%-%-.-%-%->', '')
:gsub('</?nowiki%s*/?>', '')
:gsub('_', '-'):lower():gmatch("([%-0-9a-z]+)") do
--[==[
Detect conflicting descriptions, like "|en,default=OK|en=Bad"
(whose result is unpredictable, as all keys are in random order).
--]==]
if descriptions[code] ~= nil and descriptions[code] ~= description then
conflicting = true
end
descriptions[code] = description
end
end
end
args, descriptions = descriptions, {}
--[==[ Remap legacy language codes if there's no conflict. ]==]
local remapped = false
for cur, alt in pairs(remappedLanguages) do
if args[cur] and not(isSupportedLanguage(cur) and isKnownLanguageTag(cur))
and (isSupportedLanguage(alt) and isKnownLanguageTag(alt)) then
if args[alt] == nil then -- only if this does not conflict
args[alt] = args[cur] -- set description for the alternate known language
else
remapped = true -- signal only in case of conflict
conflicting = true
end
args[cur] = nil -- unset the description for the initial language code
end
end
--[==[ First all known languages in order if they have description. ]==]
for _, lang in ipairs(sortedKnownLanguageTags) do
if args[lang] ~= nil then
addDescription(descriptions, lang, args[lang], nil)
args[lang] = nil
end
end
--[==[ Append other unknown languages, but only if they are supported. ]==]
local unsupported = false
for lang, description in pairs(args) do
if isSupportedLanguage(lang) then
addDescription(descriptions, lang, description, nil)
else
addDescription(descriptions, lang, description, lang)
unsupported = true
end
end
if conflicting then
addTracking(descriptions, 'conflicting')
end
if remapped then
addTracking(descriptions, 'deprecated')
end
if unsupported then
addTracking(descriptions, 'unsupported')
end
return table.concat(descriptions)
end
function p.mld(frame)
local args = (frame:getParent() or {}).args or {}
return _mld(args)
end
setmetatable(p, {quickTests = function()
local input = {
[1] = 'One?', -- discarded (no support for language numeric keys)
unsupported = 'What?', -- unsupported
en = ' ', -- empty description after trimming (discarded)
als = 'GSW', -- will be remapped
['en-gb '] = 'EN-GB', -- trimming at end
['en-ca <nowiki/>'] = 'EN-CA',
[' de'] = 'DE', -- trimming at start
fr = 'FR',
[' fr '] = 'FR', -- trimming both ends (description not conflicting)
rue = 'RUE',
ru = 'RU',
ko = 'KO',
ja = 'JA',
zh = 'ZH',
['he,iw'] = 'HE', -- 'iw' remapped to 'he' (description not conflicting)
ur = 'UR',
ar = 'AR',
ro = 'RO',
['be-tarask'] = 'BE-TARASK',
['be-x-old'] = 'BE-X-OLD (deprecated)',
dv = 'DV',
}
local expect = {}
--[==[
This is the exact order to expect according to native language names,
and after discarding empty descriptions or unsupported language codes.
--]==]
addDescription(expect, 'gsw', 'GSW') --[[Alemannisch]] -- remapped
addDescription(expect, 'en-gb', 'EN-GB') --[[British English]]
addDescription(expect, 'en-ca', 'EN-CA') --[[Canadian English]]
addDescription(expect, 'de', 'DE') --[[Deutsch]]
addDescription(expect, 'fr', 'FR') --[[français]]
addDescription(expect, 'ro', 'RO') --[[română]]
addDescription(expect, 'be-tarask', 'BE-TARASK') --[[беларуская (тарашкевіца)]]
-- addDescription(expect, 'be-x-old', 'BE-X-OLD (deprecated)') --[[беларуская (тарашкевіца)]] -- discarded due to conflict
addDescription(expect, 'rue', 'RUE') --[[русиньскый]]
addDescription(expect, 'ru', 'RU') --[[русский]]
addDescription(expect, 'ko', 'KO') --[[한국어]]
addDescription(expect, 'ja', 'JA') --[[日本語]]
addDescription(expect, 'zh', 'ZH') --[[中文]]
addDescription(expect, 'he', 'HE') --[[עברית]]
addDescription(expect, 'ur', 'UR') --[[اردو]]
addDescription(expect, 'ar', 'AR') --[[العربية]]
addDescription(expect, 'dv', 'DV') --[[ދިވެހިބަސް]]
--[==[
Note that unknown/unsorted languages may occur here in unpredictable
order at end of this list, but only if they are "supported" (other
will be discarded). So we can only test for the presence of one such
item.
--]==]
addDescription(expect, 'unsupported', 'What?', 'unsupported')
addTracking(expect, 'conflicting')
addTracking(expect, 'deprecated')
addTracking(expect, 'unsupported')
expect = table.concat(expect)
local actual = _mld(input)
if (actual ~= expect) then
mwlog('expect:\n' .. expect)
mwlog('actual:\n' .. actual)
return false
end
return true
end})
--[==[ Type this to run tests in the Lua console (should return true):
=getmetatable(p).quickTests()
--]==]
return p
lnm9jw6xqs5hmczfbr5rml75i4beaf4
10788
10787
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Multilingual_description]]
10787
Scribunto
text/plain
local p = {}
local sortedKnownLanguageTags = require('Module:Multilingual description/sort')
local dir = require('Module:Dir').select
--[==[
Remap some "valid" language codes that are still unknown, but are known by another code
in order to get a visible language name (and if possible, BCP 47 conformance)!
--]==]
local remappedLanguages = {
['als'] = 'gsw', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'als' on Wikimedia for Alemannic conflicts with the standard 'als' which actually refers to the unrelated stardard variant of the Albanian language.
['nrm'] = 'nrf', -- known code (unfortunately broken in Wikimedia) to changed new code (also known, but conforming to BCP 47); 'nrm' on Wikimedia for Norman conflicts with the standard 'nrm' which actually refers to the unrelated Narom language
['bat-smg'] = 'sgs', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki
['be-x-old'] = 'be-tarask', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki
['fiu-vro'] = 'vro', -- legacy interwiki still supported, newer conforming code now supported as well in interwiki
['roa-rup'] = 'rup', -- code not conforming to BCP 47 (legacy interwiki still supported, newer code supported as well), the new standard code should be used (and is now recognized as interwiki)
['roa-tara'] = 'nap-taran', -- code not conforming to BCP 47 (continental variant of Neapolitan), should be replaced by a conforming variant code
['zh-classical'] = 'lzh', -- code not conforming to BCP 47, replaced by standard code also supported in interwiki
['bh'] = 'bho', -- legacy interwiki still supported but ambiguous as a family, newer code now supported as well in interwiki; 'bh' was used in Wikimedia to refer to Bhojpuri only and not the whole Bihari family
['bu'] = 'my', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki
['iw'] = 'he', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki
['jw'] = 'jv', -- legacy code from ISO 639 deprecated, newer code is prefered and used as interwiki
['zh-min-nan'] = 'nan', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki
['zh-wuu'] = 'wuu', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki
['zh-yue'] = 'yue', -- legacy BCP 47 code, valid but deprecated in favor of new code also supported in interwiki
-- Standard BCP 47 codes that can't be used in MediaWiki yet, and must be replaced for now by valid BCP 47 codes (ignoring the specific variant).
['en-us'] = 'en', -- both codes are conforming and supported, only the second one is known (there's no support for the US variant which is implicit, unlike variants in CA, GB, IN, ZA)
['fa-af'] = 'fa', -- both codes are conforming and supported, only the second one is known, actually means "Eastern Dari"
['fr-x-galo'] = 'fr', -- both codes are conforming and supported, only the second one is known
['ha-latn'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s
['ha-arab'] = 'ha', -- both codes are conforming and supported, only the second one is known, the Arabic script is historic, without clear orthography
['ko-kr'] = 'ko', -- both codes are conforming and supported, only the second one is known, regional variant used in South Korea (kr-kp for the variant in North Korea is supported)
['ku-cyrl'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Cyrillic script is still used
['ku-latn'] = 'ku', -- both codes are conforming and supported, only the second one is known, the Latin script is the default since the 1950s
['no'] = 'nb', -- both codes are conforming and supported, but the 1st one is now used only for meaning the second one in MediaWiki
['prd'] = 'fa', -- both codes are conforming and supported, only the second one is known; 'prd' is "Parsi-Dari", and means the same as 'fa-af'
['tgl'] = 'tl', -- both codes are conforming and supported, only the second one is known (but may have alternate forms written in the Tagal script and not Latin for modern Filipino)
-- Standard BCP 47 codes for variants that can't be used in MediaWiki yet, and must be replaced for now by legacy codes, valid only in Wikimedia wikis but not conforming to BCP 47.
['sr-cyrl'] = 'sr-ec', -- this alternate known code is non-standard and in fact not supported, but has a correct native name
['sr-latn'] = 'sr-el', -- same remark
['cmn'] = 'zh', -- BCP 47 code for the most common spoken variant of Chinese (i.e. Mandarin Chinese), not favored in the MediaWiki repos yet
['cmn-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet
['zh-pinyin'] = 'zh-Latn-pinyin', -- BCP 47 code for the official Latin form (Pinyin romanization) of Mandarin Chinese, not favored in the MediaWiki repos yet
}
local currentFrame = mw.getCurrentFrame()
local mwlog = mw.log
local trim = mw.text.trim
local isSupportedLanguage = mw.language.isSupportedLanguage
local isKnownLanguageTag = mw.language.isKnownLanguageTag
local insert = table.insert
local function addDescription(descriptions, lang, description, update)
if type(description) == 'string' then
if trim(description):len() > 0 then
insert(descriptions, currentFrame:expandTemplate{
title = 'Ls',
args = {
lang,
description,
dir = dir(lang, 'rtl', 'ltr'),
classes = 'description',
update = update
}
})
end
end
end
-- Kind is either 'deprecated', 'conflicting', or 'unsupported'.
local function addTracking(descriptions, kind)
insert(descriptions, '[[Category:Multilingual descriptions using ' .. kind .. ' language codes]]')
end
local function _mld(args)
--[==[
Shallow copy of arguments (because keys in args cannot be unset if args is hollow, in a parent
frame outside Lua). DO NOT copy the metatable that exposes only a *read-only* interface with
accessors to PHP arrays (mw.clone does NOT work)!
--]==]
local descriptions, conflicting = {}, false
for lang, description in pairs(args) do
if type(lang) == 'string' and lang ~= 'class' and lang~= 'style' and type(description) == 'string' then
--[==[
MediaWiki trims the names of named argument and their values, but does not remove HTML comments
in these names (some Mld contain parameters like "| sk <!--Slovensko--> = ...") or "nowiki" tags.
After removing them, we still need to trim the rest in language codes and in descriptions, to
detect conflicting descriptions for the same language code.
--]==]
description = description
:gsub('<!%-%-.-%-%->', '')
:gsub('</?nowiki%s*/?>', '')
:gsub('^%s*(.-)%s*$','%1')
--[==[
Split multiple language codes (or default) assigned with the same description.
Valid BCP 47 language codes contain only ASCII letters, digits, hyphens or
underscores: canonicalize them to lowercase with hyphens replacing underscores
(other characters are considered separators between language codes).
--]==]
for code in lang
:gsub('<!%-%-.-%-%->', '')
:gsub('</?nowiki%s*/?>', '')
:gsub('_', '-'):lower():gmatch("([%-0-9a-z]+)") do
--[==[
Detect conflicting descriptions, like "|en,default=OK|en=Bad"
(whose result is unpredictable, as all keys are in random order).
--]==]
if descriptions[code] ~= nil and descriptions[code] ~= description then
conflicting = true
end
descriptions[code] = description
end
end
end
args, descriptions = descriptions, {}
--[==[ Remap legacy language codes if there's no conflict. ]==]
local remapped = false
for cur, alt in pairs(remappedLanguages) do
if args[cur] and not(isSupportedLanguage(cur) and isKnownLanguageTag(cur))
and (isSupportedLanguage(alt) and isKnownLanguageTag(alt)) then
if args[alt] == nil then -- only if this does not conflict
args[alt] = args[cur] -- set description for the alternate known language
else
remapped = true -- signal only in case of conflict
conflicting = true
end
args[cur] = nil -- unset the description for the initial language code
end
end
--[==[ First all known languages in order if they have description. ]==]
for _, lang in ipairs(sortedKnownLanguageTags) do
if args[lang] ~= nil then
addDescription(descriptions, lang, args[lang], nil)
args[lang] = nil
end
end
--[==[ Append other unknown languages, but only if they are supported. ]==]
local unsupported = false
for lang, description in pairs(args) do
if isSupportedLanguage(lang) then
addDescription(descriptions, lang, description, nil)
else
addDescription(descriptions, lang, description, lang)
unsupported = true
end
end
if conflicting then
addTracking(descriptions, 'conflicting')
end
if remapped then
addTracking(descriptions, 'deprecated')
end
if unsupported then
addTracking(descriptions, 'unsupported')
end
return table.concat(descriptions)
end
function p.mld(frame)
local args = (frame:getParent() or {}).args or {}
return _mld(args)
end
setmetatable(p, {quickTests = function()
local input = {
[1] = 'One?', -- discarded (no support for language numeric keys)
unsupported = 'What?', -- unsupported
en = ' ', -- empty description after trimming (discarded)
als = 'GSW', -- will be remapped
['en-gb '] = 'EN-GB', -- trimming at end
['en-ca <nowiki/>'] = 'EN-CA',
[' de'] = 'DE', -- trimming at start
fr = 'FR',
[' fr '] = 'FR', -- trimming both ends (description not conflicting)
rue = 'RUE',
ru = 'RU',
ko = 'KO',
ja = 'JA',
zh = 'ZH',
['he,iw'] = 'HE', -- 'iw' remapped to 'he' (description not conflicting)
ur = 'UR',
ar = 'AR',
ro = 'RO',
['be-tarask'] = 'BE-TARASK',
['be-x-old'] = 'BE-X-OLD (deprecated)',
dv = 'DV',
}
local expect = {}
--[==[
This is the exact order to expect according to native language names,
and after discarding empty descriptions or unsupported language codes.
--]==]
addDescription(expect, 'gsw', 'GSW') --[[Alemannisch]] -- remapped
addDescription(expect, 'en-gb', 'EN-GB') --[[British English]]
addDescription(expect, 'en-ca', 'EN-CA') --[[Canadian English]]
addDescription(expect, 'de', 'DE') --[[Deutsch]]
addDescription(expect, 'fr', 'FR') --[[français]]
addDescription(expect, 'ro', 'RO') --[[română]]
addDescription(expect, 'be-tarask', 'BE-TARASK') --[[беларуская (тарашкевіца)]]
-- addDescription(expect, 'be-x-old', 'BE-X-OLD (deprecated)') --[[беларуская (тарашкевіца)]] -- discarded due to conflict
addDescription(expect, 'rue', 'RUE') --[[русиньскый]]
addDescription(expect, 'ru', 'RU') --[[русский]]
addDescription(expect, 'ko', 'KO') --[[한국어]]
addDescription(expect, 'ja', 'JA') --[[日本語]]
addDescription(expect, 'zh', 'ZH') --[[中文]]
addDescription(expect, 'he', 'HE') --[[עברית]]
addDescription(expect, 'ur', 'UR') --[[اردو]]
addDescription(expect, 'ar', 'AR') --[[العربية]]
addDescription(expect, 'dv', 'DV') --[[ދިވެހިބަސް]]
--[==[
Note that unknown/unsorted languages may occur here in unpredictable
order at end of this list, but only if they are "supported" (other
will be discarded). So we can only test for the presence of one such
item.
--]==]
addDescription(expect, 'unsupported', 'What?', 'unsupported')
addTracking(expect, 'conflicting')
addTracking(expect, 'deprecated')
addTracking(expect, 'unsupported')
expect = table.concat(expect)
local actual = _mld(input)
if (actual ~= expect) then
mwlog('expect:\n' .. expect)
mwlog('actual:\n' .. actual)
return false
end
return true
end})
--[==[ Type this to run tests in the Lua console (should return true):
=getmetatable(p).quickTests()
--]==]
return p
lnm9jw6xqs5hmczfbr5rml75i4beaf4
Module:Multilingual description/sort
828
1370
10789
2026-07-23T21:26:41Z
commons>Verdy p
0
10789
Scribunto
text/plain
--[=[
The documented sort order is by script, then alphabetically by displayed native name (as generated by {{#language: code}}), using the default DUCET order.
This allows easier selection by users reading the lists of languages in order to find their own.
Please test this order, and maintain it as complete as possible, including legacy codes still used in MediaWiki.
Any missing language will be sorted after all languages listed below, just using its internal language code.
]=]
local p = {
-- LTR scripts
-- Latin alphabets
--[['-latn', '-latf', '-latg',]]
--[[A]] 'aig', 'sma', 'abr', 'ace', 'ang', 'af', 'agq', 'ak', 'gsw', 'als', 'en-us', 'ase', 'smn', 'an', 'aae', 'rup', 'roa-rup', 'frp', 'ast', 'atj', 'gn', 'ay', 'az',
--[[B]] 'ksf', 'bfd', 'abs', 'gor', 'id', 'ms', 'bdr', 'bkc', 'bkh', 'bm', 'bax', 'zh-min-nan', 'nan-latn-pehoeji', 'nan-latn-tailo', 'bjn', 'ban', 'jv-x-bms', 'map-bms', 'bug', 'bug-latn', 'bas', 'mui', 'btm', 'bbc', 'bbc-latn', 'zag', 'zag-latn', 'bew', 'sje', 'bcl', 'bi', 'bar', 'bol', 'bs', 'brh', 'br', 'en-gb',
--[[C]] 'en-ca', 'cps', 'cal', 'ca', 'ceb', 'cs', 'cho', 'ch', 'cbk-zam', 'ny', 'chn', 'sn', 'tum', 'lua', 'sei', 'co', 'cy',
--[[D]] 'dga', 'dag', 'da', 'se', 'se-no', 'se-se', 'se-fi', 'pdc', 'de', 'de-formal', 'de-latf', 'nv', 'dsb', 'non'--[[Dǫnsk tunga]], 'na', 'dua',
--[[E]] 'mh', 'et', 'efi', 'etu', 'vmw', 'egl', 'eml', 'en', 'es', 'es-formal', 'es-419', 'eo', 'ext', 'eto', 'eu', 'ee', 'ewo',
--[[F]] 'wls', 'gur', 'fmp', 'hif', 'hif-latn', 'fil', 'fon', 'fo', 'fr', 'frc', 'fy', 'ff', 'fur',
--[[G]] 'gaa', 'ga', 'gv', 'sm', 'gag', 'gd', 'gl', 'gya', 'aln', 'gpe', 'bbj', 'ki', 'gom-latn', 'guw', 'hak-latn',
--[[H]] 'cnh', 'ha', 'ha-latn', 'haw', 'ho', 'hmn', 'hoc-latn', 'hsb', 'hr', 'hrx',
--[[I]] 'ibb', 'io', 'igl', 'ig', 'rw', 'rn', 'ilo', 'hil', 'ia', 'ie', 'ike-latn', 'ik', 'bto', 'nr', 'xh', 'zu', 'is', 'isu', 'it', 'iba',
--[[J]] 'jv', 'kaj', 'smj', 'jut',
--[[K]] 'rmf', 'kbp', 'kea', 'dtp', 'kl', 'kr', 'pam', 'cak', 'kai', 'krl', 'csb', 'ker', 'kw', 'kha', 'hke', 'krj', 'kiu', 'sw', 'bkm', 'kg', 'avk', 'ses', 'ht', 'gcf'--[[kréyòl gwadloupéyen]], 'kri', 'gcr', 'kge', 'ku', 'ku-latn', 'kmr', 'kmr-latn', 'kus', 'fkv', 'kj', 'nmg', 'acf',
--[[L]] 'jbo', 'lld', 'lad', 'lkt', 'lns', 'ljp', 'ltg', 'la', 'lv', 'lzz', 'to', 'lb', 'nia', 'lt', 'lij', 'li', 'ln', 'lfn', 'liv', 'olo', 'lmo', 'lg',
--[[M]] 'yua', 'mad', 'hu', 'hu-formal', 'vmf', 'mcp', 'mak', 'mg', 'mt', 'mnc', 'mnc-latn', 'mi', 'arn', 'mrh', 'srq', 'fit', 'byv', 'isv', 'isv-latn', 'fat', 'min', 'cdo-latn', 'mwl', 'lus', 'bqz', 'cnr', 'cnr-latn', 'mos', 'mua', 'mus',
--[[N]] 'fj', 'nah', 'pcm', 'nap', 'ppl', --[['nrm', should be Narom]] 'nmz', 'nnz', 'nl', 'nl-informal', 'nds-nl', 'cr', 'nge', 'nnh', 'nla', 'yrl', 'niu', 'lem', 'frr', 'pih', 'no', 'nb', 'nn', 'nrf'--[[Nouormand]], 'nrm'--[[currently Nouormand, should be Narom instead]], 'nov', 'yas', 'sms', 'nup', 'nys',
--[[O]] 'uz-latn', 'uz', 'ann', 'oc', 'ojb', 'frs', 'om', 'nyo', 'ttj', 'ng', 'de-at', 'hz',
--[[P]] 'pfl', 'pag', 'ami', 'pap-aw', 'pap', 'jam', 'pcd', 'wes', 'pms', 'pwn', 'nds', 'pdt', 'cpx-latn', 'pl', 'fvr', 'pt', 'pt-br', 'prg',
--[[Q]] 'aa', 'kaa', 'quc', 'kk-latn', 'kk-tr', 'crh', 'crh-latn',
--[[R]] 'ty', 'ksh', 'ro', 'rmc', 'rmy', 'rgn', 'rm', 'qug', 'qu', 'nyn',
--[[S]] 'xsy', 'szy', 'sg', 'sc', 'sro', 'sas', 'sdc', 'sli', 'de-ch', 'sco', 'trv', 'stq', 'st', 'nso', 'tn', 'sq', 'scn', 'loz', 'simple', 'ss', 'sk', 'sl', 'szl', 'so', 'srn', 'sr-latn', 'sr-el', 'sh-latn', 'sh-el', 'sh'--[[latn/cyrl]], 'su', 'fi', 'sv',
--[[T]] 'shy', 'shy-latn', 'shi', 'shi-latn', 'tl', 'tzl', 'zgh-latn', 'tpv', 'kab', 'scn-x-tara', 'roa-tara', 'rif', 'tt-latn', 'crh-ro', 'tay', 'tet', 'din', 'vi', 'tg-latn', 'tpi', 'tok', 'tly', 'chy', 've', 'bag', 'tvu', 'aeb-latn', 'tr', 'tk', 'tru', 'tw', 'kcg',
--[[U]] 'sju', 'ug-latn',
--[[V]] 'vot', 'za', 'vec', 'vep', 'ruq', 'ruq-latn', 'vo', 'vro', 'fiu-vro', 'mcn', 'vut',
--[[W]] 'wlx', 'wa', 'bci', 'guc', 'osa-latn', 'vls', 'wal', 'war', 'wo', 'wya',
--[[X]] 'ts',
--[[Y]] 'yat', 'yav', 'ybb', 'knc', 'yo',
--[[Z]] 'diq', 'zea', 'sgs', 'bat-smg',
-- Greek [-grek] and Coptic [-copt] alphabets
--[['-grek']] 'grc', 'el', 'pnt',
--[['-copt',]] 'cop',
-- Cyrillic alphabets
--[['-cyrl', '-cyrs',]]
--[[А]] 'av', 'ady', 'ady-cyrl', 'kbd', 'kbd-cyrl', 'alt', 'ab',
--[[Б]] 'ba', 'be', 'be-tarask', 'be-x-old', 'bxr', 'bg',
--[[В]] 'ruq-cyrl',
--[[Г]] 'inh',
--[[д]] 'dlg',
--[[И]] 'os',
--[[К]] 'sjd', 'kv', 'krc', 'kum', 'crh-cyrl', 'ky', 'mrj', 'kk', 'kk-cyrl', 'kk-kz',
--[[Л]] 'lbe', 'lez',
--[[М]] 'mk', 'isv-cyrl', 'mdf', 'mo', 'mn', 'rut',
--[[Н]] 'gld', 'nog', 'ce',
--[[О]] 'mhr',
--[[П]] 'koi',
--[[Р]] 'rue', 'rsk', 'ru',
--[[C]] 'sah', 'sty', 'cu', 'sr-cyrl', 'sr-ec', 'sr'--[[cyrl/latn]], 'sh-cyrl', 'sh-ec',
--[[Т]] 'tt-cyrl', 'tt', 'tly-cyrl', 'tg-cyrl', 'tg', 'tyv',
--[[У]] 'udm', 'uz-cyrl', 'uk',
--[[Х]] 'kjh', 'xal',
--[[Ц]] 'cnr-cyrl',
--[[Ч]] 'cv',
--[[Э]] 'myv',
-- Other alphabets (horizontal only)
--[['-ital',]]
--[['-glag',]]
--[['-geor', '-geok',]] 'xmf', 'ka', 'sva',
--[['-armn',]] 'hyw', 'hy',
-- North Indian abugidas
--[['-deva',]] 'anp', 'awa', 'xnr-deva', 'xnr', 'thq', 'ks-deva', 'gju-deva', 'kgg', 'gom-deva', 'gom', 'dgo-deva', 'dgo', 'doi-deva', 'doi', 'dty', 'new', 'ne', 'pi', 'bho', 'bh', 'mag', 'mr', 'rwr', 'mai', 'sa', 'bgc', 'hi',
--[['-beng',]] 'as', 'rkt', 'bn', 'bpy',
--[['-guru',]] 'pa',
--[['-takr',]] 'xnr-takr', 'doi-takr', 'dgo-takr',
-- South Indian abugidas
--[['-gujr',]] 'gu',
--[['-orya',]] 'or', 'dso', 'bfw',
--[['-taml',]] 'ta',
--[['-telu',]] 'nit', 'te',
--[['-kanr',]] 'kn', 'tcy',
--[['-mlym',]] 'ml',
--[['-sinh',]] 'si',
-- Tibeto-Burmese abugidas
--[['-lepc',]] 'lep', 'lep-lepc',
--[['-sylo',]] 'syl',
--[['-tibt',]] 'dz', 'bo', 'lep-tibt',
--[['-mtei',]] 'mni',
--[['-bugi',]] 'bug-bugi',
--[['-mymr',]] 'ksw', 'blk', 'kjp', 'shn', 'mnw', 'my', 'rki',
-- Other Central and South-Eastern Asian abugidas
--[['-cakm',]] 'ccp',
--[['-khmr',]] 'km',
--[['-thai',]] 'th',
--[['-tale',]] 'tdd',
--[['-lana',]] 'nod',
--[['-laoo',]] 'lo',
--[['-bali',]] 'ban-bali',
--[['-java',]] 'jv-java',
--[['-olck',]] 'sat',
--[['-wara',]]
--[['-pauc',]]
--[['-mroo',]]
--[['-medf',]]
--[['-sunu',]]
--[['-tnsa',]]
-- American and European syllabaries
--[['-cher',]] 'chr',
--[['-osge',]] 'osa',
--[['-cans',]] 'ike', 'ike-cans', 'iu',
--[['-hmnp',]] 'hoc',
--[['-goth',]] 'got',
--[['-moon',]]
-- African syllabaries
--[['-tfng',]] 'tzm', 'zgh', 'shi-tfng', 'rif-tfng', 'sjs',
--[['-ethi',]] 'tig', 'ti', 'am',
--[['-berf',]] 'zag-berf',
--[['-bass',]]
--[['-osma',]]
--[['-shaw',]]
--[['-plrd',]]
-- Hieroglyphic scripts
--[['-egyd', '-egyh', '-egyp',]]
--[['-hluw',]]
--[['-mero','-merc',]]
--[['-maya',]]
--[['-nkdb',]]
--[['-sgnw',]]
--[['-visp',]]
-- Asian syllabaries
--[['-yiii',]] 'ii',
-- Korean scripts (alphabet and sinograms)
--[['-kore', '-hang', '-jamo',]] 'ko-kp', 'ko', 'ko-kr',
-- Japanese scripts (syllabaries and sinograms)
--[['-japn', '-hrkt', '-hira', '-kana',]] 'ja', 'ryu',
-- Sinographic scripts (plus Bopomofo syllabary)
--[['-hanb', '-hani', '-hans', '-hntl', '-hant', '-bopo',]]
'zh', 'zh-cn', 'zh-sg', 'zh-mo', 'zh-hans', 'zh-hant', 'zh-tw', 'zh-hk', 'zh-my',
'wuu-hant', 'wuu', 'wuu-hans',
'hak', 'hak-hant', 'hak-hans',
'lzh', 'zh-classical',
'hsn',
'yue', 'zh-yue', 'yue-hant', 'yue-hans',
'cpx', 'cpx-hant', 'cpx-hans',
'gan', 'gan-hant', 'gan-hans',
'nan-hani', 'nan', 'nan-hant',
'cdo', 'cdo-hant',
-- Other vertical scripts (that are rendered horizontally, when not rotated explicitly by style)
--[['-mong',]] 'mnc-mong',
-- RTL scripts
-- Hebrew abjads
--[['-hebr',]] 'yi', 'ydd', 'yih', 'he', 'hbo',
-- Arabic abjads
--[['-arab', '-aran',]]
--[[ء]] -- [[ٴ]]
--[[ئ]] 'ug-arab', 'ug',
--[[ا]] 'ur', 'ary', 'ar', 'acq', 'uz-arab',
--[[أ]] --[[ٱ]] --[[ٳ]] --[[ٲ]] --[[ا]] --[[آ]]
--[[ب]] 'bqi', 'bsk', 'bgp' ,'bal', 'ms-arab',
--[[ب]] --[[ٻ]] --[[ڀ]]
--[[پ]] 'ps', 'pnb',
--[[ت]] 'aeb-arab', 'aeb', 'azb',
--[[ٺ]] --[[ٿ]] --[[ټ]] --[[ٽ]] --[[ٹ]]
--[[ج]] 'arq', 'bcc',
--[[ڃ]] --[[ڄ]] --[[چ]] --[[ڇ]] --[[ح]] --[[ځ]] --[[ڂ]] --[[څ]] --[[خ]]
--[[د]] --[[ڋ]] --[[ڈ]] --[[ډ]] --[[ڊ]] --[[ڍ]] --[[ڎ]] --[[ڏ]] --[[ڐ]] --[[ذ]] --[[ڌ]]
--[[ر]] 'bgn',
--[[ڕ]] --[[ڒ]] --[[ڔ]] --[[ږ]] --[[ڗ]] --[[ڑ]] --[[ړ]] --[[ز]] --[[ڙ]] --[[ژ]]
--[[س]] 'skr', 'skr-arab', 'sd',
--[[ڛ]] --[[ښ]] --[[ڜ]]
--[[ش]] 'apc', 'acm', 'ajp',
--[[ص]] --[[ڝ]] --[[ڞ]] --[[ض]]
--[[ط]] --[[ڟ]] --[[ظ]]
--[[ع]] 'arb',
--[[ڠ]] --[[غ]]
--[[ڡ]]
--[[ف]] 'fa-af', 'fa', 'prd',
--[[ڢ]] --[[ڣ]] --[[ڤ]] --[[ڥ]] --[[ڦ]]
--[[ق]] 'kk-arab', 'kk-cn',
--[[ڧ]] --[[ڨ]]
--[[ك]] 'ku-arab', 'kcn', 'kmr-arab',
--[[ګ]] --[[ڮ]] --[[ڬ]] --[[ڭ]]
--[[ک]] 'ks', 'ks-arab', 'pbt', 'khw', 'ckb', 'sdh',
--[[ڪ]]
--[[گ]] 'gju-arab', 'glk',
--[[ڰ]] --[[ڱ]] --[[ڳ]] --[[ڲ]] --[[ڴ]]
--[[ل]] 'ota', 'lrc', 'luz', 'lki',
--[[ڵ]] --[[ڶ]] --[[ڷ]]
--[[م]] 'mve', 'mzn', 'arz', 'pst',
--[[ں]] --[[ن]] --[[ڼ]] --[[ڻ]] --[[ڽ]]
--[[ۃ]]
--[[ه]] 'ha-arab',
--[[ہ]] 'hno',
--[[ھ]] --[[ۂ]] --[[ە]] --[[ۀ]]
--[[و]] 'wne',
--[[ۄ]] --[[ۆ]] --[[ۅ]] --[[ۇ]] --[[ۈ]] --[[ۉ]]
--[[ې]] --[[ۍ]] --[[ى]] --[[ي]] --[[ێ]] --[[ۑ]] --[[ے]]
--[[ی]] 'pbu',
--[[ۓ]]
-- Other semitics abjads
--[['-samr', '-armi']] 'arc',
--[['-syrc', '-syre', '-syrj', '-syrn',]] 'syc',
--[['-thaa', '-diak',]] 'dv',
--[['-nkoo',]] 'nqo',
--[['-adlm',]]
--[['-rohg',]]
--[['-yezi',]]
--[['-orkh',]]
--[['-hung',]]
--[['-sidt',]]
--[['-gara',]]
--[['-ugar',]]
--[['-cari',]]
--[['-lyci',]]
--[['-lydi',]]
--[['-palm',]]
--[['-sarb',]]
--[['-nbat',]]
--[['-narb',]]
--[['-hatr',]]
--[['-elym',]]
--[['-prti',]]
--[['-phli', '-phlp', '-phlv',]]
--[['-avst',]]
--[['-pssin']]
--[['-pelm',]]
--[['-chrs',]]
--[['-mani',]]
--[['-mand',]]
--[['-sogo', '-sogd',]]
--[['-xpeo',]] 'xpu',
--[['-xsux',]] 'phn',
--[['-pcun',]]
-- Additional language codes that still need to be sorted by native name can be temporarily placed
}
setmetatable(p, {
quickTests = function()
local s = {}
for k, lang in pairs(p) do
if type(k) ~= 'number' or k < 1 or k ~= math.floor(k)
or type(lang) ~= 'string' or #lang < 2 or #lang > 16
or (lang):find('^[a-z][%-0-9a-z]*[0-9a-z]$') ~= 1
or s[lang] then
return false, ': invalid sequence of distinct lowercase language codes at p[' .. tostring(k) .. '] = "' .. tostring(lang) .. '"'
end
s[lang] = true
end
return true
end
})
--[=[ To test this module in the Lua console: -- must return true
=getmetatable(p).quickTests()
--]=]
return p
te61cs6wt1mcw80o2afs1jjjp98w4rg
10790
10789
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Multilingual_description/sort]]
10789
Scribunto
text/plain
--[=[
The documented sort order is by script, then alphabetically by displayed native name (as generated by {{#language: code}}), using the default DUCET order.
This allows easier selection by users reading the lists of languages in order to find their own.
Please test this order, and maintain it as complete as possible, including legacy codes still used in MediaWiki.
Any missing language will be sorted after all languages listed below, just using its internal language code.
]=]
local p = {
-- LTR scripts
-- Latin alphabets
--[['-latn', '-latf', '-latg',]]
--[[A]] 'aig', 'sma', 'abr', 'ace', 'ang', 'af', 'agq', 'ak', 'gsw', 'als', 'en-us', 'ase', 'smn', 'an', 'aae', 'rup', 'roa-rup', 'frp', 'ast', 'atj', 'gn', 'ay', 'az',
--[[B]] 'ksf', 'bfd', 'abs', 'gor', 'id', 'ms', 'bdr', 'bkc', 'bkh', 'bm', 'bax', 'zh-min-nan', 'nan-latn-pehoeji', 'nan-latn-tailo', 'bjn', 'ban', 'jv-x-bms', 'map-bms', 'bug', 'bug-latn', 'bas', 'mui', 'btm', 'bbc', 'bbc-latn', 'zag', 'zag-latn', 'bew', 'sje', 'bcl', 'bi', 'bar', 'bol', 'bs', 'brh', 'br', 'en-gb',
--[[C]] 'en-ca', 'cps', 'cal', 'ca', 'ceb', 'cs', 'cho', 'ch', 'cbk-zam', 'ny', 'chn', 'sn', 'tum', 'lua', 'sei', 'co', 'cy',
--[[D]] 'dga', 'dag', 'da', 'se', 'se-no', 'se-se', 'se-fi', 'pdc', 'de', 'de-formal', 'de-latf', 'nv', 'dsb', 'non'--[[Dǫnsk tunga]], 'na', 'dua',
--[[E]] 'mh', 'et', 'efi', 'etu', 'vmw', 'egl', 'eml', 'en', 'es', 'es-formal', 'es-419', 'eo', 'ext', 'eto', 'eu', 'ee', 'ewo',
--[[F]] 'wls', 'gur', 'fmp', 'hif', 'hif-latn', 'fil', 'fon', 'fo', 'fr', 'frc', 'fy', 'ff', 'fur',
--[[G]] 'gaa', 'ga', 'gv', 'sm', 'gag', 'gd', 'gl', 'gya', 'aln', 'gpe', 'bbj', 'ki', 'gom-latn', 'guw', 'hak-latn',
--[[H]] 'cnh', 'ha', 'ha-latn', 'haw', 'ho', 'hmn', 'hoc-latn', 'hsb', 'hr', 'hrx',
--[[I]] 'ibb', 'io', 'igl', 'ig', 'rw', 'rn', 'ilo', 'hil', 'ia', 'ie', 'ike-latn', 'ik', 'bto', 'nr', 'xh', 'zu', 'is', 'isu', 'it', 'iba',
--[[J]] 'jv', 'kaj', 'smj', 'jut',
--[[K]] 'rmf', 'kbp', 'kea', 'dtp', 'kl', 'kr', 'pam', 'cak', 'kai', 'krl', 'csb', 'ker', 'kw', 'kha', 'hke', 'krj', 'kiu', 'sw', 'bkm', 'kg', 'avk', 'ses', 'ht', 'gcf'--[[kréyòl gwadloupéyen]], 'kri', 'gcr', 'kge', 'ku', 'ku-latn', 'kmr', 'kmr-latn', 'kus', 'fkv', 'kj', 'nmg', 'acf',
--[[L]] 'jbo', 'lld', 'lad', 'lkt', 'lns', 'ljp', 'ltg', 'la', 'lv', 'lzz', 'to', 'lb', 'nia', 'lt', 'lij', 'li', 'ln', 'lfn', 'liv', 'olo', 'lmo', 'lg',
--[[M]] 'yua', 'mad', 'hu', 'hu-formal', 'vmf', 'mcp', 'mak', 'mg', 'mt', 'mnc', 'mnc-latn', 'mi', 'arn', 'mrh', 'srq', 'fit', 'byv', 'isv', 'isv-latn', 'fat', 'min', 'cdo-latn', 'mwl', 'lus', 'bqz', 'cnr', 'cnr-latn', 'mos', 'mua', 'mus',
--[[N]] 'fj', 'nah', 'pcm', 'nap', 'ppl', --[['nrm', should be Narom]] 'nmz', 'nnz', 'nl', 'nl-informal', 'nds-nl', 'cr', 'nge', 'nnh', 'nla', 'yrl', 'niu', 'lem', 'frr', 'pih', 'no', 'nb', 'nn', 'nrf'--[[Nouormand]], 'nrm'--[[currently Nouormand, should be Narom instead]], 'nov', 'yas', 'sms', 'nup', 'nys',
--[[O]] 'uz-latn', 'uz', 'ann', 'oc', 'ojb', 'frs', 'om', 'nyo', 'ttj', 'ng', 'de-at', 'hz',
--[[P]] 'pfl', 'pag', 'ami', 'pap-aw', 'pap', 'jam', 'pcd', 'wes', 'pms', 'pwn', 'nds', 'pdt', 'cpx-latn', 'pl', 'fvr', 'pt', 'pt-br', 'prg',
--[[Q]] 'aa', 'kaa', 'quc', 'kk-latn', 'kk-tr', 'crh', 'crh-latn',
--[[R]] 'ty', 'ksh', 'ro', 'rmc', 'rmy', 'rgn', 'rm', 'qug', 'qu', 'nyn',
--[[S]] 'xsy', 'szy', 'sg', 'sc', 'sro', 'sas', 'sdc', 'sli', 'de-ch', 'sco', 'trv', 'stq', 'st', 'nso', 'tn', 'sq', 'scn', 'loz', 'simple', 'ss', 'sk', 'sl', 'szl', 'so', 'srn', 'sr-latn', 'sr-el', 'sh-latn', 'sh-el', 'sh'--[[latn/cyrl]], 'su', 'fi', 'sv',
--[[T]] 'shy', 'shy-latn', 'shi', 'shi-latn', 'tl', 'tzl', 'zgh-latn', 'tpv', 'kab', 'scn-x-tara', 'roa-tara', 'rif', 'tt-latn', 'crh-ro', 'tay', 'tet', 'din', 'vi', 'tg-latn', 'tpi', 'tok', 'tly', 'chy', 've', 'bag', 'tvu', 'aeb-latn', 'tr', 'tk', 'tru', 'tw', 'kcg',
--[[U]] 'sju', 'ug-latn',
--[[V]] 'vot', 'za', 'vec', 'vep', 'ruq', 'ruq-latn', 'vo', 'vro', 'fiu-vro', 'mcn', 'vut',
--[[W]] 'wlx', 'wa', 'bci', 'guc', 'osa-latn', 'vls', 'wal', 'war', 'wo', 'wya',
--[[X]] 'ts',
--[[Y]] 'yat', 'yav', 'ybb', 'knc', 'yo',
--[[Z]] 'diq', 'zea', 'sgs', 'bat-smg',
-- Greek [-grek] and Coptic [-copt] alphabets
--[['-grek']] 'grc', 'el', 'pnt',
--[['-copt',]] 'cop',
-- Cyrillic alphabets
--[['-cyrl', '-cyrs',]]
--[[А]] 'av', 'ady', 'ady-cyrl', 'kbd', 'kbd-cyrl', 'alt', 'ab',
--[[Б]] 'ba', 'be', 'be-tarask', 'be-x-old', 'bxr', 'bg',
--[[В]] 'ruq-cyrl',
--[[Г]] 'inh',
--[[д]] 'dlg',
--[[И]] 'os',
--[[К]] 'sjd', 'kv', 'krc', 'kum', 'crh-cyrl', 'ky', 'mrj', 'kk', 'kk-cyrl', 'kk-kz',
--[[Л]] 'lbe', 'lez',
--[[М]] 'mk', 'isv-cyrl', 'mdf', 'mo', 'mn', 'rut',
--[[Н]] 'gld', 'nog', 'ce',
--[[О]] 'mhr',
--[[П]] 'koi',
--[[Р]] 'rue', 'rsk', 'ru',
--[[C]] 'sah', 'sty', 'cu', 'sr-cyrl', 'sr-ec', 'sr'--[[cyrl/latn]], 'sh-cyrl', 'sh-ec',
--[[Т]] 'tt-cyrl', 'tt', 'tly-cyrl', 'tg-cyrl', 'tg', 'tyv',
--[[У]] 'udm', 'uz-cyrl', 'uk',
--[[Х]] 'kjh', 'xal',
--[[Ц]] 'cnr-cyrl',
--[[Ч]] 'cv',
--[[Э]] 'myv',
-- Other alphabets (horizontal only)
--[['-ital',]]
--[['-glag',]]
--[['-geor', '-geok',]] 'xmf', 'ka', 'sva',
--[['-armn',]] 'hyw', 'hy',
-- North Indian abugidas
--[['-deva',]] 'anp', 'awa', 'xnr-deva', 'xnr', 'thq', 'ks-deva', 'gju-deva', 'kgg', 'gom-deva', 'gom', 'dgo-deva', 'dgo', 'doi-deva', 'doi', 'dty', 'new', 'ne', 'pi', 'bho', 'bh', 'mag', 'mr', 'rwr', 'mai', 'sa', 'bgc', 'hi',
--[['-beng',]] 'as', 'rkt', 'bn', 'bpy',
--[['-guru',]] 'pa',
--[['-takr',]] 'xnr-takr', 'doi-takr', 'dgo-takr',
-- South Indian abugidas
--[['-gujr',]] 'gu',
--[['-orya',]] 'or', 'dso', 'bfw',
--[['-taml',]] 'ta',
--[['-telu',]] 'nit', 'te',
--[['-kanr',]] 'kn', 'tcy',
--[['-mlym',]] 'ml',
--[['-sinh',]] 'si',
-- Tibeto-Burmese abugidas
--[['-lepc',]] 'lep', 'lep-lepc',
--[['-sylo',]] 'syl',
--[['-tibt',]] 'dz', 'bo', 'lep-tibt',
--[['-mtei',]] 'mni',
--[['-bugi',]] 'bug-bugi',
--[['-mymr',]] 'ksw', 'blk', 'kjp', 'shn', 'mnw', 'my', 'rki',
-- Other Central and South-Eastern Asian abugidas
--[['-cakm',]] 'ccp',
--[['-khmr',]] 'km',
--[['-thai',]] 'th',
--[['-tale',]] 'tdd',
--[['-lana',]] 'nod',
--[['-laoo',]] 'lo',
--[['-bali',]] 'ban-bali',
--[['-java',]] 'jv-java',
--[['-olck',]] 'sat',
--[['-wara',]]
--[['-pauc',]]
--[['-mroo',]]
--[['-medf',]]
--[['-sunu',]]
--[['-tnsa',]]
-- American and European syllabaries
--[['-cher',]] 'chr',
--[['-osge',]] 'osa',
--[['-cans',]] 'ike', 'ike-cans', 'iu',
--[['-hmnp',]] 'hoc',
--[['-goth',]] 'got',
--[['-moon',]]
-- African syllabaries
--[['-tfng',]] 'tzm', 'zgh', 'shi-tfng', 'rif-tfng', 'sjs',
--[['-ethi',]] 'tig', 'ti', 'am',
--[['-berf',]] 'zag-berf',
--[['-bass',]]
--[['-osma',]]
--[['-shaw',]]
--[['-plrd',]]
-- Hieroglyphic scripts
--[['-egyd', '-egyh', '-egyp',]]
--[['-hluw',]]
--[['-mero','-merc',]]
--[['-maya',]]
--[['-nkdb',]]
--[['-sgnw',]]
--[['-visp',]]
-- Asian syllabaries
--[['-yiii',]] 'ii',
-- Korean scripts (alphabet and sinograms)
--[['-kore', '-hang', '-jamo',]] 'ko-kp', 'ko', 'ko-kr',
-- Japanese scripts (syllabaries and sinograms)
--[['-japn', '-hrkt', '-hira', '-kana',]] 'ja', 'ryu',
-- Sinographic scripts (plus Bopomofo syllabary)
--[['-hanb', '-hani', '-hans', '-hntl', '-hant', '-bopo',]]
'zh', 'zh-cn', 'zh-sg', 'zh-mo', 'zh-hans', 'zh-hant', 'zh-tw', 'zh-hk', 'zh-my',
'wuu-hant', 'wuu', 'wuu-hans',
'hak', 'hak-hant', 'hak-hans',
'lzh', 'zh-classical',
'hsn',
'yue', 'zh-yue', 'yue-hant', 'yue-hans',
'cpx', 'cpx-hant', 'cpx-hans',
'gan', 'gan-hant', 'gan-hans',
'nan-hani', 'nan', 'nan-hant',
'cdo', 'cdo-hant',
-- Other vertical scripts (that are rendered horizontally, when not rotated explicitly by style)
--[['-mong',]] 'mnc-mong',
-- RTL scripts
-- Hebrew abjads
--[['-hebr',]] 'yi', 'ydd', 'yih', 'he', 'hbo',
-- Arabic abjads
--[['-arab', '-aran',]]
--[[ء]] -- [[ٴ]]
--[[ئ]] 'ug-arab', 'ug',
--[[ا]] 'ur', 'ary', 'ar', 'acq', 'uz-arab',
--[[أ]] --[[ٱ]] --[[ٳ]] --[[ٲ]] --[[ا]] --[[آ]]
--[[ب]] 'bqi', 'bsk', 'bgp' ,'bal', 'ms-arab',
--[[ب]] --[[ٻ]] --[[ڀ]]
--[[پ]] 'ps', 'pnb',
--[[ت]] 'aeb-arab', 'aeb', 'azb',
--[[ٺ]] --[[ٿ]] --[[ټ]] --[[ٽ]] --[[ٹ]]
--[[ج]] 'arq', 'bcc',
--[[ڃ]] --[[ڄ]] --[[چ]] --[[ڇ]] --[[ح]] --[[ځ]] --[[ڂ]] --[[څ]] --[[خ]]
--[[د]] --[[ڋ]] --[[ڈ]] --[[ډ]] --[[ڊ]] --[[ڍ]] --[[ڎ]] --[[ڏ]] --[[ڐ]] --[[ذ]] --[[ڌ]]
--[[ر]] 'bgn',
--[[ڕ]] --[[ڒ]] --[[ڔ]] --[[ږ]] --[[ڗ]] --[[ڑ]] --[[ړ]] --[[ز]] --[[ڙ]] --[[ژ]]
--[[س]] 'skr', 'skr-arab', 'sd',
--[[ڛ]] --[[ښ]] --[[ڜ]]
--[[ش]] 'apc', 'acm', 'ajp',
--[[ص]] --[[ڝ]] --[[ڞ]] --[[ض]]
--[[ط]] --[[ڟ]] --[[ظ]]
--[[ع]] 'arb',
--[[ڠ]] --[[غ]]
--[[ڡ]]
--[[ف]] 'fa-af', 'fa', 'prd',
--[[ڢ]] --[[ڣ]] --[[ڤ]] --[[ڥ]] --[[ڦ]]
--[[ق]] 'kk-arab', 'kk-cn',
--[[ڧ]] --[[ڨ]]
--[[ك]] 'ku-arab', 'kcn', 'kmr-arab',
--[[ګ]] --[[ڮ]] --[[ڬ]] --[[ڭ]]
--[[ک]] 'ks', 'ks-arab', 'pbt', 'khw', 'ckb', 'sdh',
--[[ڪ]]
--[[گ]] 'gju-arab', 'glk',
--[[ڰ]] --[[ڱ]] --[[ڳ]] --[[ڲ]] --[[ڴ]]
--[[ل]] 'ota', 'lrc', 'luz', 'lki',
--[[ڵ]] --[[ڶ]] --[[ڷ]]
--[[م]] 'mve', 'mzn', 'arz', 'pst',
--[[ں]] --[[ن]] --[[ڼ]] --[[ڻ]] --[[ڽ]]
--[[ۃ]]
--[[ه]] 'ha-arab',
--[[ہ]] 'hno',
--[[ھ]] --[[ۂ]] --[[ە]] --[[ۀ]]
--[[و]] 'wne',
--[[ۄ]] --[[ۆ]] --[[ۅ]] --[[ۇ]] --[[ۈ]] --[[ۉ]]
--[[ې]] --[[ۍ]] --[[ى]] --[[ي]] --[[ێ]] --[[ۑ]] --[[ے]]
--[[ی]] 'pbu',
--[[ۓ]]
-- Other semitics abjads
--[['-samr', '-armi']] 'arc',
--[['-syrc', '-syre', '-syrj', '-syrn',]] 'syc',
--[['-thaa', '-diak',]] 'dv',
--[['-nkoo',]] 'nqo',
--[['-adlm',]]
--[['-rohg',]]
--[['-yezi',]]
--[['-orkh',]]
--[['-hung',]]
--[['-sidt',]]
--[['-gara',]]
--[['-ugar',]]
--[['-cari',]]
--[['-lyci',]]
--[['-lydi',]]
--[['-palm',]]
--[['-sarb',]]
--[['-nbat',]]
--[['-narb',]]
--[['-hatr',]]
--[['-elym',]]
--[['-prti',]]
--[['-phli', '-phlp', '-phlv',]]
--[['-avst',]]
--[['-pssin']]
--[['-pelm',]]
--[['-chrs',]]
--[['-mani',]]
--[['-mand',]]
--[['-sogo', '-sogd',]]
--[['-xpeo',]] 'xpu',
--[['-xsux',]] 'phn',
--[['-pcun',]]
-- Additional language codes that still need to be sorted by native name can be temporarily placed
}
setmetatable(p, {
quickTests = function()
local s = {}
for k, lang in pairs(p) do
if type(k) ~= 'number' or k < 1 or k ~= math.floor(k)
or type(lang) ~= 'string' or #lang < 2 or #lang > 16
or (lang):find('^[a-z][%-0-9a-z]*[0-9a-z]$') ~= 1
or s[lang] then
return false, ': invalid sequence of distinct lowercase language codes at p[' .. tostring(k) .. '] = "' .. tostring(lang) .. '"'
end
s[lang] = true
end
return true
end
})
--[=[ To test this module in the Lua console: -- must return true
=getmetatable(p).quickTests()
--]=]
return p
te61cs6wt1mcw80o2afs1jjjp98w4rg
Tempilet:Created with Inkscape
10
1371
10791
2026-03-15T07:09:27Z
commons>Shizhao
0
10791
wikitext
text/x-wiki
<noinclude>{{Mbox|type=stop|imageright={{F|Gnome-emblem-important.svg|Z|32}}|text='''Never''' use the template {{Tl|Inkscape}} or {{Tl|Created with Inkscape|link=n}} without the obliged parameters !<br>By using the [[Template:Image generation#Script support|script]] it will automatically be embedded into {{Tl|Image generation}} in a correct manner.|style=border:4px solid #b22222;background:var(--background-color-error-subtle,#FEE);}}</noinclude><!--
-->{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0=Inkscape-yes.svg|-1=Inkscape-un.svg|Inkscape-no.svg}}<!-- valid / uncheckable / invalid
-->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- specified valid
-->|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|Inkscape-ws.svg|Inkscape Logo.svg}}}}}}}}
|3=Inkscape
|4={{#switch:{{padleft:|1|{{{more}}}}}|,|;|:|.|=| }}{{{more|.}}}<!--
|#default={{Igen/cat|{{{cni}}}}}}}}}{{#ifeq:{{{more|.}}}|.|| }}{{{more|.}}}
-->{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}|={{#switch:{{{2|{{{1}}}}}}|v|/=<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#invoke:Igenmod|inkscape}}}}}}}}}}<!-- only for SVG files -->
|5={{{width|}}}
|6={{{style|}}}
|7={{#if:{{{cat|{{{category|}}}}}}|{{{cat|{{{category|}}}}}}}}
|8=<!-- {{{IMPORTANT|}}}
-->{{#if:{{{IMPORTANT|}}}|[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|{{I18n/important}}]]<!-- (was italic from Igen)
-->{{#switch:{{{cni|}}}<!--
-->|-=<!-- suppress "cat:important" with "cni=-"
-->|={{#switch:{{{cat|{{{category|}}}}}}|-|n|no|none=|{{#ifeq:{{#invoke:Igenmod|extcode}}|s<!--
-->|{{Igen/cat|SVG created with Inkscape:Important}}}}}}<!--
-->|#default={{Igen/cat|{{{cni}}}}}}}}}<!--
-->{{#ifeq:{{{Optimized}}}|yes|…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|optimized]]}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{#if:{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}|{{{sub|{{{subcat|{{{subcategory}}}}}}}}}<!--
-->|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{#if:{{{vo|{{{vopt|{{{opt|}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}}}
|17={{#if:{{{iconsize|}}}|{{{iconsize|}}}}}
|18={{#if:{{{c_text|}}}|{{{c_text|}}}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|?shortmore=may be used <!-- as default --> for "Inkscape",<br>
:::::::: or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=[[Category:SVG created with Inkscape:Important|yes]]".|code=}}
</noinclude>
7smpyio8c0396bv2dy52cpeydqjiaqc
10792
10791
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Inkscape]]
10791
wikitext
text/x-wiki
<noinclude>{{Mbox|type=stop|imageright={{F|Gnome-emblem-important.svg|Z|32}}|text='''Never''' use the template {{Tl|Inkscape}} or {{Tl|Created with Inkscape|link=n}} without the obliged parameters !<br>By using the [[Template:Image generation#Script support|script]] it will automatically be embedded into {{Tl|Image generation}} in a correct manner.|style=border:4px solid #b22222;background:var(--background-color-error-subtle,#FEE);}}</noinclude><!--
-->{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0=Inkscape-yes.svg|-1=Inkscape-un.svg|Inkscape-no.svg}}<!-- valid / uncheckable / invalid
-->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- specified valid
-->|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|Inkscape-ws.svg|Inkscape Logo.svg}}}}}}}}
|3=Inkscape
|4={{#switch:{{padleft:|1|{{{more}}}}}|,|;|:|.|=| }}{{{more|.}}}<!--
|#default={{Igen/cat|{{{cni}}}}}}}}}{{#ifeq:{{{more|.}}}|.|| }}{{{more|.}}}
-->{{#switch:{{{err|{{{errors|{{{errnum|}}}}}}}}}|={{#switch:{{{2|{{{1}}}}}}|v|/=<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#ifeq:{{#invoke:Igenmod|extcode}}|s|{{#invoke:Igenmod|inkscape}}}}}}}}}}<!-- only for SVG files -->
|5={{{width|}}}
|6={{{style|}}}
|7={{#if:{{{cat|{{{category|}}}}}}|{{{cat|{{{category|}}}}}}}}
|8=<!-- {{{IMPORTANT|}}}
-->{{#if:{{{IMPORTANT|}}}|[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|{{I18n/important}}]]<!-- (was italic from Igen)
-->{{#switch:{{{cni|}}}<!--
-->|-=<!-- suppress "cat:important" with "cni=-"
-->|={{#switch:{{{cat|{{{category|}}}}}}|-|n|no|none=|{{#ifeq:{{#invoke:Igenmod|extcode}}|s<!--
-->|{{Igen/cat|SVG created with Inkscape:Important}}}}}}<!--
-->|#default={{Igen/cat|{{{cni}}}}}}}}}<!--
-->{{#ifeq:{{{Optimized}}}|yes|…[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|optimized]]}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{#if:{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}|{{{sub|{{{subcat|{{{subcategory}}}}}}}}}<!--
-->|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{#if:{{{vo|{{{vopt|{{{opt|}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}}}
|17={{#if:{{{iconsize|}}}|{{{iconsize|}}}}}
|18={{#if:{{{c_text|}}}|{{{c_text|}}}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|?shortmore=may be used <!-- as default --> for "Inkscape",<br>
:::::::: or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=[[Category:SVG created with Inkscape:Important|yes]]".|code=}}
</noinclude>
7smpyio8c0396bv2dy52cpeydqjiaqc
Tempilet:SVGvalid
10
1372
10793
2023-03-28T02:31:19Z
commons>Sarang
0
+parm
10793
wikitext
text/x-wiki
{{Ifsvg|<!-- don't make anything if it is not an SVG file
-->{{#switch:/|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- "/": all suppressed
-->{{#switch:{{{7}}}|none|n=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- same with "vo=n[one]"
-->{{#switch:s|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!--
-->{{#if:{{{3|}}}|{{#ifeq:{{{3}}}|0|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- error 0 is valid
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}}<!--
-->|{{InvalidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1}}|err={{{3}}}|<!--
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}}} }}<!--
-->|{{#if:{{{2|}}}|{{#ifeq:{{lc:{{{2}}}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!--
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }}<!--
-->|{{#ifeq:{{{1}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!--
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }} }}}}<!--
-->{{#ifeq:{{{9}}}|-||{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#ifeq:{{{7}}}|><!--
-->|[[Category:Large SVG files|{{padleft:{{#expr:20000000000/{{#invoke:File|size|file={{SUBJECTPAGENAME}}}} round 0}}|6|0}}]]<!--
-->}}}}}}}}}}}}}}<noinclude>
{{documentation}}
</noinclude>
37hiv1iqvoqzu1ysqlw6ke07vi3dy4y
10794
10793
2026-08-25T23:38:32Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:SVGvalid]]
10793
wikitext
text/x-wiki
{{Ifsvg|<!-- don't make anything if it is not an SVG file
-->{{#switch:/|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- "/": all suppressed
-->{{#switch:{{{7}}}|none|n=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!-- same with "vo=n[one]"
-->{{#switch:s|{{{1}}}|{{{2}}}=<!--{{SVGvalid/cat|{{{3|}}}|{{{8|}}}}}-->|#default=<!--
-->{{#if:{{{3|}}}|{{#ifeq:{{{3}}}|0|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!-- error 0 is valid
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}}<!--
-->|{{InvalidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1}}|err={{{3}}}|<!--
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}}} }}<!--
-->|{{#if:{{{2|}}}|{{#ifeq:{{lc:{{{2}}}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!--
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }}<!--
-->|{{#ifeq:{{{1}}}|v|{{ValidSVG|opt={{#if:{{{7|}}}|{{{7}}}|&ss=1#source}}|<!--
-->cat=<nowiki/>|style={{{4|}}}|width={{{5|}}}|more={{{6|}}}|c=y}} }} }}}}<!--
-->{{#ifeq:{{{9}}}|-||{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#ifeq:{{{7}}}|><!--
-->|[[Category:Large SVG files|{{padleft:{{#expr:20000000000/{{#invoke:File|size|file={{SUBJECTPAGENAME}}}} round 0}}|6|0}}]]<!--
-->}}}}}}}}}}}}}}<noinclude>
{{documentation}}
</noinclude>
37hiv1iqvoqzu1ysqlw6ke07vi3dy4y
Tempilet:0
10
1373
10795
2020-07-12T21:39:46Z
commons>Tacsipacsi
0
move documentation to subpage
10795
wikitext
text/x-wiki
<span style="visibility:hidden; color:transparent;">{{{1|0}}}</span><noinclude>{{documentation}}</noinclude>
82xanatmprmzbmh8v27ej1w0o5sidjg
10796
10795
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:0]]
10795
wikitext
text/x-wiki
<span style="visibility:hidden; color:transparent;">{{{1|0}}}</span><noinclude>{{documentation}}</noinclude>
82xanatmprmzbmh8v27ej1w0o5sidjg
Tempilet:Created with .../en
10
1374
10797
2023-06-20T05:19:08Z
commons>Sarang
0
10797
wikitext
text/x-wiki
{{Created with/en
|1={{{1|}}}
|logo={{{2|SVG Simple Icon.svg}}}<!-- default does not show when used -->
|toolcat={{{3|}}}
|more={{{4|.}}}
|width={{{5|}}}
|style={{{6|}}}
|category={{{7|}}}
|key={{{9|}}}
|sub={{{10|}}}
|err={{{11|}}}
|w3c={{{12|}}}
|what={{#switch:{{{12}}}
|N|n={{Iffile|{{uc:{{#invoke:File|extension|file={{PAGENAME}}}}}}}} {{#if:{{{8|}}}|{{{8}}}|{{W|Computer graphics|graphic}}}}
|I|V|S|s={{W|Vector images|vector image}}
|A={{{20|{{{14}}}}}}
|#default={{#if:{{{8|}}}|{{{8}}}|image}}}}
|big={{{13|}}}
|top={{{14|}}}<!-- genderless language - else {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|~|lang=en}}|}} -->
|dif={{{15|}}}
|tool={{#if:{{{16|}}}|{{{16}}}|{{W|{{{3|}}}|<noinclude>en:Wp</noinclude>}}}}{{{8|}}}
|iconsize={{{17|}}}
|c_text={{{18|{{{c_text|}}}}}}
|19={{{19|}}} <!-- test -->
}}<noinclude>
{{TrRq|d|+}}
{{translated tag|marker}}[[Category:Created with ... I18nTemplates|{{PAGENAME}}]]{{Heavily used template}}
{{documentation|Template:Created with .../doc}}
</noinclude>
r4n8wfpf3mz76akpqpgwbiv7zgclbof
10798
10797
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_.../en]]
10797
wikitext
text/x-wiki
{{Created with/en
|1={{{1|}}}
|logo={{{2|SVG Simple Icon.svg}}}<!-- default does not show when used -->
|toolcat={{{3|}}}
|more={{{4|.}}}
|width={{{5|}}}
|style={{{6|}}}
|category={{{7|}}}
|key={{{9|}}}
|sub={{{10|}}}
|err={{{11|}}}
|w3c={{{12|}}}
|what={{#switch:{{{12}}}
|N|n={{Iffile|{{uc:{{#invoke:File|extension|file={{PAGENAME}}}}}}}} {{#if:{{{8|}}}|{{{8}}}|{{W|Computer graphics|graphic}}}}
|I|V|S|s={{W|Vector images|vector image}}
|A={{{20|{{{14}}}}}}
|#default={{#if:{{{8|}}}|{{{8}}}|image}}}}
|big={{{13|}}}
|top={{{14|}}}<!-- genderless language - else {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|~|lang=en}}|}} -->
|dif={{{15|}}}
|tool={{#if:{{{16|}}}|{{{16}}}|{{W|{{{3|}}}|<noinclude>en:Wp</noinclude>}}}}{{{8|}}}
|iconsize={{{17|}}}
|c_text={{{18|{{{c_text|}}}}}}
|19={{{19|}}} <!-- test -->
}}<noinclude>
{{TrRq|d|+}}
{{translated tag|marker}}[[Category:Created with ... I18nTemplates|{{PAGENAME}}]]{{Heavily used template}}
{{documentation|Template:Created with .../doc}}
</noinclude>
r4n8wfpf3mz76akpqpgwbiv7zgclbof
Module:Languages
828
1375
10799
2024-05-02T14:41:34Z
commons>Uzume
0
cleanup simplifying some things
10799
Scribunto
text/plain
--[=[
Not globally exposed. Internal function only.
language_subpages( frame, transform, options )
Parameters
frame: The frame that was passed to the method invoked. The first argument or the page argument will be respected.
transform: A transform function. Example: function( basepagename, subpagename, code, langname ) end
options: An object with options. Example: { abort= { on=function() end, time=0.8 } }
Following options are available:
abort: Aborts iterating over the subpages if one of the conditions is met. If the process is aborted, nil is returned!
on: Function to be called if an abort-condition was met.
cycles: The maximum number of subpages to run over.
time: Maximum time to spend running over the subpages.
]=]
local function language_subpages( frame, transform, options )
local args, pargs, options = frame.args, ( frame:getParent() or {} ).args or {}, options or {};
local title = args.page or args[1] or pargs.page or pargs[1] or "";
local abort = options.abort or {};
local at, clock = type( abort.on ), os.clock();
local ac = function()
if at == 'function' or ( at == 'table' and getmetatable(abort.on).__call ) then
abort.on();
end
end
local tt = type( transform );
local page = require( 'Module:Page' );
title = page.clean(title);
if tt == 'function' or ( tt == 'table' and getmetatable(transform).__call ) then
local fetch, pages, langcode, langname = mw.language.fetchLanguageName, {};
--[==[
/ \
/ | \
/ · \
¯¯¯¯¯¯¯
Page.subpages() no longer works because it attempted to parse the HTML content generated by
calling the parser function "Special:Prefixindex:" which is no longer expanded in Lua but
converted to a "stripped tag" (containing a unique identifier surrounded by ASCII DEL characters)
representing the tag name and its parameters.
The actual expansion of stripped tags can no longer be performed in Lua.
Now unstripping these tags just kills ALL these tags (except "wiki" tags) instead of performing
their expansion by running the extension code. Only MediaWiki can unstrip these tags in texts after
they have been returned by Lua.
For this reason, page.subpages() is now completely empty (Module:Page no longer works).
This cannot be bypassed, except by using a Scribunto extension library if lifting the limits set by mw.unstrip.
Note that "Special:Prefixindex:" is also costly, even if it just requires a single database query to
get all subpages, instead of one costly #ifexist or one costly mw.title() property reading per
tested subpage to know if it exists.
For now there's still no reliable way to get a list of subpages, or performing queries similar to
the [[Special:Prefixindex]] page or list members of a category like when viewing a category page.
Ideally, there should exist a method for such queries on Title objects returned by the mw.title library;
but for now there's none.
In Lua now, the only expansion possible with an immediate effect is the expansion of standard templates,
all special tags or special pages, or parser function extensions do not work (Only the #expr parser
function is supported by using an external Scribunto library).
--]==]
for pg in page.subpages( title, { ignoreNS=true } ) do
if abort.cycles then
abort.cycles = abort.cycles - 1
if 0 == abort.cycles then return ac() end
end
if abort.time then
if (os.clock() - clock) > abort.time then return ac() end
end
if mw.ustring.len( pg ) <= 12 then
langcode = string.lower( pg );
langname = fetch( langcode );
if langname ~= '' then
table.insert( pages, transform( title, pg, langcode, langname ) );
end
end
end
return pages;
end
return {};
end
local function cloneArgs(frame)
local args, pargs = {}, {}
for k,v in pairs( frame.args ) do args[k] = v end
if frame:getParent() then
for k,v in pairs( frame:getParent().args ) do pargs[k] = v end
end
return args, pargs
end
local p = {};
--[=[
Usage:
{{#invoke:languages|internal|Template:Adjective}}
]=]
function p.internal(frame)
return table.concat(
language_subpages( frame,
function( title, page, code, name )
return mw.ustring.format(
'<bdi class="language lang-%s" lang="%s">[[%s/%s|%s]]</bdi>',
code, code,
title, page,
name
);
end
),
' <b>·</b> '
);
end
--[=[
Usage:
{{#invoke:languages|external|Template:Adjective}}
]=]
function p.external(frame)
return table.concat(
language_subpages( frame,
function( title, page, code, name )
return mw.ustring.format(
'<bdi class="language lang-%s" lang="%s">[%s/%s %s]</bdi>',
code, code,
tostring( mw.uri.fullUrl( title ) ), page:gsub( ' ', '_' ),
name
);
end
),
' <b>·</b> '
);
end
--[=[
forEachLanguage
This function iterates over all language codes known to MediaWiki based on a maintained list
replacing patterns in a pattern-string for each language
Usage
{{#invoke:Languages|forEachLanguage
|pattern=patternstring
|before=string to insert before iteration
|after=string added after iteration
|sep=separator string between iterations
|inLang=langcode used for $lnTrP and $lnTrUC1
}}
Parameters
pattern: A pattern string which is processed for each language and which is concatenated at the end and returned as one string
before: A string that is inserted before the concatenated result
after: A string that is inserted after the concatenated result
sep: A string that is inserted between each line created from the pattern while iterating (like ProcessedPattern_sep_ProcessedPattern_sep_ProcessedPattern)
inLang: Langcode to use for $lnTrP and $lnTrUC1
preprocess: if set to a non-empty value, the output will be preprocessed before being returned.
Warning
The output is still not prepreprocessed by default: so parser functions and magic keywords generated by the pattern are still not executed and replaced,
and template transclusions are still not expanded (see examples in other functions in this module).
When using this function directly from a MediaWiki page or template, this means it is only possible to use patterns generating basic MediaWiki formatting
or HTML tags. It you want the output to be preprocessed (in the given frame), set the preprocess parameter to a non-empty string.
Patterns
$lc - language code such as en or de
$lnP - language name in own language (autonym)
$lnUC1 - language name in own language (autonym), first letter upper case
$lnTrP - language name translated to the language requested by language code passed to inLang
$lnTrUC1 - language name translated to the language requested by language code passed to inLang, first letter upper case
Example
{{#invoke:Languages|forEachLanguage|pattern=<span lang="$lc" xml:lang="$lc" class="language lang-$lc">[[Page/$lc|$lnP]]</span>}}
]=]
-- =p.forEachLanguage({ args= { pattern = "$lc - $lnTrP\n", inLang = "en" } })
function p.forEachLanguage(frame)
local l = require("Module:Languages/List")
local ret = {}
local lang = mw.language
local line
local pattern = frame.args.pattern or frame.args[1] or ""
local prefix = frame.args.before or frame.args[2] or ""
local postfix = frame.args.after or frame.args[3] or ""
local sep = frame.args.sep or frame.args.separator or frame.args[4] or ""
local inLang = frame.args.inLang or frame.args[5] or nil
local preprocess = frame.args.preprocess or frame.args[6] or ""
local langNameUCFirstReq = not not pattern:find( "$lnUC1", 1, true )
local langNameReq = not not pattern:find( "$lnP", 1, true ) or langNameUCFirstReq
local langNameTranslatedUCFirstReq = not not pattern:find( "$lnTrUC1", 1, true )
local langNameTranslatedReq = not not pattern:find( "$lnTrP", 1, true ) or langNameTranslatedUCFirstReq
local contentLangInstance = mw.language.getContentLanguage()
local inLangLangInstance
local l = mw.language.fetchLanguageNames() -- autonyms
local lTr
local lcIdList = require('Module:Languages/List').getSortedList( l )
if langNameTranslatedReq then
inLangLangInstance = --[==[
mw.getLanguage( inLang ) -- Quota hit in :ucfirst() if using too many langInstances
--]==] contentLangInstance
lTr = mw.language.fetchLanguageNames( inLang ) -- translated names
end
for _, lcId in pairs( lcIdList ) do
local subst = lcId:gsub('%%', '%%%%')
line = pattern:gsub( "%$lc", subst )
local langName, langInstance
-- autonym (name of lcId in locale lcId)
if langNameReq then
langName = l[lcId]
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnP", subst )
end
if langNameUCFirstReq then
langInstance = --[==[
mw.getLanguage( lcId ) -- Quota hit in :ucfirst() if using too many langInstances
--]==] contentLangInstance
langName = langInstance:ucfirst( langName )
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnUC1", subst )
end
-- translated name (name of lcId in locale inLang)
if langNameTranslatedReq then
langName = lTr[lcId]
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnTrP", subst )
end
if langNameTranslatedUCFirstReq then
langName = inLangLangInstance:ucfirst( langName )
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnTrUC1", subst )
end
table.insert(ret, line)
end
ret = prefix .. table.concat( ret, sep ) .. postfix
if preprocess ~= '' then
ret = frame:preprocess(ret)
end
return ret
end
--[=[
Provide logic for [[Template:Lle]] (Language Links external, to be substituted, language names written exactly as #language would provide them)
Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template)
]=]
function p.lle(frame)
return frame:preprocess(
p.forEachLanguage({
args = {
pattern = '{{subst:#ifexist:{{{1}}}/$lc|[{{subst:fullurl:{{{1}}}/$lc}} <bdi class="language lang-$lc" lang="$lc">$lnP</bdi>] <b>∙</b> <!--\n-->}}'
}
})
)
end
--[=[
Provide logic for [[Template:Ll]] (Language Links internal, to be substituted, language names written exactly as #language would provide them)
Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template)
]=]
function p.ll(frame)
return frame:preprocess(
p.forEachLanguage({
args = {
pattern = '{{subst:#ifexist:{{{1}}}/$lc|[[{{{1}}}/$lc|<bdi class="language lang-$lc" lang="$lc">$lnP</bdi>]] <b>∙</b> <!--\n-->}}'
}
})
)
end
--------------------------------------------------------
--- Different approaches for [[Template:Lang links]] ---
--------------------------------------------------------
--[=[
Provide logic for [[Template:Lang links]]
Using a cute Hybrid-Method:
First check the subpages which is quite fast; if there are too many fall back to checking for each language page individually
]=]
-- =p.langLinksNonExpensive({ args= { page='Commons:Picture of the Year/2010' }, getParent=function() end })
-- =p.langLinksNonExpensive({ args= { page='Main Page' }, getParent=function() end })
-- =p.langLinksNonExpensive({ args= { page='Template:No_source_since' }, getParent=function() end })
-- =p.langLinksNonExpensive({ args= { page='MediaWiki:Gadget-HotCat' }, getParent=function() end })
function p.langLinksNonExpensive(frame)
local args, pargs = frame.args, ( frame:getParent() or {} ).args or {};
local title = args.page or args[1] or pargs.page or pargs[1] or "";
local contentLangInstance = mw.language.getContentLanguage();
local pages2
if frame.preprocess == nil then
frame = mw.getCurrentFrame()
end
--[==[
local options = {
abort = {
time = 3.5,
on = function()
pages2 = p.forEachLanguage({
args = {
pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]] <b>∙</b> }}'
}
})
end
}
}
local pages = language_subpages( frame,
function( title, page, code, langname )
return mw.ustring.format(
'[[%s/%s|<bdi lang="%s">%s</bdi>]]</span> <b>∙</b> ',
title, page, code, langname
)
end, options );
return pages2 and frame:preprocess(pages2) or table.concat(pages, '');
--]==]
return frame:preprocess(
p.forEachLanguage( {
args = {
pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]] <b>∙</b> }}'
}
})
)
end
---------------------------------------------------------
----------------- [[Template:Autolang]] -----------------
---------------------------------------------------------
--[[
Works like {{autotranslate}} just allowing an unlimited number of arguments, even named arguments.
It's doing Magic! No arguments should be passed to {{#invoke:}}
]]
function p.autolang(frame)
local args, pargs = cloneArgs( frame )
if nil == args.useargs then
if not args.base then args = pargs end
elseif 'both' == args.useargs then
for k,v in pairs(args) do pargs[k] = v end
args = pargs
elseif 'parent' == args.useargs then
args = pargs
if pargs.base and not args.base then
args.base = pargs.base
end
end
local base = args.base
local userlang = frame:callParserFunction('int', 'lang')
local tl, tlns = 'Template:', 10
local tlb, fallback1, currenttemplate, currenttemplatepage
local fallback, contentlang = mw.text.split( userlang, '-', true )[1], mw.language.getContentLanguage():getCode()
local function createReturn(title)
local ret
local tlargs = {}
-- When LUA is invoked, templates are already expanded. This must be respected.
return frame:expandTemplate{ title = title, args = args }
end
if not base then
return ("'autolang' in [[Module:Languages]] was called but the 'base' parameter could not be found." ..
"The base parameter specifies the template that's subpages will be sought for a suitable translation.")
end
tlb = tl .. base .. '/'
currenttemplate = tlb .. userlang
currenttemplatepage = mw.title.new( currenttemplate, tlns )
if currenttemplatepage and currenttemplatepage.exists then
return createReturn(currenttemplate)
end
fallback1 = frame:preprocess( '{{Fallback|1=' .. base .. '|2=' .. userlang .. '}}' )
if fallback1 ~= contentlang then
return createReturn(tlb .. fallback1)
end
currenttemplate = tlb .. fallback
currenttemplatepage = mw.title.new( currenttemplate, tlns )
if currenttemplatepage and currenttemplatepage.exists then
return createReturn(currenttemplate)
end
currenttemplate = tlb .. contentlang
currenttemplatepage = mw.title.new( currenttemplate, tlns )
if currenttemplatepage and currenttemplatepage.exists then
return createReturn(currenttemplate)
end
return createReturn(tl .. base)
end
--[=[
Usage:
{{#invoke:languages|isKnownLanguageTag|gsw}} -> 1
{{#invoke:languages|isKnownLanguageTag|doesNotExist}} ->
]=]
function p.isKnownLanguageTag(frame)
return mw.language.isKnownLanguageTag( frame.args[1] or frame.args.tag or frame.args.code or '' ) and '1' or ''
end
function p.file_languages(frame)
local M_link = require( 'Module:Link' )
local contentLangInstance = mw.language.getContentLanguage()
local pattern = frame.args.pattern or '%s (%s)'
local original = frame.args.original or mw.title.getCurrentTitle().text
local ext_start, _ = string.find( original, '\.%w+$' )
local file_ext = string.sub( original, ext_start )
original = string.sub( original, 0, ext_start - 1 )
return frame:preprocess(
'<gallery>\n' ..
(table.concat(
M_link.forEachLink(
p.forEachLanguage({
args = { pattern = '[[$lc]]' }
}),
function( linkInfo )
local filename = mw.ustring.format( pattern, original, linkInfo.text ) .. file_ext
local filepage = mw.title.new( filename, 6 )
if filepage and filepage.exists then
return mw.ustring.format( '%s|%s',
filename,
mw.language.fetchLanguageName( linkInfo.text )
)
else
return nil
end
end
), '\n'
)) ..
'\n</gallery>'
)
end
function p.runTests()
return p.langLinksNonExpensive({
args = {
page = 'Module:Languages/testcases/test'
},
getParent = function() end
}) ==
'[[Module:Languages/testcases/test/de|<bdi lang="de">Deutsch</bdi>]] <b>∙</b> ' ..
'[[Module:Languages/testcases/test/en|<bdi lang="en">English</bdi>]] <b>∙</b> '
end
return p;
5mkofohau4gbugagap0iayfhj6cyv4b
10800
10799
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Languages]]
10799
Scribunto
text/plain
--[=[
Not globally exposed. Internal function only.
language_subpages( frame, transform, options )
Parameters
frame: The frame that was passed to the method invoked. The first argument or the page argument will be respected.
transform: A transform function. Example: function( basepagename, subpagename, code, langname ) end
options: An object with options. Example: { abort= { on=function() end, time=0.8 } }
Following options are available:
abort: Aborts iterating over the subpages if one of the conditions is met. If the process is aborted, nil is returned!
on: Function to be called if an abort-condition was met.
cycles: The maximum number of subpages to run over.
time: Maximum time to spend running over the subpages.
]=]
local function language_subpages( frame, transform, options )
local args, pargs, options = frame.args, ( frame:getParent() or {} ).args or {}, options or {};
local title = args.page or args[1] or pargs.page or pargs[1] or "";
local abort = options.abort or {};
local at, clock = type( abort.on ), os.clock();
local ac = function()
if at == 'function' or ( at == 'table' and getmetatable(abort.on).__call ) then
abort.on();
end
end
local tt = type( transform );
local page = require( 'Module:Page' );
title = page.clean(title);
if tt == 'function' or ( tt == 'table' and getmetatable(transform).__call ) then
local fetch, pages, langcode, langname = mw.language.fetchLanguageName, {};
--[==[
/ \
/ | \
/ · \
¯¯¯¯¯¯¯
Page.subpages() no longer works because it attempted to parse the HTML content generated by
calling the parser function "Special:Prefixindex:" which is no longer expanded in Lua but
converted to a "stripped tag" (containing a unique identifier surrounded by ASCII DEL characters)
representing the tag name and its parameters.
The actual expansion of stripped tags can no longer be performed in Lua.
Now unstripping these tags just kills ALL these tags (except "wiki" tags) instead of performing
their expansion by running the extension code. Only MediaWiki can unstrip these tags in texts after
they have been returned by Lua.
For this reason, page.subpages() is now completely empty (Module:Page no longer works).
This cannot be bypassed, except by using a Scribunto extension library if lifting the limits set by mw.unstrip.
Note that "Special:Prefixindex:" is also costly, even if it just requires a single database query to
get all subpages, instead of one costly #ifexist or one costly mw.title() property reading per
tested subpage to know if it exists.
For now there's still no reliable way to get a list of subpages, or performing queries similar to
the [[Special:Prefixindex]] page or list members of a category like when viewing a category page.
Ideally, there should exist a method for such queries on Title objects returned by the mw.title library;
but for now there's none.
In Lua now, the only expansion possible with an immediate effect is the expansion of standard templates,
all special tags or special pages, or parser function extensions do not work (Only the #expr parser
function is supported by using an external Scribunto library).
--]==]
for pg in page.subpages( title, { ignoreNS=true } ) do
if abort.cycles then
abort.cycles = abort.cycles - 1
if 0 == abort.cycles then return ac() end
end
if abort.time then
if (os.clock() - clock) > abort.time then return ac() end
end
if mw.ustring.len( pg ) <= 12 then
langcode = string.lower( pg );
langname = fetch( langcode );
if langname ~= '' then
table.insert( pages, transform( title, pg, langcode, langname ) );
end
end
end
return pages;
end
return {};
end
local function cloneArgs(frame)
local args, pargs = {}, {}
for k,v in pairs( frame.args ) do args[k] = v end
if frame:getParent() then
for k,v in pairs( frame:getParent().args ) do pargs[k] = v end
end
return args, pargs
end
local p = {};
--[=[
Usage:
{{#invoke:languages|internal|Template:Adjective}}
]=]
function p.internal(frame)
return table.concat(
language_subpages( frame,
function( title, page, code, name )
return mw.ustring.format(
'<bdi class="language lang-%s" lang="%s">[[%s/%s|%s]]</bdi>',
code, code,
title, page,
name
);
end
),
' <b>·</b> '
);
end
--[=[
Usage:
{{#invoke:languages|external|Template:Adjective}}
]=]
function p.external(frame)
return table.concat(
language_subpages( frame,
function( title, page, code, name )
return mw.ustring.format(
'<bdi class="language lang-%s" lang="%s">[%s/%s %s]</bdi>',
code, code,
tostring( mw.uri.fullUrl( title ) ), page:gsub( ' ', '_' ),
name
);
end
),
' <b>·</b> '
);
end
--[=[
forEachLanguage
This function iterates over all language codes known to MediaWiki based on a maintained list
replacing patterns in a pattern-string for each language
Usage
{{#invoke:Languages|forEachLanguage
|pattern=patternstring
|before=string to insert before iteration
|after=string added after iteration
|sep=separator string between iterations
|inLang=langcode used for $lnTrP and $lnTrUC1
}}
Parameters
pattern: A pattern string which is processed for each language and which is concatenated at the end and returned as one string
before: A string that is inserted before the concatenated result
after: A string that is inserted after the concatenated result
sep: A string that is inserted between each line created from the pattern while iterating (like ProcessedPattern_sep_ProcessedPattern_sep_ProcessedPattern)
inLang: Langcode to use for $lnTrP and $lnTrUC1
preprocess: if set to a non-empty value, the output will be preprocessed before being returned.
Warning
The output is still not prepreprocessed by default: so parser functions and magic keywords generated by the pattern are still not executed and replaced,
and template transclusions are still not expanded (see examples in other functions in this module).
When using this function directly from a MediaWiki page or template, this means it is only possible to use patterns generating basic MediaWiki formatting
or HTML tags. It you want the output to be preprocessed (in the given frame), set the preprocess parameter to a non-empty string.
Patterns
$lc - language code such as en or de
$lnP - language name in own language (autonym)
$lnUC1 - language name in own language (autonym), first letter upper case
$lnTrP - language name translated to the language requested by language code passed to inLang
$lnTrUC1 - language name translated to the language requested by language code passed to inLang, first letter upper case
Example
{{#invoke:Languages|forEachLanguage|pattern=<span lang="$lc" xml:lang="$lc" class="language lang-$lc">[[Page/$lc|$lnP]]</span>}}
]=]
-- =p.forEachLanguage({ args= { pattern = "$lc - $lnTrP\n", inLang = "en" } })
function p.forEachLanguage(frame)
local l = require("Module:Languages/List")
local ret = {}
local lang = mw.language
local line
local pattern = frame.args.pattern or frame.args[1] or ""
local prefix = frame.args.before or frame.args[2] or ""
local postfix = frame.args.after or frame.args[3] or ""
local sep = frame.args.sep or frame.args.separator or frame.args[4] or ""
local inLang = frame.args.inLang or frame.args[5] or nil
local preprocess = frame.args.preprocess or frame.args[6] or ""
local langNameUCFirstReq = not not pattern:find( "$lnUC1", 1, true )
local langNameReq = not not pattern:find( "$lnP", 1, true ) or langNameUCFirstReq
local langNameTranslatedUCFirstReq = not not pattern:find( "$lnTrUC1", 1, true )
local langNameTranslatedReq = not not pattern:find( "$lnTrP", 1, true ) or langNameTranslatedUCFirstReq
local contentLangInstance = mw.language.getContentLanguage()
local inLangLangInstance
local l = mw.language.fetchLanguageNames() -- autonyms
local lTr
local lcIdList = require('Module:Languages/List').getSortedList( l )
if langNameTranslatedReq then
inLangLangInstance = --[==[
mw.getLanguage( inLang ) -- Quota hit in :ucfirst() if using too many langInstances
--]==] contentLangInstance
lTr = mw.language.fetchLanguageNames( inLang ) -- translated names
end
for _, lcId in pairs( lcIdList ) do
local subst = lcId:gsub('%%', '%%%%')
line = pattern:gsub( "%$lc", subst )
local langName, langInstance
-- autonym (name of lcId in locale lcId)
if langNameReq then
langName = l[lcId]
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnP", subst )
end
if langNameUCFirstReq then
langInstance = --[==[
mw.getLanguage( lcId ) -- Quota hit in :ucfirst() if using too many langInstances
--]==] contentLangInstance
langName = langInstance:ucfirst( langName )
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnUC1", subst )
end
-- translated name (name of lcId in locale inLang)
if langNameTranslatedReq then
langName = lTr[lcId]
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnTrP", subst )
end
if langNameTranslatedUCFirstReq then
langName = inLangLangInstance:ucfirst( langName )
subst = langName:gsub('%%', '%%%%')
line = line:gsub( "%$lnTrUC1", subst )
end
table.insert(ret, line)
end
ret = prefix .. table.concat( ret, sep ) .. postfix
if preprocess ~= '' then
ret = frame:preprocess(ret)
end
return ret
end
--[=[
Provide logic for [[Template:Lle]] (Language Links external, to be substituted, language names written exactly as #language would provide them)
Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template)
]=]
function p.lle(frame)
return frame:preprocess(
p.forEachLanguage({
args = {
pattern = '{{subst:#ifexist:{{{1}}}/$lc|[{{subst:fullurl:{{{1}}}/$lc}} <bdi class="language lang-$lc" lang="$lc">$lnP</bdi>] <b>∙</b> <!--\n-->}}'
}
})
)
end
--[=[
Provide logic for [[Template:Ll]] (Language Links internal, to be substituted, language names written exactly as #language would provide them)
Warning: may expands too many costly #ifexist without limitation (if not substituted into a separate "/lang" template)
]=]
function p.ll(frame)
return frame:preprocess(
p.forEachLanguage({
args = {
pattern = '{{subst:#ifexist:{{{1}}}/$lc|[[{{{1}}}/$lc|<bdi class="language lang-$lc" lang="$lc">$lnP</bdi>]] <b>∙</b> <!--\n-->}}'
}
})
)
end
--------------------------------------------------------
--- Different approaches for [[Template:Lang links]] ---
--------------------------------------------------------
--[=[
Provide logic for [[Template:Lang links]]
Using a cute Hybrid-Method:
First check the subpages which is quite fast; if there are too many fall back to checking for each language page individually
]=]
-- =p.langLinksNonExpensive({ args= { page='Commons:Picture of the Year/2010' }, getParent=function() end })
-- =p.langLinksNonExpensive({ args= { page='Main Page' }, getParent=function() end })
-- =p.langLinksNonExpensive({ args= { page='Template:No_source_since' }, getParent=function() end })
-- =p.langLinksNonExpensive({ args= { page='MediaWiki:Gadget-HotCat' }, getParent=function() end })
function p.langLinksNonExpensive(frame)
local args, pargs = frame.args, ( frame:getParent() or {} ).args or {};
local title = args.page or args[1] or pargs.page or pargs[1] or "";
local contentLangInstance = mw.language.getContentLanguage();
local pages2
if frame.preprocess == nil then
frame = mw.getCurrentFrame()
end
--[==[
local options = {
abort = {
time = 3.5,
on = function()
pages2 = p.forEachLanguage({
args = {
pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]] <b>∙</b> }}'
}
})
end
}
}
local pages = language_subpages( frame,
function( title, page, code, langname )
return mw.ustring.format(
'[[%s/%s|<bdi lang="%s">%s</bdi>]]</span> <b>∙</b> ',
title, page, code, langname
)
end, options );
return pages2 and frame:preprocess(pages2) or table.concat(pages, '');
--]==]
return frame:preprocess(
p.forEachLanguage( {
args = {
pattern = '{{#ifexist:' .. title .. '/$lc|[[' .. title .. '/$lc|<bdi lang="$lc">$lnP</bdi>]] <b>∙</b> }}'
}
})
)
end
---------------------------------------------------------
----------------- [[Template:Autolang]] -----------------
---------------------------------------------------------
--[[
Works like {{autotranslate}} just allowing an unlimited number of arguments, even named arguments.
It's doing Magic! No arguments should be passed to {{#invoke:}}
]]
function p.autolang(frame)
local args, pargs = cloneArgs( frame )
if nil == args.useargs then
if not args.base then args = pargs end
elseif 'both' == args.useargs then
for k,v in pairs(args) do pargs[k] = v end
args = pargs
elseif 'parent' == args.useargs then
args = pargs
if pargs.base and not args.base then
args.base = pargs.base
end
end
local base = args.base
local userlang = frame:callParserFunction('int', 'lang')
local tl, tlns = 'Template:', 10
local tlb, fallback1, currenttemplate, currenttemplatepage
local fallback, contentlang = mw.text.split( userlang, '-', true )[1], mw.language.getContentLanguage():getCode()
local function createReturn(title)
local ret
local tlargs = {}
-- When LUA is invoked, templates are already expanded. This must be respected.
return frame:expandTemplate{ title = title, args = args }
end
if not base then
return ("'autolang' in [[Module:Languages]] was called but the 'base' parameter could not be found." ..
"The base parameter specifies the template that's subpages will be sought for a suitable translation.")
end
tlb = tl .. base .. '/'
currenttemplate = tlb .. userlang
currenttemplatepage = mw.title.new( currenttemplate, tlns )
if currenttemplatepage and currenttemplatepage.exists then
return createReturn(currenttemplate)
end
fallback1 = frame:preprocess( '{{Fallback|1=' .. base .. '|2=' .. userlang .. '}}' )
if fallback1 ~= contentlang then
return createReturn(tlb .. fallback1)
end
currenttemplate = tlb .. fallback
currenttemplatepage = mw.title.new( currenttemplate, tlns )
if currenttemplatepage and currenttemplatepage.exists then
return createReturn(currenttemplate)
end
currenttemplate = tlb .. contentlang
currenttemplatepage = mw.title.new( currenttemplate, tlns )
if currenttemplatepage and currenttemplatepage.exists then
return createReturn(currenttemplate)
end
return createReturn(tl .. base)
end
--[=[
Usage:
{{#invoke:languages|isKnownLanguageTag|gsw}} -> 1
{{#invoke:languages|isKnownLanguageTag|doesNotExist}} ->
]=]
function p.isKnownLanguageTag(frame)
return mw.language.isKnownLanguageTag( frame.args[1] or frame.args.tag or frame.args.code or '' ) and '1' or ''
end
function p.file_languages(frame)
local M_link = require( 'Module:Link' )
local contentLangInstance = mw.language.getContentLanguage()
local pattern = frame.args.pattern or '%s (%s)'
local original = frame.args.original or mw.title.getCurrentTitle().text
local ext_start, _ = string.find( original, '\.%w+$' )
local file_ext = string.sub( original, ext_start )
original = string.sub( original, 0, ext_start - 1 )
return frame:preprocess(
'<gallery>\n' ..
(table.concat(
M_link.forEachLink(
p.forEachLanguage({
args = { pattern = '[[$lc]]' }
}),
function( linkInfo )
local filename = mw.ustring.format( pattern, original, linkInfo.text ) .. file_ext
local filepage = mw.title.new( filename, 6 )
if filepage and filepage.exists then
return mw.ustring.format( '%s|%s',
filename,
mw.language.fetchLanguageName( linkInfo.text )
)
else
return nil
end
end
), '\n'
)) ..
'\n</gallery>'
)
end
function p.runTests()
return p.langLinksNonExpensive({
args = {
page = 'Module:Languages/testcases/test'
},
getParent = function() end
}) ==
'[[Module:Languages/testcases/test/de|<bdi lang="de">Deutsch</bdi>]] <b>∙</b> ' ..
'[[Module:Languages/testcases/test/en|<bdi lang="en">English</bdi>]] <b>∙</b> '
end
return p;
5mkofohau4gbugagap0iayfhj6cyv4b
Module:Error
828
1376
10801
2025-12-05T08:26:52Z
commons>Achim55
0
[[Commons:Rollback|Reverted]] edits by [[Special:Contributions/~2025-38542-98|~2025-38542-98]] ([[User talk:~2025-38542-98|talk]]) to last revision by Achim55
10801
Scribunto
text/plain
-- This module implements {{error}}.
local p = {}
local function _error(args)
local tag = mw.ustring.lower(tostring(args.tag))
-- Work out what html tag we should use.
if not (tag == 'p' or tag == 'span' or tag == 'div') then
tag = 'strong'
end
-- Generate the html.
return tostring(mw.html.create(tag)
:addClass('error')
:wikitext(tostring(args.message or args[1] or error('no message specified', 2)))
)
end
function p.error(frame)
local args
if type(frame.args) == 'table' then
-- We're being called via #invoke. The args are passed through to the module
-- from the template page, so use the args that were passed into the template.
args = frame.args
else
-- We're being called from another module or from the debug console, so assume
-- the args are passed in directly.
args = frame
end
-- If the message parameter is present but blank, change it to nil so that Lua will
-- consider it false.
if args.message == "" then
args.message = nil
end
return _error(args)
end
return p
75bhqz94c9juppi0uajeqaixt1565oq
10802
10801
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Error]]
10801
Scribunto
text/plain
-- This module implements {{error}}.
local p = {}
local function _error(args)
local tag = mw.ustring.lower(tostring(args.tag))
-- Work out what html tag we should use.
if not (tag == 'p' or tag == 'span' or tag == 'div') then
tag = 'strong'
end
-- Generate the html.
return tostring(mw.html.create(tag)
:addClass('error')
:wikitext(tostring(args.message or args[1] or error('no message specified', 2)))
)
end
function p.error(frame)
local args
if type(frame.args) == 'table' then
-- We're being called via #invoke. The args are passed through to the module
-- from the template page, so use the args that were passed into the template.
args = frame.args
else
-- We're being called from another module or from the debug console, so assume
-- the args are passed in directly.
args = frame
end
-- If the message parameter is present but blank, change it to nil so that Lua will
-- consider it false.
if args.message == "" then
args.message = nil
end
return _error(args)
end
return p
75bhqz94c9juppi0uajeqaixt1565oq
Tempilet:Validextension
10
1377
10803
2023-06-09T05:57:21Z
commons>Sarang
0
test
10803
wikitext
text/x-wiki
{{#ifeq:{{lc:{{padleft:|1|{{{3}}}}}}}|e<!-- valid extension ? (any case allowed)
-->|{{#switch:{{lc:{{{1|}}}}}
|{{lc:{{{2|}}}}}.png=png
|{{lc:{{{2|}}}}}.svg=svg
|{{lc:{{{2|}}}}}.jpg=jpg
|{{lc:{{{2|}}}}}.gif=gif
|{{lc:{{{2|}}}}}.jpeg=jpg
|{{lc:{{{2|}}}}}.pdf=pdf
|{{lc:{{{2|}}}}}.tif
|{{lc:{{{2|}}}}}.tiff=tif
|{{lc:{{{2|}}}}}.xcf=xcf
|{{lc:{{{2|}}}}}.mid=mid
|{{lc:{{{2|}}}}}.ogg=ogg
|{{lc:{{{2|}}}}}.ogv=ogv
|{{lc:{{{2|}}}}}.djvu=djvu
|{{lc:{{{2|}}}}}.oga=oga
|{{lc:{{{2|}}}}}.flac=flac
|{{lc:{{{2|}}}}}.wav=wav
|{{lc:{{{2|}}}}}.webm=webm
|{{{4|{{Str right|{{{1|}}}|{{Str len|{{{2|}}}.}}}}}}}<!--
-->}}<!--
file name after valid extension removed (any case allowed)
-->|{{#switch:{{lc:{{{1|}}}}}
|{{lc:{{{2|}}}}}.png
|{{lc:{{{2|}}}}}.svg
|{{lc:{{{2|}}}}}.jpg
|{{lc:{{{2|}}}}}.gif
|{{lc:{{{2|}}}}}.jpeg
|{{lc:{{{2|}}}}}.pdf
|{{lc:{{{2|}}}}}.tif
|{{lc:{{{2|}}}}}.tiff
|{{lc:{{{2|}}}}}.xcf
|{{lc:{{{2|}}}}}.mid
|{{lc:{{{2|}}}}}.ogg
|{{lc:{{{2|}}}}}.ogv
|{{lc:{{{2|}}}}}.djvu
|{{lc:{{{2|}}}}}.oga
|{{lc:{{{2|}}}}}.flac
|{{lc:{{{2|}}}}}.wav
|{{lc:{{{2|}}}}}.webm={{{2|}}}
|{{{4|{{{2|}}}}}}<!--
-->}}}}<noinclude>
{{#ifexist:{{FULLPAGENAME}}/doc|{{Documentation}}|
<br>
The template is transcluded with <nowiki>{{Tl|Validextension|</nowiki>''filename''<nowiki>|{{#invoke:File|woExtension|file=</nowiki>''filename''<nowiki>}}|?}}</nowiki>
where the third parameter specifies whether the file name or the extension (<code>3=e</code>) should be returned.
}}
</noinclude>
lvp32dg6l6ewgy0iy25qgm4wxey40f8
10804
10803
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Validextension]]
10803
wikitext
text/x-wiki
{{#ifeq:{{lc:{{padleft:|1|{{{3}}}}}}}|e<!-- valid extension ? (any case allowed)
-->|{{#switch:{{lc:{{{1|}}}}}
|{{lc:{{{2|}}}}}.png=png
|{{lc:{{{2|}}}}}.svg=svg
|{{lc:{{{2|}}}}}.jpg=jpg
|{{lc:{{{2|}}}}}.gif=gif
|{{lc:{{{2|}}}}}.jpeg=jpg
|{{lc:{{{2|}}}}}.pdf=pdf
|{{lc:{{{2|}}}}}.tif
|{{lc:{{{2|}}}}}.tiff=tif
|{{lc:{{{2|}}}}}.xcf=xcf
|{{lc:{{{2|}}}}}.mid=mid
|{{lc:{{{2|}}}}}.ogg=ogg
|{{lc:{{{2|}}}}}.ogv=ogv
|{{lc:{{{2|}}}}}.djvu=djvu
|{{lc:{{{2|}}}}}.oga=oga
|{{lc:{{{2|}}}}}.flac=flac
|{{lc:{{{2|}}}}}.wav=wav
|{{lc:{{{2|}}}}}.webm=webm
|{{{4|{{Str right|{{{1|}}}|{{Str len|{{{2|}}}.}}}}}}}<!--
-->}}<!--
file name after valid extension removed (any case allowed)
-->|{{#switch:{{lc:{{{1|}}}}}
|{{lc:{{{2|}}}}}.png
|{{lc:{{{2|}}}}}.svg
|{{lc:{{{2|}}}}}.jpg
|{{lc:{{{2|}}}}}.gif
|{{lc:{{{2|}}}}}.jpeg
|{{lc:{{{2|}}}}}.pdf
|{{lc:{{{2|}}}}}.tif
|{{lc:{{{2|}}}}}.tiff
|{{lc:{{{2|}}}}}.xcf
|{{lc:{{{2|}}}}}.mid
|{{lc:{{{2|}}}}}.ogg
|{{lc:{{{2|}}}}}.ogv
|{{lc:{{{2|}}}}}.djvu
|{{lc:{{{2|}}}}}.oga
|{{lc:{{{2|}}}}}.flac
|{{lc:{{{2|}}}}}.wav
|{{lc:{{{2|}}}}}.webm={{{2|}}}
|{{{4|{{{2|}}}}}}<!--
-->}}}}<noinclude>
{{#ifexist:{{FULLPAGENAME}}/doc|{{Documentation}}|
<br>
The template is transcluded with <nowiki>{{Tl|Validextension|</nowiki>''filename''<nowiki>|{{#invoke:File|woExtension|file=</nowiki>''filename''<nowiki>}}|?}}</nowiki>
where the third parameter specifies whether the file name or the extension (<code>3=e</code>) should be returned.
}}
</noinclude>
lvp32dg6l6ewgy0iy25qgm4wxey40f8
Tempilet:Clr
10
1378
10809
2019-07-16T02:05:07Z
commons>4nn1l2
0
Changed protection level for "[[Template:Clr]]": downgraded protection level per [[Special:Permalink/357548402|consensus]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10809
wikitext
text/x-wiki
#REDIRECT [[Template:Clear]] {{template redirect|protected}}
safwu6mgmr4om83b5isttzjq3da7lel
10810
10809
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Clr]]
10809
wikitext
text/x-wiki
#REDIRECT [[Template:Clear]] {{template redirect|protected}}
safwu6mgmr4om83b5isttzjq3da7lel
Tempilet:Igen/cat
10
1379
10811
2022-10-31T19:55:51Z
commons>Jonesey95
0
Fix [[Special:LintErrors|Linter]] errors.
10811
wikitext
text/x-wiki
{{#if:{{{1|}}}|{{#ifeq:{{{1|}}}|-||{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|[[cat|{{{1}}}|[[Category:{{{1}}}{{#switch:{{{2|-}}}|-=|␢|={{!}} |{{!}}{{{2}}}}}]]}}}}}}<noinclude>
{{Heavily used template}}
This subtemplate deals with a parameter which may be passed from elsewhere, and has an unknown format.<br /><br />
The template checks: when the 1{{exp|st}} parameter is a "<code>-</code>" (minus/hyphen), nothing is done;<br />
otherwise it checks whether the 1{{exp|st}} parameter starts with "<code><nowiki>[[Cat</nowiki></code>":
* if yes, it is passed for categorizing as-it-is;
* if not, it is preceded with "<code><nowiki>[[Category:</nowiki></code>"
: and trailed with <small>(''an optional sorting item and'')</small> "<code><nowiki>]]</nowiki></code>", and then passed.
The 2{{exp|nd}} parameter may be any sorting item:
* to '''avoid''': don't define it, or define as "-";
* to use a '''space''': define empty "<code>2=</code>", or "<code>&#32;</code>" or "<code>␢</code>".
[[Category:Image generation subtemplates| ]]
</noinclude>
emuu02fsti0wmsfucfsb06perox7f6i
10812
10811
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Igen/cat]]
10811
wikitext
text/x-wiki
{{#if:{{{1|}}}|{{#ifeq:{{{1|}}}|-||{{#ifeq:{{lc:{{padleft:|5|{{{1}}}}}}}|[[cat|{{{1}}}|[[Category:{{{1}}}{{#switch:{{{2|-}}}|-=|␢|={{!}} |{{!}}{{{2}}}}}]]}}}}}}<noinclude>
{{Heavily used template}}
This subtemplate deals with a parameter which may be passed from elsewhere, and has an unknown format.<br /><br />
The template checks: when the 1{{exp|st}} parameter is a "<code>-</code>" (minus/hyphen), nothing is done;<br />
otherwise it checks whether the 1{{exp|st}} parameter starts with "<code><nowiki>[[Cat</nowiki></code>":
* if yes, it is passed for categorizing as-it-is;
* if not, it is preceded with "<code><nowiki>[[Category:</nowiki></code>"
: and trailed with <small>(''an optional sorting item and'')</small> "<code><nowiki>]]</nowiki></code>", and then passed.
The 2{{exp|nd}} parameter may be any sorting item:
* to '''avoid''': don't define it, or define as "-";
* to use a '''space''': define empty "<code>2=</code>", or "<code>&#32;</code>" or "<code>␢</code>".
[[Category:Image generation subtemplates| ]]
</noinclude>
emuu02fsti0wmsfucfsb06perox7f6i
Tempilet:See also
10
1380
10813
2024-08-18T09:19:17Z
commons>Matrix
0
add template styles
10813
wikitext
text/x-wiki
<templatestyles src="See also/styles.css" /><div role="note" class="see-also">[[File:System-search.svg|x25px|middle|link=]]<!--
-->{{int:Seealso}}{{Colon}}<!--
-->[[:{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}|{{#if: {{{ 2|}}} |{{{ 2}}}|{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}}}]]<!--
-->{{#if: {{{ 3|}}} | {{{{#if: {{{ 5|}}} | Comma | And }} }}[[:{{{ 3|}}}|{{{ {{#if: {{{ 4|}}} | 4 | 3 }} }}}]]<!--
-->{{#if: {{{ 5|}}} | {{{{#if: {{{ 7|}}} | Comma | And }} }}[[:{{{ 5|}}}|{{{ {{#if: {{{ 6|}}} | 6 | 5 }} }}}]]<!--
-->{{#if: {{{ 7|}}} | {{{{#if: {{{ 9|}}} | Comma | And }} }}[[:{{{ 7|}}}|{{{ {{#if: {{{ 8|}}} | 8 | 7 }} }}}]]<!--
-->{{#if: {{{ 9|}}} | {{{{#if: {{{11|}}} | Comma | And }} }}[[:{{{ 9|}}}|{{{ {{#if: {{{10|}}} | 10 | 9 }} }}}]]<!--
-->{{#if: {{{11|}}} | {{{{#if: {{{13|}}} | Comma | And }} }}[[:{{{11|}}}|{{{ {{#if: {{{12|}}} | 12 | 11 }} }}}]]<!--
-->{{#if: {{{13|}}} | {{{{#if: {{{15|}}} | Comma | And }} }}[[:{{{13|}}}|{{{ {{#if: {{{14|}}} | 14 | 13 }} }}}]]<!--
-->{{#if: {{{15|}}} | {{{{#if: {{{17|}}} | Comma | And }} }}[[:{{{15|}}}|{{{ {{#if: {{{16|}}} | 16 | 15 }} }}}]]<!--
-->{{#if: {{{17|}}} | {{{{#if: {{{19|}}} | Comma | And }} }}[[:{{{17|}}}|{{{ {{#if: {{{18|}}} | 18 | 17 }} }}}]]<!--
-->{{#if: {{{19|}}} | {{{{#if: {{{21|}}} | Comma | And }} }}[[:{{{19|}}}|{{{ {{#if: {{{20|}}} | 20 | 19 }} }}}]]<!--
-->{{#if: {{{21|}}} | {{{{#if: {{{23|}}} | Comma | And }} }}[[:{{{21|}}}|{{{ {{#if: {{{22|}}} | 22 | 21 }} }}}]]<!--
-->{{#if: {{{23|}}} | {{{{#if: {{{25|}}} | Comma | And }} }}[[:{{{23|}}}|{{{ {{#if: {{{24|}}} | 24 | 23 }} }}}]]<!--
-->{{#if: {{{25|}}} | {{{{#if: {{{27|}}} | Comma | And }} }}[[:{{{25|}}}|{{{ {{#if: {{{26|}}} | 26 | 25 }} }}}]]<!--
-->{{#if: {{{27|}}} | {{{{#if: {{{29|}}} | Comma | And }} }}[[:{{{27|}}}|{{{ {{#if: {{{28|}}} | 28 | 27 }} }}}]]<!--
-->{{#if: {{{29|}}} | {{{{#if: {{{31|}}} | Comma | And }} }}[[:{{{29|}}}|{{{ {{#if: {{{30|}}} | 30 | 29 }} }}}]]<!--
-->{{#if: {{{31|}}} | {{and}}<b class="error">more</b>}} }} }} }} }} }} }} }} }} }} }} }} }} }} }}<!--
-->{{#if: {{{for|}}} | — {{{for|}}} }}{{Full stop}}<!--
--></div><noinclude>{{documentation}}</noinclude>
g25cxdnp9s9soggzjo5z98p4le15xdx
10814
10813
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:See_also]]
10813
wikitext
text/x-wiki
<templatestyles src="See also/styles.css" /><div role="note" class="see-also">[[File:System-search.svg|x25px|middle|link=]]<!--
-->{{int:Seealso}}{{Colon}}<!--
-->[[:{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}|{{#if: {{{ 2|}}} |{{{ 2}}}|{{{ 1|<noinclude>{{FULLPAGENAME}}</noinclude>}}}}}]]<!--
-->{{#if: {{{ 3|}}} | {{{{#if: {{{ 5|}}} | Comma | And }} }}[[:{{{ 3|}}}|{{{ {{#if: {{{ 4|}}} | 4 | 3 }} }}}]]<!--
-->{{#if: {{{ 5|}}} | {{{{#if: {{{ 7|}}} | Comma | And }} }}[[:{{{ 5|}}}|{{{ {{#if: {{{ 6|}}} | 6 | 5 }} }}}]]<!--
-->{{#if: {{{ 7|}}} | {{{{#if: {{{ 9|}}} | Comma | And }} }}[[:{{{ 7|}}}|{{{ {{#if: {{{ 8|}}} | 8 | 7 }} }}}]]<!--
-->{{#if: {{{ 9|}}} | {{{{#if: {{{11|}}} | Comma | And }} }}[[:{{{ 9|}}}|{{{ {{#if: {{{10|}}} | 10 | 9 }} }}}]]<!--
-->{{#if: {{{11|}}} | {{{{#if: {{{13|}}} | Comma | And }} }}[[:{{{11|}}}|{{{ {{#if: {{{12|}}} | 12 | 11 }} }}}]]<!--
-->{{#if: {{{13|}}} | {{{{#if: {{{15|}}} | Comma | And }} }}[[:{{{13|}}}|{{{ {{#if: {{{14|}}} | 14 | 13 }} }}}]]<!--
-->{{#if: {{{15|}}} | {{{{#if: {{{17|}}} | Comma | And }} }}[[:{{{15|}}}|{{{ {{#if: {{{16|}}} | 16 | 15 }} }}}]]<!--
-->{{#if: {{{17|}}} | {{{{#if: {{{19|}}} | Comma | And }} }}[[:{{{17|}}}|{{{ {{#if: {{{18|}}} | 18 | 17 }} }}}]]<!--
-->{{#if: {{{19|}}} | {{{{#if: {{{21|}}} | Comma | And }} }}[[:{{{19|}}}|{{{ {{#if: {{{20|}}} | 20 | 19 }} }}}]]<!--
-->{{#if: {{{21|}}} | {{{{#if: {{{23|}}} | Comma | And }} }}[[:{{{21|}}}|{{{ {{#if: {{{22|}}} | 22 | 21 }} }}}]]<!--
-->{{#if: {{{23|}}} | {{{{#if: {{{25|}}} | Comma | And }} }}[[:{{{23|}}}|{{{ {{#if: {{{24|}}} | 24 | 23 }} }}}]]<!--
-->{{#if: {{{25|}}} | {{{{#if: {{{27|}}} | Comma | And }} }}[[:{{{25|}}}|{{{ {{#if: {{{26|}}} | 26 | 25 }} }}}]]<!--
-->{{#if: {{{27|}}} | {{{{#if: {{{29|}}} | Comma | And }} }}[[:{{{27|}}}|{{{ {{#if: {{{28|}}} | 28 | 27 }} }}}]]<!--
-->{{#if: {{{29|}}} | {{{{#if: {{{31|}}} | Comma | And }} }}[[:{{{29|}}}|{{{ {{#if: {{{30|}}} | 30 | 29 }} }}}]]<!--
-->{{#if: {{{31|}}} | {{and}}<b class="error">more</b>}} }} }} }} }} }} }} }} }} }} }} }} }} }} }}<!--
-->{{#if: {{{for|}}} | — {{{for|}}} }}{{Full stop}}<!--
--></div><noinclude>{{documentation}}</noinclude>
g25cxdnp9s9soggzjo5z98p4le15xdx
Tempilet:T2
10
1381
10817
2024-08-28T08:25:05Z
commons>CptViraj
0
Protected "[[Template:T2]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10817
wikitext
text/x-wiki
{{T/main|{{{1|}}}
|{{{2|}}}
|{{{3|{{{lang|}}}}}}
|{{{4|}}}
|{{{5|}}}
|incl={{{incl|{{{i|0}}}}}}
|code={{{code|}}}
|link={{{link|}}}
|case={{{case|}}}
|i18n={{{i18n|}}}
|parm={{{parm|}}}
|full={{{full|}}}
}}<noinclude>
{{documentation|Template:T/doc}}
</noinclude>
7nzvba6cslh4dv8uugeoo6zh7oxm81g
10818
10817
2026-08-25T23:38:33Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:T2]]
10817
wikitext
text/x-wiki
{{T/main|{{{1|}}}
|{{{2|}}}
|{{{3|{{{lang|}}}}}}
|{{{4|}}}
|{{{5|}}}
|incl={{{incl|{{{i|0}}}}}}
|code={{{code|}}}
|link={{{link|}}}
|case={{{case|}}}
|i18n={{{i18n|}}}
|parm={{{parm|}}}
|full={{{full|}}}
}}<noinclude>
{{documentation|Template:T/doc}}
</noinclude>
7nzvba6cslh4dv8uugeoo6zh7oxm81g
Tempilet:Documentation/i18n/en
10
1382
10821
2024-08-12T19:16:34Z
commons>FuzzyBot
0
Updating to match new version of source page
10821
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{Documentation/layout
| lang = {{{lang|en}}}
<!-- {{Documentation}} parameters: -->
|1={{{1|}}}
|heading={{{heading|{{{2|}}}}}}
|content={{{content|}}}
<!-- $1 is automatically replaced by [[Template:Documentation/layout]] using {{tmpl}} -->
| text = This documentation is [[w:Wikipedia:Transclusion|transcluded]] from $1.
<!-- DEPRECATED - New translations for these messages go in [[Data:I18n/Documentation.tab]]: -->
|edit=edit
|history=history
|view=view
|documentation=Documentation
}}</onlyinclude>
{{translated tag|documentation}}
syeqdw02j60lht0iyj1vf0qoc9vdmhz
10822
10821
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Documentation/i18n/en]]
10821
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{Documentation/layout
| lang = {{{lang|en}}}
<!-- {{Documentation}} parameters: -->
|1={{{1|}}}
|heading={{{heading|{{{2|}}}}}}
|content={{{content|}}}
<!-- $1 is automatically replaced by [[Template:Documentation/layout]] using {{tmpl}} -->
| text = This documentation is [[w:Wikipedia:Transclusion|transcluded]] from $1.
<!-- DEPRECATED - New translations for these messages go in [[Data:I18n/Documentation.tab]]: -->
|edit=edit
|history=history
|view=view
|documentation=Documentation
}}</onlyinclude>
{{translated tag|documentation}}
syeqdw02j60lht0iyj1vf0qoc9vdmhz
Tempilet:Documentation/layout
10
1383
10823
2025-04-17T10:24:09Z
commons>Verdy p
0
10823
wikitext
text/x-wiki
<div id="template-documentation" class="template-documentation"><templatestyles src="Template:Documentation/styles.css" /><!--
-->{{#if: {{PROTECTIONLEVEL:edit}}
| {{Protected}}
}}<!--
-->{{#ifeq: {{{heading|}}} | false
|
| <div class="template-documentation-heading" {{#if: {{{lang|}}}
| lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}"
}}><!--
--><span class="template-documentation-title">{{#if: {{{heading|}}}
| {{{heading|}}}
| [[File:Test Template Info-Icon.svg|50px|link=|alt=]] {{#switch:{{NAMESPACENUMBER}}
|6 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|file-namespace-heading|fallback={{{documentation|}}}}}
|10 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|template-namespace-heading|fallback={{{documentation|}}}}}
|828 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|module-namespace-heading|fallback={{{documentation|}}}}}
|#default = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|other-namespaces-heading|fallback={{{documentation|}}}}}
}}
}}</span><!--
--><span class="mw-editsection-like plainlinks" id="doc_editlinks">[ {{#if: {{{content|}}}
|
| {{#ifexist: {{Transclude|{{{1|{{DocPageName}}}}}}}
| <!--
-->[{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|view-link-display|fallback={{{view|}}}}}] '''·'''<!--
--> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=edit}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|edit-link-display|fallback={{{edit|}}}}}] '''·'''<!--
--> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=history}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|history-link-display|fallback={{{history|}}}}}] '''·'''<!--
-->
| <!--
-->[{{fullurl:{{transclude|{{{1|{{DocPageName}}}}}}}|action=edit&preload=Template:Documentation/preload}} {{#invoke:TNT|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|create-link-display}}] '''·'''<!--
-->
}}
}}<!--
--> [{{fullurl:{{FULLPAGENAME}}|action=purge}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|purge-link-display|fallback={{{purge|}}}}}]<!--
--> ]</span><!--
--></div>
}}<!--
-->{{#if: {{{content|}}}
| <!-- do not show notice when /doc is not transcluded-->
<div class="template-documentation-content" dir="auto">
{{{content|}}}
</div>
| <div class="template-documentation-transcludedfrom" lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}">{{tmpl<!--
-->|0 = {{{text|(text: $1) — {{error|parameter text is not translated in [[Template:Documentation]]}}}}}<!--
-->|1 = [[{{transclude|{{{1|{{DocPageName}}}}}}}]]<!--
-->}}</div>
<div class="template-documentation-content" dir="auto">
{{ {{{1|{{DocPageName}}}}} }}
</div>
}}
</div><noinclude>
{{#ifeq: {{SUBPAGENAME}} | sandbox | [[Category:Sandbox templates]] }}
[[Category:Layout templates]]
</noinclude>
j1ofws982vaza0ka3hg4ydr01lfv5ru
10824
10823
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Documentation/layout]]
10823
wikitext
text/x-wiki
<div id="template-documentation" class="template-documentation"><templatestyles src="Template:Documentation/styles.css" /><!--
-->{{#if: {{PROTECTIONLEVEL:edit}}
| {{Protected}}
}}<!--
-->{{#ifeq: {{{heading|}}} | false
|
| <div class="template-documentation-heading" {{#if: {{{lang|}}}
| lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}"
}}><!--
--><span class="template-documentation-title">{{#if: {{{heading|}}}
| {{{heading|}}}
| [[File:Test Template Info-Icon.svg|50px|link=|alt=]] {{#switch:{{NAMESPACENUMBER}}
|6 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|file-namespace-heading|fallback={{{documentation|}}}}}
|10 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|template-namespace-heading|fallback={{{documentation|}}}}}
|828 = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|module-namespace-heading|fallback={{{documentation|}}}}}
|#default = {{#invoke:TNTFallback|msg|lang={{{lang|{{int:lang}}}}}|I18n/Documentation.tab|other-namespaces-heading|fallback={{{documentation|}}}}}
}}
}}</span><!--
--><span class="mw-editsection-like plainlinks" id="doc_editlinks">[ {{#if: {{{content|}}}
|
| {{#ifexist: {{Transclude|{{{1|{{DocPageName}}}}}}}
| <!--
-->[{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|view-link-display|fallback={{{view|}}}}}] '''·'''<!--
--> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=edit}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|edit-link-display|fallback={{{edit|}}}}}] '''·'''<!--
--> [{{fullurl:{{Transclude|{{{1|{{DocPageName}}}}}}}|action=history}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|history-link-display|fallback={{{history|}}}}}] '''·'''<!--
-->
| <!--
-->[{{fullurl:{{transclude|{{{1|{{DocPageName}}}}}}}|action=edit&preload=Template:Documentation/preload}} {{#invoke:TNT|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|create-link-display}}] '''·'''<!--
-->
}}
}}<!--
--> [{{fullurl:{{FULLPAGENAME}}|action=purge}} {{#invoke:TNTFallback|msg|lang={{{lang|{{Int:Lang}}}}}|I18n/Documentation.tab|purge-link-display|fallback={{{purge|}}}}}]<!--
--> ]</span><!--
--></div>
}}<!--
-->{{#if: {{{content|}}}
| <!-- do not show notice when /doc is not transcluded-->
<div class="template-documentation-content" dir="auto">
{{{content|}}}
</div>
| <div class="template-documentation-transcludedfrom" lang="{{{lang|}}}" dir="{{#dir:{{{lang|}}}}}">{{tmpl<!--
-->|0 = {{{text|(text: $1) — {{error|parameter text is not translated in [[Template:Documentation]]}}}}}<!--
-->|1 = [[{{transclude|{{{1|{{DocPageName}}}}}}}]]<!--
-->}}</div>
<div class="template-documentation-content" dir="auto">
{{ {{{1|{{DocPageName}}}}} }}
</div>
}}
</div><noinclude>
{{#ifeq: {{SUBPAGENAME}} | sandbox | [[Category:Sandbox templates]] }}
[[Category:Layout templates]]
</noinclude>
j1ofws982vaza0ka3hg4ydr01lfv5ru
Tempilet:Documentation/styles.css
10
1384
10825
2024-08-08T17:08:26Z
commons>Jon (WMF)
0
Fixes [[phab:T369874]]. Please see talk page and do not revert without discussion. See also [[meta:User:Jon_(WMF)/Edit_for_dark_mode_support]]
10825
sanitized-css
text/css
.template-documentation {
margin-top: 1em;
clear: both;
border: 2px dotted #666;
padding: 0.6em;
background-color: #ecfcf4;
}
.template-documentation:after {
content: "";
display: block;
clear: both;
}
.template-documentation-heading {
padding-bottom: 3px;
border-bottom: 1px solid #a2a9b1;
margin-bottom: 1ex;
}
.template-documentation-title {
font-size: 150%;
}
.template-documentation-transcludedfrom {
font-size: smaller;
font-style: italic;
}
@media screen {
html.skin-theme-clientpref-night .template-documentation {
background-color: #0b1e1c;
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .template-documentation {
background-color: #0b1e1c;
}
}
rr3mstnwaeduzx6ggbzgo9ffdu277vw
10826
10825
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Documentation/styles.css]]
10825
sanitized-css
text/css
.template-documentation {
margin-top: 1em;
clear: both;
border: 2px dotted #666;
padding: 0.6em;
background-color: #ecfcf4;
}
.template-documentation:after {
content: "";
display: block;
clear: both;
}
.template-documentation-heading {
padding-bottom: 3px;
border-bottom: 1px solid #a2a9b1;
margin-bottom: 1ex;
}
.template-documentation-title {
font-size: 150%;
}
.template-documentation-transcludedfrom {
font-size: smaller;
font-style: italic;
}
@media screen {
html.skin-theme-clientpref-night .template-documentation {
background-color: #0b1e1c;
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .template-documentation {
background-color: #0b1e1c;
}
}
rr3mstnwaeduzx6ggbzgo9ffdu277vw
Tempilet:TemplateBox
10
1385
10827
2024-08-12T15:14:55Z
commons>Jarekt
0
Undo revision 907688459 by [[Special:Contributions/Jarekt|Jarekt]] ([[User talk:Jarekt|talk]])
10827
wikitext
text/x-wiki
<includeonly>{{#invoke:Languages|autolang|base=TemplateBox/i18n
|useargs=both
|templateData={{#invoke:TemplateBox|templatedata}}
|JSONFM={{#invoke:TemplateBox|templatedata|formatting=pretty}}
|paramTable={{#invoke:TemplateBox|paramtable}}
|usageSample={{#invoke:TemplateBox|usagesample}}
|argCount={{#invoke:TemplateBox|argcount}}
|desc={{#invoke:TemplateBox|description}}
|templateDataInfo={{TemplateDataInfo/toggler}}
|i18n-subpage={{#ifeq:{{{i18n-subpage|}}}|.
| Template:{{{name|{{BASEPAGENAME}}}}}
| Template:{{{name|{{BASEPAGENAME}}}}}/{{{i18n-subpage|i18n}}}
}}
|usergroup={{lc:{{{usergroup|}}}}}
|name={{{name|{{BASEPAGENAME}}}}}
|i18n-data-file={{{i18n-data-file|}}}
}}__NOEDITSECTION__<!--
Auto-categorization by internationalisation approach
-->{{#ifeq:{{SUBPAGENAME}}|doc
| <!--Don't categorize documentation subpages-->
| {{#ifeq:{{NAMESPACE}}|Template
| {{#switch:{{lc:{{{i18n-method|}}}}}
|autotranslate=[[Category:Templates using Autotranslate for internationalisation]]
|switch=[[Category:Templates using LangSwitch for internationalisation]]
|custommediawiki-msg=[[Category:Templates using local MediaWiki messages for internationalisation]]
|mediawiki-msg=[[Category:Templates using MediaWiki messages from translatewiki.net for internationalisation]]
|ext.translate=[[Category:Templates using the Translate extension for internationalisation]]
|tnt =[[Category:Templates using Module:TNT for internationalisation]]
|wikidata =[[Category:Templates using Wikidata for internationalisation]]
|-=[[Category:Templates not requiring internationalization]]
|#default=[[Category:Templates using an unknown approach for internationalisation]]
}}
| <!--Don't categorise Creator templates-->
}}
}}</includeonly><noinclude>{{Documentation}}</noinclude>
s7iyuk5ykyunmyrh5hcc5m3738d83pn
10828
10827
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateBox]]
10827
wikitext
text/x-wiki
<includeonly>{{#invoke:Languages|autolang|base=TemplateBox/i18n
|useargs=both
|templateData={{#invoke:TemplateBox|templatedata}}
|JSONFM={{#invoke:TemplateBox|templatedata|formatting=pretty}}
|paramTable={{#invoke:TemplateBox|paramtable}}
|usageSample={{#invoke:TemplateBox|usagesample}}
|argCount={{#invoke:TemplateBox|argcount}}
|desc={{#invoke:TemplateBox|description}}
|templateDataInfo={{TemplateDataInfo/toggler}}
|i18n-subpage={{#ifeq:{{{i18n-subpage|}}}|.
| Template:{{{name|{{BASEPAGENAME}}}}}
| Template:{{{name|{{BASEPAGENAME}}}}}/{{{i18n-subpage|i18n}}}
}}
|usergroup={{lc:{{{usergroup|}}}}}
|name={{{name|{{BASEPAGENAME}}}}}
|i18n-data-file={{{i18n-data-file|}}}
}}__NOEDITSECTION__<!--
Auto-categorization by internationalisation approach
-->{{#ifeq:{{SUBPAGENAME}}|doc
| <!--Don't categorize documentation subpages-->
| {{#ifeq:{{NAMESPACE}}|Template
| {{#switch:{{lc:{{{i18n-method|}}}}}
|autotranslate=[[Category:Templates using Autotranslate for internationalisation]]
|switch=[[Category:Templates using LangSwitch for internationalisation]]
|custommediawiki-msg=[[Category:Templates using local MediaWiki messages for internationalisation]]
|mediawiki-msg=[[Category:Templates using MediaWiki messages from translatewiki.net for internationalisation]]
|ext.translate=[[Category:Templates using the Translate extension for internationalisation]]
|tnt =[[Category:Templates using Module:TNT for internationalisation]]
|wikidata =[[Category:Templates using Wikidata for internationalisation]]
|-=[[Category:Templates not requiring internationalization]]
|#default=[[Category:Templates using an unknown approach for internationalisation]]
}}
| <!--Don't categorise Creator templates-->
}}
}}</includeonly><noinclude>{{Documentation}}</noinclude>
s7iyuk5ykyunmyrh5hcc5m3738d83pn
Tempilet:TemplateDataInfo/toggler
10
1386
10829
2024-08-09T04:11:18Z
commons>Jarekt
0
replace ((autotranslate}} with call to Module:Autotransalate
10829
wikitext
text/x-wiki
<onlyinclude><div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible-toggle" style="cursor:pointer" title="Information about TemplateData">{{Clickable button|iconPrimary=ui-icon-help|target={{FULLPAGENAME}}}}</div>
<div class="mw-collapsible-content">{{#invoke:Autotranslate|autotranslate|base=TemplateDataInfo/i18n}}</div>
</div></onlyinclude>
{{documentation}}
hcvr99fyr7o4idqg6l4p67cpc3z7mrk
10830
10829
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateDataInfo/toggler]]
10829
wikitext
text/x-wiki
<onlyinclude><div class="mw-collapsible mw-collapsed">
<div class="mw-collapsible-toggle" style="cursor:pointer" title="Information about TemplateData">{{Clickable button|iconPrimary=ui-icon-help|target={{FULLPAGENAME}}}}</div>
<div class="mw-collapsible-content">{{#invoke:Autotranslate|autotranslate|base=TemplateDataInfo/i18n}}</div>
</div></onlyinclude>
{{documentation}}
hcvr99fyr7o4idqg6l4p67cpc3z7mrk
Tempilet:TemplateDataInfo/i18n/en
10
1387
10831
2024-10-30T12:45:33Z
commons>FuzzyBot
0
Updating to match new version of source page
10831
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{TemplateDataInfo/layout
|title=TemplateData
|text=[[:mw:Special:MyLanguage/Extension:TemplateData|TemplateData]] is a way to store information about template parameters (the description of those and of the whole template) for both humans and machines. It is used by [[:mw:Special:MyLanguage/:VisualEditor|VisualEditor]] and possibly other tools like [[Special:MyLanguage/Commons:Upload Wizard|Upload Wizard]].
----
<u>Existing template documentation</u><br/>
At Wikimedia Commons, it is recommended to use {{tl|TemplateBox}} with either <code><nowiki>‎useTemplateData=1</nowiki></code> or <code><nowiki>‎useTemplateData=only</nowiki></code> on the <code><nowiki>‎/doc</nowiki></code> subpage and transcluding it with {{tl|Documentation}} into the template. {{tag|nowiki|o}}-tags can be wrapped around the arguments, if required, to avoid templates being expanded.
<u>Newly created template documentation and imports</u><br/>
Another option, especially for imported templates, or for users with JSON experience, is placing raw {{tag|templatedata|o}}-tags into the Wikitext of the template, as described in various Wikipediae.
|help=Wikipedia's help about TemplateData
|helppage=:en:Wikipedia:VisualEditor/TemplateData/Tutorial
|info=Commons-specific information
|lang=en
}}</onlyinclude>
{{translated tag|header}}
c26w757rb5jm01vuvow6d7iaebs2nuq
10832
10831
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateDataInfo/i18n/en]]
10831
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{TemplateDataInfo/layout
|title=TemplateData
|text=[[:mw:Special:MyLanguage/Extension:TemplateData|TemplateData]] is a way to store information about template parameters (the description of those and of the whole template) for both humans and machines. It is used by [[:mw:Special:MyLanguage/:VisualEditor|VisualEditor]] and possibly other tools like [[Special:MyLanguage/Commons:Upload Wizard|Upload Wizard]].
----
<u>Existing template documentation</u><br/>
At Wikimedia Commons, it is recommended to use {{tl|TemplateBox}} with either <code><nowiki>‎useTemplateData=1</nowiki></code> or <code><nowiki>‎useTemplateData=only</nowiki></code> on the <code><nowiki>‎/doc</nowiki></code> subpage and transcluding it with {{tl|Documentation}} into the template. {{tag|nowiki|o}}-tags can be wrapped around the arguments, if required, to avoid templates being expanded.
<u>Newly created template documentation and imports</u><br/>
Another option, especially for imported templates, or for users with JSON experience, is placing raw {{tag|templatedata|o}}-tags into the Wikitext of the template, as described in various Wikipediae.
|help=Wikipedia's help about TemplateData
|helppage=:en:Wikipedia:VisualEditor/TemplateData/Tutorial
|info=Commons-specific information
|lang=en
}}</onlyinclude>
{{translated tag|header}}
c26w757rb5jm01vuvow6d7iaebs2nuq
Tempilet:TemplateDataInfo/layout
10
1388
10833
2024-08-28T08:32:09Z
commons>CptViraj
0
Protected "[[Template:TemplateDataInfo/layout]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10833
wikitext
text/x-wiki
<onlyinclude><templatestyles src="Template:TemplateDataInfo/styles.css" /><div class="commons-template-TemplateDataInfo" lang="{{#bcp47:{{{lang|}}}}}" dir="{{#dir:{{{lang|}}}}}">
<div class="header" lang="zxx" dir="ltr"><nowiki><templatedata>JSON</templatedata></nowiki> ./. {{tl|TemplateBox}}</div>
;{{{title}}}
{{{text}}}
----
[[{{{helppage|:en:Wikipedia:VisualEditor/TemplateData/Tutorial}}}|{{{help}}}]] • [[Special:MyLanguage/Commons:TemplateData|{{{info}}}]]
</div><includeonly>{{#ifeq:{{NAMESPACE}}:{{ROOTPAGENAME}}|Template:TemplateDataInfo|
|{{#switch:{{SUBPAGENAME}}
|#default=[[Category:Templates using TemplateData]]
|doc
|documentation
|metatemplatedoc
|templatedoc
= [[Category:TemplateData documentation]]
|sandbox=
|TemplateData={{#ifeq:{{SUBPAGENAME}}|{{BASEPAGENAME}}
|[[Category:Templates using TemplateData]]
|[[Category:TemplateData documentation]]
}}
}}
}}</includeonly></onlyinclude>
[[Category:Layout templates]]
1xatqo9caata6g5nhqctdxjx5p76zno
10834
10833
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateDataInfo/layout]]
10833
wikitext
text/x-wiki
<onlyinclude><templatestyles src="Template:TemplateDataInfo/styles.css" /><div class="commons-template-TemplateDataInfo" lang="{{#bcp47:{{{lang|}}}}}" dir="{{#dir:{{{lang|}}}}}">
<div class="header" lang="zxx" dir="ltr"><nowiki><templatedata>JSON</templatedata></nowiki> ./. {{tl|TemplateBox}}</div>
;{{{title}}}
{{{text}}}
----
[[{{{helppage|:en:Wikipedia:VisualEditor/TemplateData/Tutorial}}}|{{{help}}}]] • [[Special:MyLanguage/Commons:TemplateData|{{{info}}}]]
</div><includeonly>{{#ifeq:{{NAMESPACE}}:{{ROOTPAGENAME}}|Template:TemplateDataInfo|
|{{#switch:{{SUBPAGENAME}}
|#default=[[Category:Templates using TemplateData]]
|doc
|documentation
|metatemplatedoc
|templatedoc
= [[Category:TemplateData documentation]]
|sandbox=
|TemplateData={{#ifeq:{{SUBPAGENAME}}|{{BASEPAGENAME}}
|[[Category:Templates using TemplateData]]
|[[Category:TemplateData documentation]]
}}
}}
}}</includeonly></onlyinclude>
[[Category:Layout templates]]
1xatqo9caata6g5nhqctdxjx5p76zno
Tempilet:TemplateDataInfo/styles.css
10
1389
10835
2024-10-30T12:47:22Z
commons>Matrix
0
fix for dark mode
10835
sanitized-css
text/css
.commons-template-TemplateDataInfo {
background: var(--background-color-warning-subtle, #fdf2d5);
border: 1px solid var(--border-color-warning, #ab7f2a);
color: inherit;
padding: 0 .5em;
margin: .5em 0;
}
.commons-template-TemplateDataInfo .header {
font-size: 120%;
font-family: monospace, monospace;
}
.commons-template-TemplateDataInfo[dir="ltr"] .header {
/* @noflip */
float: right;
}
.commons-template-TemplateDataInfo[dir="rtl"] .header {
/* @noflip */
float: left;
}
h6wzgqqaleiatpnsnn6qvrh9bjps4fy
10836
10835
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateDataInfo/styles.css]]
10835
sanitized-css
text/css
.commons-template-TemplateDataInfo {
background: var(--background-color-warning-subtle, #fdf2d5);
border: 1px solid var(--border-color-warning, #ab7f2a);
color: inherit;
padding: 0 .5em;
margin: .5em 0;
}
.commons-template-TemplateDataInfo .header {
font-size: 120%;
font-family: monospace, monospace;
}
.commons-template-TemplateDataInfo[dir="ltr"] .header {
/* @noflip */
float: right;
}
.commons-template-TemplateDataInfo[dir="rtl"] .header {
/* @noflip */
float: left;
}
h6wzgqqaleiatpnsnn6qvrh9bjps4fy
Tempilet:TemplateBox/i18n/en
10
1390
10839
2024-07-06T21:56:41Z
commons>FuzzyBot
0
Updating to match new version of source page
10839
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{#invoke:Transclude|TemplateBox/layout
<!-- [[Module:Transclude]] parameters -->
| #ignoredPrefix = msg-
<!-- Language information -->
| lang = en
<!-- Messages -->
|msg-setscats=The template automatically sets the following categories:
|msg-nodesc=No description yet available.
|msg-languagedependant=<nowiki /><small><!-- Remove this comment and insert the translation of "This part of the documentation is only available in a limited number of languages." --></small>
|msg-usage=Usage
|msg-examples={{PLURAL:{{#expr:{{#if:{{{example|}}}|1|0}}+{{#if:{{{example2|}}}|1|0}}}}|Example|Examples}}
|msg-example-renders-as=renders as:
|msg-shorthand=Or use the shorthand <nowiki /><!--
Some translations removed from translation (T8-T18)
If you want to re-install them (because there is something wrong with the MediaWiki-messages
that are used and provided by TemplateData, here they are:
https://commons.wikimedia.org/w/index.php?title=Template:TemplateBox/i18n&oldid=102987719
-->
|msg-shorthand-params-possible=… parameters as described …
|msg-param-none=The template takes no parameters.
|msg-moreinfo=Additional information
|msg-localization=Localization
|msg-localization-instruct-switch=To add your language to the list of languages supported by this template, please edit the template and add a row to the "{{Tlf|LangSwitch| }}" construct. It takes the form "<code>{{!}}xx= Your translation </code>" (<code>xx</code> being the {{W|List of ISO 639-1 codes|code}} of your language)
|msg-localization-instruct-autotranslate=This template is localized through {{tl|Autotranslate}}.
<!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} -->
|msg-localization-template-layout=The layout of the template can be found under $1.
|msg-localization-instruct-autotranslate-new=To add your language to the list of languages supported by this template, please copy the code of [[Template:{{{name|{{PAGENAME}}}}}/en]] (or any other language version you prefer to translate) and replace the text strings in there (the form below can be used to create a translation, the English version is preloaded in the edit box). Please change the parameter <code>lang</code> from <code>en</code> (or whatever language you are translating) to the [[:en:ISO 639-1|language code]] of your language.
|msg-localization-instruct-none=This template is not intended to be localized.
|msg-localization-instruct-custommediawiki-msg=This template is localized by utilizing custom MediaWiki namespace messages.
|msg-localization-instruct-wikidata=This template is localized by utilizing Wikidata, via {{tl|Label}} template or similar approach.
|msg-localization-instruct-mediawiki-msg=This template is localized by utilizing MediaWiki namespace messages. These can be [[translatewiki:{{#if:{{{i18n-mediawiki-msg|}}}|MediaWiki:{{{i18n-mediawiki-msg|}}}|Special:Translate/ext-wikimediamessages}}|translated at translatewiki.net]] ([[:translatewiki:Special:Translations/MediaWiki:{{#if:{{{i18n-mediawiki-msg|}}}|{{{i18n-mediawiki-msg|}}}|Wm-license-{{lc:{{BASEPAGENAME}}}}-text}}|current translations]]).
|msg-localization-ext-translate=This template makes use of {{tl|Autotranslate}} and [[:mw:Special:MyLanguage/Help:Extension:Translate|the translate extension]].
|msg-localization-instruct-ext-translate=Translate this template now!
|msg-localization-instruct-ext-translate-admin=Administrate translations.
| msg-localization-tnt = This template is localized using [[Module:TNT]].
<!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} -->
| msg-localization-instruct-tnt = These translations are stored in $1.
|msg-seealso={{int:Seealso}}
|msg-relieson=Relies on:
|msg-intendedusergroups=The template is intended to be used by the following user groups:
|msg-intendedusergroups-all=[[Special:MyLanguage/Commons:Users|all users]]
|msg-intendedusergroups-unspecified=no user group specified
|msg-intendednamespaces=The template is intended to be used in the following namespaces:
|msg-intendednamespaces-unknown=unknown
|msg-intendednamespaces-all=all namespaces
|msg-intendednamespaces-talks=all talk namespaces and noticeboards
|msg-intendednamespaces-contents=all content namespaces
|msg-intendednamespaces-0=the main or gallery namespace (unprefixed)
|msg-intendednamespaces-1=the Talk namespace for the main namespace
|msg-intendednamespaces-2=the User namespace
|msg-intendednamespaces-3=the User talk namespace
|msg-intendednamespaces-4=the Commons namespace
|msg-intendednamespaces-5=the Commons talk namespace
|msg-intendednamespaces-6=the File namespace
|msg-intendednamespaces-7=the File talk namespace
|msg-intendednamespaces-8=the MediaWiki namespace
|msg-intendednamespaces-9=the MediaWiki talk namespace
|msg-intendednamespaces-10=the Template namespace
|msg-intendednamespaces-11=the Template talk namespace
|msg-intendednamespaces-12=the Help namespace
|msg-intendednamespaces-13=the Help talk namespace
|msg-intendednamespaces-14=the Category namespace
|msg-intendednamespaces-15=the Category talk namespace
|msg-intendednamespaces-16=the Creator namespace
|msg-intendednamespaces-17=the Creator talk namespace
|msg-intendednamespaces-18=the Special namespace
|msg-intendednamespaces-default=no namespace specified
|msg-placement=Placement:
|msg-placement-top=At the top of the page
|msg-placement-bottom=At the bottom of the page
|msg-placement-licence=In the "{{int:wm-license-information-permission}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or in the "{{int:license-header}}" section
|msg-placement-source=In the "{{int:wm-license-information-source}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or just below this template
}}</onlyinclude>
{{translated tag|documentation}}
grz1ytwtkh8anafz2nge7be7qwl3uh1
10840
10839
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateBox/i18n/en]]
10839
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{#invoke:Transclude|TemplateBox/layout
<!-- [[Module:Transclude]] parameters -->
| #ignoredPrefix = msg-
<!-- Language information -->
| lang = en
<!-- Messages -->
|msg-setscats=The template automatically sets the following categories:
|msg-nodesc=No description yet available.
|msg-languagedependant=<nowiki /><small><!-- Remove this comment and insert the translation of "This part of the documentation is only available in a limited number of languages." --></small>
|msg-usage=Usage
|msg-examples={{PLURAL:{{#expr:{{#if:{{{example|}}}|1|0}}+{{#if:{{{example2|}}}|1|0}}}}|Example|Examples}}
|msg-example-renders-as=renders as:
|msg-shorthand=Or use the shorthand <nowiki /><!--
Some translations removed from translation (T8-T18)
If you want to re-install them (because there is something wrong with the MediaWiki-messages
that are used and provided by TemplateData, here they are:
https://commons.wikimedia.org/w/index.php?title=Template:TemplateBox/i18n&oldid=102987719
-->
|msg-shorthand-params-possible=… parameters as described …
|msg-param-none=The template takes no parameters.
|msg-moreinfo=Additional information
|msg-localization=Localization
|msg-localization-instruct-switch=To add your language to the list of languages supported by this template, please edit the template and add a row to the "{{Tlf|LangSwitch| }}" construct. It takes the form "<code>{{!}}xx= Your translation </code>" (<code>xx</code> being the {{W|List of ISO 639-1 codes|code}} of your language)
|msg-localization-instruct-autotranslate=This template is localized through {{tl|Autotranslate}}.
<!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} -->
|msg-localization-template-layout=The layout of the template can be found under $1.
|msg-localization-instruct-autotranslate-new=To add your language to the list of languages supported by this template, please copy the code of [[Template:{{{name|{{PAGENAME}}}}}/en]] (or any other language version you prefer to translate) and replace the text strings in there (the form below can be used to create a translation, the English version is preloaded in the edit box). Please change the parameter <code>lang</code> from <code>en</code> (or whatever language you are translating) to the [[:en:ISO 639-1|language code]] of your language.
|msg-localization-instruct-none=This template is not intended to be localized.
|msg-localization-instruct-custommediawiki-msg=This template is localized by utilizing custom MediaWiki namespace messages.
|msg-localization-instruct-wikidata=This template is localized by utilizing Wikidata, via {{tl|Label}} template or similar approach.
|msg-localization-instruct-mediawiki-msg=This template is localized by utilizing MediaWiki namespace messages. These can be [[translatewiki:{{#if:{{{i18n-mediawiki-msg|}}}|MediaWiki:{{{i18n-mediawiki-msg|}}}|Special:Translate/ext-wikimediamessages}}|translated at translatewiki.net]] ([[:translatewiki:Special:Translations/MediaWiki:{{#if:{{{i18n-mediawiki-msg|}}}|{{{i18n-mediawiki-msg|}}}|Wm-license-{{lc:{{BASEPAGENAME}}}}-text}}|current translations]]).
|msg-localization-ext-translate=This template makes use of {{tl|Autotranslate}} and [[:mw:Special:MyLanguage/Help:Extension:Translate|the translate extension]].
|msg-localization-instruct-ext-translate=Translate this template now!
|msg-localization-instruct-ext-translate-admin=Administrate translations.
| msg-localization-tnt = This template is localized using [[Module:TNT]].
<!-- $1 is automatically replaced by [[Template:TemplateBox/layout]] using {{tmpl}} -->
| msg-localization-instruct-tnt = These translations are stored in $1.
|msg-seealso={{int:Seealso}}
|msg-relieson=Relies on:
|msg-intendedusergroups=The template is intended to be used by the following user groups:
|msg-intendedusergroups-all=[[Special:MyLanguage/Commons:Users|all users]]
|msg-intendedusergroups-unspecified=no user group specified
|msg-intendednamespaces=The template is intended to be used in the following namespaces:
|msg-intendednamespaces-unknown=unknown
|msg-intendednamespaces-all=all namespaces
|msg-intendednamespaces-talks=all talk namespaces and noticeboards
|msg-intendednamespaces-contents=all content namespaces
|msg-intendednamespaces-0=the main or gallery namespace (unprefixed)
|msg-intendednamespaces-1=the Talk namespace for the main namespace
|msg-intendednamespaces-2=the User namespace
|msg-intendednamespaces-3=the User talk namespace
|msg-intendednamespaces-4=the Commons namespace
|msg-intendednamespaces-5=the Commons talk namespace
|msg-intendednamespaces-6=the File namespace
|msg-intendednamespaces-7=the File talk namespace
|msg-intendednamespaces-8=the MediaWiki namespace
|msg-intendednamespaces-9=the MediaWiki talk namespace
|msg-intendednamespaces-10=the Template namespace
|msg-intendednamespaces-11=the Template talk namespace
|msg-intendednamespaces-12=the Help namespace
|msg-intendednamespaces-13=the Help talk namespace
|msg-intendednamespaces-14=the Category namespace
|msg-intendednamespaces-15=the Category talk namespace
|msg-intendednamespaces-16=the Creator namespace
|msg-intendednamespaces-17=the Creator talk namespace
|msg-intendednamespaces-18=the Special namespace
|msg-intendednamespaces-default=no namespace specified
|msg-placement=Placement:
|msg-placement-top=At the top of the page
|msg-placement-bottom=At the bottom of the page
|msg-placement-licence=In the "{{int:wm-license-information-permission}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or in the "{{int:license-header}}" section
|msg-placement-source=In the "{{int:wm-license-information-source}}" parameter of the {{tl|Information}} template (or the respective parameter of similar templates) or just below this template
}}</onlyinclude>
{{translated tag|documentation}}
grz1ytwtkh8anafz2nge7be7qwl3uh1
Tempilet:TemplateBox/layout
10
1391
10841
2025-12-26T16:04:25Z
commons>ExE Boss
0
Add support for `namespace=Data`
10841
wikitext
text/x-wiki
<templatestyles src="TemplateBox/styles.css" />
__NOEDITSECTION__
{{#ifeq:{{{useTemplateData|}}}|export
|== {{{msg-export|Export code}}} ==
{{#tag:pre|{{msgnw:Template:{{{name|}}}}}
<nowiki><noinclude><templatedata></nowiki>
{{{JSONFM}}}
<nowiki></templatedata>
</noinclude></nowiki>
}}
|{{Documentation subpage|{{#if: {{{docsub-override|}}} | override | }}|page={{{docsub-page|}}}}}
{{{mbox|}}}
{{#if: {{{desc|}}} | {{{msg-languagedependant|}}}
<div class="templatebox-desc">
{{{desc}}}
</div> | {{{msg-nodesc|}}} }}{{#if: {{{setscats|}}} |<nowiki/>
{{{msg-setscats}}}
{{{setscats|}}}
}}
== {{{msg-usage|<noinclude>msg-usage</noinclude>}}} ==
{{#ifeq:{{#titleparts:{{FULLPAGENAME}}|1|-1}}|doc||{{#if:{{{mustbesubst|}}}|{{Must be substituted|page={{{name|}}}}}}}}}
<div class="templatebox-usagesample">
{{{usageSample|}}}
</div>{{#if: {{{shorthand|}}} |<nowiki/>
{{{msg-shorthand|}}}<div style="font-family: monospace, monospace;">{{#ifexist: Template:{{{shorthand|}}} | <nowiki>{{</nowiki>{{{shorthand}}}{{#ifeq:{{{argCount|}}}|0|<!-- nothing -->| {{!}}{{{msg-shorthand-params-possible|… parameters as described …}}}}}<nowiki>}}</nowiki> | {{{shorthand|}}}}}</div>
}}{{#if: {{{usage-notes|}}} |<nowiki/>
{{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{usage-notes}}}
</div>
}}{{#ifexpr:
{{#ifeq:{{{useTemplateData|}}}|TNT|1|0}}
or{{#ifeq:{{str left|{{{useTemplateData|}}}|4}}|TNT:|1|0}}
|<nowiki/>
<h3>{{int:templatedata-doc-params}}</h3>
{{{templateDataInfo}}}
<!-- TemplateData is handled by [[Module:TNT]] -->
{{#invoke:TNT|doc
|1={{#ifeq:{{{useTemplateData}}}|TNT
| {{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}
| {{str right|{{{useTemplateData}}}|4}}
}}
}}
<nowiki/>|<!-- else -->
{{#if: {{{paramTable|}}} |<nowiki/>
=== {{int:templatedata-doc-params}} ===
{{#ifeq:{{{useTemplateData|}}}|only||{{{paramTable}}}}}
|<nowiki/>
{{{msg-param-none|}}} }}
{{#if:{{{useTemplateData|}}}
|{{#ifeq:{{{useTemplateData|}}}|only||{{Collapse top|[[:mw:Special:MyLanguage/Extension:TemplateData|{{{msg-templatedata|Template data}}}]]}}}}
{{{templateDataInfo}}}
{{#tag: templatedata
| {{{templateData|}}}
}}
{{#ifeq:{{{useTemplateData|}}}|only||
<!--else-->
{{#ifeq:{{{useTemplateData|}}}|debug|
{{Collapse top|{{{msg-templatedata-raw|Raw template data}}}}}
{{#tag:syntaxhighlight
| {{{JSONFM}}}
| lang="json"
}}
{{Collapse bottom}}
}}
{{Collapse bottom}}}}
}}}}
=== {{{msg-moreinfo|<noinclude>msg-moreinfo</noinclude>}}} ===
{{{msg-intendednamespaces|}}}
{{#switch: {{{namespace|}}}
|={{{msg-intendednamespaces-default|}}}
|all={{{msg-intendednamespaces-all|}}}
|talks={{{msg-intendednamespaces-talks|}}}
|contents={{{msg-intendednamespaces-contents|}}}
|0|Main|Gallery|main|gallery={{{msg-intendednamespaces-0|}}}
|1|Talk|talk={{{msg-intendednamespaces-1|}}}
|2|User|user={{{msg-intendednamespaces-2|}}}
|3|User talk|user talk={{{msg-intendednamespaces-3|}}}
|4|Commons|commons={{{msg-intendednamespaces-4|}}}
|5|Commons talk|commons talk={{{msg-intendednamespaces-5|}}}
|6|File|file={{{msg-intendednamespaces-6|}}}
|7|File talk|file talk={{{msg-intendednamespaces-7|}}}
|8|MediaWiki|mediaWiki={{{msg-intendednamespaces-8|}}}
|9|MediaWiki talk|mediaWiki talk={{{msg-intendednamespaces-9|}}}
|10|Template|template={{{msg-intendednamespaces-10|}}}
|11|Template talk|template talk={{{msg-intendednamespaces-11|}}}
|12|Help|help={{{msg-intendednamespaces-12|}}}
|13|Help talk|help talk={{{msg-intendednamespaces-13|}}}
|14|Category|category={{{msg-intendednamespaces-14|}}}
|15|Category talk|category talk={{{msg-intendednamespaces-15|}}}
|16|Creator|creator={{{msg-intendednamespaces-16|}}}
|17|Creator talk|creator talk={{{msg-intendednamespaces-17|}}}
|18|Special|special={{{msg-intendednamespaces-18|}}}
|486|Data|data={{{msg-intendednamespaces-486|<span lang="en" dir="ltr" class="mw-content-ltr">the Data namespace</span>}}}
|487|Data talk|data talk={{{msg-intendednamespaces-487|<span lang="en" dir="ltr" class="mw-content-ltr">the Data talk namespace</span>}}}
|#default={{{msg-intendednamespaces-unknown|}}}
}}
{{{msg-intendedusergroups|}}}<!-- usergroup is always lower case transformation on [[Template:TemplateBox]] -->
{{#switch: {{{usergroup|}}}
|all={{{msg-intendedusergroups-all|}}}
|bot=[[Special:MyLanguage/{{mediawiki:Grouppage-bot}}|{{int:Group-bot}}]]
|administrator|admin|sysop=[[Special:MyLanguage/{{mediawiki:Grouppage-sysop}}|{{int:Group-sysop}}]]
|bureaucrat|crat=[[Special:MyLanguage/{{mediawiki:Grouppage-bureaucrat}}|{{int:Group-bureaucrat}}]]
|checkuser=[[Special:MyLanguage/{{mediawiki:Grouppage-checkuser}}|{{int:Group-checkuser}}]]
|licensereviewer|imagereviewer|image-reviewer|license-reviewer=[[Special:MyLanguage/{{mediawiki:Grouppage-Image-reviewer}}|{{int:Group-Image-reviewer}}]]
|vrt|vrt-agent|otrs|otrs-agent|otrs-member=[[Special:MyLanguage/{{mediawiki:Grouppage-vrt-permissions}}|{{int:group-vrt-permissions}}]]
|autoconfirmed=[[Special:MyLanguage/{{mediawiki:Grouppage-autoconfirmed}}|{{int:Group-autoconfirmed}}]]
|autopatrolled=[[Special:MyLanguage/{{mediawiki:Grouppage-autopatrolled}}|{{int:Group-autopatrolled}}]]
|filemover=[[Special:MyLanguage/{{mediawiki:Grouppage-filemover}}|{{int:Group-filemover}}]]
|oversight=[[Special:MyLanguage/{{mediawiki:Grouppage-oversight}}|{{int:Group-oversight}}]]
|patroller=[[Special:MyLanguage/{{mediawiki:Grouppage-patroller}}|{{int:Group-patroller}}]]
|rollbacker=[[Special:MyLanguage/{{mediawiki:Grouppage-rollbacker}}|{{int:Group-rollbacker}}]]
|steward=[[m:Special:MyLanguage/Stewards|{{int:Group-steward}}]]
|templateeditor|template editor=[[Special:MyLanguage/{{mediawiki:Grouppage-templateeditor}}|{{int:Group-templateeditor}}]]
|upwizcampeditors=[[Special:MyLanguage/{{mediawiki:Grouppage-upwizcampeditors}}|{{int:Group-upwizcampeditors}}]]
|translationadmin|translateadmin=[[Special:MyLanguage/{{mediawiki:Grouppage-translationadmin}}|{{int:Group-translationadmin}}]]
|#default={{{msg-intendedusergroups-unspecified|}}}
}}{{#if: {{{placement|}}} |<nowiki/>
{{{msg-placement|}}}
{{#switch: {{{placement|}}}
|top={{{msg-placement-top|}}}
|bottom={{{msg-placement-bottom|}}}
|license|licence={{{msg-placement-licence|}}}
|source={{{msg-placement-source|}}}
|#default={{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{placement}}}
</div>
}}
}}{{#if: {{{relieson|}}} |<nowiki/>
{{{msg-relieson|}}}<br />
{{{relieson|}}}
}}{{suppress categories|{{#if:<!--
-->{{{example |}}}{{{example-source |}}}{{{example-value |}}}<!--
-->{{{example2|}}}{{{example2-source|}}}{{{example2-value|}}}<!--
-->{{{example3|}}}{{{example3-source|}}}{{{example3-value|}}}<!--
-->|<nowiki/>
== {{{msg-examples}}} ==
<nowiki/>}}{{#if: {{{example-source|{{{example|}}}}}} |<nowiki/>
{{{example-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example}}}<nowiki>}}</nowiki>}}}
{{{msg-example-renders-as}}}
<div class="templatebox-example">
{{#if:{{{example-source|}}}{{{example-value|}}}|{{{example-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example|}}}|category=}}}}
</div>
}}{{#if: {{{example2-source|{{{example2|}}}}}} |<nowiki/>
{{#if: {{{example-source|{{{example|}}}}}}
|<hr style="margin:1em 0"/>}}
{{{example2-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example2}}}<nowiki>}}</nowiki>}}}
{{{msg-example-renders-as}}}
<div class="templatebox-example">
{{#if:{{{example2-source|}}}{{{example2-value|}}}|{{{example2-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example2|}}}|category=}}}}
</div>
}}{{#if: {{{example3-source|{{{example3|}}}}}} |<nowiki/>
{{#if: {{{example-source|{{{example|}}}}}}{{{example2-source|{{{example2|}}}}}}
|<hr style="margin:1em 0"/>}}
{{{example3-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example3}}}<nowiki>}}</nowiki>}}}
{{{msg-example-renders-as}}}
<div class="templatebox-example">
{{#if:{{{example3-source|{{{example3-value|}}}}}}|{{{example3-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example3|}}}|category=}}}}
</div>
}}}}{{#if: {{{seealso|}}} |<nowiki/>
== {{{msg-seealso|}}} ==
{{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{seealso}}}
</div>
}}{{#switch: {{lc:{{{i18n-method|}}}}}
|-=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-none|}}}
|autotranslate=<nowiki/>
== {{{msg-localization|}}} ==
{{lang links|Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|suppressaddlink=true}}
{{{msg-localization-instruct-autotranslate}}}
{{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout|
{{tmpl|0=
{{{msg-localization-template-layout}}}
|1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]]
}}
}}
{{{msg-localization-instruct-autotranslate-new}}}
{{#tag:inputbox|
type=create
preload=Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/en
default=Template:{{#if: {{{name|}}} | {{{name|}}} | {{PAGENAME}} }}/{{#ifexist: Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/{{int:Lang}} | LANGCODE | {{int:Lang}} }}
}}
|ext.translate=<nowiki/>
== {{{msg-localization|}}} ==
{{lang links|suppressaddlink=true|1={{{i18n-subpage}}}}}
{{{msg-localization-ext-translate}}}
{{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout|
{{tmpl|0=
{{{msg-localization-template-layout}}}
|1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]]
}}
}}
<div style="text-align:center">{{Clickable button|target={{TranslateLink|{{{i18n-subpage}}}}}|text=[[File:Icono de traducción.svg|48px|link=]]'''{{{msg-localization-instruct-ext-translate}}}'''|class=ui-button-blue ui-button-large|external=true}}</div>
<div style="text-align:center">{{Clickable button|target={{fullurl:{{{i18n-subpage}}}|action=edit}}|text='''{{{msg-localization-instruct-ext-translate-admin}}}'''|class=ui-button-red ui-button-large|iconPrimary=ui-icon-wrench|external=true}}</div>
|switch=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-switch|}}}
|mediawiki-msg=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-mediawiki-msg|}}}
|custommediawiki-msg=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-custommediawiki-msg|}}}
|tnt=<nowiki/>
<h2>{{{msg-localization}}}</h2>
{{{msg-localization-tnt}}}
{{tmpl|0=
{{{msg-localization-instruct-tnt}}}
|1=[[Data:{{#if:{{{i18n-data-file|}}}<!--
-->|{{#invoke:TNTTools|TNTTabFull|{{{i18n-data-file}}}}}<!--
-->|I18n/{{#if:{{{name|}}}|{{{name}}}|{{ROOTPAGENAME}}}}.tab<!--
-->}}]]
}}
|wikidata=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-wikidata|}}}
|#default=
{{#if: {{{i18n-desc|}}} |<nowiki/>
== {{{msg-localization|}}} ==
}}
}}{{#if: {{{i18n-desc|}}} |<nowiki/>
{{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{i18n-desc}}}
</div>
}}}}<noinclude>[[Category:Layout templates]]</noinclude>
tqpi3wqgupxm6rgec8unbprnq9gpx57
10842
10841
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateBox/layout]]
10841
wikitext
text/x-wiki
<templatestyles src="TemplateBox/styles.css" />
__NOEDITSECTION__
{{#ifeq:{{{useTemplateData|}}}|export
|== {{{msg-export|Export code}}} ==
{{#tag:pre|{{msgnw:Template:{{{name|}}}}}
<nowiki><noinclude><templatedata></nowiki>
{{{JSONFM}}}
<nowiki></templatedata>
</noinclude></nowiki>
}}
|{{Documentation subpage|{{#if: {{{docsub-override|}}} | override | }}|page={{{docsub-page|}}}}}
{{{mbox|}}}
{{#if: {{{desc|}}} | {{{msg-languagedependant|}}}
<div class="templatebox-desc">
{{{desc}}}
</div> | {{{msg-nodesc|}}} }}{{#if: {{{setscats|}}} |<nowiki/>
{{{msg-setscats}}}
{{{setscats|}}}
}}
== {{{msg-usage|<noinclude>msg-usage</noinclude>}}} ==
{{#ifeq:{{#titleparts:{{FULLPAGENAME}}|1|-1}}|doc||{{#if:{{{mustbesubst|}}}|{{Must be substituted|page={{{name|}}}}}}}}}
<div class="templatebox-usagesample">
{{{usageSample|}}}
</div>{{#if: {{{shorthand|}}} |<nowiki/>
{{{msg-shorthand|}}}<div style="font-family: monospace, monospace;">{{#ifexist: Template:{{{shorthand|}}} | <nowiki>{{</nowiki>{{{shorthand}}}{{#ifeq:{{{argCount|}}}|0|<!-- nothing -->| {{!}}{{{msg-shorthand-params-possible|… parameters as described …}}}}}<nowiki>}}</nowiki> | {{{shorthand|}}}}}</div>
}}{{#if: {{{usage-notes|}}} |<nowiki/>
{{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{usage-notes}}}
</div>
}}{{#ifexpr:
{{#ifeq:{{{useTemplateData|}}}|TNT|1|0}}
or{{#ifeq:{{str left|{{{useTemplateData|}}}|4}}|TNT:|1|0}}
|<nowiki/>
<h3>{{int:templatedata-doc-params}}</h3>
{{{templateDataInfo}}}
<!-- TemplateData is handled by [[Module:TNT]] -->
{{#invoke:TNT|doc
|1={{#ifeq:{{{useTemplateData}}}|TNT
| {{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}
| {{str right|{{{useTemplateData}}}|4}}
}}
}}
<nowiki/>|<!-- else -->
{{#if: {{{paramTable|}}} |<nowiki/>
=== {{int:templatedata-doc-params}} ===
{{#ifeq:{{{useTemplateData|}}}|only||{{{paramTable}}}}}
|<nowiki/>
{{{msg-param-none|}}} }}
{{#if:{{{useTemplateData|}}}
|{{#ifeq:{{{useTemplateData|}}}|only||{{Collapse top|[[:mw:Special:MyLanguage/Extension:TemplateData|{{{msg-templatedata|Template data}}}]]}}}}
{{{templateDataInfo}}}
{{#tag: templatedata
| {{{templateData|}}}
}}
{{#ifeq:{{{useTemplateData|}}}|only||
<!--else-->
{{#ifeq:{{{useTemplateData|}}}|debug|
{{Collapse top|{{{msg-templatedata-raw|Raw template data}}}}}
{{#tag:syntaxhighlight
| {{{JSONFM}}}
| lang="json"
}}
{{Collapse bottom}}
}}
{{Collapse bottom}}}}
}}}}
=== {{{msg-moreinfo|<noinclude>msg-moreinfo</noinclude>}}} ===
{{{msg-intendednamespaces|}}}
{{#switch: {{{namespace|}}}
|={{{msg-intendednamespaces-default|}}}
|all={{{msg-intendednamespaces-all|}}}
|talks={{{msg-intendednamespaces-talks|}}}
|contents={{{msg-intendednamespaces-contents|}}}
|0|Main|Gallery|main|gallery={{{msg-intendednamespaces-0|}}}
|1|Talk|talk={{{msg-intendednamespaces-1|}}}
|2|User|user={{{msg-intendednamespaces-2|}}}
|3|User talk|user talk={{{msg-intendednamespaces-3|}}}
|4|Commons|commons={{{msg-intendednamespaces-4|}}}
|5|Commons talk|commons talk={{{msg-intendednamespaces-5|}}}
|6|File|file={{{msg-intendednamespaces-6|}}}
|7|File talk|file talk={{{msg-intendednamespaces-7|}}}
|8|MediaWiki|mediaWiki={{{msg-intendednamespaces-8|}}}
|9|MediaWiki talk|mediaWiki talk={{{msg-intendednamespaces-9|}}}
|10|Template|template={{{msg-intendednamespaces-10|}}}
|11|Template talk|template talk={{{msg-intendednamespaces-11|}}}
|12|Help|help={{{msg-intendednamespaces-12|}}}
|13|Help talk|help talk={{{msg-intendednamespaces-13|}}}
|14|Category|category={{{msg-intendednamespaces-14|}}}
|15|Category talk|category talk={{{msg-intendednamespaces-15|}}}
|16|Creator|creator={{{msg-intendednamespaces-16|}}}
|17|Creator talk|creator talk={{{msg-intendednamespaces-17|}}}
|18|Special|special={{{msg-intendednamespaces-18|}}}
|486|Data|data={{{msg-intendednamespaces-486|<span lang="en" dir="ltr" class="mw-content-ltr">the Data namespace</span>}}}
|487|Data talk|data talk={{{msg-intendednamespaces-487|<span lang="en" dir="ltr" class="mw-content-ltr">the Data talk namespace</span>}}}
|#default={{{msg-intendednamespaces-unknown|}}}
}}
{{{msg-intendedusergroups|}}}<!-- usergroup is always lower case transformation on [[Template:TemplateBox]] -->
{{#switch: {{{usergroup|}}}
|all={{{msg-intendedusergroups-all|}}}
|bot=[[Special:MyLanguage/{{mediawiki:Grouppage-bot}}|{{int:Group-bot}}]]
|administrator|admin|sysop=[[Special:MyLanguage/{{mediawiki:Grouppage-sysop}}|{{int:Group-sysop}}]]
|bureaucrat|crat=[[Special:MyLanguage/{{mediawiki:Grouppage-bureaucrat}}|{{int:Group-bureaucrat}}]]
|checkuser=[[Special:MyLanguage/{{mediawiki:Grouppage-checkuser}}|{{int:Group-checkuser}}]]
|licensereviewer|imagereviewer|image-reviewer|license-reviewer=[[Special:MyLanguage/{{mediawiki:Grouppage-Image-reviewer}}|{{int:Group-Image-reviewer}}]]
|vrt|vrt-agent|otrs|otrs-agent|otrs-member=[[Special:MyLanguage/{{mediawiki:Grouppage-vrt-permissions}}|{{int:group-vrt-permissions}}]]
|autoconfirmed=[[Special:MyLanguage/{{mediawiki:Grouppage-autoconfirmed}}|{{int:Group-autoconfirmed}}]]
|autopatrolled=[[Special:MyLanguage/{{mediawiki:Grouppage-autopatrolled}}|{{int:Group-autopatrolled}}]]
|filemover=[[Special:MyLanguage/{{mediawiki:Grouppage-filemover}}|{{int:Group-filemover}}]]
|oversight=[[Special:MyLanguage/{{mediawiki:Grouppage-oversight}}|{{int:Group-oversight}}]]
|patroller=[[Special:MyLanguage/{{mediawiki:Grouppage-patroller}}|{{int:Group-patroller}}]]
|rollbacker=[[Special:MyLanguage/{{mediawiki:Grouppage-rollbacker}}|{{int:Group-rollbacker}}]]
|steward=[[m:Special:MyLanguage/Stewards|{{int:Group-steward}}]]
|templateeditor|template editor=[[Special:MyLanguage/{{mediawiki:Grouppage-templateeditor}}|{{int:Group-templateeditor}}]]
|upwizcampeditors=[[Special:MyLanguage/{{mediawiki:Grouppage-upwizcampeditors}}|{{int:Group-upwizcampeditors}}]]
|translationadmin|translateadmin=[[Special:MyLanguage/{{mediawiki:Grouppage-translationadmin}}|{{int:Group-translationadmin}}]]
|#default={{{msg-intendedusergroups-unspecified|}}}
}}{{#if: {{{placement|}}} |<nowiki/>
{{{msg-placement|}}}
{{#switch: {{{placement|}}}
|top={{{msg-placement-top|}}}
|bottom={{{msg-placement-bottom|}}}
|license|licence={{{msg-placement-licence|}}}
|source={{{msg-placement-source|}}}
|#default={{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{placement}}}
</div>
}}
}}{{#if: {{{relieson|}}} |<nowiki/>
{{{msg-relieson|}}}<br />
{{{relieson|}}}
}}{{suppress categories|{{#if:<!--
-->{{{example |}}}{{{example-source |}}}{{{example-value |}}}<!--
-->{{{example2|}}}{{{example2-source|}}}{{{example2-value|}}}<!--
-->{{{example3|}}}{{{example3-source|}}}{{{example3-value|}}}<!--
-->|<nowiki/>
== {{{msg-examples}}} ==
<nowiki/>}}{{#if: {{{example-source|{{{example|}}}}}} |<nowiki/>
{{{example-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example}}}<nowiki>}}</nowiki>}}}
{{{msg-example-renders-as}}}
<div class="templatebox-example">
{{#if:{{{example-source|}}}{{{example-value|}}}|{{{example-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example|}}}|category=}}}}
</div>
}}{{#if: {{{example2-source|{{{example2|}}}}}} |<nowiki/>
{{#if: {{{example-source|{{{example|}}}}}}
|<hr style="margin:1em 0"/>}}
{{{example2-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example2}}}<nowiki>}}</nowiki>}}}
{{{msg-example-renders-as}}}
<div class="templatebox-example">
{{#if:{{{example2-source|}}}{{{example2-value|}}}|{{{example2-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example2|}}}|category=}}}}
</div>
}}{{#if: {{{example3-source|{{{example3|}}}}}} |<nowiki/>
{{#if: {{{example-source|{{{example|}}}}}}{{{example2-source|{{{example2|}}}}}}
|<hr style="margin:1em 0"/>}}
{{{example3-source|<nowiki>{{</nowiki>{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}{{!}}{{{example3}}}<nowiki>}}</nowiki>}}}
{{{msg-example-renders-as}}}
<div class="templatebox-example">
{{#if:{{{example3-source|{{{example3-value|}}}}}}|{{{example3-value}}}|{{ {{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|{{{example3|}}}|category=}}}}
</div>
}}}}{{#if: {{{seealso|}}} |<nowiki/>
== {{{msg-seealso|}}} ==
{{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{seealso}}}
</div>
}}{{#switch: {{lc:{{{i18n-method|}}}}}
|-=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-none|}}}
|autotranslate=<nowiki/>
== {{{msg-localization|}}} ==
{{lang links|Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}|suppressaddlink=true}}
{{{msg-localization-instruct-autotranslate}}}
{{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout|
{{tmpl|0=
{{{msg-localization-template-layout}}}
|1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]]
}}
}}
{{{msg-localization-instruct-autotranslate-new}}}
{{#tag:inputbox|
type=create
preload=Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/en
default=Template:{{#if: {{{name|}}} | {{{name|}}} | {{PAGENAME}} }}/{{#ifexist: Template:{{#if: {{{name|}}} | {{{name}}} | {{PAGENAME}} }}/{{int:Lang}} | LANGCODE | {{int:Lang}} }}
}}
|ext.translate=<nowiki/>
== {{{msg-localization|}}} ==
{{lang links|suppressaddlink=true|1={{{i18n-subpage}}}}}
{{{msg-localization-ext-translate}}}
{{#ifexist:Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout|
{{tmpl|0=
{{{msg-localization-template-layout}}}
|1=[[Template:{{#if:{{{name|}}}|{{{name}}}|{{BASEPAGENAME}}}}/layout]]
}}
}}
<div style="text-align:center">{{Clickable button|target={{TranslateLink|{{{i18n-subpage}}}}}|text=[[File:Icono de traducción.svg|48px|link=]]'''{{{msg-localization-instruct-ext-translate}}}'''|class=ui-button-blue ui-button-large|external=true}}</div>
<div style="text-align:center">{{Clickable button|target={{fullurl:{{{i18n-subpage}}}|action=edit}}|text='''{{{msg-localization-instruct-ext-translate-admin}}}'''|class=ui-button-red ui-button-large|iconPrimary=ui-icon-wrench|external=true}}</div>
|switch=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-switch|}}}
|mediawiki-msg=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-mediawiki-msg|}}}
|custommediawiki-msg=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-custommediawiki-msg|}}}
|tnt=<nowiki/>
<h2>{{{msg-localization}}}</h2>
{{{msg-localization-tnt}}}
{{tmpl|0=
{{{msg-localization-instruct-tnt}}}
|1=[[Data:{{#if:{{{i18n-data-file|}}}<!--
-->|{{#invoke:TNTTools|TNTTabFull|{{{i18n-data-file}}}}}<!--
-->|I18n/{{#if:{{{name|}}}|{{{name}}}|{{ROOTPAGENAME}}}}.tab<!--
-->}}]]
}}
|wikidata=<nowiki/>
== {{{msg-localization|}}} ==
{{{msg-localization-instruct-wikidata|}}}
|#default=
{{#if: {{{i18n-desc|}}} |<nowiki/>
== {{{msg-localization|}}} ==
}}
}}{{#if: {{{i18n-desc|}}} |<nowiki/>
{{{msg-languagedependant|}}}
<div class="templatebox-languagedependant">
{{{i18n-desc}}}
</div>
}}}}<noinclude>[[Category:Layout templates]]</noinclude>
tqpi3wqgupxm6rgec8unbprnq9gpx57
Tempilet:TemplateBox/styles.css
10
1392
10843
2024-10-30T12:27:34Z
commons>Matrix
0
dark mode fix for language dependant box
10843
sanitized-css
text/css
.templatebox-desc {
font-size: 1.2em;
font-weight: bolder;
padding: 0.2em;
}
.templatebox-usagesample {
font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono',
'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace;
}
.templatebox-languagedependant {
background: var(--background-color-neutral-subtle, #f8f9fa);
color: inherit;
padding: 0.2em;
}
.templatebox-example {
border:1px solid var(--border-color-base,#a2a9b1);
width: 90%;
padding: 1.5em;
}
.templatebox-example:after {
display: block;
content: "";
clear: both;
}
hr.templatebox-examples-separator {
margin: 1em 0;
}
kvl2wuigla1dma12kctcf2volntprye
10844
10843
2026-08-25T23:38:34Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TemplateBox/styles.css]]
10843
sanitized-css
text/css
.templatebox-desc {
font-size: 1.2em;
font-weight: bolder;
padding: 0.2em;
}
.templatebox-usagesample {
font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono',
'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace;
}
.templatebox-languagedependant {
background: var(--background-color-neutral-subtle, #f8f9fa);
color: inherit;
padding: 0.2em;
}
.templatebox-example {
border:1px solid var(--border-color-base,#a2a9b1);
width: 90%;
padding: 1.5em;
}
.templatebox-example:after {
display: block;
content: "";
clear: both;
}
hr.templatebox-examples-separator {
margin: 1em 0;
}
kvl2wuigla1dma12kctcf2volntprye
Module:TNTFallback
828
1393
10847
2024-04-16T20:57:31Z
commons>Jonesey95
0
no globals no longer required
10847
Scribunto
text/plain
--------------------------------------------------------------------------------
-- This module implements a wrapper for [[Module:TNT]] that allows returning
-- a fallback message; used by {{Documentation}}.
--
-- @module TNTFallback
-- @alias p
-- @author [[User:ExE Boss]]
-- @require [[Module:TNT]]
--------------------------------------------------------------------------------
require("strict");
local TNT = require("Module:TNT");
local p = {};
--------------------------------------------------------------------------------
-- Based on [[Module:TNT]]'s `msg` function,
-- but takes an optional `fallback` parameter.
--------------------------------------------------------------------------------
function p.msg(frame)
local dataset, key;
local params = { n = 0 };
local lang = nil;
local fallback = nil;
for k, v in pairs(frame.args) do
if (k == 1) then
dataset = v;
elseif (k == 2) then
key = v;
elseif (type(k) == "number" and k > 2) then
local i = k - 2;
params[i] = v;
params.n = math.max(params.n, i);
elseif ((k == "lang") and (v ~= "_")) then
lang = v;
elseif ((k == "fallback") and (v ~= "")) then
fallback = v;
end
end
local result;
if (lang) then
result = TNT.formatInLanguage(lang, dataset, key, unpack(params, 1, params.n));
else
result = TNT.format(dataset, key, unpack(params, 1, params.n));
end
if (fallback and (
-- not translated
(result and result == TNT.formatInLanguage("en", dataset, key, unpack(params, 1, params.n)))
-- no message
or (not result)
)) then
if (not lang) then
if (frame:callParserFunction("int:lang") ~= "en") then
return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();
end
elseif (lang ~= "en") then
return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();
end
end
return result;
end
return p;
kloo3djb7uof7zpnz8pm6lhk2rxu6if
10848
10847
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:TNTFallback]]
10847
Scribunto
text/plain
--------------------------------------------------------------------------------
-- This module implements a wrapper for [[Module:TNT]] that allows returning
-- a fallback message; used by {{Documentation}}.
--
-- @module TNTFallback
-- @alias p
-- @author [[User:ExE Boss]]
-- @require [[Module:TNT]]
--------------------------------------------------------------------------------
require("strict");
local TNT = require("Module:TNT");
local p = {};
--------------------------------------------------------------------------------
-- Based on [[Module:TNT]]'s `msg` function,
-- but takes an optional `fallback` parameter.
--------------------------------------------------------------------------------
function p.msg(frame)
local dataset, key;
local params = { n = 0 };
local lang = nil;
local fallback = nil;
for k, v in pairs(frame.args) do
if (k == 1) then
dataset = v;
elseif (k == 2) then
key = v;
elseif (type(k) == "number" and k > 2) then
local i = k - 2;
params[i] = v;
params.n = math.max(params.n, i);
elseif ((k == "lang") and (v ~= "_")) then
lang = v;
elseif ((k == "fallback") and (v ~= "")) then
fallback = v;
end
end
local result;
if (lang) then
result = TNT.formatInLanguage(lang, dataset, key, unpack(params, 1, params.n));
else
result = TNT.format(dataset, key, unpack(params, 1, params.n));
end
if (fallback and (
-- not translated
(result and result == TNT.formatInLanguage("en", dataset, key, unpack(params, 1, params.n)))
-- no message
or (not result)
)) then
if (not lang) then
if (frame:callParserFunction("int:lang") ~= "en") then
return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();
end
elseif (lang ~= "en") then
return mw.message.newRawMessage(fallback, unpack(params, 1, params.n)):plain();
end
end
return result;
end
return p;
kloo3djb7uof7zpnz8pm6lhk2rxu6if
Module:TemplateBox
828
1394
10851
2022-10-30T13:19:31Z
commons>WOSlinker
0
use require('strict') instead of require('Module:No globals')
10851
Scribunto
text/plain
require('strict')
--[[
@exports
usagesample( frame )
argcount( frame )
args2table( args, onGetKey, forCustom )
paramtable( frame )
description( frame )
templatedata( frame )
]]
local p = {}
-- Helper function, not exposed
local function tobool(st)
if type( st ) == 'string' then
return st == 'true'
else
return not not st
end
end
-- Required to determine in which languages the interface texts without langcode are
local contentLangcode = mw.language.getContentLanguage():getCode()
-- Forward declaration
local msg, langIsInit, userLang
local messagePrefix = "templatedata-doc-"
local i18n = {}
i18n['params'] = "Template parameters"
i18n['param-name'] = "Parameter"
i18n['param-desc'] = "Description"
i18n['param-type'] = "Type"
i18n['param-default'] = "Default"
i18n['param-status'] = "Status"
i18n['param-status-optional'] = "optional"
i18n['param-status-required'] = "required"
i18n['param-status-suggested'] = "suggested"
i18n['param-status-deprecated'] = "deprecated"
i18n['param-default-empty'] = "empty"
local function initLangModule(frame)
if langIsInit then
return
end
userLang = frame:preprocess( '{{int:lang}}' )
--! From [[:de:Modul:Expr]]; by [[:de:User:PerfektesChaos]];
--! Derivative work: Rillke
msg = function( key )
-- Retrieve localized message string in content language
-- Precondition:
-- key -- string; message ID
-- Postcondition:
-- Return some message string
-- Uses:
-- > messagePrefix
-- > i18n
-- > userLang
-- mw.message.new()
local m = mw.message.new( messagePrefix .. key )
local r = false
if m:isBlank() then
r = i18n[ key ]
else
m:inLanguage( userLang )
r = m:plain()
end
if not r then
r = '((('.. key .. ')))'
end
return r
end -- msg()
langIsInit = true
end
-- A "hash" / table of everything TemplateData takes
-- to ease maintenance.
-- The type is automatically determined if t is omitted.
-- If the type does not match or can't be converted, an error will be thrown!
-- Available types (LUA-Types with exceptions):
-- InterfaceText, boolean, number, selection, table, string
-- selection*: - requires a selection-string of pipe-separated possibilities to be supplied
-- InterfaceText*: A free-form string (no wikitext) in the content-language of the wiki, or,
-- an object containing those strings keyed by language code.
local paraminfoTemplate = {
description = {
default = '',
t = 'InterfaceText',
alias = 'desc'
},
format = {
default = 'inline',
t = 'selection',
selection = 'inline|block',
alias = 'print',
extract = function(pargs, number, paramVal)
local m = { multi = 'block', one = 'inline', infobox = 'block' }
return m[paramVal] or 'inline'
end
}
}
local paraminfoTLParams = {
label = {
default = '',
t = 'InterfaceText'
},
required = {
default = false,
extract = function(pargs, number, paramVal)
local req = (pargs[number .. 'stat'] == 'required')
return tobool( paramVal or req )
end
},
suggested = {
default = false,
extract = function(pargs, number, paramVal)
local sugg = (pargs[number .. 'stat'] == 'suggested')
return tobool( paramVal or sugg )
end
},
description = {
default = '',
t = 'InterfaceText',
alias = 'd'
},
deprecated = {
default = false,
extract = function(pargs, number, paramVal)
local depr = (pargs[number .. 'stat'] == 'deprecated')
return tobool( paramVal or depr )
end
},
aliases = {
default = '',
t = 'table',
extract = function(pargs, number, paramVal)
local key = number .. 'aliases'
local tdkey = key .. '-td'
local aliases = pargs[tdkey] or pargs[key]
if aliases and mw.text.trim( aliases ) ~= '' then
local cleaned = {}
for m in mw.text.gsplit( aliases, '/', true ) do
cleaned[#cleaned+1] = mw.text.trim(m)
end
return cleaned
else
return nil
end
end
},
default = {
default = '',
t = 'string',
alias = 'def'
},
type = {
default = 'unknown',
t = 'selection',
selection = 'unknown|number|string|string/wiki-user-name|string/wiki-page-name|string/line|line|wiki-page-name|wiki-file-name|wiki-user-name|wiki-template-name|content|unbalanced-wikitext|date|url|boolean'
},
inherits = {
default = nil,
t = 'string'
},
autovalue = {
default = '',
t = 'string',
alias = 'av',
},
suggestedvalues = {
default = '',
t = 'table',
alias = 'sv',
extract = function(pargs, number, paramVal)
if paramVal == nil then
return nil
end
local cleaned = {}
for m in mw.text.gsplit( paramVal, '/', true ) do
cleaned[#cleaned+1] = mw.text.trim(m)
end
return cleaned
end,
},
-- sets will be treated differently because we can only have a plain structure in wikitext
}
local tableLayout = {
{
col = 'param-name',
width = '15%',
extract = function(item, renderCell, monolingual)
local alias, param = '', item.key
local aliasTT = '<span style="font-family: monospace; color:#777; border:1px solid #6A6A6A">'
param = '<code>' .. param .. '</code>'
if item.aliases then
alias = aliasTT .. table.concat(item.aliases, '</span><br />' .. aliasTT) .. '</span>'
param = table.concat({param, '<br /><div>', alias, '</div>'})
end
renderCell(param)
end
}, {
col = 'param-desc',
cols = 2,
width = '65%',
extract = function(item, renderCell, monolingual)
local label = item.label or ''
label = monolingual(label)
local labelLen = #label
local colspan = 2 - labelLen
if labelLen > 0 then
renderCell(label)
end
renderCell(monolingual(item.description), colspan)
end
}, {
col = 'param-default',
width = '10%',
extract = function(item, renderCell, monolingual)
local def = monolingual(item.default) or ''
if #def == 0 then
def = '<span class="mw-templatedata-doc-muted" style="color:#777; font-variant:small-caps">' .. msg('param-default-empty') .. '</span>'
end
renderCell(def)
end
}, {
col = 'param-status',
width = '10%',
extract = function(item, renderCell, monolingual)
local stat = msg('param-status-optional')
if item.required then
stat = '<b>' .. msg('param-status-required') .. '</b>'
elseif item.deprecated then
stat = msg('param-status-deprecated')
elseif item.suggested then
stat = msg('param-status-suggested')
end
renderCell(stat)
end
}
}
-- Initialize param info
-- Avoids having to add redundant information to the preceding tables
local function init( which )
local setDefault = function(v)
if v.t == nil and v.default ~= nil then
v.t = type( v.default )
end
if v.selection then
local selection = mw.text.split(v.selection, '|', true)
v.selection = {}
for _, sel in ipairs(selection) do
v.selection[sel] = true
end
end
end
for a, v in pairs( which ) do
setDefault(v)
end
end
local function initParamTables()
init( paraminfoTemplate )
init( paraminfoTLParams )
end
------------------------------------------------------
-------------------- USAGE PART ----------------------
------------------------------------------------------
function p.argcount( frame )
local pargs = ( frame:getParent() or {} ).args or {}
local ac = 0
for i, arg in pairs( pargs ) do
if ('number' == type(i)) then
ac = ac + 1
end
end
return ac
end
function p.usagesample( frame )
local pargs = ( frame:getParent() or {} ).args or {}
local multiline = (pargs.lines == 'multi' or pargs.print == 'multi' or pargs.print == 'infobox')
local align = pargs.print == 'infobox'
if not pargs.lines and not pargs.print and pargs.type == 'infobox' then
multiline = true
align = true
end
local sepStart = ' |'
local sepEnd = multiline and '\n' or ''
local sep = sepEnd
local subst = #(pargs.mustbesubst or '') > 0 and 'subst:' or ''
local beforeEqual = multiline and ' ' or ''
local equal = beforeEqual .. '= '
local templateTitle = pargs.name or ''
local args, argName, result = {}
local maxArgLen, eachArg = 0
sep = sep .. sepStart
local sparseIpairs = require('Module:TableTools').sparseIpairs
local comapareLegacyVal = function(val)
return val == 'optional-' or val == 'deprecated'
end
local shouldShow = function(i)
if comapareLegacyVal(pargs[i .. 'stat']) or
comapareLegacyVal(pargs[i .. 'stat-td']) or
pargs[i .. 'deprecated'] == true then
return false
end
return true
end
eachArg = function(cb)
for i, arg in sparseIpairs( pargs ) do
if ('number' == type(i)) then
argName = mw.text.trim( arg or '' )
if #argName == 0 then
argName = tostring(i)
end
if shouldShow(i) then
cb(argName)
end
end
end
end
if align then
eachArg(function( arg )
local argL = #arg
maxArgLen = argL > maxArgLen and argL or maxArgLen
end)
end
eachArg(function( arg )
local space = ''
if align then
space = (' '):rep(maxArgLen - #arg)
end
table.insert( args, argName .. space .. equal )
end)
if #args == 0 then
sep = ''
sepEnd = ''
sepStart = ''
end
if #templateTitle == 0 then
templateTitle = mw.title.getCurrentTitle().text
end
result = table.concat( args, sep )
result = table.concat({ mw.text.nowiki('{{'), subst, templateTitle, sep, result, sepEnd, '}}' })
if multiline then
-- Preserve whitespace in front of new lines
result = frame:callParserFunction{ name = '#tag', args = { 'poem', result } }
end
return result
end
------------------------------------------------------
------------------- GENERAL PART ---------------------
------------------------------------------------------
function p.args2table(args, onGetKey, consumer)
initParamTables()
local sets, asParamArray, laxtype, processParams, processDesc, unstrip
if 'paramtable' == consumer then
asParamArray = true
processParams = true
laxtype = true
elseif 'templatedata' == consumer then
sets = true
processParams = true
processDesc = true
unstrip = true
elseif 'description' == consumer then
processDesc = true
laxtype = true
end
-- All kind of strange stuff with the arguments is done, so play safe and make a copy
local pargs = mw.clone( args )
-- Array-like table containing all parameter-numbers that were passed
local templateArgs = {}
-- Arguments that are localized (i.e. the user passed 1desc-en=English description of parameter one)
local i18nTemplateArgs = {}
-- Ensure that tables end up as array/object (esp. when they are empty)
local tdata = {description="", params={}, sets={}}
local isObject = { __tostring = function() return "JSON object" end } isObject.__index = isObject
local isArray = { __tostring = function() return "JSON array" end } isArray.__index = isArray
setmetatable(tdata.params, isObject)
setmetatable(tdata.sets, isArray)
onGetKey = onGetKey or function( prefix, alias, param )
local key, key2, tdkey, tdkey2
key = prefix .. (alias or param)
key2 = prefix .. param
tdkey = key .. '-td'
tdkey2 = key2 .. '-td'
return tdkey, tdkey2, key, key2
end
local extractData = function( pi, number )
local prefix = number or ''
local ppv, paramVal
local key1, key2, key3, key4
local paramKey, paramTable, processKey
if number then
paramKey = mw.text.trim( pargs[number] )
if '' == paramKey then
paramKey = tostring( number )
end
paramTable = {}
if asParamArray then
paramTable.key = paramKey
table.insert(tdata.params, paramTable)
else
tdata.params[paramKey] = paramTable
end
end
for p, info in pairs( pi ) do
key1, key2, key3, key4 = onGetKey(prefix, info.alias, p)
paramVal = nil
processKey = function(key)
if paramVal ~= nil then return end
local plain, multilingual = pargs[key], i18nTemplateArgs[key]
paramVal = multilingual or plain
end
processKey( key1 )
processKey( key2 )
processKey( key3 )
processKey( key4 )
-- Ensure presence of entry in content language
ppv = pargs[key1] or pargs[key2] or pargs[key3] or pargs[key4] or info.default
if 'table' == type( paramVal ) then
if (nil == paramVal[contentLangcode]) then
paramVal[contentLangcode] = ppv
end
else
paramVal = ppv
end
if 'function' == type( info.extract ) then
if 'string' == type( paramVal ) then
paramVal = mw.text.trim( paramVal )
if '' == paramVal then
paramVal = nil
end
end
paramVal = info.extract( pargs, number, paramVal )
end
local insertValue = function()
if number then
paramTable[p] = paramVal
else
tdata[p] = paramVal
end
end
if info.selection then
if info.selection[paramVal] then
insertValue()
end
elseif 'InterfaceText' == info.t then
if ({ table=1, string=1 })[type( paramVal )] then
insertValue()
end
else
local paramType = type( paramVal )
if 'string' == info.t and 'string' == paramType then
paramVal = mw.text.trim( paramVal )
if '' ~= paramVal then
insertValue()
end
elseif 'boolean' == info.t then
paramVal = tobool(paramVal)
insertValue()
elseif 'number' == info.t then
paramVal = tonumber(paramVal)
insertValue()
elseif paramType == info.t then
insertValue()
elseif paramType == 'nil' then
-- Do nothing
elseif not laxtype and 'string' == info.t and 'table' == paramType then
-- Convert multilingual object into content language string
paramVal = paramVal[contentLangcode]
insertValue()
else
if laxtype then
insertValue()
else
error( p .. ': Is of type ' .. paramType .. ' but should be of type ' .. (info.t or 'unknown'), 1 )
end
end
end
end
-- Now, treat sets
if sets then
key1 = prefix .. 'set-td'
key2 = prefix .. 'set'
paramVal = pargs[key1] or pargs[key2]
if paramVal then
local found = false
for i, s in ipairs( tdata.sets ) do
if s.label == paramVal then
table.insert( s.params, p )
found = true
end
end
if not found then
table.insert( tdata.sets, {
label = paramVal,
params = { p }
} )
end
end
end
end
-- First, analyse the structure of the provided arguments
for a, v in pairs( pargs ) do
if unstrip then
v = mw.text.unstrip( v )
pargs[a] = v
end
if type( a ) == 'number' then
table.insert( templateArgs, a )
else
local argSplit = mw.text.split( a, '-', true )
local argUnitl = {}
local argAfter = {}
local isTDArg = false
local containsTD = a:find( '-td', 1, true )
for i, part in ipairs( argSplit ) do
if isTDArg or (containsTD == nil and i > 1) then
-- This is likely a language version
table.insert( argAfter, part )
else
table.insert( argUnitl, part )
end
if part == 'td' then
isTDArg = true
end
end
if #argAfter > 0 then
argUnitl = table.concat( argUnitl, '-' )
argAfter = table.concat( argAfter, '-' )
i18nTemplateArgs[argUnitl] = i18nTemplateArgs[argUnitl] or {}
i18nTemplateArgs[argUnitl][argAfter] = v
end
end
end
-- Then, start building the actual template
if processDesc then
extractData( paraminfoTemplate )
end
if processParams then
-- Ensure that `templateArgs` contains indicies in ascending order
table.sort( templateArgs )
for i, number in pairs( templateArgs ) do
extractData( paraminfoTLParams, number )
end
end
return tdata, #templateArgs
end
------------------------------------------------------
------------ CUSTOM PARAMETER TABLE PART -------------
------------------------------------------------------
-- A custom key-pref-function
local customOnGetKey = function( prefix, alias, param )
local key, key2, tdkey, tdkey2
key = prefix .. (alias or param)
key2 = prefix .. param
tdkey = key .. '-td'
tdkey2 = key2 .. '-td'
return key2, key, tdkey2, tdkey
end
local toUserLanguage = function(input)
if type(input) == 'table' then
input = require( 'Module:LangSwitch' )._langSwitch( input, userLang ) or ''
end
return input
end
function p.description(frame)
local pargs = ( frame:getParent() or {} ).args or {}
-- Initialize the language-related stuff
initLangModule(frame)
local tdata, paramLen
tdata, paramLen = p.args2table(pargs, customOnGetKey, 'description')
return toUserLanguage(tdata.description)
end
function p.paramtable(frame)
local pargs = ( frame:getParent() or {} ).args or {}
local tdata, paramLen
if 'only' == pargs.useTemplateData then
return 'param table - output suppressed'
end
-- Initialize the language-related stuff
initLangModule(frame)
tdata, paramLen = p.args2table(pargs, customOnGetKey, 'paramtable')
if 0 == paramLen then
return ''
end
local row, rows = '', {}
local renderCell = function(wikitext, colspan)
local colspan, oTd = colspan or 1, '<td>'
if colspan > 1 then
oTd = '<td colspan="' .. colspan .. '">'
end
row = table.concat({ row, oTd, wikitext, '</td>' })
end
-- Create the header
for i, field in ipairs( tableLayout ) do
local style = ' style="width:' .. field.width .. '"'
local colspan = ''
if field.cols then
colspan = ' colspan="' .. field.cols .. '"'
end
local th = '<th' .. style .. colspan .. '>'
row = row .. th .. msg(field.col) .. '</th>'
end
table.insert(rows, row)
-- Now transform the Lua-table into an HTML-table
for i, item in ipairs( tdata.params ) do
row = ''
for i2, field in ipairs( tableLayout ) do
field.extract(item, renderCell, toUserLanguage)
end
table.insert(rows, row)
end
return '<table class="wikitable templatebox-table"><tr>' .. table.concat(rows, '</tr><tr>') .. '</tr></table>'
end
------------------------------------------------------
----------------- TEMPLATEDATA PART ------------------
------------------------------------------------------
-- A real parser/transformer would look differently but it would likely be much more complex
-- The TemplateData-portion for [[Template:TemplateBox]]
function p.templatedata(frame)
local tdata
local args = frame.args or {}
local formatting = args.formatting
local pargs = ( frame:getParent() or {} ).args or {}
local useTemplateData = pargs.useTemplateData
if (formatting == 'pretty' and useTemplateData ~= 'export') or
(not useTemplateData) or
(useTemplateData == 'export' and formatting ~= 'pretty') then
local warning = "Warning: Module:TemplateBox - templatedata invoked but not requested by user (setting useTemplateData=1)."
mw.log(warning)
tdata = '{"description":"' .. warning .. '","params":{},"sets":[]}'
return tdata
end
-- Load the JSON-Module which will convert LUA tables into valid JSON
local JSON = require('Module:JSON')
JSON.strictTypes = true
-- Obtain the object containing info
tdata = p.args2table(pargs, nil, 'templatedata')
-- And finally return the result
if formatting == 'pretty' then
return JSON:encode_pretty(tdata)
else
return JSON:encode(tdata)
end
end
return p
lq3ttl7b8yfpr6ylrpjfuvykdq3wtw3
10852
10851
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:TemplateBox]]
10851
Scribunto
text/plain
require('strict')
--[[
@exports
usagesample( frame )
argcount( frame )
args2table( args, onGetKey, forCustom )
paramtable( frame )
description( frame )
templatedata( frame )
]]
local p = {}
-- Helper function, not exposed
local function tobool(st)
if type( st ) == 'string' then
return st == 'true'
else
return not not st
end
end
-- Required to determine in which languages the interface texts without langcode are
local contentLangcode = mw.language.getContentLanguage():getCode()
-- Forward declaration
local msg, langIsInit, userLang
local messagePrefix = "templatedata-doc-"
local i18n = {}
i18n['params'] = "Template parameters"
i18n['param-name'] = "Parameter"
i18n['param-desc'] = "Description"
i18n['param-type'] = "Type"
i18n['param-default'] = "Default"
i18n['param-status'] = "Status"
i18n['param-status-optional'] = "optional"
i18n['param-status-required'] = "required"
i18n['param-status-suggested'] = "suggested"
i18n['param-status-deprecated'] = "deprecated"
i18n['param-default-empty'] = "empty"
local function initLangModule(frame)
if langIsInit then
return
end
userLang = frame:preprocess( '{{int:lang}}' )
--! From [[:de:Modul:Expr]]; by [[:de:User:PerfektesChaos]];
--! Derivative work: Rillke
msg = function( key )
-- Retrieve localized message string in content language
-- Precondition:
-- key -- string; message ID
-- Postcondition:
-- Return some message string
-- Uses:
-- > messagePrefix
-- > i18n
-- > userLang
-- mw.message.new()
local m = mw.message.new( messagePrefix .. key )
local r = false
if m:isBlank() then
r = i18n[ key ]
else
m:inLanguage( userLang )
r = m:plain()
end
if not r then
r = '((('.. key .. ')))'
end
return r
end -- msg()
langIsInit = true
end
-- A "hash" / table of everything TemplateData takes
-- to ease maintenance.
-- The type is automatically determined if t is omitted.
-- If the type does not match or can't be converted, an error will be thrown!
-- Available types (LUA-Types with exceptions):
-- InterfaceText, boolean, number, selection, table, string
-- selection*: - requires a selection-string of pipe-separated possibilities to be supplied
-- InterfaceText*: A free-form string (no wikitext) in the content-language of the wiki, or,
-- an object containing those strings keyed by language code.
local paraminfoTemplate = {
description = {
default = '',
t = 'InterfaceText',
alias = 'desc'
},
format = {
default = 'inline',
t = 'selection',
selection = 'inline|block',
alias = 'print',
extract = function(pargs, number, paramVal)
local m = { multi = 'block', one = 'inline', infobox = 'block' }
return m[paramVal] or 'inline'
end
}
}
local paraminfoTLParams = {
label = {
default = '',
t = 'InterfaceText'
},
required = {
default = false,
extract = function(pargs, number, paramVal)
local req = (pargs[number .. 'stat'] == 'required')
return tobool( paramVal or req )
end
},
suggested = {
default = false,
extract = function(pargs, number, paramVal)
local sugg = (pargs[number .. 'stat'] == 'suggested')
return tobool( paramVal or sugg )
end
},
description = {
default = '',
t = 'InterfaceText',
alias = 'd'
},
deprecated = {
default = false,
extract = function(pargs, number, paramVal)
local depr = (pargs[number .. 'stat'] == 'deprecated')
return tobool( paramVal or depr )
end
},
aliases = {
default = '',
t = 'table',
extract = function(pargs, number, paramVal)
local key = number .. 'aliases'
local tdkey = key .. '-td'
local aliases = pargs[tdkey] or pargs[key]
if aliases and mw.text.trim( aliases ) ~= '' then
local cleaned = {}
for m in mw.text.gsplit( aliases, '/', true ) do
cleaned[#cleaned+1] = mw.text.trim(m)
end
return cleaned
else
return nil
end
end
},
default = {
default = '',
t = 'string',
alias = 'def'
},
type = {
default = 'unknown',
t = 'selection',
selection = 'unknown|number|string|string/wiki-user-name|string/wiki-page-name|string/line|line|wiki-page-name|wiki-file-name|wiki-user-name|wiki-template-name|content|unbalanced-wikitext|date|url|boolean'
},
inherits = {
default = nil,
t = 'string'
},
autovalue = {
default = '',
t = 'string',
alias = 'av',
},
suggestedvalues = {
default = '',
t = 'table',
alias = 'sv',
extract = function(pargs, number, paramVal)
if paramVal == nil then
return nil
end
local cleaned = {}
for m in mw.text.gsplit( paramVal, '/', true ) do
cleaned[#cleaned+1] = mw.text.trim(m)
end
return cleaned
end,
},
-- sets will be treated differently because we can only have a plain structure in wikitext
}
local tableLayout = {
{
col = 'param-name',
width = '15%',
extract = function(item, renderCell, monolingual)
local alias, param = '', item.key
local aliasTT = '<span style="font-family: monospace; color:#777; border:1px solid #6A6A6A">'
param = '<code>' .. param .. '</code>'
if item.aliases then
alias = aliasTT .. table.concat(item.aliases, '</span><br />' .. aliasTT) .. '</span>'
param = table.concat({param, '<br /><div>', alias, '</div>'})
end
renderCell(param)
end
}, {
col = 'param-desc',
cols = 2,
width = '65%',
extract = function(item, renderCell, monolingual)
local label = item.label or ''
label = monolingual(label)
local labelLen = #label
local colspan = 2 - labelLen
if labelLen > 0 then
renderCell(label)
end
renderCell(monolingual(item.description), colspan)
end
}, {
col = 'param-default',
width = '10%',
extract = function(item, renderCell, monolingual)
local def = monolingual(item.default) or ''
if #def == 0 then
def = '<span class="mw-templatedata-doc-muted" style="color:#777; font-variant:small-caps">' .. msg('param-default-empty') .. '</span>'
end
renderCell(def)
end
}, {
col = 'param-status',
width = '10%',
extract = function(item, renderCell, monolingual)
local stat = msg('param-status-optional')
if item.required then
stat = '<b>' .. msg('param-status-required') .. '</b>'
elseif item.deprecated then
stat = msg('param-status-deprecated')
elseif item.suggested then
stat = msg('param-status-suggested')
end
renderCell(stat)
end
}
}
-- Initialize param info
-- Avoids having to add redundant information to the preceding tables
local function init( which )
local setDefault = function(v)
if v.t == nil and v.default ~= nil then
v.t = type( v.default )
end
if v.selection then
local selection = mw.text.split(v.selection, '|', true)
v.selection = {}
for _, sel in ipairs(selection) do
v.selection[sel] = true
end
end
end
for a, v in pairs( which ) do
setDefault(v)
end
end
local function initParamTables()
init( paraminfoTemplate )
init( paraminfoTLParams )
end
------------------------------------------------------
-------------------- USAGE PART ----------------------
------------------------------------------------------
function p.argcount( frame )
local pargs = ( frame:getParent() or {} ).args or {}
local ac = 0
for i, arg in pairs( pargs ) do
if ('number' == type(i)) then
ac = ac + 1
end
end
return ac
end
function p.usagesample( frame )
local pargs = ( frame:getParent() or {} ).args or {}
local multiline = (pargs.lines == 'multi' or pargs.print == 'multi' or pargs.print == 'infobox')
local align = pargs.print == 'infobox'
if not pargs.lines and not pargs.print and pargs.type == 'infobox' then
multiline = true
align = true
end
local sepStart = ' |'
local sepEnd = multiline and '\n' or ''
local sep = sepEnd
local subst = #(pargs.mustbesubst or '') > 0 and 'subst:' or ''
local beforeEqual = multiline and ' ' or ''
local equal = beforeEqual .. '= '
local templateTitle = pargs.name or ''
local args, argName, result = {}
local maxArgLen, eachArg = 0
sep = sep .. sepStart
local sparseIpairs = require('Module:TableTools').sparseIpairs
local comapareLegacyVal = function(val)
return val == 'optional-' or val == 'deprecated'
end
local shouldShow = function(i)
if comapareLegacyVal(pargs[i .. 'stat']) or
comapareLegacyVal(pargs[i .. 'stat-td']) or
pargs[i .. 'deprecated'] == true then
return false
end
return true
end
eachArg = function(cb)
for i, arg in sparseIpairs( pargs ) do
if ('number' == type(i)) then
argName = mw.text.trim( arg or '' )
if #argName == 0 then
argName = tostring(i)
end
if shouldShow(i) then
cb(argName)
end
end
end
end
if align then
eachArg(function( arg )
local argL = #arg
maxArgLen = argL > maxArgLen and argL or maxArgLen
end)
end
eachArg(function( arg )
local space = ''
if align then
space = (' '):rep(maxArgLen - #arg)
end
table.insert( args, argName .. space .. equal )
end)
if #args == 0 then
sep = ''
sepEnd = ''
sepStart = ''
end
if #templateTitle == 0 then
templateTitle = mw.title.getCurrentTitle().text
end
result = table.concat( args, sep )
result = table.concat({ mw.text.nowiki('{{'), subst, templateTitle, sep, result, sepEnd, '}}' })
if multiline then
-- Preserve whitespace in front of new lines
result = frame:callParserFunction{ name = '#tag', args = { 'poem', result } }
end
return result
end
------------------------------------------------------
------------------- GENERAL PART ---------------------
------------------------------------------------------
function p.args2table(args, onGetKey, consumer)
initParamTables()
local sets, asParamArray, laxtype, processParams, processDesc, unstrip
if 'paramtable' == consumer then
asParamArray = true
processParams = true
laxtype = true
elseif 'templatedata' == consumer then
sets = true
processParams = true
processDesc = true
unstrip = true
elseif 'description' == consumer then
processDesc = true
laxtype = true
end
-- All kind of strange stuff with the arguments is done, so play safe and make a copy
local pargs = mw.clone( args )
-- Array-like table containing all parameter-numbers that were passed
local templateArgs = {}
-- Arguments that are localized (i.e. the user passed 1desc-en=English description of parameter one)
local i18nTemplateArgs = {}
-- Ensure that tables end up as array/object (esp. when they are empty)
local tdata = {description="", params={}, sets={}}
local isObject = { __tostring = function() return "JSON object" end } isObject.__index = isObject
local isArray = { __tostring = function() return "JSON array" end } isArray.__index = isArray
setmetatable(tdata.params, isObject)
setmetatable(tdata.sets, isArray)
onGetKey = onGetKey or function( prefix, alias, param )
local key, key2, tdkey, tdkey2
key = prefix .. (alias or param)
key2 = prefix .. param
tdkey = key .. '-td'
tdkey2 = key2 .. '-td'
return tdkey, tdkey2, key, key2
end
local extractData = function( pi, number )
local prefix = number or ''
local ppv, paramVal
local key1, key2, key3, key4
local paramKey, paramTable, processKey
if number then
paramKey = mw.text.trim( pargs[number] )
if '' == paramKey then
paramKey = tostring( number )
end
paramTable = {}
if asParamArray then
paramTable.key = paramKey
table.insert(tdata.params, paramTable)
else
tdata.params[paramKey] = paramTable
end
end
for p, info in pairs( pi ) do
key1, key2, key3, key4 = onGetKey(prefix, info.alias, p)
paramVal = nil
processKey = function(key)
if paramVal ~= nil then return end
local plain, multilingual = pargs[key], i18nTemplateArgs[key]
paramVal = multilingual or plain
end
processKey( key1 )
processKey( key2 )
processKey( key3 )
processKey( key4 )
-- Ensure presence of entry in content language
ppv = pargs[key1] or pargs[key2] or pargs[key3] or pargs[key4] or info.default
if 'table' == type( paramVal ) then
if (nil == paramVal[contentLangcode]) then
paramVal[contentLangcode] = ppv
end
else
paramVal = ppv
end
if 'function' == type( info.extract ) then
if 'string' == type( paramVal ) then
paramVal = mw.text.trim( paramVal )
if '' == paramVal then
paramVal = nil
end
end
paramVal = info.extract( pargs, number, paramVal )
end
local insertValue = function()
if number then
paramTable[p] = paramVal
else
tdata[p] = paramVal
end
end
if info.selection then
if info.selection[paramVal] then
insertValue()
end
elseif 'InterfaceText' == info.t then
if ({ table=1, string=1 })[type( paramVal )] then
insertValue()
end
else
local paramType = type( paramVal )
if 'string' == info.t and 'string' == paramType then
paramVal = mw.text.trim( paramVal )
if '' ~= paramVal then
insertValue()
end
elseif 'boolean' == info.t then
paramVal = tobool(paramVal)
insertValue()
elseif 'number' == info.t then
paramVal = tonumber(paramVal)
insertValue()
elseif paramType == info.t then
insertValue()
elseif paramType == 'nil' then
-- Do nothing
elseif not laxtype and 'string' == info.t and 'table' == paramType then
-- Convert multilingual object into content language string
paramVal = paramVal[contentLangcode]
insertValue()
else
if laxtype then
insertValue()
else
error( p .. ': Is of type ' .. paramType .. ' but should be of type ' .. (info.t or 'unknown'), 1 )
end
end
end
end
-- Now, treat sets
if sets then
key1 = prefix .. 'set-td'
key2 = prefix .. 'set'
paramVal = pargs[key1] or pargs[key2]
if paramVal then
local found = false
for i, s in ipairs( tdata.sets ) do
if s.label == paramVal then
table.insert( s.params, p )
found = true
end
end
if not found then
table.insert( tdata.sets, {
label = paramVal,
params = { p }
} )
end
end
end
end
-- First, analyse the structure of the provided arguments
for a, v in pairs( pargs ) do
if unstrip then
v = mw.text.unstrip( v )
pargs[a] = v
end
if type( a ) == 'number' then
table.insert( templateArgs, a )
else
local argSplit = mw.text.split( a, '-', true )
local argUnitl = {}
local argAfter = {}
local isTDArg = false
local containsTD = a:find( '-td', 1, true )
for i, part in ipairs( argSplit ) do
if isTDArg or (containsTD == nil and i > 1) then
-- This is likely a language version
table.insert( argAfter, part )
else
table.insert( argUnitl, part )
end
if part == 'td' then
isTDArg = true
end
end
if #argAfter > 0 then
argUnitl = table.concat( argUnitl, '-' )
argAfter = table.concat( argAfter, '-' )
i18nTemplateArgs[argUnitl] = i18nTemplateArgs[argUnitl] or {}
i18nTemplateArgs[argUnitl][argAfter] = v
end
end
end
-- Then, start building the actual template
if processDesc then
extractData( paraminfoTemplate )
end
if processParams then
-- Ensure that `templateArgs` contains indicies in ascending order
table.sort( templateArgs )
for i, number in pairs( templateArgs ) do
extractData( paraminfoTLParams, number )
end
end
return tdata, #templateArgs
end
------------------------------------------------------
------------ CUSTOM PARAMETER TABLE PART -------------
------------------------------------------------------
-- A custom key-pref-function
local customOnGetKey = function( prefix, alias, param )
local key, key2, tdkey, tdkey2
key = prefix .. (alias or param)
key2 = prefix .. param
tdkey = key .. '-td'
tdkey2 = key2 .. '-td'
return key2, key, tdkey2, tdkey
end
local toUserLanguage = function(input)
if type(input) == 'table' then
input = require( 'Module:LangSwitch' )._langSwitch( input, userLang ) or ''
end
return input
end
function p.description(frame)
local pargs = ( frame:getParent() or {} ).args or {}
-- Initialize the language-related stuff
initLangModule(frame)
local tdata, paramLen
tdata, paramLen = p.args2table(pargs, customOnGetKey, 'description')
return toUserLanguage(tdata.description)
end
function p.paramtable(frame)
local pargs = ( frame:getParent() or {} ).args or {}
local tdata, paramLen
if 'only' == pargs.useTemplateData then
return 'param table - output suppressed'
end
-- Initialize the language-related stuff
initLangModule(frame)
tdata, paramLen = p.args2table(pargs, customOnGetKey, 'paramtable')
if 0 == paramLen then
return ''
end
local row, rows = '', {}
local renderCell = function(wikitext, colspan)
local colspan, oTd = colspan or 1, '<td>'
if colspan > 1 then
oTd = '<td colspan="' .. colspan .. '">'
end
row = table.concat({ row, oTd, wikitext, '</td>' })
end
-- Create the header
for i, field in ipairs( tableLayout ) do
local style = ' style="width:' .. field.width .. '"'
local colspan = ''
if field.cols then
colspan = ' colspan="' .. field.cols .. '"'
end
local th = '<th' .. style .. colspan .. '>'
row = row .. th .. msg(field.col) .. '</th>'
end
table.insert(rows, row)
-- Now transform the Lua-table into an HTML-table
for i, item in ipairs( tdata.params ) do
row = ''
for i2, field in ipairs( tableLayout ) do
field.extract(item, renderCell, toUserLanguage)
end
table.insert(rows, row)
end
return '<table class="wikitable templatebox-table"><tr>' .. table.concat(rows, '</tr><tr>') .. '</tr></table>'
end
------------------------------------------------------
----------------- TEMPLATEDATA PART ------------------
------------------------------------------------------
-- A real parser/transformer would look differently but it would likely be much more complex
-- The TemplateData-portion for [[Template:TemplateBox]]
function p.templatedata(frame)
local tdata
local args = frame.args or {}
local formatting = args.formatting
local pargs = ( frame:getParent() or {} ).args or {}
local useTemplateData = pargs.useTemplateData
if (formatting == 'pretty' and useTemplateData ~= 'export') or
(not useTemplateData) or
(useTemplateData == 'export' and formatting ~= 'pretty') then
local warning = "Warning: Module:TemplateBox - templatedata invoked but not requested by user (setting useTemplateData=1)."
mw.log(warning)
tdata = '{"description":"' .. warning .. '","params":{},"sets":[]}'
return tdata
end
-- Load the JSON-Module which will convert LUA tables into valid JSON
local JSON = require('Module:JSON')
JSON.strictTypes = true
-- Obtain the object containing info
tdata = p.args2table(pargs, nil, 'templatedata')
-- And finally return the result
if formatting == 'pretty' then
return JSON:encode_pretty(tdata)
else
return JSON:encode(tdata)
end
end
return p
lq3ttl7b8yfpr6ylrpjfuvykdq3wtw3
Tempilet:Nil2
10
1395
10853
2025-12-11T21:26:25Z
commons>Lucas Werkmeister
0
fulfilling edit request by [[User:Sebastian Wallroth]] – transclude standard {{Documentation}}
10853
wikitext
text/x-wiki
{{{Value|{{{2|}}}}}}<noinclude>
{{Documentation}}
</noinclude>
3yuiiq9rbr4pw89j9aixfwubbidy00a
10854
10853
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Nil2]]
10853
wikitext
text/x-wiki
{{{Value|{{{2|}}}}}}<noinclude>
{{Documentation}}
</noinclude>
3yuiiq9rbr4pw89j9aixfwubbidy00a
Tempilet:Protected
10
1396
10855
2025-06-24T14:36:10Z
commons>Jarekt
0
Fulfilling [[Template:Edit request|edit request]] by [[User:WOSlinker|WOSlinker]].
10855
wikitext
text/x-wiki
{{#switch:{{{demo-edit|{{PROTECTIONLEVEL:edit}}}}}
| sysop=
{{#ifeq:{{{icon}}}|no||<indicator name="protected">[[File:Full-protection-shackle-block.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>}}
<table class="protected" style="direction: {{#dir:{{int:Lang}}}}; background:var(--background-color-base,#fff); border:1px solid var(--border-color-base, #aaa); color: inherit; padding:.2em; margin:.5em auto;">
<tr>
<td style="padding-right:4px; padding-left:4px;">[[File:Full-protection-shackle-block.svg|40px|link=COM:P|Protected]]</td>
<td>'''{{{{tSwitch|protected/text}}|text1}} {{#if:{{{1|}}}|{{{{tSwitch|protected/text}}|reason|reason={{{1}}}}}|{{{{tSwitch|protected/text}}|default-reason}}}}'''<br /><span style="font-size:90%;">{{{note|{{{{tSwitch|protected/text}}|text2}} }}}</span></td>
</tr>
</table>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|{{#switch:{{NAMESPACE}}|{{ns:6}}=[[Category:Protected files]]|{{ns:2}}|{{ns:3}}|{{ns:10}}=|[[Category:Protected pages]]}} }}} }}
| templateeditor=
<indicator name="protected">[[File:Template-protection-shackle-brackets 2.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>
| editautopatrolprotected =
<indicator name="protected">[[File:Extended-protection-shackle-account-pro-plus.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>
| autoconfirmed=
<indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text2}}]]</indicator>
| #default=
{{#ifeq:{{NAMESPACE}}|{{{demo-ns|{{ns:6}}}}}
| {{#switch:{{{demo-upload|{{PROTECTIONLEVEL:upload}}}}}
| sysop=
<indicator name="protected">[[File:Upload-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text3}}]]</indicator>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Upload protected files]]}}} }}
| autoconfirmed=
<indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text4}}]]</indicator>
| #default={{ifsandbox|1=|2=
<div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}}
}}
|{{ifsandbox|1=|2=<div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}}
}}
}}<noinclude>
{{documentation}}
</noinclude>
5kmjaainuxuugszozwto8567j5by9zi
10856
10855
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Protected]]
10855
wikitext
text/x-wiki
{{#switch:{{{demo-edit|{{PROTECTIONLEVEL:edit}}}}}
| sysop=
{{#ifeq:{{{icon}}}|no||<indicator name="protected">[[File:Full-protection-shackle-block.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>}}
<table class="protected" style="direction: {{#dir:{{int:Lang}}}}; background:var(--background-color-base,#fff); border:1px solid var(--border-color-base, #aaa); color: inherit; padding:.2em; margin:.5em auto;">
<tr>
<td style="padding-right:4px; padding-left:4px;">[[File:Full-protection-shackle-block.svg|40px|link=COM:P|Protected]]</td>
<td>'''{{{{tSwitch|protected/text}}|text1}} {{#if:{{{1|}}}|{{{{tSwitch|protected/text}}|reason|reason={{{1}}}}}|{{{{tSwitch|protected/text}}|default-reason}}}}'''<br /><span style="font-size:90%;">{{{note|{{{{tSwitch|protected/text}}|text2}} }}}</span></td>
</tr>
</table>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|{{#switch:{{NAMESPACE}}|{{ns:6}}=[[Category:Protected files]]|{{ns:2}}|{{ns:3}}|{{ns:10}}=|[[Category:Protected pages]]}} }}} }}
| templateeditor=
<indicator name="protected">[[File:Template-protection-shackle-brackets 2.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>
| editautopatrolprotected =
<indicator name="protected">[[File:Extended-protection-shackle-account-pro-plus.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text1}}]]</indicator>
| autoconfirmed=
<indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text2}}]]</indicator>
| #default=
{{#ifeq:{{NAMESPACE}}|{{{demo-ns|{{ns:6}}}}}
| {{#switch:{{{demo-upload|{{PROTECTIONLEVEL:upload}}}}}
| sysop=
<indicator name="protected">[[File:Upload-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text3}}]]</indicator>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Upload protected files]]}}} }}
| autoconfirmed=
<indicator name="protected">[[File:Semi-protection-shackle.svg|20px|link=Special:MyLanguage/Commons:Protection policy|{{{{tSwitch|protected/text}}|img-text4}}]]</indicator>
| #default={{ifsandbox|1=|2=
<div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}}
}}
|{{ifsandbox|1=|2=<div class="error">{{{{tSwitch|protected/text}}|error-text}}</div>{{#if:{{{demo-edit|}}}{{{demo-upload|}}}||{{{category|[[Category:Unprotected pages using protection templates]]}}} }}}}
}}
}}<noinclude>
{{documentation}}
</noinclude>
5kmjaainuxuugszozwto8567j5by9zi
Tempilet:Protected/text/en
10
1397
10857
2021-08-11T00:01:10Z
commons>FuzzyBot
0
Updating to match new version of source page
10857
wikitext
text/x-wiki
<languages />
<onlyinclude>{{#switch:{{{1}}}
|text1=This {{namespace}} has been protected
|default-reason=from editing to prevent vandalism.
|reason=because {{{reason}}}.
|text2=Please discuss changes on the [[{{TALKPAGENAME}}|talk page]] or [[COM:AN/P|request unprotection]].
|img-text1=This page is protected against editing.
|img-text2=This page is semi-protected against editing.
|img-text3=This page is protected against reuploading.
|img-text4=This page is semi-protected against reuploading.
|img-text5=This page is template protected against editing.
|error-text=Error: This page is not currently protected. Please [[COM:AN/P|request protection]] or remove the protection template.
}}</onlyinclude>
{{translated tag|protection}}
a8hctd2og10pss98b6165t99nma6npo
10858
10857
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Protected/text/en]]
10857
wikitext
text/x-wiki
<languages />
<onlyinclude>{{#switch:{{{1}}}
|text1=This {{namespace}} has been protected
|default-reason=from editing to prevent vandalism.
|reason=because {{{reason}}}.
|text2=Please discuss changes on the [[{{TALKPAGENAME}}|talk page]] or [[COM:AN/P|request unprotection]].
|img-text1=This page is protected against editing.
|img-text2=This page is semi-protected against editing.
|img-text3=This page is protected against reuploading.
|img-text4=This page is semi-protected against reuploading.
|img-text5=This page is template protected against editing.
|error-text=Error: This page is not currently protected. Please [[COM:AN/P|request protection]] or remove the protection template.
}}</onlyinclude>
{{translated tag|protection}}
a8hctd2og10pss98b6165t99nma6npo
Tempilet:TSwitch
10
1398
10859
2011-07-03T11:55:09Z
commons>Rd232
0
[[Category:Internationalization templates]]
10859
wikitext
text/x-wiki
{{{1}}}/{{#ifexist:Template:{{{1}}}/{{int:lang}}|{{int:lang}}|{{CONTENTLANG}}}}<noinclude>
{{documentation}}
[[Category:Internationalization templates]]
</noinclude>
fspzjhnvtdgna6dqto4p5wevtobyfgc
10860
10859
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:TSwitch]]
10859
wikitext
text/x-wiki
{{{1}}}/{{#ifexist:Template:{{{1}}}/{{int:lang}}|{{int:lang}}|{{CONTENTLANG}}}}<noinclude>
{{documentation}}
[[Category:Internationalization templates]]
</noinclude>
fspzjhnvtdgna6dqto4p5wevtobyfgc
Tempilet:Heavily used template
10
1399
10861
2024-08-08T12:59:16Z
commons>Jarekt
0
change {{autotranslate}} template to the module call
10861
wikitext
text/x-wiki
<!--
-->{{#ifeq:{{NAMESPACE}}|Module<!--
-->|{{error|This template is being used in the wrong namespace. Use {{tl|Heavily used module}} instead!}}<!--
-->|<!--
-->{{#invoke:Autotranslate|autotranslate<!--
-->|1 = {{{1|Template talk:{{#titleparts:{{PAGENAME}}|1|1}}}}}<!--
-->|2 = {{#if:{{{2|}}}|{{{2|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}<!--
-->|edit=<!--
-->{{#if:{{{edit|}}}<!--
-->|: [''{{Edit-int|{{{2|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}}/sandbox}}'']<!--
-->}}<!--
-->|very={{{3|}}}<!--
-->|base=Heavily used template<!--
-->}}<!--
-->}}<includeonly>{{#ifeq:{{SUBJECTPAGENAME}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}<!--
-->|{{#if:{{{3|}}}|[[Category:Very heavily used templates| ]]|[[Category:Heavily used templates]]}}}}</includeonly><noinclude>
{{documentation}}
</noinclude>
dj1tjkrpisagz8khk0e0bwfkxb6qyvy
10862
10861
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Heavily_used_template]]
10861
wikitext
text/x-wiki
<!--
-->{{#ifeq:{{NAMESPACE}}|Module<!--
-->|{{error|This template is being used in the wrong namespace. Use {{tl|Heavily used module}} instead!}}<!--
-->|<!--
-->{{#invoke:Autotranslate|autotranslate<!--
-->|1 = {{{1|Template talk:{{#titleparts:{{PAGENAME}}|1|1}}}}}<!--
-->|2 = {{#if:{{{2|}}}|{{{2|}}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}<!--
-->|edit=<!--
-->{{#if:{{{edit|}}}<!--
-->|: [''{{Edit-int|{{{2|{{SUBJECTSPACE}}:{{BASEPAGENAME}}}}}/sandbox}}'']<!--
-->}}<!--
-->|very={{{3|}}}<!--
-->|base=Heavily used template<!--
-->}}<!--
-->}}<includeonly>{{#ifeq:{{SUBJECTPAGENAME}}|{{SUBJECTSPACE}}:{{BASEPAGENAME}}<!--
-->|{{#if:{{{3|}}}|[[Category:Very heavily used templates| ]]|[[Category:Heavily used templates]]}}}}</includeonly><noinclude>
{{documentation}}
</noinclude>
dj1tjkrpisagz8khk0e0bwfkxb6qyvy
Tempilet:Heavily used template/en
10
1400
10863
2021-11-17T19:29:00Z
commons>NguoiDungKhongDinhDanh
0
+ topicon
10863
wikitext
text/x-wiki
{{Heavily used template/layout
|text='''Note:''' This {{lc:{{NAMESPACE}}}} is used on a {{#if:{{{very|}}}|'''great''' }}lot of pages. In order not to put too much load on the servers, edits should be kept to a bare minimum. Please '''discuss proposed changes on [[{{TALKPAGENAME}}|the talk page]]''' first.
{{#ifexist:{{{2|}}}/sandbox|Afterwards, changes can '''initially''' be done at and tested with [[{{{2|}}}/sandbox]]{{{edit|}}}.}}
|small=
* Editing a {{lc:{{NAMESPACE}}}} causes '''all pages that use the {{lc:{{NAMESPACE}}}} to be re-rendered'''. If the {{lc:{{NAMESPACE}}}} is used often, this can put a lot of load on the servers since it fills up the [[mw:Manual:Job queue|job queue]].
* Keep in mind that templates that are used on file description pages also '''show up on other wikis'''.
|autoconfirmed = * This page is semi-protected from editing to prevent vandalism. Only established users can edit it.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-silver-medium.svg|20px|link=Commons:Page protection|This page is semi-protected against editing.]]</div>
|templateeditor = * This page is template-protected from editing to prevent vandalism. Only template editors and administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-darkred.svg|20px|link=Commons:Page protection|This page is template-protected against editing.]]</div>
|sysop = * This page has been protected from editing to prevent vandalism. Only administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock.svg|20px|link=Commons:Page protection|This page is protected against editing.]]</div>
|lang=en
}}<noinclude>
{{Translated tag|marker}}
</noinclude>
nl57z9m7uf58flj38kqeosatzfm5l6s
10864
10863
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Heavily_used_template/en]]
10863
wikitext
text/x-wiki
{{Heavily used template/layout
|text='''Note:''' This {{lc:{{NAMESPACE}}}} is used on a {{#if:{{{very|}}}|'''great''' }}lot of pages. In order not to put too much load on the servers, edits should be kept to a bare minimum. Please '''discuss proposed changes on [[{{TALKPAGENAME}}|the talk page]]''' first.
{{#ifexist:{{{2|}}}/sandbox|Afterwards, changes can '''initially''' be done at and tested with [[{{{2|}}}/sandbox]]{{{edit|}}}.}}
|small=
* Editing a {{lc:{{NAMESPACE}}}} causes '''all pages that use the {{lc:{{NAMESPACE}}}} to be re-rendered'''. If the {{lc:{{NAMESPACE}}}} is used often, this can put a lot of load on the servers since it fills up the [[mw:Manual:Job queue|job queue]].
* Keep in mind that templates that are used on file description pages also '''show up on other wikis'''.
|autoconfirmed = * This page is semi-protected from editing to prevent vandalism. Only established users can edit it.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-silver-medium.svg|20px|link=Commons:Page protection|This page is semi-protected against editing.]]</div>
|templateeditor = * This page is template-protected from editing to prevent vandalism. Only template editors and administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock-darkred.svg|20px|link=Commons:Page protection|This page is template-protected against editing.]]</div>
|sysop = * This page has been protected from editing to prevent vandalism. Only administrators can edit it. Get their attention by placing {{tl|edit protected}} at the {{#if:{{{1|}}}|[[{{{1}}}|talk page]]|talk page}}.<div class="topicon" id="protected-icon" style="display:none; right:10px;">[[File:Padlock.svg|20px|link=Commons:Page protection|This page is protected against editing.]]</div>
|lang=en
}}<noinclude>
{{Translated tag|marker}}
</noinclude>
nl57z9m7uf58flj38kqeosatzfm5l6s
Tempilet:Heavily used template/layout
10
1401
10865
2024-07-16T15:25:48Z
commons>Ebrahim
0
make the border color better in night mode using nearest color in wmf palette
10865
wikitext
text/x-wiki
{{Mbox
|type = query
|image = {{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}}
|text = {{{text|empty}}}
<div style="font-size:0.9em;">
{{{small|}}}
{{#switch:{{PROTECTIONLEVEL:edit}}
|autoconfirmed={{{autoconfirmed|}}}
|templateeditor={{{templateeditor|{{{temp|}}}}}}
|sysop={{{sysop|}}}
}}</div>
|width = 80%
|style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start
|lang = {{{lang|}}}
}}<noinclude>
[[Category:Layout templates]]
</noinclude>
54bgmqbn1hbfytkn4b99uyvlkkou86u
10866
10865
2026-08-25T23:38:35Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Heavily_used_template/layout]]
10865
wikitext
text/x-wiki
{{Mbox
|type = query
|image = {{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}}
|text = {{{text|empty}}}
<div style="font-size:0.9em;">
{{{small|}}}
{{#switch:{{PROTECTIONLEVEL:edit}}
|autoconfirmed={{{autoconfirmed|}}}
|templateeditor={{{templateeditor|{{{temp|}}}}}}
|sysop={{{sysop|}}}
}}</div>
|width = 80%
|style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start
|lang = {{{lang|}}}
}}<noinclude>
[[Category:Layout templates]]
</noinclude>
54bgmqbn1hbfytkn4b99uyvlkkou86u
Tempilet:Edit-int
10
1402
10879
2019-06-26T10:43:51Z
commons>Verdy p
0
move to doc subpage
10879
wikitext
text/x-wiki
{{Custom edit|{{{1|{{FULLPAGENAME}}}}}|{{lcfirst:{{int:edit}}}}|section={{{section|}}}|editintro={{{editintro|}}}|preload={{{preload|}}}|preloadtitle={{{preloadtitle|}}}|oldid={{{oldid|}}}}}<noinclude>{{Documentation}}</noinclude>
sdllwa20qlvcdt1botd6c7fetn18sai
10880
10879
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Edit-int]]
10879
wikitext
text/x-wiki
{{Custom edit|{{{1|{{FULLPAGENAME}}}}}|{{lcfirst:{{int:edit}}}}|section={{{section|}}}|editintro={{{editintro|}}}|preload={{{preload|}}}|preloadtitle={{{preloadtitle|}}}|oldid={{{oldid|}}}}}<noinclude>{{Documentation}}</noinclude>
sdllwa20qlvcdt1botd6c7fetn18sai
Tempilet:Created with Unknown tool
10
1403
10883
2020-10-29T07:25:31Z
commons>DemonDays64
0
Moved that page
10883
wikitext
text/x-wiki
#REDIRECT [[Template:Created with other tool]]
[[Category:SVG created with ... templates|Unknown]]
dmhnt4bj1kwcf0kmw3zjsw6bkc8bk9c
10884
10883
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Unknown_tool]]
10883
wikitext
text/x-wiki
#REDIRECT [[Template:Created with other tool]]
[[Category:SVG created with ... templates|Unknown]]
dmhnt4bj1kwcf0kmw3zjsw6bkc8bk9c
Tempilet:Created with other tool
10
1404
10885
2024-08-09T23:48:08Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10885
wikitext
text/x-wiki
{{#ifexpr:{{#if:{{{name|}}}{{{tool name|}}}|1|0}}*{{#ifexist:Template:Created with {{{name|}}}{{{tool name|}}}|1|0}}<!--
-exists-
-->|{{Created with {{{name|}}}{{{tool name|}}}|{{{1|}}}|{{{2|}}}|err={{{err|}}}|more={{{more|}}}|cat={{{cat|}}}<!--
-->|sub={{{sub|}}}|key={{{sort|{{{key|{{{sortkey|}}}}}}}}}|width={{{width|}}}|style={{{style|}}}<!--
-->|topic={{{topic|}}}|iconsize={{{iconsize|}}}<!--
-->|vw={{{vw|}}}{{{vwidth|}}}{{{width|}}}|vs={{{vs|}}}{{{vstyle|}}}{{{style|}}}|vt={{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}<!--
-->|vo={{{vo|}}}{{{vopt|}}}{{{opt|}}}|vc={{{vc|{{{vcat|}}}}}}<!--
-->|code={{{code|}}}{{{source|}}}{{{c1|}}}|title={{{title|}}}{{{h1|}}}|syntax={{{syntax|}}}{{{l1|}}}<!--
-->|format={{{format|}}}{{{f1|}}}|collapse={{{collapse|}}}{{{s1|}}}|expl={{{expl|}}}{{{e1|}}}|n1={{{n1|}}}|d1={{{d1|}}}<!--
-->|code2={{{code2|}}}{{{c2|}}}|title2={{{title2|}}}{{{h2|}}}|syntax2={{{syntax2|}}}{{{l2|}}}<!--
-->|format2={{{format2|}}}{{{f2|}}}|collapse2={{{collapse2|}}}{{{s2|}}}|expl2={{{expl2|}}}{{{e2|}}}|n2={{{n2|}}}|d2={{{d2|}}}<!--
-->|code3={{{code3|}}}{{{c3|}}}|title3={{{title3|}}}{{{h3|}}}|syntax3={{{syntax3|}}}{{{l3|}}}<!--
-->|format3={{{format3|}}}{{{f3|}}}|collapse3={{{collapse3|}}}{{{s3|}}}|expl3={{{expl3|}}}{{{e3|}}}|n3={{{n3|}}}|d3={{{d3|}}}<!--
-->}}[[Category:CommonsOTM]]<!--
-does not exist-
-->|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#if:{{{vstyle|}}}|{{{vstyle}}}|{{{vs|}}}{{{style|}}}}}<!--
-->|{{{vw|}}}{{{vwidth|}}}{{{width|}}}|{{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}|{{{vo|}}}{{{vopt|}}}{{{opt|}}}<!--
-->|{{{topic|}}}|{{{vc|}}}{{{vcat|}}}|lang={{{lang|}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p|s|t|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{65|}}}|{{{65}}}|{{#if:{{{logo|}}}|{{{logo}}}|{{#ifeq:{{lc:{{{other}}}}}|u|Unknown|OtherTool}} logo<!--
-->{{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!--
-->|0=-V|-1=-I|-I}}|{{#ifeq:{{{2|{{{1}}}}}}|v|-V}}}}.svg}} }}
|3=Other tools
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{#if:{{{cat|}}}{{{category|}}}|{{{cat|}}}{{{category|}}}<!--
-->|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!--
-->|-1={{Igen/cat|Uncheckable SVG created with Other tools<!--
-->{{{sub|}}}<!-- only very few subcategories !
-->}}<!--
-->|={{#switch:{{{2|}}}|v|n|s|t=|{{#switch:{{{1}}}|v|n|s|t=<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#switch:{{#invoke:Igenmod|newfile}}<!--
-->|s={{Igen/cat|Unspecified SVG created with Other tools}}<!-- {{#switch:{{{topic|}}} ...}}
-->|newcat={{Igen/cat|Unspecified new SVG created with Other tools}}<!--
-->}}}}}}}}}}}}
|8=
|9={{{sort|}}}{{{key|}}}{{{sortkey|}}}
|10={{{subc|}}}{{{sub|}}}{{{subcat|}}}{{{subcategory|}}}
|11={{{err|}}}{{{errors|}}}{{{errnum|}}}
|12={{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#ifeq:{{{err|}}}{{{errors|}}}{{{errnum|}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S|t=s}}|{{#switch:{{{1}}}|v=V|n=N|s=S|t=s<!-- "t" just for Test (Igen/top)
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|}}}{{{vopt|}}}{{{opt|}}}
|14={{{topic|}}}
|15={{lc:{{{other}}}}}
|16={{#if:{{{name|}}}{{{tool name|}}}|{{{name|}}}{{{tool name|}}}<!--
-->|{{I18n/othertool|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}}|other={{#ifeq:{{{other}}}|u||o}}<!--
-->|svg={{#if:{{{2|}}}|{{#switch:{{{2}}}|v|s=SVG|{{#switch:{{{1}}}|v|s=SVG<!--
-->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|SVG}}}}}}}}}}}}
|17={{#if:{{{iconsize|}}}|{{{iconsize}}}}}
|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}}
|base=Created with ...}}}}<noinclude>
{{SVG created with/doc|opt=yes|I18dot=|vopttext=s|shortkey=Ot|shorthand=Other tool|shorttext=, and always specify <code>name=</code> or <code>tool name=</code><br />
;Maintenance:<small>If an ''existing template'' is specified by <code>tool name=</code>, that template will be used instead:</small><br />"Created with <code>{{{name}}}</code>" ''or'' "Created with <code>{{{tool name}}}</code>" (case sensitive)<br />In this case the file will be categorized into maintenance category [[:Category:CommonsOTM|CommonsOTM]].|catnam=Created with Other tools|code=yes|n=yes|igen=O|igennote= (or "U" for unknown tools, with parameter <code>other=U</code>) |cattext=}}
</noinclude>
7ffooorzwl4x8lvq884ziy0vlbs64mt
10886
10885
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_other_tool]]
10885
wikitext
text/x-wiki
{{#ifexpr:{{#if:{{{name|}}}{{{tool name|}}}|1|0}}*{{#ifexist:Template:Created with {{{name|}}}{{{tool name|}}}|1|0}}<!--
-exists-
-->|{{Created with {{{name|}}}{{{tool name|}}}|{{{1|}}}|{{{2|}}}|err={{{err|}}}|more={{{more|}}}|cat={{{cat|}}}<!--
-->|sub={{{sub|}}}|key={{{sort|{{{key|{{{sortkey|}}}}}}}}}|width={{{width|}}}|style={{{style|}}}<!--
-->|topic={{{topic|}}}|iconsize={{{iconsize|}}}<!--
-->|vw={{{vw|}}}{{{vwidth|}}}{{{width|}}}|vs={{{vs|}}}{{{vstyle|}}}{{{style|}}}|vt={{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}<!--
-->|vo={{{vo|}}}{{{vopt|}}}{{{opt|}}}|vc={{{vc|{{{vcat|}}}}}}<!--
-->|code={{{code|}}}{{{source|}}}{{{c1|}}}|title={{{title|}}}{{{h1|}}}|syntax={{{syntax|}}}{{{l1|}}}<!--
-->|format={{{format|}}}{{{f1|}}}|collapse={{{collapse|}}}{{{s1|}}}|expl={{{expl|}}}{{{e1|}}}|n1={{{n1|}}}|d1={{{d1|}}}<!--
-->|code2={{{code2|}}}{{{c2|}}}|title2={{{title2|}}}{{{h2|}}}|syntax2={{{syntax2|}}}{{{l2|}}}<!--
-->|format2={{{format2|}}}{{{f2|}}}|collapse2={{{collapse2|}}}{{{s2|}}}|expl2={{{expl2|}}}{{{e2|}}}|n2={{{n2|}}}|d2={{{d2|}}}<!--
-->|code3={{{code3|}}}{{{c3|}}}|title3={{{title3|}}}{{{h3|}}}|syntax3={{{syntax3|}}}{{{l3|}}}<!--
-->|format3={{{format3|}}}{{{f3|}}}|collapse3={{{collapse3|}}}{{{s3|}}}|expl3={{{expl3|}}}{{{e3|}}}|n3={{{n3|}}}|d3={{{d3|}}}<!--
-->}}[[Category:CommonsOTM]]<!--
-does not exist-
-->|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#if:{{{vstyle|}}}|{{{vstyle}}}|{{{vs|}}}{{{style|}}}}}<!--
-->|{{{vw|}}}{{{vwidth|}}}{{{width|}}}|{{{vt|}}}{{{vtxt|}}}{{{vtext|.}}}|{{{vo|}}}{{{vopt|}}}{{{opt|}}}<!--
-->|{{{topic|}}}|{{{vc|}}}{{{vcat|}}}|lang={{{lang|}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p|s|t|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{65|}}}|{{{65}}}|{{#if:{{{logo|}}}|{{{logo}}}|{{#ifeq:{{lc:{{{other}}}}}|u|Unknown|OtherTool}} logo<!--
-->{{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!--
-->|0=-V|-1=-I|-I}}|{{#ifeq:{{{2|{{{1}}}}}}|v|-V}}}}.svg}} }}
|3=Other tools
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{#if:{{{cat|}}}{{{category|}}}|{{{cat|}}}{{{category|}}}<!--
-->|{{#switch:{{{err|}}}{{{errors|}}}{{{errnum|}}}<!--
-->|-1={{Igen/cat|Uncheckable SVG created with Other tools<!--
-->{{{sub|}}}<!-- only very few subcategories !
-->}}<!--
-->|={{#switch:{{{2|}}}|v|n|s|t=|{{#switch:{{{1}}}|v|n|s|t=<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#switch:{{#invoke:Igenmod|newfile}}<!--
-->|s={{Igen/cat|Unspecified SVG created with Other tools}}<!-- {{#switch:{{{topic|}}} ...}}
-->|newcat={{Igen/cat|Unspecified new SVG created with Other tools}}<!--
-->}}}}}}}}}}}}
|8=
|9={{{sort|}}}{{{key|}}}{{{sortkey|}}}
|10={{{subc|}}}{{{sub|}}}{{{subcat|}}}{{{subcategory|}}}
|11={{{err|}}}{{{errors|}}}{{{errnum|}}}
|12={{#if:{{{err|}}}{{{errors|}}}{{{errnum|}}}|{{#ifeq:{{{err|}}}{{{errors|}}}{{{errnum|}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S|t=s}}|{{#switch:{{{1}}}|v=V|n=N|s=S|t=s<!-- "t" just for Test (Igen/top)
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|}}}{{{vopt|}}}{{{opt|}}}
|14={{{topic|}}}
|15={{lc:{{{other}}}}}
|16={{#if:{{{name|}}}{{{tool name|}}}|{{{name|}}}{{{tool name|}}}<!--
-->|{{I18n/othertool|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}}|other={{#ifeq:{{{other}}}|u||o}}<!--
-->|svg={{#if:{{{2|}}}|{{#switch:{{{2}}}|v|s=SVG|{{#switch:{{{1}}}|v|s=SVG<!--
-->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|SVG}}}}}}}}}}}}
|17={{#if:{{{iconsize|}}}|{{{iconsize}}}}}
|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:lang}}}}
|base=Created with ...}}}}<noinclude>
{{SVG created with/doc|opt=yes|I18dot=|vopttext=s|shortkey=Ot|shorthand=Other tool|shorttext=, and always specify <code>name=</code> or <code>tool name=</code><br />
;Maintenance:<small>If an ''existing template'' is specified by <code>tool name=</code>, that template will be used instead:</small><br />"Created with <code>{{{name}}}</code>" ''or'' "Created with <code>{{{tool name}}}</code>" (case sensitive)<br />In this case the file will be categorized into maintenance category [[:Category:CommonsOTM|CommonsOTM]].|catnam=Created with Other tools|code=yes|n=yes|igen=O|igennote= (or "U" for unknown tools, with parameter <code>other=U</code>) |cattext=}}
</noinclude>
7ffooorzwl4x8lvq884ziy0vlbs64mt
Tempilet:I18n/othertool
10
1405
10887
2026-07-18T00:54:11Z
commons>Kontributor 2K
0
retour
10887
wikitext
text/x-wiki
<includeonly>{{langSwitch|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:Lang}}}}
|bn={{#if:{{{other}}}|আরেকটি|একটি অজানা}} {{{svg|}}} সরঞ্জাম
|de=einem {{#if:{{{other|}}}|anderen|unbekannten}} {{#if:{{{svg|}}}|{{{svg|}}}-}}Editor
|en={{#if:{{{other|}}}|another|an unknown}} {{{svg|}}} tool
|es=una herramienta {{{svg|}}} {{#if:{{{other|}}}|distinta|desconocida}}
|fr=un {{#if:{{{other|}}}|autre|}} logiciel {{{svg|}}} {{#if:{{{other|}}}||inconnu}}
|it=un {{#if:{{{other|}}}|altro|}} programma {{{svg|}}} {{#if:{{{other|}}}||ignoto}}
|ja={{#if:{{{other|}}}|別|不明}}の{{{svg|}}}ツール
|mk={{#if:{{{other|}}}|друга|непозната}} {{{svg|}}} алатка
|nl=een {{#if:{{{other|}}}|andere|onbekende}} {{#if:{{{svg|}}}|{{{svg|}}}-}}editor
|pt=um {{#if:{{{other|}}}|outro|desconhecido}} {{{svg|}}} programa
|ru={{#if:{{{other|}}}|другой|неизвестной}} {{{svg|}}} программе
|sl={{#if:{{{other|}}}|drugim|neznanim}} {{{svg|}}} orodjem
|tr={{#if:{{{other|}}}|başka bir|bilinmeyen bir}} {{{svg|}}} aracı
|zh-hans={{#if:{{{other|}}}|其他|未知}}{{{svg|}}}工具
|zh-hant={{#if:{{{other|}}}|其他|不明}}{{{svg|}}}工具
<!-- add more languages -->
|default=''{{#if:{{{other|}}}|other|unknown}} tool''
}}</includeonly><noinclude>
<!-- {{documentation|template:i18n/doc}} -->
{{LangSwitch
|en=
This translation template for {{T2|Created with Other tool}} needs 3 parameters:
# <code>lang</code>: default is <code>int:Lang</code>
# <code>other</code>: either "o" for other, or empty for unknown
# <code>svg</code>: either "SVG", or empty if not a vector image
|ja=
この,{{T2|Created with Other tool}}の翻訳雛形は三つの引数を取ります:
# <code>lang</code>: 既定は{{code|int:Lang}}です。
# <code>other</code>: その他のツールの場合は“o”,ツールが不明な場合は空。
# <code>svg</code>: “SVG”,ベクタ図形でなければ空。
|sl=
Ta prevodna predloga za {{T2|Created with Other tool}} potrebuje 3 parametre:
# <code>lang</code>: privzeto je <code>int:Lang</code>
# <code>other</code>: bodisi »o« (other) za drugo ali prazno za neznano
# <code>svg</code>: bodisi »sVG« ali prazno, če ne gre za vektorsko sliko
|tr=
{{T2|Created with Other tool}} için bu çeviri şablonu 3 parametreye ihtiyaç duyar:
# <code>lang</code>: varsayılan <code>int:Lang</code>
# <code>other</code>: diğeri için "o" veya bilinmeyen için boş
# <code>svg</code>: ya "SVG" ya da vektör görüntüsü değilse boş
}}
[[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]
</noinclude>
0rhezw34oepips02ebipbwupmlaejxt
10888
10887
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:I18n/othertool]]
10887
wikitext
text/x-wiki
<includeonly>{{langSwitch|lang={{#if:{{{lang|}}}|{{{lang}}}|{{int:Lang}}}}
|bn={{#if:{{{other}}}|আরেকটি|একটি অজানা}} {{{svg|}}} সরঞ্জাম
|de=einem {{#if:{{{other|}}}|anderen|unbekannten}} {{#if:{{{svg|}}}|{{{svg|}}}-}}Editor
|en={{#if:{{{other|}}}|another|an unknown}} {{{svg|}}} tool
|es=una herramienta {{{svg|}}} {{#if:{{{other|}}}|distinta|desconocida}}
|fr=un {{#if:{{{other|}}}|autre|}} logiciel {{{svg|}}} {{#if:{{{other|}}}||inconnu}}
|it=un {{#if:{{{other|}}}|altro|}} programma {{{svg|}}} {{#if:{{{other|}}}||ignoto}}
|ja={{#if:{{{other|}}}|別|不明}}の{{{svg|}}}ツール
|mk={{#if:{{{other|}}}|друга|непозната}} {{{svg|}}} алатка
|nl=een {{#if:{{{other|}}}|andere|onbekende}} {{#if:{{{svg|}}}|{{{svg|}}}-}}editor
|pt=um {{#if:{{{other|}}}|outro|desconhecido}} {{{svg|}}} programa
|ru={{#if:{{{other|}}}|другой|неизвестной}} {{{svg|}}} программе
|sl={{#if:{{{other|}}}|drugim|neznanim}} {{{svg|}}} orodjem
|tr={{#if:{{{other|}}}|başka bir|bilinmeyen bir}} {{{svg|}}} aracı
|zh-hans={{#if:{{{other|}}}|其他|未知}}{{{svg|}}}工具
|zh-hant={{#if:{{{other|}}}|其他|不明}}{{{svg|}}}工具
<!-- add more languages -->
|default=''{{#if:{{{other|}}}|other|unknown}} tool''
}}</includeonly><noinclude>
<!-- {{documentation|template:i18n/doc}} -->
{{LangSwitch
|en=
This translation template for {{T2|Created with Other tool}} needs 3 parameters:
# <code>lang</code>: default is <code>int:Lang</code>
# <code>other</code>: either "o" for other, or empty for unknown
# <code>svg</code>: either "SVG", or empty if not a vector image
|ja=
この,{{T2|Created with Other tool}}の翻訳雛形は三つの引数を取ります:
# <code>lang</code>: 既定は{{code|int:Lang}}です。
# <code>other</code>: その他のツールの場合は“o”,ツールが不明な場合は空。
# <code>svg</code>: “SVG”,ベクタ図形でなければ空。
|sl=
Ta prevodna predloga za {{T2|Created with Other tool}} potrebuje 3 parametre:
# <code>lang</code>: privzeto je <code>int:Lang</code>
# <code>other</code>: bodisi »o« (other) za drugo ali prazno za neznano
# <code>svg</code>: bodisi »sVG« ali prazno, če ne gre za vektorsko sliko
|tr=
{{T2|Created with Other tool}} için bu çeviri şablonu 3 parametreye ihtiyaç duyar:
# <code>lang</code>: varsayılan <code>int:Lang</code>
# <code>other</code>: diğeri için "o" veya bilinmeyen için boş
# <code>svg</code>: ya "SVG" ya da vektör görüntüsü değilse boş
}}
[[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]
</noinclude>
0rhezw34oepips02ebipbwupmlaejxt
Tempilet:Ifsandbox
10
1406
10889
2024-05-26T04:41:12Z
commons>Verdy p
0
clarify unneeded comment marks, and minimal structural indendation
10889
wikitext
text/x-wiki
{{#ifeq: {{lc:{{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }} | -{{{m|1}}} }}/sandbox}} | {{lc:{{ {{UC:{{{b|}}}}}PAGENAME}} }}
| {{#switch: {{{1|}}}
|n = {{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }}| -{{{m|1}}} }}
|doc = {{#titleparts: {{SUBJECTPAGENAME}} | -1 }}/doc
|#default = {{{1|}}}
}}
| {{#switch: {{{1|}}}
|n = {{ {{UC:{{{b|}}}}}PAGENAME }}
|doc = {{SUBJECTPAGENAME}}/doc
|#default = {{{2|}}}
}}
}}<noinclude>{{Documentation|{{Ifsandbox|doc}}}}</noinclude>
qwzalngu9fma699l34t6biep7q8ndb6
10890
10889
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Ifsandbox]]
10889
wikitext
text/x-wiki
{{#ifeq: {{lc:{{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }} | -{{{m|1}}} }}/sandbox}} | {{lc:{{ {{UC:{{{b|}}}}}PAGENAME}} }}
| {{#switch: {{{1|}}}
|n = {{#titleparts: {{ {{UC:{{{b|}}}}}PAGENAME }}| -{{{m|1}}} }}
|doc = {{#titleparts: {{SUBJECTPAGENAME}} | -1 }}/doc
|#default = {{{1|}}}
}}
| {{#switch: {{{1|}}}
|n = {{ {{UC:{{{b|}}}}}PAGENAME }}
|doc = {{SUBJECTPAGENAME}}/doc
|#default = {{{2|}}}
}}
}}<noinclude>{{Documentation|{{Ifsandbox|doc}}}}</noinclude>
qwzalngu9fma699l34t6biep7q8ndb6
Tempilet:Commonist
10
1407
10891
2024-08-09T23:46:04Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10891
wikitext
text/x-wiki
<!-- {{#if:{{{err|}}}|{{clr}}}} -->{{#invoke:Autotranslate|autotranslate
|1={{{1|}}}
|2={{#switch:{{{logo}}}|none|n|-= |=Commonist.svg|{{{logo|}}}}}
|3=Commonist
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{#if:{{{err|}}}|{{#ifeq:{{{err}}}|0||{{{err|0}}}}}}}
|8={{{size|}}}
|9={{{topic|}}}
|10={{{iconsize|}}}
|11={{Ifsvg|SVG}}
|base=Commonist}}{{iffile|{{#switch:{{{category|↗}}}|↗|=[[Category:Uploaded with Commonist<!--
-->{{#switch:{{{sub|↗}}}|↗|=<!-- not defined, empty: check "user"
-->{{#switch:{{{user}}}|TUBS|TUBS|TUBS=: {{{user}}}}}<!-- subcategorize with some users
-->|{{#if:{{{sub|}}}|{{#invoke:Char|subst|{{{sub}}}}}|{{#ifeq:{{{err|0}}}|0||:Invalid}}}}}}]]<!-- use "sub" when defined.
-->|{{#switch:{{{category|↗}}}|↗|-|=|{{#ifeq:{{lc:{{padleft:|5|{{{category}}}}}}}|[[cat|{{{category}}}<!--
-->|[[Category:{{{category}}}]]}}}}}}}}<noinclude>
{{Documentation}}
</noinclude>
0dxrxldmhto3gt4m2ijj3lzsy0l1r1g
10892
10891
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Commonist]]
10891
wikitext
text/x-wiki
<!-- {{#if:{{{err|}}}|{{clr}}}} -->{{#invoke:Autotranslate|autotranslate
|1={{{1|}}}
|2={{#switch:{{{logo}}}|none|n|-= |=Commonist.svg|{{{logo|}}}}}
|3=Commonist
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{#if:{{{err|}}}|{{#ifeq:{{{err}}}|0||{{{err|0}}}}}}}
|8={{{size|}}}
|9={{{topic|}}}
|10={{{iconsize|}}}
|11={{Ifsvg|SVG}}
|base=Commonist}}{{iffile|{{#switch:{{{category|↗}}}|↗|=[[Category:Uploaded with Commonist<!--
-->{{#switch:{{{sub|↗}}}|↗|=<!-- not defined, empty: check "user"
-->{{#switch:{{{user}}}|TUBS|TUBS|TUBS=: {{{user}}}}}<!-- subcategorize with some users
-->|{{#if:{{{sub|}}}|{{#invoke:Char|subst|{{{sub}}}}}|{{#ifeq:{{{err|0}}}|0||:Invalid}}}}}}]]<!-- use "sub" when defined.
-->|{{#switch:{{{category|↗}}}|↗|-|=|{{#ifeq:{{lc:{{padleft:|5|{{{category}}}}}}}|[[cat|{{{category}}}<!--
-->|[[Category:{{{category}}}]]}}}}}}}}<noinclude>
{{Documentation}}
</noinclude>
0dxrxldmhto3gt4m2ijj3lzsy0l1r1g
Tempilet:Commonist/en
10
1408
10893
2022-07-10T18:53:32Z
commons>Sarang
0
expansion
10893
wikitext
text/x-wiki
{{Created with/layout
|logo={{{2|Commonist.svg}}}
|iconsize=
|width={{{5|}}}
|style={{{6|}}}
|text=This {{#ifeq:{{{8}}}|big|''large'' }}{{#if:{{{7|}}}|W3C-invalid}} {{{11|}}} {{#if:{{{9|}}}|{{Igen/top|{{{9}}}|file|lang=en}}|file}} was uploaded {{#if:{{{1|}}}|by {{{1}}} }} with {{#ifeq:{{{3|Commonist}}}|Commonist|[[Commons:Commonist|Commonist]]|[[{{{3|}}}]]}}{{#if:{{{4|}}}|{{{4}}}|.}}
|lang=en
}}
dmei9rgzpi0hf74f6732r3mjs9g9no4
10894
10893
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Commonist/en]]
10893
wikitext
text/x-wiki
{{Created with/layout
|logo={{{2|Commonist.svg}}}
|iconsize=
|width={{{5|}}}
|style={{{6|}}}
|text=This {{#ifeq:{{{8}}}|big|''large'' }}{{#if:{{{7|}}}|W3C-invalid}} {{{11|}}} {{#if:{{{9|}}}|{{Igen/top|{{{9}}}|file|lang=en}}|file}} was uploaded {{#if:{{{1|}}}|by {{{1}}} }} with {{#ifeq:{{{3|Commonist}}}|Commonist|[[Commons:Commonist|Commonist]]|[[{{{3|}}}]]}}{{#if:{{{4|}}}|{{{4}}}|.}}
|lang=en
}}
dmei9rgzpi0hf74f6732r3mjs9g9no4
Tempilet:Created with MetaPost
10
1409
10895
2025-12-25T08:57:34Z
commons>Sebastian Wallroth
0
Q1265836
10895
wikitext
text/x-wiki
{{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1265836|property=P154}}}}
|3=MetaPost
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|16={{Label|Q1265836}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shorthand=Metapost|igen=M|code=3|opt=yes|n=yes|inval=n}}
</noinclude>
7rnbgi68e0vop12tq00l9vl6opva4sb
10896
10895
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_MetaPost]]
10895
wikitext
text/x-wiki
{{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1265836|property=P154}}}}
|3=MetaPost
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|16={{Label|Q1265836}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shorthand=Metapost|igen=M|code=3|opt=yes|n=yes|inval=n}}
</noinclude>
7rnbgi68e0vop12tq00l9vl6opva4sb
Tempilet:Colorbox
10
1410
10897
2020-08-17T10:18:15Z
commons>Tuvalkin
0
+{{{style|}}}
10897
wikitext
text/x-wiki
<span style="background-color:{{{1|white}}};border:1px solid darkgray;{{{style|}}}" title={{{title|"{{{1|white}}}"}}}> {{#if:{{{2|}}}|{{#if:{{{3|}}}|[[{{{3}}}|{{{2}}}]]|{{{2}}}}}| }} </span><noinclude>{{documentation}}</noinclude>
aakxzgmi5vecukt1nwc2osraycl9fz4
10898
10897
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Colorbox]]
10897
wikitext
text/x-wiki
<span style="background-color:{{{1|white}}};border:1px solid darkgray;{{{style|}}}" title={{{title|"{{{1|white}}}"}}}> {{#if:{{{2|}}}|{{#if:{{{3|}}}|[[{{{3}}}|{{{2}}}]]|{{{2}}}}}| }} </span><noinclude>{{documentation}}</noinclude>
aakxzgmi5vecukt1nwc2osraycl9fz4
Tempilet:Created with Adobe Illustrator
10
1411
10899
2024-08-09T23:46:19Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10899
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Adobe-yes.svg|Adobe-no.svg}}<!-- valid / invalid
-->|{{#switch:v|{{{2}}}|{{{1}}}=Adobe-yes.svg|<!-- valid
-->|{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|Adobe-un.svg|Adobe-yes.svg}}}}}}}}
|3=Adobe Illustrator
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!--
-->|{{#switch:{{{1}}}|n=N|v=V|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=Adobe|shorthand=Adobe|redirects=Adobe Illustrator, Created with Illustrator|igen=a|n=yes|unspec=y|sandbox=yes}}
</noinclude>
0fiysfmdt51adjgtgn5meafgrnfoqt2
10900
10899
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Adobe_Illustrator]]
10899
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Adobe-yes.svg|Adobe-no.svg}}<!-- valid / invalid
-->|{{#switch:v|{{{2}}}|{{{1}}}=Adobe-yes.svg|<!-- valid
-->|{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|Adobe-un.svg|Adobe-yes.svg}}}}}}}}
|3=Adobe Illustrator
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|{{#if:{{{topic|}}}|{{Igen/sub|{{{topic}}}}}}}}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!--
-->|{{#switch:{{{1}}}|n=N|v=V|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=Adobe|shorthand=Adobe|redirects=Adobe Illustrator, Created with Illustrator|igen=a|n=yes|unspec=y|sandbox=yes}}
</noinclude>
0fiysfmdt51adjgtgn5meafgrnfoqt2
Tempilet:Created with Gnuplot
10
1412
10901
2025-12-24T16:47:47Z
commons>Sebastian Wallroth
0
Q306559
10901
wikitext
text/x-wiki
{{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!--
-->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Gnuplot val.svg|Gnuplot inv.svg}}<!--
-->|{{#switch:v|{{{2}}}|{{{1}}}=Gnuplot val.svg||Lissajous small.svg}}}}}}
|3=Gnuplot
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}|plot}}
|16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q306559}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{Label|Q306559}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q306559}}|<!--
-->{{W|Gnuplot|Gnu}}{{Plainlinks|1=https://validator.w3.org/check<!--
--><includeonly>?uri={{urlencode:{{canonicalurl:Special:Filepath/{{PAGENAME}}}}}}<!--
-->&doctype=SVG+1.1&ss=1#source</includeonly>|2=''plot''}}}}}}}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
<br>
<div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center">
[[File:Dialog-go-hand-ltr.svg|32px|left]][[File:Lissajous small.svg|32px|right]]
The template {{Tl|Created with Gnuplot}} (shorthand:{{Tl|Gnuplot}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/>
* ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|Gnuplot|'''n'''}}
* ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|Gnuplot|'''v'''}} or {{Tld|Gnuplot|2='''err='''##}}
::To allow a swift check for validity, the generated box "This plot was created with gnu''plot''" can be used:
::::the Italic written ''plot'' is a link to the W3C-validator.
::(Of course, this link won't be useful if the file isn't a vector graphic)
</div>
{{SVG created with/doc|shorthand=Gnuplot|top=plot|igen=G|code=3|n=yes|opt=yes|unspec=yes|sub=n|desc={{en|1=Used to mark files created with Gnuplot.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|cattext=<nowiki/>
See otherwise:
* {{Catcont|Gnuplot diagrams|3=*}}
* {{Catcont|Images with Gnuplot source code|3=*}}
* {{Catcont|Gnuplot charts using data from the Australian Bureau of Statistics|3=*}}
:* {{Catcont|Valid SVG created with Gnuplot-AusGovStat|3=*}}
<br>
}}
</noinclude>
junuxu4xvbf9hrkltnavh82b82hwrr5
10902
10901
2026-08-25T23:38:36Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Gnuplot]]
10901
wikitext
text/x-wiki
{{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!--
-->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Gnuplot val.svg|Gnuplot inv.svg}}<!--
-->|{{#switch:v|{{{2}}}|{{{1}}}=Gnuplot val.svg||Lissajous small.svg}}}}}}
|3=Gnuplot
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}|plot}}
|16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q306559}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{Label|Q306559}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q306559}}|<!--
-->{{W|Gnuplot|Gnu}}{{Plainlinks|1=https://validator.w3.org/check<!--
--><includeonly>?uri={{urlencode:{{canonicalurl:Special:Filepath/{{PAGENAME}}}}}}<!--
-->&doctype=SVG+1.1&ss=1#source</includeonly>|2=''plot''}}}}}}}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
<br>
<div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center">
[[File:Dialog-go-hand-ltr.svg|32px|left]][[File:Lissajous small.svg|32px|right]]
The template {{Tl|Created with Gnuplot}} (shorthand:{{Tl|Gnuplot}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/>
* ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|Gnuplot|'''n'''}}
* ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|Gnuplot|'''v'''}} or {{Tld|Gnuplot|2='''err='''##}}
::To allow a swift check for validity, the generated box "This plot was created with gnu''plot''" can be used:
::::the Italic written ''plot'' is a link to the W3C-validator.
::(Of course, this link won't be useful if the file isn't a vector graphic)
</div>
{{SVG created with/doc|shorthand=Gnuplot|top=plot|igen=G|code=3|n=yes|opt=yes|unspec=yes|sub=n|desc={{en|1=Used to mark files created with Gnuplot.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|cattext=<nowiki/>
See otherwise:
* {{Catcont|Gnuplot diagrams|3=*}}
* {{Catcont|Images with Gnuplot source code|3=*}}
* {{Catcont|Gnuplot charts using data from the Australian Bureau of Statistics|3=*}}
:* {{Catcont|Valid SVG created with Gnuplot-AusGovStat|3=*}}
<br>
}}
</noinclude>
junuxu4xvbf9hrkltnavh82b82hwrr5
Tempilet:Created with ArcMap
10
1413
10905
2025-12-16T08:35:15Z
commons>Sebastian Wallroth
0
Q4784993
10905
wikitext
text/x-wiki
{{SVGvalid
|1 = {{{1|}}}
|2 = {{{2|}}}
|3 = {{{err|{{{errors|{{{errnum|}}}}}}}}}
|4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}}
|5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}}
|6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
}}<!--
-->{{#invoke:Autotranslate|autotranslate
|base = Created with ...
|1 = {{#if: {{{2|}}}
| {{{1|}}}
| {{#switch: {{{1|}}}
||v|n|s =
|#default={{{1|}}}
}}
}}
|2 = {{#if: {{{logo|}}}
| {{{logo|}}}
| U+1F30D<!-- showing the Earth globe emoji: Europe, Africa and Western Asia (🌍) -->
}}
|3 = ArcMap
|4 = {{{more|.}}}
|5 = {{{width|}}}
|6 = {{{style|}}}
|7 = {{{cat|{{{category|}}}}}}
|9 = {{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10 = {{#ifeq: {{{sub|}}} | :Maps
|| {{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
}}<!-- unsub -->
|11 = {{{err|{{{errors|{{{errnum|}}}}}}}}}
|12 = {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}}
| {{#ifeq: {{{err|{{{errors|{{{errnum|}}}}}}}}} | 0
| V
| I
}}
| {{#if: {{{2|}}}
| {{#switch:{{{2}}}
|v = V
|n = N
|s = S
}}
| {{#switch:{{{1}}}
|v = V
|n = N
|s = S
|#default = {{#ifeq: {{NAMESPACE}} | File
| {{#invoke:Igenmod|extcode}}
}}
}}
}}
}}<!-- s(SVG) or n(PNG) -->
|13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14 = {{#if: {{{topic|}}}
| {{{topic}}}
| m
}}<!-- default is always "map" -->
|16 = {{Label|Q4784993}}
|17 = 22<!-- iconsize for the Earth globe emoji: U+1F30D showing Europe, Africa and Western Asia (🌍), U+1F30E showing the Americas (🌎), U+1F30F showing Eastern Asia and Australia (🌏), or U+1F310 showing a wireframe (🌐) -->
}}<noinclude>{{SVG created with/doc
|desc = Used to mark files created with {{W|ArcMap|ArcMap}}.
|shorthand = ArcMap
|shortkey = ArcMap
|box = yes
|n = yes
|sub = n
|top = m
|topic = no
|opt = yes
}}</noinclude>
rxtexhfevywy4u4pnnw330dhzjb96ct
10906
10905
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_ArcMap]]
10905
wikitext
text/x-wiki
{{SVGvalid
|1 = {{{1|}}}
|2 = {{{2|}}}
|3 = {{{err|{{{errors|{{{errnum|}}}}}}}}}
|4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}}
|5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}}
|6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
}}<!--
-->{{#invoke:Autotranslate|autotranslate
|base = Created with ...
|1 = {{#if: {{{2|}}}
| {{{1|}}}
| {{#switch: {{{1|}}}
||v|n|s =
|#default={{{1|}}}
}}
}}
|2 = {{#if: {{{logo|}}}
| {{{logo|}}}
| U+1F30D<!-- showing the Earth globe emoji: Europe, Africa and Western Asia (🌍) -->
}}
|3 = ArcMap
|4 = {{{more|.}}}
|5 = {{{width|}}}
|6 = {{{style|}}}
|7 = {{{cat|{{{category|}}}}}}
|9 = {{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10 = {{#ifeq: {{{sub|}}} | :Maps
|| {{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
}}<!-- unsub -->
|11 = {{{err|{{{errors|{{{errnum|}}}}}}}}}
|12 = {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}}
| {{#ifeq: {{{err|{{{errors|{{{errnum|}}}}}}}}} | 0
| V
| I
}}
| {{#if: {{{2|}}}
| {{#switch:{{{2}}}
|v = V
|n = N
|s = S
}}
| {{#switch:{{{1}}}
|v = V
|n = N
|s = S
|#default = {{#ifeq: {{NAMESPACE}} | File
| {{#invoke:Igenmod|extcode}}
}}
}}
}}
}}<!-- s(SVG) or n(PNG) -->
|13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14 = {{#if: {{{topic|}}}
| {{{topic}}}
| m
}}<!-- default is always "map" -->
|16 = {{Label|Q4784993}}
|17 = 22<!-- iconsize for the Earth globe emoji: U+1F30D showing Europe, Africa and Western Asia (🌍), U+1F30E showing the Americas (🌎), U+1F30F showing Eastern Asia and Australia (🌏), or U+1F310 showing a wireframe (🌐) -->
}}<noinclude>{{SVG created with/doc
|desc = Used to mark files created with {{W|ArcMap|ArcMap}}.
|shorthand = ArcMap
|shortkey = ArcMap
|box = yes
|n = yes
|sub = n
|top = m
|topic = no
|opt = yes
}}</noinclude>
rxtexhfevywy4u4pnnw330dhzjb96ct
Tempilet:Created with ChemDraw
10
1414
10907
2024-08-09T23:46:41Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10907
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|ChemDraw icon.svg|ChemDraw inv.svg}}|ChemDraw icon.svg}}}}
|3=ChemDraw
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{#ifeq::Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never come,
-->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}|sf}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=Chemdraw|shorthand=Chemdraw|igen=C|opt=yes|unspec=|n=|vopttext=yes|sub=n|top=sf|topic=no|desc={{Mld
|en=Used to mark files created with {{W|ChemDraw}} or {{W|ChemBioDraw}}
|pt=Utilizada para marcar os ficheiros criados com {{W|ChemDraw||pt}} ou {{W|ChemBioDraw||pt}}}}
addinf=|cattext=<br>'''No subcategorizing''' occurs because ''all'' drawings are of {{C|SVG structural formulas|chemical structures}}.}}
</noinclude>
9blpo80cw6d18nq7gsflpfompmnkav4
10908
10907
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_ChemDraw]]
10907
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|ChemDraw icon.svg|ChemDraw inv.svg}}|ChemDraw icon.svg}}}}
|3=ChemDraw
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{#ifeq::Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never come,
-->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}|sf}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=Chemdraw|shorthand=Chemdraw|igen=C|opt=yes|unspec=|n=|vopttext=yes|sub=n|top=sf|topic=no|desc={{Mld
|en=Used to mark files created with {{W|ChemDraw}} or {{W|ChemBioDraw}}
|pt=Utilizada para marcar os ficheiros criados com {{W|ChemDraw||pt}} ou {{W|ChemBioDraw||pt}}}}
addinf=|cattext=<br>'''No subcategorizing''' occurs because ''all'' drawings are of {{C|SVG structural formulas|chemical structures}}.}}
</noinclude>
9blpo80cw6d18nq7gsflpfompmnkav4
Module:Lua banner/config
828
1415
10913
2020-07-11T17:28:04Z
commons>Tacsipacsi
0
[[COM:AES|←]]Created page with 'local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always adde...'
10913
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Allow wishes: whether wishes for conversion to Lua are allowed.
-- If true, calls with zero parameters are valid, and considered to be wishes:
-- The box’s text is “This template should use Lua”, and cfg['wish_category'] is
-- added. If false, such calls are invalid, an error message appears, and
-- cfg['error_category'] is added.
cfg['allow_wishes'] = true
-- Default category: this category is added if the module call contains errors
-- (e.g. no module listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = 'Lua templates with errors'
-- Wish category: this category is added if no module is listed, and wishes are
-- allowed. (Not used if wishes are not allowed.) A category name without
-- namespace, or nil to disable categorization.
cfg['wish_category'] = 'Lua-candidates'
-- Default category: this category is added if none of the below module_categories
-- matches the first module listed. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Lua-based templates'
-- Module categories: one of these categories is added if the first listed module
-- is the listed module (e.g. {{Lua|Module:String}} adds
-- [[Category:Lua String-based templates]].) Format:
-- ['<module name>'] = '<category name>'
-- where neither <module name> nor <category name> contains namespace. An empty
-- table (i.e. no module-based categorization) will suffice on smaller wikis.
cfg['module_categories'] = {
['String'] = 'Lua String-based templates',
['Iteration'] = 'Lua-based iteration templates',
}
return cfg -- Don’t touch this line.
apef33i53q7osqaf8zy8y7v5txaimzw
10914
10913
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Lua_banner/config]]
10913
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Allow wishes: whether wishes for conversion to Lua are allowed.
-- If true, calls with zero parameters are valid, and considered to be wishes:
-- The box’s text is “This template should use Lua”, and cfg['wish_category'] is
-- added. If false, such calls are invalid, an error message appears, and
-- cfg['error_category'] is added.
cfg['allow_wishes'] = true
-- Default category: this category is added if the module call contains errors
-- (e.g. no module listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = 'Lua templates with errors'
-- Wish category: this category is added if no module is listed, and wishes are
-- allowed. (Not used if wishes are not allowed.) A category name without
-- namespace, or nil to disable categorization.
cfg['wish_category'] = 'Lua-candidates'
-- Default category: this category is added if none of the below module_categories
-- matches the first module listed. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Lua-based templates'
-- Module categories: one of these categories is added if the first listed module
-- is the listed module (e.g. {{Lua|Module:String}} adds
-- [[Category:Lua String-based templates]].) Format:
-- ['<module name>'] = '<category name>'
-- where neither <module name> nor <category name> contains namespace. An empty
-- table (i.e. no module-based categorization) will suffice on smaller wikis.
cfg['module_categories'] = {
['String'] = 'Lua String-based templates',
['Iteration'] = 'Lua-based iteration templates',
}
return cfg -- Don’t touch this line.
apef33i53q7osqaf8zy8y7v5txaimzw
Tempilet:M
10
1416
10917
2022-07-19T14:36:57Z
commons>Sarang
0
internationalize
10917
wikitext
text/x-wiki
{{#switch:-
|{{{2|}}} | {{{3|}}} | {{{4|}}} ={{#switch:+
|{{{2|}}} | {{{3|}}} | {{{4|}}} =
|#default = Module:
}}
}}<!--
-->[[{{#switch:{{{3|}}}|+|-|=|{{{3}}}}}:Module:{{PAGENAME:{{{1|}}}}}|{{#switch:+
|{{{2|}}} | {{{3|}}} | {{{4|}}} = Module:
}}{{#switch: {{{2|}}}
|+|-|={{{1|}}}
|#default={{{2|}}}
}}]]<noinclude>
{{Documentation}}</noinclude>
489hwhh5e7e1g8vf1yfvbplzr7ijkxx
10918
10917
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:M]]
10917
wikitext
text/x-wiki
{{#switch:-
|{{{2|}}} | {{{3|}}} | {{{4|}}} ={{#switch:+
|{{{2|}}} | {{{3|}}} | {{{4|}}} =
|#default = Module:
}}
}}<!--
-->[[{{#switch:{{{3|}}}|+|-|=|{{{3}}}}}:Module:{{PAGENAME:{{{1|}}}}}|{{#switch:+
|{{{2|}}} | {{{3|}}} | {{{4|}}} = Module:
}}{{#switch: {{{2|}}}
|+|-|={{{1|}}}
|#default={{{2|}}}
}}]]<noinclude>
{{Documentation}}</noinclude>
489hwhh5e7e1g8vf1yfvbplzr7ijkxx
Tempilet:Tle
10
1417
10919
2022-10-25T05:19:24Z
commons>Jonesey95
0
better
10919
wikitext
text/x-wiki
{{ {{mono|1={{#if:{{{T|}}}|[[Template:{{{T}}}|{{ucfirst:{{{T}}}}}]]|{{ucfirst:{{{t|tle}}}}}}}}}<!--
-->{{#invoke:Iteration|tleparm}}<!--
--> }}<noinclude>
{{Documentation}}
</noinclude>
aggaluuvxgfph5597q0tazahteq8t48
10920
10919
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Tle]]
10919
wikitext
text/x-wiki
{{ {{mono|1={{#if:{{{T|}}}|[[Template:{{{T}}}|{{ucfirst:{{{T}}}}}]]|{{ucfirst:{{{t|tle}}}}}}}}}<!--
-->{{#invoke:Iteration|tleparm}}<!--
--> }}<noinclude>
{{Documentation}}
</noinclude>
aggaluuvxgfph5597q0tazahteq8t48
Tempilet:Exp
10
1418
10921
2024-08-28T17:44:08Z
commons>CptViraj
0
Protected "[[Template:Exp]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only autopatrollers] (indefinite) [Move=Allow only autopatrollers] (indefinite))
10921
wikitext
text/x-wiki
<sup>{{{1|1}}}</sup><noinclude>
----
Example:
* X{{tlx|1=exp|2=superscript text}} -> X{{exp|superscript text}}
==See also==
{{Text formatting template (see also)}}
[[Category:Text formatting templates]]
</noinclude>
5yyrujh0pyyp8biaumj81tuyejeq64i
10922
10921
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Exp]]
10921
wikitext
text/x-wiki
<sup>{{{1|1}}}</sup><noinclude>
----
Example:
* X{{tlx|1=exp|2=superscript text}} -> X{{exp|superscript text}}
==See also==
{{Text formatting template (see also)}}
[[Category:Text formatting templates]]
</noinclude>
5yyrujh0pyyp8biaumj81tuyejeq64i
Tempilet:Created with CorelDRAW
10
1419
10923
2025-12-23T21:51:25Z
commons>Sebastian Wallroth
0
CorelDRAW
10923
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q142371|property=P154}}}}
|3=CorelDRAW
|4={{{more|}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|16={{Label|Q142371}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|igen=D|n=yes|shorthand=CorelDraw|opt=yes|unspec=yes}}
</noinclude>
ja0yyvhkh21owmqo4pxbx6pml30knhk
10924
10923
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_CorelDRAW]]
10923
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q142371|property=P154}}}}
|3=CorelDRAW
|4={{{more|}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|16={{Label|Q142371}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|igen=D|n=yes|shorthand=CorelDraw|opt=yes|unspec=yes}}
</noinclude>
ja0yyvhkh21owmqo4pxbx6pml30knhk
Tempilet:Igen/amp
10
1420
10925
2025-12-15T14:48:08Z
commons>Sebastian Wallroth
0
Scalable pixels.png
10925
wikitext
text/x-wiki
{{Created with/layout|logo={{#if:{{{&l|}}}|{{#ifeq:{{{&l}}}|-|UnknownTool logo|{{{&l}}}}}|{{#switch:{{lc:{{{1|<noinclude>QGIS</noinclude>}}}}}
|qgis|q|=QGIS logo new.svg
|ai image format converter=Dall-e 3 (jan '24) artificial intelligence icon.png
|ada=Ada horizon green logo with slogan.svg
|adobe flex=Adobe Flex Logo.svg
|adobe illustrator=Adobe Illustrator Icon (CS6).svg
|adobe indesign=Adobe InDesign Icon (CS6).svg
|adobe photoshop=Adobe Photoshop CS6 icon.svg
|adobe photoshop elements=Photoshop Elements.svg
|android camera=Android robot.svg
|arcgis=ArcGIS globe (cropped).svg
|arcgis pro=ArcGIS globe (cropped).svg
|arcmap=ArcGIS globe (cropped).svg
|asymptote=AsymptoteLogo.svg
|atari basic=Atari Basic Program Animation.gif
|audacity=Audacity Logo nofilter.svg
|autocad=AutoCad new logo.svg
|basic=BasicLabelRounded.svg
|beamer=LaTeX cover.svg
|blender=Blender logo no text.svg
|ce=The C Programming Language logo.svg
|c.a.r.=C.a.R. logo.png
|cobol=COBOL Mine.svg
|canon photostitch=Canon wordmark.svg
|canva=Faenza-unknown.svg
|celestia=Celestia icon - Rework.png
|chemdoodle=Chemdoodle.png
|chemsketch=ChemSketchPlain.svg
|classic colors=Classic Colors - Icon (2021).png
|clojure=Clojure logo.svg
|combinezm=CombineZ family logo.svg
|combinezp=CombineZ family logo.svg
|commodore basic=Monitor Commodore CBM 3016 with BASIC program-0309.jpg
|coreldraw=Corel logo initial.svg
|cpp=ISO C++ Logo.svg
|csharp=C Sharp Logo 2023.svg
|dall-e 2=DALL-E 2 Signature.svg
|dart=Dart programming language logo icon.svg
|de=D Programming Language logo.svg
|discovery studio visualizer=Discovery Studio icon.png
|drawshield=DrawShield.svg
|elki=Elki logo.jpg
|eazydraw=EazyDraw logo.svg
|eiffel=Eiffel logo.svg
|elixir=Official Elixir logo.png
|entry=EntryCommonLogo.svg
|erlang=Erlang logo.svg
|euphoria=OpenEuphoria logo.png
|family basic=Family BASIC logo.svg
|freebasic=Fblogo.gif
|freemind=Free Mind.png
|gfa basic=Gfa basic screenshot.png
|geogebra=Geogebra.svg
|geotools=Geotools-logo.svg
|gnumeric=Gnumeric.svg
|gnuplot=Gnuplot val.svg
|google drive=Google Drive icon (2020).svg
|greenshot=Greenshot logo.svg
|gunnmap=GunnMap Icon.svg
|helicon focus=Faenza-unknown.svg
|hugin=Hugin-splash.svg
|imagemagick=ImageMagick logo.svg
|ipe=Ipe6pre30.png
|jfreechart=JFreeChart 3D pie chart sample.svg
|java=Duke (Java mascot) waving.svg
|javascript=JavaScript shield logo (no text).svg
|kplot=Verstärkungs prinzip.png
|kdenlive=Kdenlive logo.svg
|krita=Calligrakrita-base.svg
|latex=LaTeX logo.svg
|labplot=Breezeicons-apps-48-labplot.svg
|libreoffice=LibreOffice 7.5 Main Icon.svg
|libreoffice calc=LibreOffice 7.5 Calc Icon.svg
|libreoffice draw=LibreOffice 7.5 Draw Icon.svg
|libreoffice impress=LibreOffice 7.5 Impress Icon.svg
|lilypond=LilyPond.svg
|locomotive basic=Locomotive BASIC color bars.gif
|matlab=Matlab Logo.png
|mandelbulber=Mandelbulb detail.png
|manim=Manim icon.svg
|mathematica=Mathematica Logo.svg
|matplotlib=Created with Matplotlib-logo.svg
|maya=Autodesk Maya logo.svg
|medibang paint=Faenza-unknown.svg
|metapost=Metapost-icon.svg
|microsoft access=Microsoft Office Access (2025-present).svg
|microsoft excel=Microsoft Office Excel (2025–present).svg
|microsoft image composite editor=ICE logo.png
|microsoft paint=Microsoft Paint.svg
|microsoft powerpoint=Microsoft Office PowerPoint (2025–present).svg
|microsoft project=Microsoft Project (2019–present).svg
|microsoft publisher=Microsoft Office Publisher (2019-present).svg
|microsoft small basic=Microsoft Small Basic icon.png
|microsoft word=Microsoft Office Word (2025–present).svg
|musescore=MuseScore Logo mu.svg
|numpy=NumPy logo 2020.svg
|octave=Gnu-octave-logo.svg
|online2pdf.com=Online2PDF.com favicon.png
|openoffice=Aoo4icon.svg
|openoffice.org=Aoo4icon.svg
|other tool=OtherTool logo-V.svg
|pdftk=Favicon-pdftk.png
|ptgui=PTGui AAAAA.png
|paint tool sai=SAI icon.svg
|paint.net=Paint.NET Logo.png
|panorama perfect=Faenza-unknown.svg
|pathvisio=PathVisio logo.png
|perl=Perl-logo.svg
|persistence of vision=Povray logo sphere.png
|photoscape=PhotoScape logo.png
|photoshop photomerge=Adobe Photoshop CS6 icon.svg
|picasa=Picasa.svg
|plantuml=Plantuml Logo.svg
|poladroid=Poladroid logo.png
|procreate=Procreate logo.png
|purebasic=PureBasic IDE 5.10.png
|pymol=Pymol logo.png
|python=Python-logo-notext.svg
|qbasic=QBASIC.png
|qgis=QGIS logo new.svg
|qtpfsgui=Luminance HDR Logo 2012.svg
|r=R logo.svg
|rawgraphs=RAWGraphs Logo.svg
|rawtherapee=RawTherapee logo-circle.svg
|ruby=Ruby logo.svg
|spss=SPSS logo.svg
|sage=Icon Mathematical Plot.svg
|scalable pixels=Scalable pixels.png
|scilab=
|scribus=
|sharemap=
|sibelius=
|simons' basic=
|stella=
|synfig=
|tikz=
|topaz denoise ai=
|ufraw=
|ultiplot=
|vmd=
|vectorfieldplot=
|vectorworks=
|vissim=
|visual basic=
|winplot=
|wondershare filmora=
|xcircuit=
|xfig=
|xojo=
|xpano=
|zerene stacker=
|darktable=
|diagrams.net=
|other tool=
|perl=
|svgc=SVG cleaner.svg
|sopt=SVGoptimizer.svg
|svgo|omg=Svg-optimizer.svg
|chemsketch=ChemSketchPlain.svg
|gimp=The GIMP icon - gnome.svg
|gmt=GMT logo.svg<!-- simple SVG logo as substitute -->
|heraldicon=Heraldicon logo.svg
|inkscape|i|x|ia=Inkscape-small.svg
|adobe|a=Adobe Illustrator icon CS6.svg
|bin2svg=Bin2svg logo red.svg}}}}
|iconsize={{#ifeq:{{{1}}}|sopt|16}}<!-- because it is too large -->
|text={{I18n/and with}} {{#switch:{{lc:{{{1|}}}}}
|i|inkscape=Inkscape
|x=Inkscape-extract
|a|adobe=Adobe
|ia=Inkscape, {{F|Adobe Illustrator icon CS6.svg|Z|16}} and with Adobe Illustrator
|heraldicon={{Plainlinks|https://heraldicon.org/|Heraldicon}}
|q|qgis|={{Plainlinks|https://www.osgeo.org/projects/qgis/|QGIS}}
|chemsketch=ChemSketch
|c|chemdraw=ChemDraw
|svgc={{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}}[[Category:SVG cleaned files]]
|svgo|omg={{Plainlinks|https://github.com/jakearchibald/svgomg/blob/master/README.md|SVGomg}}[[Category:SVG omg files]]
|sopt={{Plainlinks|https://svgoptimizer.com/|SVGoptimizer}}[[Category:SVG optimized files]]
|{{{1|''QGIS''}}}}}.<!-- |more={{{more|}}} -->
}}<includeonly>{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#switch:{{{&c|}}}
|-=
|+|=[[Category:{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|{{#ifeq:{{{&c}}}|+|Valid }}SVG c|C}}reated {{#switch:{{{2}}}
|I|i|Inkscape|A|a|Adobe=|{{#switch:{{{1}}}|IA|bin2svg=|also}}}} with {{#ifeq:{{{2}}}{{{1}}}|InkscapeA|Inkscape and Adobe Illustrator
|{{#switch:{{lc:{{{1|}}}}}
|i|inkscape=Inkscape
|x=Inkscape-extract
|svgc|svgo=<!-- Inkscape cleaned/SVG-omg -->
|adobe|a=Adobe Illustrator
|chemsketch=ChemSketch
|c|chemdraw=ChemDraw
|ia=Inkscape and Adobe Illustrator{{#switch:{{{topic}}}|c|ce|eh=:CoA}}
|q|qgis|=QGIS
|#default={{{1|QGIS}}}}}{{#ifeq:{{{&c}}}|+||{{#switch:{{lc:{{{2|}}}}}
|i|inkscape|= and Inkscape
|a|adobe= and Adobe Illustrator{{#ifeq:{{{1}}}|I|{{#switch:{{{topic}}}|c|ce|eh=:CoA}}}}
|?={{#if:{{Igen/par|{{{3|}}}| | and Inkscape}}}}}}}}}}]]
|#default={{Igen/cat|{{{&c}}}|{{{&k|}}}}}
}}}}</includeonly><noinclude>
[[Category:Image generation subtemplates| ]]
[[Category:Created with/layout-templates| ]]
{{clr}}
This sub[[Template:Image generation|template]] displays a short message box
that a file had been generated ''with participation of <nowiki>{{{1|}}}</nowiki>''.
The default for parameter 1, the "with_tool", is "QGIS"; parameter 2 is the "main_tool" - there seems to be nothing else than Inkscape.<br>
If another main tool than Adobe or Inkscape is needed, the value of <code>Igen-parm_1</code> is passed with parameter 3, from where it can be evaluated.
For the subtemplate, {{T0|Image generation}} uses the parameters
# <code>&</code> or <code>&=with_tool</code> ('''default''': {{T0|QGIS}})
# <code>&&=main_tool</code> (from Igen_parm1, '''default''': {{T0|Inkscape}})
# <code>&c</code> for another category;
#:either full category name with the brackets,
#:or suppress with <code>&c=-</code>
#:or additional categorization with <code>&c=+</code> to "with_tool".
# <code>Igen-parm_1</code>
:: and the named parameters &c "category", &s "subcategory"
The subtemplate categorizes <nowiki>[[Category:SVG created with</nowiki> <code>with-tool</code> and <code>main-tool</code>]],<br>
a subcategory of {{C|SVG created with QGIS|SVG created with <code>with-tool</code>}}.
</noinclude>
6b6qrojl0ttkb0uxwm49gijus8p8wfw
10926
10925
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Igen/amp]]
10925
wikitext
text/x-wiki
{{Created with/layout|logo={{#if:{{{&l|}}}|{{#ifeq:{{{&l}}}|-|UnknownTool logo|{{{&l}}}}}|{{#switch:{{lc:{{{1|<noinclude>QGIS</noinclude>}}}}}
|qgis|q|=QGIS logo new.svg
|ai image format converter=Dall-e 3 (jan '24) artificial intelligence icon.png
|ada=Ada horizon green logo with slogan.svg
|adobe flex=Adobe Flex Logo.svg
|adobe illustrator=Adobe Illustrator Icon (CS6).svg
|adobe indesign=Adobe InDesign Icon (CS6).svg
|adobe photoshop=Adobe Photoshop CS6 icon.svg
|adobe photoshop elements=Photoshop Elements.svg
|android camera=Android robot.svg
|arcgis=ArcGIS globe (cropped).svg
|arcgis pro=ArcGIS globe (cropped).svg
|arcmap=ArcGIS globe (cropped).svg
|asymptote=AsymptoteLogo.svg
|atari basic=Atari Basic Program Animation.gif
|audacity=Audacity Logo nofilter.svg
|autocad=AutoCad new logo.svg
|basic=BasicLabelRounded.svg
|beamer=LaTeX cover.svg
|blender=Blender logo no text.svg
|ce=The C Programming Language logo.svg
|c.a.r.=C.a.R. logo.png
|cobol=COBOL Mine.svg
|canon photostitch=Canon wordmark.svg
|canva=Faenza-unknown.svg
|celestia=Celestia icon - Rework.png
|chemdoodle=Chemdoodle.png
|chemsketch=ChemSketchPlain.svg
|classic colors=Classic Colors - Icon (2021).png
|clojure=Clojure logo.svg
|combinezm=CombineZ family logo.svg
|combinezp=CombineZ family logo.svg
|commodore basic=Monitor Commodore CBM 3016 with BASIC program-0309.jpg
|coreldraw=Corel logo initial.svg
|cpp=ISO C++ Logo.svg
|csharp=C Sharp Logo 2023.svg
|dall-e 2=DALL-E 2 Signature.svg
|dart=Dart programming language logo icon.svg
|de=D Programming Language logo.svg
|discovery studio visualizer=Discovery Studio icon.png
|drawshield=DrawShield.svg
|elki=Elki logo.jpg
|eazydraw=EazyDraw logo.svg
|eiffel=Eiffel logo.svg
|elixir=Official Elixir logo.png
|entry=EntryCommonLogo.svg
|erlang=Erlang logo.svg
|euphoria=OpenEuphoria logo.png
|family basic=Family BASIC logo.svg
|freebasic=Fblogo.gif
|freemind=Free Mind.png
|gfa basic=Gfa basic screenshot.png
|geogebra=Geogebra.svg
|geotools=Geotools-logo.svg
|gnumeric=Gnumeric.svg
|gnuplot=Gnuplot val.svg
|google drive=Google Drive icon (2020).svg
|greenshot=Greenshot logo.svg
|gunnmap=GunnMap Icon.svg
|helicon focus=Faenza-unknown.svg
|hugin=Hugin-splash.svg
|imagemagick=ImageMagick logo.svg
|ipe=Ipe6pre30.png
|jfreechart=JFreeChart 3D pie chart sample.svg
|java=Duke (Java mascot) waving.svg
|javascript=JavaScript shield logo (no text).svg
|kplot=Verstärkungs prinzip.png
|kdenlive=Kdenlive logo.svg
|krita=Calligrakrita-base.svg
|latex=LaTeX logo.svg
|labplot=Breezeicons-apps-48-labplot.svg
|libreoffice=LibreOffice 7.5 Main Icon.svg
|libreoffice calc=LibreOffice 7.5 Calc Icon.svg
|libreoffice draw=LibreOffice 7.5 Draw Icon.svg
|libreoffice impress=LibreOffice 7.5 Impress Icon.svg
|lilypond=LilyPond.svg
|locomotive basic=Locomotive BASIC color bars.gif
|matlab=Matlab Logo.png
|mandelbulber=Mandelbulb detail.png
|manim=Manim icon.svg
|mathematica=Mathematica Logo.svg
|matplotlib=Created with Matplotlib-logo.svg
|maya=Autodesk Maya logo.svg
|medibang paint=Faenza-unknown.svg
|metapost=Metapost-icon.svg
|microsoft access=Microsoft Office Access (2025-present).svg
|microsoft excel=Microsoft Office Excel (2025–present).svg
|microsoft image composite editor=ICE logo.png
|microsoft paint=Microsoft Paint.svg
|microsoft powerpoint=Microsoft Office PowerPoint (2025–present).svg
|microsoft project=Microsoft Project (2019–present).svg
|microsoft publisher=Microsoft Office Publisher (2019-present).svg
|microsoft small basic=Microsoft Small Basic icon.png
|microsoft word=Microsoft Office Word (2025–present).svg
|musescore=MuseScore Logo mu.svg
|numpy=NumPy logo 2020.svg
|octave=Gnu-octave-logo.svg
|online2pdf.com=Online2PDF.com favicon.png
|openoffice=Aoo4icon.svg
|openoffice.org=Aoo4icon.svg
|other tool=OtherTool logo-V.svg
|pdftk=Favicon-pdftk.png
|ptgui=PTGui AAAAA.png
|paint tool sai=SAI icon.svg
|paint.net=Paint.NET Logo.png
|panorama perfect=Faenza-unknown.svg
|pathvisio=PathVisio logo.png
|perl=Perl-logo.svg
|persistence of vision=Povray logo sphere.png
|photoscape=PhotoScape logo.png
|photoshop photomerge=Adobe Photoshop CS6 icon.svg
|picasa=Picasa.svg
|plantuml=Plantuml Logo.svg
|poladroid=Poladroid logo.png
|procreate=Procreate logo.png
|purebasic=PureBasic IDE 5.10.png
|pymol=Pymol logo.png
|python=Python-logo-notext.svg
|qbasic=QBASIC.png
|qgis=QGIS logo new.svg
|qtpfsgui=Luminance HDR Logo 2012.svg
|r=R logo.svg
|rawgraphs=RAWGraphs Logo.svg
|rawtherapee=RawTherapee logo-circle.svg
|ruby=Ruby logo.svg
|spss=SPSS logo.svg
|sage=Icon Mathematical Plot.svg
|scalable pixels=Scalable pixels.png
|scilab=
|scribus=
|sharemap=
|sibelius=
|simons' basic=
|stella=
|synfig=
|tikz=
|topaz denoise ai=
|ufraw=
|ultiplot=
|vmd=
|vectorfieldplot=
|vectorworks=
|vissim=
|visual basic=
|winplot=
|wondershare filmora=
|xcircuit=
|xfig=
|xojo=
|xpano=
|zerene stacker=
|darktable=
|diagrams.net=
|other tool=
|perl=
|svgc=SVG cleaner.svg
|sopt=SVGoptimizer.svg
|svgo|omg=Svg-optimizer.svg
|chemsketch=ChemSketchPlain.svg
|gimp=The GIMP icon - gnome.svg
|gmt=GMT logo.svg<!-- simple SVG logo as substitute -->
|heraldicon=Heraldicon logo.svg
|inkscape|i|x|ia=Inkscape-small.svg
|adobe|a=Adobe Illustrator icon CS6.svg
|bin2svg=Bin2svg logo red.svg}}}}
|iconsize={{#ifeq:{{{1}}}|sopt|16}}<!-- because it is too large -->
|text={{I18n/and with}} {{#switch:{{lc:{{{1|}}}}}
|i|inkscape=Inkscape
|x=Inkscape-extract
|a|adobe=Adobe
|ia=Inkscape, {{F|Adobe Illustrator icon CS6.svg|Z|16}} and with Adobe Illustrator
|heraldicon={{Plainlinks|https://heraldicon.org/|Heraldicon}}
|q|qgis|={{Plainlinks|https://www.osgeo.org/projects/qgis/|QGIS}}
|chemsketch=ChemSketch
|c|chemdraw=ChemDraw
|svgc={{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}}[[Category:SVG cleaned files]]
|svgo|omg={{Plainlinks|https://github.com/jakearchibald/svgomg/blob/master/README.md|SVGomg}}[[Category:SVG omg files]]
|sopt={{Plainlinks|https://svgoptimizer.com/|SVGoptimizer}}[[Category:SVG optimized files]]
|{{{1|''QGIS''}}}}}.<!-- |more={{{more|}}} -->
}}<includeonly>{{#switch:{{NAMESPACENUMBER}}|6|7|14|15={{#switch:{{{&c|}}}
|-=
|+|=[[Category:{{#ifeq:{{F|{{PAGENAME}}|X}}|svg|{{#ifeq:{{{&c}}}|+|Valid }}SVG c|C}}reated {{#switch:{{{2}}}
|I|i|Inkscape|A|a|Adobe=|{{#switch:{{{1}}}|IA|bin2svg=|also}}}} with {{#ifeq:{{{2}}}{{{1}}}|InkscapeA|Inkscape and Adobe Illustrator
|{{#switch:{{lc:{{{1|}}}}}
|i|inkscape=Inkscape
|x=Inkscape-extract
|svgc|svgo=<!-- Inkscape cleaned/SVG-omg -->
|adobe|a=Adobe Illustrator
|chemsketch=ChemSketch
|c|chemdraw=ChemDraw
|ia=Inkscape and Adobe Illustrator{{#switch:{{{topic}}}|c|ce|eh=:CoA}}
|q|qgis|=QGIS
|#default={{{1|QGIS}}}}}{{#ifeq:{{{&c}}}|+||{{#switch:{{lc:{{{2|}}}}}
|i|inkscape|= and Inkscape
|a|adobe= and Adobe Illustrator{{#ifeq:{{{1}}}|I|{{#switch:{{{topic}}}|c|ce|eh=:CoA}}}}
|?={{#if:{{Igen/par|{{{3|}}}| | and Inkscape}}}}}}}}}}]]
|#default={{Igen/cat|{{{&c}}}|{{{&k|}}}}}
}}}}</includeonly><noinclude>
[[Category:Image generation subtemplates| ]]
[[Category:Created with/layout-templates| ]]
{{clr}}
This sub[[Template:Image generation|template]] displays a short message box
that a file had been generated ''with participation of <nowiki>{{{1|}}}</nowiki>''.
The default for parameter 1, the "with_tool", is "QGIS"; parameter 2 is the "main_tool" - there seems to be nothing else than Inkscape.<br>
If another main tool than Adobe or Inkscape is needed, the value of <code>Igen-parm_1</code> is passed with parameter 3, from where it can be evaluated.
For the subtemplate, {{T0|Image generation}} uses the parameters
# <code>&</code> or <code>&=with_tool</code> ('''default''': {{T0|QGIS}})
# <code>&&=main_tool</code> (from Igen_parm1, '''default''': {{T0|Inkscape}})
# <code>&c</code> for another category;
#:either full category name with the brackets,
#:or suppress with <code>&c=-</code>
#:or additional categorization with <code>&c=+</code> to "with_tool".
# <code>Igen-parm_1</code>
:: and the named parameters &c "category", &s "subcategory"
The subtemplate categorizes <nowiki>[[Category:SVG created with</nowiki> <code>with-tool</code> and <code>main-tool</code>]],<br>
a subcategory of {{C|SVG created with QGIS|SVG created with <code>with-tool</code>}}.
</noinclude>
6b6qrojl0ttkb0uxwm49gijus8p8wfw
Tempilet:I18n/and with
10
1421
10927
2023-03-14T18:31:34Z
commons>OmegaFallon
0
10927
wikitext
text/x-wiki
{{LangSwitch
|de=und mit
|es=y con
|fr=et avec
|he=ו עם
|it=e con
|mk=и со
|nb=og med
|nl=en met
|nn=og med
|pl=i z
|pt=e com o
|ru=и с помощью
|sl=in z
|sv=och med
|th=และโดย
|zh-hans=以及使用
|zh-hant=以及使用
|default=and with
|lang={{{lang|{{int:lang}}}}}}}<noinclude>
[[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude>
dm5mtz4gtdtxucol6qjkigfhrazy855
10928
10927
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:I18n/and_with]]
10927
wikitext
text/x-wiki
{{LangSwitch
|de=und mit
|es=y con
|fr=et avec
|he=ו עם
|it=e con
|mk=и со
|nb=og med
|nl=en met
|nn=og med
|pl=i z
|pt=e com o
|ru=и с помощью
|sl=in z
|sv=och med
|th=และโดย
|zh-hans=以及使用
|zh-hant=以及使用
|default=and with
|lang={{{lang|{{int:lang}}}}}}}<noinclude>
[[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude>
dm5mtz4gtdtxucol6qjkigfhrazy855
Tempilet:Inkscape-hand
10
1422
10929
2024-08-09T23:50:00Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10929
wikitext
text/x-wiki
{{#ifeq: {{{tool|}}} | IH
| {{SVGvalid
|1 = {{{1|}}}
|2 = {{{2|}}}
|3 = {{{err|{{{errors|{{{errnum|}}}}}}}}}
|4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}}
|5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}}
|6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
}}
| {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}}
| 1 | 0
}} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0
| 0 | 1
}}
| {{HandSVG
|3 = i
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub={{{sub|}}}
}}
| {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}}
| 1 | 0
}} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0
| 1 | 0
}}
| {{HandSVG<!-- Text editor subcat -->
|3 = v
|6 = n
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|{{{style|}}}}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
| {{#if: {{{tagging|{{{tag|}}}}}}
| {{HandSVG<!-- Text editor subcat -->
|3 = {{{tagging|{{{tag|}}}}}}
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
| {{#if: {{{2|}}}
| {{#switch: {{{2|}}}
|V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat -->
|3 = {{{2|}}}
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
}}
| {{#switch: {{{1|}}}
|V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat -->
|3 = {{{1|}}}
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}|style={{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
|#default = {{HandSVG
|3 = M
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
}}
}}
}}
}}
}}
}}<!--
-->{{#invoke:Autotranslate|autotranslate
|base = Inkscape-hand
|1 = {{#if:{{{user|}}}
| {{{user|}}}
| {{#if: {{{2|}}}
| {{{1|}}}
| {{#switch: {{{1|}}}
|V|v|I|i|H|h| =
|#default = {{{1|}}}
}}
}}
}}
|2 = Inkscape {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}}
|a = addition
|r = replaced
|e|x = expanded
|c = composed
|d = derived
|s = smoothed
|v = validated
|i = -repaired
|#default = to text
}}.svg
|3 = Inkscape-hand{{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}}
|a = -addition
|r = -replaced
|e|x = -expanded
|c = -composed
|d = -derived
|s = -smoothed
|v = -validated
|i = -repaired
}}
|4 = {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}}
|s = 72
|#default = 64
}}px
|5 = {{{cre|{{{creator|}}}}}}
|6 = {{{more|}}}
|7 = {{{width|}}}
|8 = {{{style|}}}
|9 = {{{key|{{{sort|}}}}}}
|10 = {{#invoke:Char|subst|{{{sub|{{{subcat|{{{subcateg|}}}}}}}}}}}
|11 = <!-- {{{err|{{{errnum|{{{errors|}}}}}}}}} -->
|12 = <!-- Let's assume that manual SVGs are general valid, no further diffusion is necessary
-->V<!-- {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}}
| I
| {{UC:{{{tag|{{{tagging|}}}}}}}}
}} -->
|13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14 = {{{topic|{{{what|}}}}}}
}}<!-- {{#if: {{{1|}}}
| [[Category:MaintCat-Inkscape-hand-author]]
}} --><noinclude>{{Documentation}}</noinclude>
sp2aaz3ym2wi2ajpnyhjljwqz4iap7l
10930
10929
2026-08-25T23:38:37Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Inkscape-hand]]
10929
wikitext
text/x-wiki
{{#ifeq: {{{tool|}}} | IH
| {{SVGvalid
|1 = {{{1|}}}
|2 = {{{2|}}}
|3 = {{{err|{{{errors|{{{errnum|}}}}}}}}}
|4 = {{{vs|{{{vstyle|{{{style|}}}}}}}}}
|5 = {{{vw|{{{vwidth|{{{width|}}}}}}}}}
|6 = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|7 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
}}
| {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}}
| 1 | 0
}} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0
| 0 | 1
}}
| {{HandSVG
|3 = i
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub={{{sub|}}}
}}
| {{#ifexpr: {{#if: {{{err|{{{errnum|{{{errors|}}}}}}}}}
| 1 | 0
}} * {{#ifeq: {{{err|{{{errnum|{{{errors|}}}}}}}}} | 0
| 1 | 0
}}
| {{HandSVG<!-- Text editor subcat -->
|3 = v
|6 = n
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|{{{style|}}}}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
| {{#if: {{{tagging|{{{tag|}}}}}}
| {{HandSVG<!-- Text editor subcat -->
|3 = {{{tagging|{{{tag|}}}}}}
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
| {{#if: {{{2|}}}
| {{#switch: {{{2|}}}
|V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat -->
|3 = {{{2|}}}
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
}}
| {{#switch: {{{1|}}}
|V|v|I|i|H|h = {{HandSVG<!-- Text editor subcat -->
|3 = {{{1|}}}
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}|style={{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
|#default = {{HandSVG
|3 = M
|6 = n
|err = {{{err|{{{errnum|{{{errors|}}}}}}}}}
|vsub = {{{vsub|{{{sub|}}}}}}
|vtxt = {{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}
|width = {{{width|}}}
|style = {{{style|}}}
|vwidth = {{{vw|{{{vwidth|}}}}}}
|vstyle = {{{vs|{{{vstyle|}}}}}}
|vopt = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|topic = {{{topic|}}}
|sub = {{{sub|}}}
}}
}}
}}
}}
}}
}}
}}<!--
-->{{#invoke:Autotranslate|autotranslate
|base = Inkscape-hand
|1 = {{#if:{{{user|}}}
| {{{user|}}}
| {{#if: {{{2|}}}
| {{{1|}}}
| {{#switch: {{{1|}}}
|V|v|I|i|H|h| =
|#default = {{{1|}}}
}}
}}
}}
|2 = Inkscape {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}}
|a = addition
|r = replaced
|e|x = expanded
|c = composed
|d = derived
|s = smoothed
|v = validated
|i = -repaired
|#default = to text
}}.svg
|3 = Inkscape-hand{{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}}
|a = -addition
|r = -replaced
|e|x = -expanded
|c = -composed
|d = -derived
|s = -smoothed
|v = -validated
|i = -repaired
}}
|4 = {{#switch: {{lc:{{padleft:|1|{{{category|{{{cat|}}}}}}}}}}
|s = 72
|#default = 64
}}px
|5 = {{{cre|{{{creator|}}}}}}
|6 = {{{more|}}}
|7 = {{{width|}}}
|8 = {{{style|}}}
|9 = {{{key|{{{sort|}}}}}}
|10 = {{#invoke:Char|subst|{{{sub|{{{subcat|{{{subcateg|}}}}}}}}}}}
|11 = <!-- {{{err|{{{errnum|{{{errors|}}}}}}}}} -->
|12 = <!-- Let's assume that manual SVGs are general valid, no further diffusion is necessary
-->V<!-- {{#if: {{{err|{{{errors|{{{errnum|}}}}}}}}}
| I
| {{UC:{{{tag|{{{tagging|}}}}}}}}
}} -->
|13 = {{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14 = {{{topic|{{{what|}}}}}}
}}<!-- {{#if: {{{1|}}}
| [[Category:MaintCat-Inkscape-hand-author]]
}} --><noinclude>{{Documentation}}</noinclude>
sp2aaz3ym2wi2ajpnyhjljwqz4iap7l
Tempilet:Inkscape-hand/en
10
1423
10931
2020-05-08T07:56:40Z
commons>Sarang
0
+pic
10931
wikitext
text/x-wiki
{{Created with
|logo={{{2|}}}
|toolcat={{{3|}}}
|iconsize={{{4|}}}
|text=This {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|{{{what|image}}}|lang=en}}<!--
-->|{{W|Vector graphics|vector image}}}} was created with [[Help:Inkscape|Inkscape]]{{#if:{{{5|}}}|<nowiki/> by {{{5}}}}}, and then {{W|Text editor|manually}} {{#switch:{{padleft:|15|{{{3|}}}}}
|Inkscape-hand-a=altered
|Inkscape-hand-e=expanded
|Inkscape-hand-r=replaced
|Inkscape-hand-s=straightened
|Inkscape-hand-v=made valid {{F|Gnome-vector-cleanup.svg|Z|18}}
|edited}}{{#if:{{{1|}}}|<nowiki/> by {{{1}}}}}
|category=
|more={{{6|.}}}
|width={{{7|}}}
|style={{{8|}}}
|key={{{9|}}}
|sub={{{10|}}}
|err={{{11|}}}
|w3c={{{12|}}}
|lang=en
}}
mywchu57tnl3lz6dqcp1at3m3bx7qz2
10932
10931
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Inkscape-hand/en]]
10931
wikitext
text/x-wiki
{{Created with
|logo={{{2|}}}
|toolcat={{{3|}}}
|iconsize={{{4|}}}
|text=This {{#if:{{{14|}}}|{{Igen/top|{{{14}}}|{{{what|image}}}|lang=en}}<!--
-->|{{W|Vector graphics|vector image}}}} was created with [[Help:Inkscape|Inkscape]]{{#if:{{{5|}}}|<nowiki/> by {{{5}}}}}, and then {{W|Text editor|manually}} {{#switch:{{padleft:|15|{{{3|}}}}}
|Inkscape-hand-a=altered
|Inkscape-hand-e=expanded
|Inkscape-hand-r=replaced
|Inkscape-hand-s=straightened
|Inkscape-hand-v=made valid {{F|Gnome-vector-cleanup.svg|Z|18}}
|edited}}{{#if:{{{1|}}}|<nowiki/> by {{{1}}}}}
|category=
|more={{{6|.}}}
|width={{{7|}}}
|style={{{8|}}}
|key={{{9|}}}
|sub={{{10|}}}
|err={{{11|}}}
|w3c={{{12|}}}
|lang=en
}}
mywchu57tnl3lz6dqcp1at3m3bx7qz2
Tempilet:Created with X
10
1424
10933
2022-11-09T20:23:36Z
commons>W like wiki
0
Moving from [[Category:Miscellaneous subtemplates]] to [[Category:Subtemplates]]
10933
wikitext
text/x-wiki
<noinclude>This is an ''empty template'' without any code, it does nothing.
It is used to allow the usage of {{T|Image generation}} without any creating tool.
[[Category:Subtemplates|Imgen]]
</noinclude>
7wbaeunuwr7hxswerzh0wdxq7svy3yi
10934
10933
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_X]]
10933
wikitext
text/x-wiki
<noinclude>This is an ''empty template'' without any code, it does nothing.
It is used to allow the usage of {{T|Image generation}} without any creating tool.
[[Category:Subtemplates|Imgen]]
</noinclude>
7wbaeunuwr7hxswerzh0wdxq7svy3yi
Tempilet:Created with Inkscape-hand
10
1425
10935
2014-10-27T18:34:35Z
commons>Sarang
0
+link
10935
wikitext
text/x-wiki
#REDIRECT [[Template:Inkscape-hand]]
k0j1myitij1zuet7a6mjh80n658bjqx
10936
10935
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Inkscape-hand]]
10935
wikitext
text/x-wiki
#REDIRECT [[Template:Inkscape-hand]]
k0j1myitij1zuet7a6mjh80n658bjqx
Tempilet:Created with Sodipodi
10
1426
10937
2024-09-18T21:40:40Z
commons>Chealer
0
Documentation: There is no such thing as "Inkscape-Sodipodi" AFAIK (introduced by Sarang in 2014-09-11's 134360702).
10937
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Sodipodi Logo-V.svg|Sodipodi Logo-I.svg}}<!--
-->|{{#switch:{{{2|{{{1}}}}}}|v=Sodipodi Logo-V.svg|#default=Sodipodi Logo.svg}}}}}}
|3=Sodipodi
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be
-->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|17=<!-- {{{iconsize|}}} -->
|base=Created with ...}}<noinclude>
{{SVG created with/doc|igen=S|opt=yes|shorthand=Sodipodi|desc=Used to mark files created with {{W|Sodipodi}}.}}
</noinclude>
nosiucsf8tzbwsr94brh7vcxb9dbr2w
10938
10937
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Sodipodi]]
10937
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Sodipodi Logo-V.svg|Sodipodi Logo-I.svg}}<!--
-->|{{#switch:{{{2|{{{1}}}}}}|v=Sodipodi Logo-V.svg|#default=Sodipodi Logo.svg}}}}}}
|3=Sodipodi
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be
-->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|17=<!-- {{{iconsize|}}} -->
|base=Created with ...}}<noinclude>
{{SVG created with/doc|igen=S|opt=yes|shorthand=Sodipodi|desc=Used to mark files created with {{W|Sodipodi}}.}}
</noinclude>
nosiucsf8tzbwsr94brh7vcxb9dbr2w
Tempilet:Created with GeoGebra
10
1427
10943
2025-12-24T16:35:05Z
commons>Sebastian Wallroth
0
10943
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|{{Data|item=Q795066|property=P154}}|Anti-GeoGebra.svg}}|{{Data|item=Q795066|property=P154}}}}|{{Data|item=Q795066|property=154}}}}<!-- valid / invalid -->
|3=GeoGebra
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|16={{Label|Q795066}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=GeoGebra|n=yes|opt=yes}}
</noinclude>
6155s7c8pqaso5m6su2vql2hdgz7dg3
10944
10943
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_GeoGebra]]
10943
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|{{Data|item=Q795066|property=P154}}|Anti-GeoGebra.svg}}|{{Data|item=Q795066|property=P154}}}}|{{Data|item=Q795066|property=154}}}}<!-- valid / invalid -->
|3=GeoGebra
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|16={{Label|Q795066}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=GeoGebra|n=yes|opt=yes}}
</noinclude>
6155s7c8pqaso5m6su2vql2hdgz7dg3
Tempilet:Created with Inkscape-default
10
1428
10947
2024-08-09T23:47:34Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10947
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
template for Inkscape-default (/it}
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Inkscape-yes.svg|Inkscape-no.svg}}<!-- valid / invalid
-->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- valid
-->|Inkscape-def.svg}}}}<!-- default logo for Inkscape-default -->
|3=Inkscape
|4={{#ifeq:{{NAMESPACE}}|File|-''default''}}<noinclude><code>-def</code></noinclude>{{#if:{{{IMPORTANT|}}}|{{{more|}}}—[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]].<!-- (italic if from Igen)
-->[[Category:SVG created with Inkscape:Important]]|{{{more|.}}}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=<!-- {{{IMPORTANT|}}} -->
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10=<!-- {{#if:{{{IMPORTANT|}}}|:Important}} -->{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!--
-->|{{#switch:{{{1}}}|n=N|v=V|s=S<!--
-->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|s|n}}}}}}}}<!-- SVG or PNG -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
<!-- {{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|shortmore=may be used for "Inkscape",<br>
::::::::::or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=yes".}} -->
[[Category:Subtemplates|Igen/def]]
</noinclude>{{#ifeq:{{NAMESPACE}}|File|[[Category:Created with Inkscape-default]]}}
33w5hzjc51f9u0ghlxj13ultorvqe0e
10948
10947
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Inkscape-default]]
10947
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
template for Inkscape-default (/it}
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|n|p|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|Inkscape-yes.svg|Inkscape-no.svg}}<!-- valid / invalid
-->|{{#switch:v|{{{2}}}|{{{1}}}=Inkscape-yes.svg|<!-- valid
-->|Inkscape-def.svg}}}}<!-- default logo for Inkscape-default -->
|3=Inkscape
|4={{#ifeq:{{NAMESPACE}}|File|-''default''}}<noinclude><code>-def</code></noinclude>{{#if:{{{IMPORTANT|}}}|{{{more|}}}—[[Help:Inkscape#Inkscape_SVG_vs._Plain_SVG|important]].<!-- (italic if from Igen)
-->[[Category:SVG created with Inkscape:Important]]|{{{more|.}}}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=<!-- {{{IMPORTANT|}}} -->
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10=<!-- {{#if:{{{IMPORTANT|}}}|:Important}} -->{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!--
-->|{{#switch:{{{1}}}|n=N|v=V|s=S<!--
-->|{{#ifeq:{{#invoke:File|extension|file={{PAGENAME}}}}|svg|s|n}}}}}}}}<!-- SVG or PNG -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
<!-- {{SVG created with/doc|shorthand=Inkscape|n=y|I=IMPORTANT|igen=I|sandbox=y|vopttext=un|shortmore=may be used for "Inkscape",<br>
::::::::::or the abbreviation "Im" for "Inkscape{{!}}IMPORTANT=yes".}} -->
[[Category:Subtemplates|Igen/def]]
</noinclude>{{#ifeq:{{NAMESPACE}}|File|[[Category:Created with Inkscape-default]]}}
33w5hzjc51f9u0ghlxj13ultorvqe0e
Tempilet:Created with LibreOffice
10
1429
10949
2025-12-24T20:49:19Z
commons>Sebastian Wallroth
0
Q10135
10949
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p||s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q10135|property=P154}}}}
|3=LibreOffice
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|14={{{topic|}}}
|16={{Label|Q10135}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
{{#ifexist:{{SUBJECTPAGENAME}}/docu|{{documentation}}|
{{SVG created with/doc|n=y|opt=yes|code=3|shorthand=LibreOffice|igen=L|desc={{en|1=Used to mark files created with LibreOffice.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|unspec=yes}}}}</noinclude>
nevqy3elyvrajuenlj0sxdmka35qmsn
10950
10949
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_LibreOffice]]
10949
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|p||s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q10135|property=P154}}}}
|3=LibreOffice
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|14={{{topic|}}}
|16={{Label|Q10135}}
|17={{{iconsize|}}}
|base=Created with ...}}<noinclude>
{{#ifexist:{{SUBJECTPAGENAME}}/docu|{{documentation}}|
{{SVG created with/doc|n=y|opt=yes|code=3|shorthand=LibreOffice|igen=L|desc={{en|1=Used to mark files created with LibreOffice.<br>Wherever possible, please include the ''source code'', using {{T0|Igen}} with the parameter '''<code>code=</code>'''<br>{{Nobold|For more information, see the description of the template:{{T0|Created with code}}.}}}}|unspec=yes}}}}</noinclude>
nevqy3elyvrajuenlj0sxdmka35qmsn
Tempilet:Use sandbox
10
1430
10951
2024-08-09T23:56:58Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10951
wikitext
text/x-wiki
{{#invoke:Autotranslate|autotranslate
|base = Use sandbox/i18n
|1={{{1|}}}
|2={{{2|}}}
|{{#ifeq:{{{testcase|}}}|{{{testcase|1}}}|testcase}} = {{{testcase|}}}
|sandbox={{ifsandbox|b=base||/{{{sandbox|}}}}}<!-- ="name" -->
|edit={{{edit|}}}
}}<noinclude>
{{documentation}}
</noinclude>
3qwt1sejedxgst449us2ejj66u7w3jg
10952
10951
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Use_sandbox]]
10951
wikitext
text/x-wiki
{{#invoke:Autotranslate|autotranslate
|base = Use sandbox/i18n
|1={{{1|}}}
|2={{{2|}}}
|{{#ifeq:{{{testcase|}}}|{{{testcase|1}}}|testcase}} = {{{testcase|}}}
|sandbox={{ifsandbox|b=base||/{{{sandbox|}}}}}<!-- ="name" -->
|edit={{{edit|}}}
}}<noinclude>
{{documentation}}
</noinclude>
3qwt1sejedxgst449us2ejj66u7w3jg
Tempilet:Use sandbox/i18n/en
10
1431
10953
2025-05-09T02:48:08Z
commons>FuzzyBot
0
Updating to match new version of source page
10953
wikitext
text/x-wiki
<languages />
<onlyinclude><div lang="en" dir="auto">
{{Mbox
|type=query
|image={{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}}
|width = 80%
|style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start
|text=Please test any changes in the template's [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|{{{1|}}}/sandbox]] {{#if:{{{edit|<noinclude>1</noinclude>}}}|([{{fullurl:{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|action=edit}} edit])}} {{{testcase|or [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/testcases|/testcases]] subpages,}}} and consider discussing changes at {{#if:{{{2|}}}|[[{{{2|}}}]]|the [[{{#ifeq:{{SUBPAGENAME}}|doc| {{TALKSPACE}}:{{BASEPAGENAME}} | {{TALKPAGENAME}} }}|talk page]]}} before implementing them.
}}
</div></onlyinclude>
{{translated tag|header}}
dgwinl26cjgvqzoxyin7w9uxshvd2qc
10954
10953
2026-08-25T23:38:38Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Use_sandbox/i18n/en]]
10953
wikitext
text/x-wiki
<languages />
<onlyinclude><div lang="en" dir="auto">
{{Mbox
|type=query
|image={{NoImageNotes|[[File:OOjs UI icon alert-yellow.svg|class=noviewer|alt=⚠|40px]]}}
|width = 80%
|style = padding:3px; border-color: var(--border-color-content-removed, #fc3); text-align:start
|text=Please test any changes in the template's [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|{{{1|}}}/sandbox]] {{#if:{{{edit|<noinclude>1</noinclude>}}}|([{{fullurl:{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/sandbox|action=edit}} edit])}} {{{testcase|or [[{{#ifeq:{{SUBPAGENAME}}|doc| {{SUBJECTSPACE}}:{{BASEPAGENAME}} | {{SUBJECTPAGENAME}} }}/testcases|/testcases]] subpages,}}} and consider discussing changes at {{#if:{{{2|}}}|[[{{{2|}}}]]|the [[{{#ifeq:{{SUBPAGENAME}}|doc| {{TALKSPACE}}:{{BASEPAGENAME}} | {{TALKPAGENAME}} }}|talk page]]}} before implementing them.
}}
</div></onlyinclude>
{{translated tag|header}}
dgwinl26cjgvqzoxyin7w9uxshvd2qc
Tempilet:Blue
10
1432
10955
2012-09-16T10:03:07Z
commons>Sarang
0
catdiff
10955
wikitext
text/x-wiki
<span style="color:#0645AD;">{{{1}}}</span><noinclude>
{{documentation}}
</noinclude>
f6rm38qjkga1ht1zapcja0ebkvnyxap
10956
10955
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Blue]]
10955
wikitext
text/x-wiki
<span style="color:#0645AD;">{{{1}}}</span><noinclude>
{{documentation}}
</noinclude>
f6rm38qjkga1ht1zapcja0ebkvnyxap
Tempilet:Created with BKchem
10
1433
10957
2024-08-09T23:46:37Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10957
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|BKChem48.svg|BKChemInv.svg}}|BKChem48.svg}}}}
|3=BKchem
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|9={{{sort|{{{key|{{{sortkey|{{#if:{{{errnum|}}}|000}}}}}}}}}}}
|10={{#ifeq::Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}} <!-- sf -->
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{iffile|s|v}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14=sf
|16=[[d:Q796035|BKchem]]-Inkscape
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shorthand=BKchem|igen=B|opt=yes|sub=n|top=sf|topic=no|addinf=|w1=28|w2=72
|cattext=<br>'''No subcategorizing occurs''' because ''all'' drawings are of chemical structures.<br><small></small>}}
</noinclude>
8t4wl5ckss2ejkfbgdciyro32oie0un
10958
10957
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_BKchem]]
10957
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|s|/|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|BKChem48.svg|BKChemInv.svg}}|BKChem48.svg}}}}
|3=BKchem
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|9={{{sort|{{{key|{{{sortkey|{{#if:{{{errnum|}}}|000}}}}}}}}}}}
|10={{#ifeq::Structural formulas|{{{sub|}}}||{{{sub|{{{subcat|{{{subcategory|}}}}}}}}}}} <!-- sf -->
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{iffile|s|v}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14=sf
|16=[[d:Q796035|BKchem]]-Inkscape
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shorthand=BKchem|igen=B|opt=yes|sub=n|top=sf|topic=no|addinf=|w1=28|w2=72
|cattext=<br>'''No subcategorizing occurs''' because ''all'' drawings are of chemical structures.<br><small></small>}}
</noinclude>
8t4wl5ckss2ejkfbgdciyro32oie0un
Tempilet:Created with QGIS
10
1434
10959
2025-12-26T09:56:01Z
commons>Sebastian Wallroth
0
Q1329181
10959
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#if:{{{2|}}}||{{#if:{{{1|}}}||{{#ifeq:{{#invoke:Igenmod|extcode}}|s|[[Category:SVG created with QGIS]]}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1329181|property=P154}}}}
|3=QGIS
|4={{{more|}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8={{{IMPORTANT|}}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}}}
|16={{Label|Q1329181}}
|17=<!-- {{{iconsize|}}} -->
|base=Created with ...}}<noinclude>
{{SVG created with/doc
|I=IMPORTANT
|igen=Q
|n=yes
|sortkey=QG
|vdef=n
|opt=yes
|vopttext=yes
|I18dot=
|unspec=yes
}}</noinclude>
kton6fioez1a42iwt6u6cd8i48g1e30
10960
10959
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_QGIS]]
10959
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#if:{{{2|}}}||{{#if:{{{1|}}}||{{#ifeq:{{#invoke:Igenmod|extcode}}|s|[[Category:SVG created with QGIS]]}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|{{Data|item=Q1329181|property=P154}}}}
|3=QGIS
|4={{{more|}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8={{{IMPORTANT|}}}
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}}}
|16={{Label|Q1329181}}
|17=<!-- {{{iconsize|}}} -->
|base=Created with ...}}<noinclude>
{{SVG created with/doc
|I=IMPORTANT
|igen=Q
|n=yes
|sortkey=QG
|vdef=n
|opt=yes
|vopttext=yes
|I18dot=
|unspec=yes
}}</noinclude>
kton6fioez1a42iwt6u6cd8i48g1e30
Tempilet:Xconv
10
1435
10961
2024-04-22T20:39:46Z
commons>Verdy p
0
10961
wikitext
text/x-wiki
<includeonly>{{#if: {{{box|}}}
| {{Colorbox
|1 = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}}
|2 = {{{1|}}} {{{2|}}} {{{3|}}} {{{4|}}} {{{5|}}} = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}}
}}
| {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}}
}}</includeonly><noinclude>{{Documentation}}</noinclude>
lzp9dbjcz1j8howa06k8xf46o9bxnoq
10962
10961
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Xconv]]
10961
wikitext
text/x-wiki
<includeonly>{{#if: {{{box|}}}
| {{Colorbox
|1 = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}}
|2 = {{{1|}}} {{{2|}}} {{{3|}}} {{{4|}}} {{{5|}}} = {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}}
}}
| {{#invoke:Xconv|xconv|{{{1|}}}|{{{2|}}}|{{{3|}}}|{{{4|}}}|{{{5|}}}}}
}}</includeonly><noinclude>{{Documentation}}</noinclude>
lzp9dbjcz1j8howa06k8xf46o9bxnoq
Tempilet:Mono
10
1436
10963
2024-08-28T17:33:46Z
commons>CptViraj
0
Protected "[[Template:Mono]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10963
wikitext
text/x-wiki
<templatestyles src="Template:Mono/styles.css"/><span class="monospaced">{{{2|{{{1}}}}}}</span><noinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
30zpd0g5gc7hnagu8xmaj3lr9bb9o90
10964
10963
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Mono]]
10963
wikitext
text/x-wiki
<templatestyles src="Template:Mono/styles.css"/><span class="monospaced">{{{2|{{{1}}}}}}</span><noinclude>
{{Documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
30zpd0g5gc7hnagu8xmaj3lr9bb9o90
Tempilet:Created with Pstoedit
10
1437
10965
2024-08-09T23:48:18Z
commons>Jarekt
0
replace {{autotranslate}} with call to Module:Autotranslate
10965
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#ifeq:{{{1}}}|v||{{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|Pstoeditlogo-large.png}}
|3=pstoedit
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be
-->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=Pstoedit|igen=P|opt=yes|catnam=Created with pstoedit|desc=|inval=no}}
</noinclude>
70o9rq13jmgiqpgykv5myf536y8b523
10966
10965
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_Pstoedit]]
10965
wikitext
text/x-wiki
{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|<!--
-->{{{vw|{{{vwidth|{{{width|}}}}}}}}}|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#ifeq:{{{1}}}|v||{{{1|}}}}}}}
|2={{#if:{{{logo|}}}|{{{logo}}}|Pstoeditlogo-large.png}}
|3=pstoedit
|4={{{more|.}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{sub|{{{subcat|{{{subcategory|}}}}}}}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#switch:{{{2}}}|n=N|v=V|s=S<!-- "n" will never be
-->|{{#switch:{{{1}}}|n=N|v=V|s=S|{{iffile|s|v}}}}}}}}<!-- only SVG are created -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{{topic|}}}
|base=Created with ...}}<noinclude>
{{SVG created with/doc|shortkey=Pstoedit|igen=P|opt=yes|catnam=Created with pstoedit|desc=|inval=no}}
</noinclude>
70o9rq13jmgiqpgykv5myf536y8b523
Tempilet:Non-native-en
10
1438
10967
2025-06-28T00:04:12Z
commons>Tholme
0
[[Template:mbox]] - fixes nightmode
10967
wikitext
text/x-wiki
{{Mbox|image=<span style="font-size:2em;"><span style="color:var(--color-progressive, #36c)">en</span>-1</span>|text=The description below was composed by a non-native English speaker.<br>You are cordially invited to improve the literal quality of any textual expression.}}
eptjxo7ztc5a7janq606qju93luvt1a
10968
10967
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Non-native-en]]
10967
wikitext
text/x-wiki
{{Mbox|image=<span style="font-size:2em;"><span style="color:var(--color-progressive, #36c)">en</span>-1</span>|text=The description below was composed by a non-native English speaker.<br>You are cordially invited to improve the literal quality of any textual expression.}}
eptjxo7ztc5a7janq606qju93luvt1a
Tempilet:Created with JFreeChart
10
1439
10969
2025-12-24T20:38:22Z
commons>Sebastian Wallroth
0
Q1676599
10969
wikitext
text/x-wiki
{{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!--
-->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|JFreeChart 3D pie chart sample.svg|JFreeChart 3D pie chart sample.svg}}<!--
-->|{{#switch:v|{{{2}}}|{{{1}}}=JFreeChart 3D pie chart sample.svg||JFreeChart 3D pie chart sample.svg}}}}}}
|3=JFreeChart
|4={{{more|}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}|plot}}<!-- "ch" for chart ? -->
|16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q1676599}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{Label|Q1676599}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q1676599}}|<!--
-->{{Label|Q1676599}}<!--
-->}}}}}}
|17={{{iconsize|20px}}}
|base=Created with ...}}<!--
with code
-->{{#if:{{{code|{{{c1|}}}}}}{{{code2|{{{c2|}}}}}}{{{code3|{{{c3|}}}}}}|{{Created with code<!--
-->|c1={{{code|{{{source|{{{script|{{{c1|}}}}}}}}}}}}|h1={{#if:{{{title|{{{h1|}}}}}}|{{{title|{{{h1|}}}}}} |JFreeChart}}<!--
-->|l1={{#if:{{{syntax|{{{l1|}}}}}}|{{{syntax|{{{l1}}}}}}|jfreechart}}<!--
-->|f1={{{format|{{{f1|}}}}}}|s1={{{collapse|{{{s1|}}}}}}<!--
-->|d1={{{d1|}}}|e1={{{expl|{{{e1|}}}}}}|n1={{{n1|}}}<!--
-->|c2={{{code2|{{{c2|}}}}}}|h2={{{title2|{{{h2|}}}}}}<!--
-->|l2={{#if:{{{syntax2|{{{l2|}}}}}}|{{{syntax2|{{{l2|}}}}}}|jfreechart}}<!--
-->|f2={{{format2|{{{f2|}}}}}}|s2={{{collapse2|{{{s2|}}}}}}<!--
-->|d2={{{d2|}}}|e2={{{expl2|{{{e2|}}}}}}|n2={{{n2|}}}<!--
-->|c3={{{code3|{{{c3|}}}}}}|h3={{#if:{{{title3|{{{h3|}}}}}}|{{{title3|{{{h3|}}}}}}|<nowiki/> JFreeChart data}}<!--
-->|l3={{#if:{{{syntax3|{{{l3|}}}}}}|{{{syntax3|{{{l3|}}}}}}|text}}<!--
-->|f3={{{format3|{{{f3|}}}}}}|s3={{{collapse3|{{{s3|}}}}}}<!--
-->|d3={{{d3|}}}|e3={{{expl3|{{{e3|}}}}}}|n3={{{n3|}}} }}}}<noinclude>
<br>
<div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center">
[[File:Dialog-go-hand-ltr.svg|32px|left]][[File:JFreeChart 3D pie chart sample.svg|32px|right]]
The template {{Tl|Created with JFreeChart}} (shorthand:{{Tl|JFreeChart}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/>
* ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|JFreeChart|'''n'''}}
* ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|JFreeChart|'''v'''}} or {{Tld|JFreeChart|2='''err='''##}}
</div>
{{SVG created with/doc|shorthand=JFC|sortkey=J|top=plot|igen=J|n=yes|opt=yes|unspec=yes|sub=|desc={{en|Used to mark files created with JFreeChart.}}|cattext=<nowiki/>
See otherwise:
* {{Catcont|JFreeChart diagrams|3=*}}
<br>
}}
</noinclude>
5uvxg0cpidbb99k01tgx8g84ek6jfht
10970
10969
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Created_with_JFreeChart]]
10969
wikitext
text/x-wiki
{{#switch:n|{{{2|}}}|{{{1|}}}=|{{SVGvalid|{{{1|}}}|{{{2|}}}|{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{{vs|{{{vstyle|{{{style|}}}}}}}}}|{{{vw|{{{vwidth|{{{width|}}}}}}}}}<!--
-->|{{{vt|{{{vtxt|{{{vtext|.}}}}}}}}}|{{{vo|{{{vopt|{{{opt|}}}}}}}}}}}}}<!--
-->{{#invoke:Autotranslate|autotranslate
|1={{#if:{{{2|}}}|{{{1|}}}|{{#switch:{{{1}}}|v|n|s|=|#default={{{1|}}}}}}}
|2={{#if:{{{logo|{{{4|}}}}}}|{{{logo|{{{4}}}}}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|0|JFreeChart 3D pie chart sample.svg|JFreeChart 3D pie chart sample.svg}}<!--
-->|{{#switch:v|{{{2}}}|{{{1}}}=JFreeChart 3D pie chart sample.svg||JFreeChart 3D pie chart sample.svg}}}}}}
|3=JFreeChart
|4={{{more|}}}
|5={{{width|}}}
|6={{{style|}}}
|7={{{cat|{{{category|}}}}}}
|8=
|9={{{sort|{{{key|{{{sortkey|}}}}}}}}}
|10={{{subc|}}}{{{sub|}}}
|11={{{err|{{{errors|{{{errnum|}}}}}}}}}
|12={{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}|{{#ifeq:{{{err|{{{errors|{{{errnum|}}}}}}}}}|0|V|I}}<!--
-->|{{#if:{{{2|}}}|{{#switch:{{{2}}}|v=V|n=N|s=S}}|{{#switch:{{{1}}}|v=V|n=N|s=S<!--
-->|{{#ifeq:{{NAMESPACE}}|File|{{#invoke:Igenmod|extcode}}}}}}}}}}<!-- s(SVG) or n(PNG) -->
|13={{{vo|{{{vopt|{{{opt|}}}}}}}}}
|14={{#if:{{{topic|}}}|{{{topic}}}|plot}}<!-- "ch" for chart ? -->
|16={{#switch:n|{{{2|<noinclude>n</noinclude>}}}|{{{1}}}={{Label|Q1676599}}|{{#if:{{{err|{{{errors|{{{errnum|}}}}}}}}}<!--
-->|{{Label|Q1676599}}|{{#switch:v|{{{2}}}|{{{1}}}={{Label|Q1676599}}|<!--
-->{{Label|Q1676599}}<!--
-->}}}}}}
|17={{{iconsize|20px}}}
|base=Created with ...}}<!--
with code
-->{{#if:{{{code|{{{c1|}}}}}}{{{code2|{{{c2|}}}}}}{{{code3|{{{c3|}}}}}}|{{Created with code<!--
-->|c1={{{code|{{{source|{{{script|{{{c1|}}}}}}}}}}}}|h1={{#if:{{{title|{{{h1|}}}}}}|{{{title|{{{h1|}}}}}} |JFreeChart}}<!--
-->|l1={{#if:{{{syntax|{{{l1|}}}}}}|{{{syntax|{{{l1}}}}}}|jfreechart}}<!--
-->|f1={{{format|{{{f1|}}}}}}|s1={{{collapse|{{{s1|}}}}}}<!--
-->|d1={{{d1|}}}|e1={{{expl|{{{e1|}}}}}}|n1={{{n1|}}}<!--
-->|c2={{{code2|{{{c2|}}}}}}|h2={{{title2|{{{h2|}}}}}}<!--
-->|l2={{#if:{{{syntax2|{{{l2|}}}}}}|{{{syntax2|{{{l2|}}}}}}|jfreechart}}<!--
-->|f2={{{format2|{{{f2|}}}}}}|s2={{{collapse2|{{{s2|}}}}}}<!--
-->|d2={{{d2|}}}|e2={{{expl2|{{{e2|}}}}}}|n2={{{n2|}}}<!--
-->|c3={{{code3|{{{c3|}}}}}}|h3={{#if:{{{title3|{{{h3|}}}}}}|{{{title3|{{{h3|}}}}}}|<nowiki/> JFreeChart data}}<!--
-->|l3={{#if:{{{syntax3|{{{l3|}}}}}}|{{{syntax3|{{{l3|}}}}}}|text}}<!--
-->|f3={{{format3|{{{f3|}}}}}}|s3={{{collapse3|{{{s3|}}}}}}<!--
-->|d3={{{d3|}}}|e3={{{expl3|{{{e3|}}}}}}|n3={{{n3|}}} }}}}<noinclude>
<br>
<div style="border:2px solid#0F0;background-color:#CFB;margin:0 0 1.5em;text-aligno:center">
[[File:Dialog-go-hand-ltr.svg|32px|left]][[File:JFreeChart 3D pie chart sample.svg|32px|right]]
The template {{Tl|Created with JFreeChart}} (shorthand:{{Tl|JFreeChart}}) marks as well {{W|Vector graphics}} as {{W|Computer graphics}}, e.g. <code>.png</code>.<br style="clear:both"/>
* ''Computer graphics'' (e.g. files .PNG) should be marked with {{Tld|JFreeChart|'''n'''}}
* ''Vector graphics'' should be checked for their W3C-validity and then marked either by {{Tld|JFreeChart|'''v'''}} or {{Tld|JFreeChart|2='''err='''##}}
</div>
{{SVG created with/doc|shorthand=JFC|sortkey=J|top=plot|igen=J|n=yes|opt=yes|unspec=yes|sub=|desc={{en|Used to mark files created with JFreeChart.}}|cattext=<nowiki/>
See otherwise:
* {{Catcont|JFreeChart diagrams|3=*}}
<br>
}}
</noinclude>
5uvxg0cpidbb99k01tgx8g84ek6jfht
Tempilet:Image generation/doc
10
1440
10971
2026-07-29T13:04:02Z
commons>ForeverFlying
0
replacing script with {{U|User:Aaron Liu/SvgCheck-Minus.js}} because Chealer is globally banned
10971
wikitext
text/x-wiki
<!-- {{redirects|Igen}}
-->{{Multilingual description
|en = This template generates a description about an SVG file's creation and properties, and adds appropriate categories.
|de = Diese Vorlage dient zur Generierung der Beschreibung, wie eine SVG-Datei erzeugt worden ist und welche Eigenschaften ihr zukommen;<br>
{{0|WWW}}es werden die entsprechenden Kategorisierungen vorgenommen — diese können zahlreich sein.
|es = Esta plantilla genera una descripción de la creación y propiedades de un archivo SVG, añadiendo las categorías apropiadas.
|fr = Ce modèle génère une description sur la création d'une image et ses propriétés, et ajoute aux catégories (potentiellement nombreuses) appropriées.
|ja = このテンプレートは、SVGファイルの作成およびプロパティに関する解説を生成し、適切なカテゴリを追加します。
|it = Questo template genera una descrizione relativa alla creazione di un file SVG e alle sue proprietà;<br />{{0|WWW}}vengono associate una o più categorie.
|nl = Dit sjabloon genereert een beschrijving over de aanmaak en eigenschappen van een SVG-bestand, en voegt de juiste categorieën toe.
}}
----
{{Heavily used template|edit=✔|3=✔}} <!-- edit sandbox -->
{{Use sandbox|testcase= }}<!--
==================================================================================================
BEGIN OF TEMPLATE BOX
==================================================================================================-->
{{TemplateBox
<!------------------------------------------------------------------------------------------------
TEMPLATE BOX - BEGIN OF parameter section
-------------------------------------------------------------------------------------------------->
|1=1
|1d= {{Mbox
|text = The "tool" this refers to can be either the tool which generated the current version of this file, or a different tool which generated a previous version of the same image.<!-- Chealer 2024-10-21 -->
|type = content
}}
Name of the tool (case sensitive) to get the template name "Created with <nowiki>{{{1}}}</nowiki>"
:: or
Abbreviation of the tool name, case-insensitive:
* <code>A</code> for {{tl|Created with Adobe Illustrator|Adobe Illustrator}}
* <code>AH</code> for {{tl|Created with Adobe-hand|Adobe-hand}}
* <code>B</code> for {{tl|Created with BKchem|BKchem}}
* <code>C</code> for {{tl|Created with ChemDraw|ChemDraw}}
* <code>D</code> for {{tl|Created with CorelDRAW|Corel'''D'''RAW}}
* <code>E</code> for {{tl|Created with ElCompLib|ElCompLib}}
* <code>F</code> for {{tl|Created with Fig2SVG|Fig2SVG}}
* <code>G</code> for {{tl|Created with Gnuplot|Gnuplot}}
* <code>H</code> for {{tl|Created with Inkscape-hand|Inkscape-hand}}
* <code>I</code> for {{tl|Created with Inkscape|Inkscape}} {{color|#777|(default tool)}}
* <code>J</code> for {{tl|Created with JFreeChart|JFreeChart}}
* <code>L</code> for {{tl|Created with LibreOffice|LibreOffice}}
* <code>M</code> for {{tl|Created with MetaPost|MetaPost}}
* <code>O</code> for {{tl|Created with Other tool|Other tool}}
* <code>P</code> for {{tl|Created with Pstoedit|Pstoedit}}
* <code>Q</code> for {{tl|Created with QGIS|QGIS}}
* <code>R</code> for {{tl|Created with R|R}}
* <code>S</code> for {{tl|Created with Sodipodi|Sodipodi}}
* <code>T</code> for {{tl|Created with Text Editor|Text Editor}} ''via the adapter'' {{tl|HandSVG}}
* <code>U</code> for {{tl|Created with Unknown SVG facility|Unknown tool}}
* <code>V</code> for {{tl|Created with Vim|Vim}}
* <code>VM</code> for {{tl|Created with Vector Magic|Vector Magic}}
* <code>W</code> for {{tl|Created with Winplot|Winplot}}
* <code>X</code> for {{tl|Extracted with Inkscape}}
'''Note''': "<code>A$</code>" abbreviates for "{{T0|Adobe and Commonist}}"
: {{0|ww}}"<code>Ac</code>" abbreviates for "{{T0|Created with Vectornator|Adobe and Vectornator}}"
: {{0|ww}}"<code>IA</code>" abbreviates for the mixture {{C|SVG created with Inkscape and Adobe Illustrator|Inkscape & Adobe}}
: {{0|ww}}"<code>Ih</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki></code>
: {{0|ww}}"<code>IH</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki> without</code> {{t|HandSVG}}
: {{0|ww}}"<code>II</code>" abbreviates for "{{T0|Inkscape and Heraldicon|link=n}}"
: {{0|ww}}"<code>Im</code>" abbreviates <code><nowiki>{{Inkscape|…|IMPORTANT=yes}}</nowiki></code>
: {{0|ww}}"<code>Ic</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}} postprocessing</code>
: {{0|ww}}"<code>Io</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://jakearchibald.github.io/svgomg/|SVGO}} postprocessing</code>
: {{0|ww}}"<code>Is</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://svgoptimizer.com/|svgoptimizer}} postprocessing</code>
: {{0|ww}}"<code>Iz</code>" abbreviates <code><nowiki>{{Inkscape|…|optimized}}</nowiki></code> (scour)
: {{0|ww}}"<code>I$</code>" abbreviates for "{{T0|Inkscape and Commonist}}"
: {{0|ww}}"<code>ItB</code>" abbreviates <code><nowiki>{{</nowiki>'''I'''nkscape '''t'''o '''B'''itmap<nowiki>}}</nowiki></code>
: {{0|ww}}"<code>S-</code>" abbreviates for "{{T0|SimplSVG|Simplified SVG}}", drawn with Text Editor
|1def=<code>Inkscape</code> <!-- A$ -->
|1stat=optional-
|2=2
|2d=''either'' character "v" ('''v'''alid) (if absent, <code>v</code> is assumed with SVG files)
: ''or'' the numeric error count from W3C validation ("0" = "v", "-1" = uncheckable)
: ''or'' character "s" for SVG files, to suppress the validity box (but with error count <code>e=</code>){{Clarify|date=November 2024}}
''See'' the detailed information for [[#Parameter 2|parameter #2]] and [[#Suppress the validity box|suppressing validity information]]
|2def=<code>v</code>
|2stat=optional-
|3=3<ref name="a">Every one of the signs ($, +, -) or parameters (%, ~, !, ?, §, &, <, ^,
>, ×, \, →, ⇒, °, <code>Ɨ</code>) can be passed in any sequence, each as an argument for one of the unnamed parameters #1 through #9.{{Clarify|date=October 2024}}</ref>
|3d=necessary because the template cannot determine from where it is transcluded{{Clarify|date=November 2024|Yet, it's marked as optional. Chealer 2024-11-01}}:
* a "-" (minus sign) to terminate the left-floating with {{tl|clr}}<br />''<small>Can be necessary if the template is used '''outside''' the {{tl|Information}} box</small>''
* a "+" (plus sign) when used in <code><nowiki>|Other fields</nowiki></code> or <code><nowiki>|Other fields 1</nowiki></code>. In this case parameter <code>fn=</code> may specify a <code>field name</code> for {{tl|Information field}}.
{{Mbox
|text = When a <code>field name</code> is specified, value <code>+</code> is implied, so that this parameter can be omitted. Otherwise, the <code>field name</code> "development" is nationalized by {{tl|I18n/COA}}.
}}
|3stat=optional-
|4=4<ref name="a" />
|4d=a "$" (dollar sign) when "[[File:Commonist2.svg|14px]] Uploaded with Commonist" should be added. In this case
* parameter <code>$u=</code> may specify a user, e.g. <nowiki>{{U|user}}</nowiki>
* parameter <code>$l=</code> may specify a logo (☭){{Clarify|date=November 2024}}, e.g. <nowiki>[[File:xyz.svg|20px]]</nowiki><ref name="c">This parameter allows suppression with the parameter value "-" (or just the parameter without any value, e.g. <code>cat=</code>){{Clarify|date=November 2024}}</ref>
* parameter <code>$m=</code> may specify a more, e.g. &nbsp; explanation
* parameter <code>$c=</code> may specify a category, e.g. <nowiki>[[Category:Othercat| ]]</nowiki><ref name="c" />
* parameter <code>$s=</code> may specify a subcategory, e.g. <code>:diffusion</code><ref name="c" />
* parameter <code>$w=</code> may specify a [[Template:Igen/sub|topic]], e.g. <code>m</code> or <code>projection</code>
* parameter <code>$f=</code> may specify a linefeed before, e.g. <code><nowiki>br</nowiki></code>, <code>clr (default: <code>none</code></code><ref name="c" />)
If any one of these seven parameters is specified the "<code>$</code>" is implied and can be omitted;<br />
for <code>$l</code>, <code>$c</code>, <code>$s</code> or <code>$f</code> it is enough if the suppression is defined with an empty value e.g. <code>$c=</code>{{Clarify|date=November 2024}}
|4stat=optional-
|5=5<ref name="a" /><ref>Every one of the eight signs can be used either as a positional parameter, or as a named parameter passing the value to the corresponding template; see [[#Named and unnamed parameters|Named and unnamed parameters]].</ref>
|5d=For additional parametrizing see [[#Named and unnamed parameters|individual information]]
* a "%" (percent sign) or "%v" to insert the {{tl|Igen/emb|Translate}} tag, "%s" when option [[Commons:Translation possible/Learn more#Multiple translations within one SVG file|<switch>]].
* a "~" (tilde) to insert the {{tl|Cdata|pgf-Cdata}} tag.
* an "<code>!</code>" (exclamation mark) to insert the {{tl|BadSVG}} tag.
* a "?" (question mark) to insert the {{tl|Rsvg bug}} tag.
* a "§" ("section" sign) to insert the {{tl|TracedSVG}} tag.
* an "&" (ampersand) to insert the {{tl|Igen/amp|QGIS}} tag.
* a "<" ("less" sign) to insert the {{tl|Igen/ptx|Path text SVG}} tag.
* a "<code>^</code>" {{anchor|circum}}(circumflex sign) to insert the {{tl|Quality image}} tag.
* a ">" ("greater" sign) to inhibit for {{C|Large SVG files|large SVG}} the "show source" validator option.
* a "<code>×</code>" (multiplication sign) to insert the {{tl|SimplSVG|draw by hand}} tag.
* a "<code>\-</code>" (backslash&minus) or "\" to insert the {{tl|Superseded}} tag, or
: a "<code>\+</code>" (backslash&plus) to insert the {{tl|Supersedes}} tag', or
: a "<code>\\</code>" (backslash twice) to insert the {{tl|VVA}} tag.
: a "<code>\#</code>" (backslash&number) to insert {{tl|PDF version available}}.
* an "→" (arrow right) or "⇒" to insert the {{tl|Convert to SVG}} tag.
* an "←" (arrow left) to insert the {{tl|NoInkscape}} tag.
* a "<code>°</code>" (degree sign) to insert the {{tl|Easy border}} tag.
|5stat=optional-:
<!--
|6=6<ref name="a" />
|7=7<ref name="a" />
|8=8<ref name="a" />
|8d=(''free for future expansions'')
|8stat=optional- -->
|10=e
|10aliases=err
|10label='''e'''rror count
|10d=''when invalid SVG'': error count from W3C validation ("0" for ''valid'', "-1" for ''uncheckable''){{Clarify|date=November 2024}}<br />
(has precedence over any argument of parameter 2)<br />
'''Note''': when uncheckability is specified, <code>Other tool</code> is always implied.
|10stat=optional-
|15=m
|15aliases=more
|15label='''m'''ore text
|15d=optional additional text (use <code>M=</code> to precede that text with a space{{Clarify|date=November 2024}})
|15def=<code>.</code>
|15stat=optional-
|20=c<ref name="c" />
|20aliases=cat
|20label='''c'''ategories
|20d=category/categories, complete with brackets (and sorting), or without; or suppress with <code>c=-</code><br />
plain text ''without'' brackets becomes completed with <code><nowiki>[[Category: ]]</nowiki></code>
|20stat=optional-
|25=C
|25label='''C'''olor
|25d=the {{t0|tincture|tincture}} can be defined
|25stat=optional-
|26=cb
|26label='''c'''olor '''b'''oxes
|26d=for more details see section [[#Color boxes]]
|26stat=optional-
|30=s<ref name="c" />{{Anchor|subcat}}
|30aliases=sub
|30label='''s'''ubcategory
|30d=suffix to the category name for diffusion but also an information for subtemplates
* <code>sub=</code> is used only for category diffusion (use <code>sub=-</code> for no diffusion){{Clarify|date=November 2024}}
* <code>S=</code> (upper case) like <code>sub=</code>, with the insertion of an inbetween space
* <code>s:=</code>, <code>s-=</code> (lower case) with insertions, see [[#Subcat & topic]]
* <code>s=</code> (lower case) can be used instead, or ''in addition'' to all the above;
: With a [[Template_talk:Image_generation/Archive_1#TopTb|''one-letter-code'']] for <code>s=</code> the {{T0|Igen/top|topic}}s-subcategory may be [[Template:Igen/sub|defined]], as
: :CoA, :Diagrams, :Flags, :Icons, :Logos, :Maps, :Signs, :Unicode, :Trigonometry,
: When <code>sub</code>/<code>S</code> and <code>s</code> are both defined, <code>sub</code>/<code>S</code> is used for subcategorizing,
: and <code>s</code> is used (like <code>w</code>) as an [[#Subcategory specification|information]] and ''[[Template:Igen/sub|topic]]'' for several subtemplates
<span style="background:#FFD;border:1px #B40 solid;padding:0 6px;">Select the best fitting subcategory, or create an appropriate new one</span>
|30stat=optional-
|35=k
|35aliases=key
|35label=sort '''k'''ey
|35d=key for sorting within the category (use <code>K=</code> for the insertion of a preceding space)<br />
<code>key</code> is used e.g. for category sorting, and in {{T0|HandSVG}} for subcategorizing
|35stat=optional-
|40=v
|40aliases=vt/vtxt
|40label='''v'''alid, invalid
|40d=additional text for Valid/Invalid SVG box (use <code>V=</code> to precede that text with a space){{Clarify|date=November 2024}}
|40stat=optional-
|45=o
|45aliases=opt
|45label='''o'''ption
|45d=to set or overwrite the ''display source'' option for ValidSVG/InvalidSVG{{Clarify|date=November 2024}}
|45stat=optional-
|50=n
|50aliases=name
|50label=tool '''n'''ame
|50d=a tool name or a description for {{tl|Created with other tool}}{{Clarify|date=November 2024}}<br />
'''Note''': when <code>n[ame]</code> is specified, <code>Other tool</code> is implied and parameter 1 can be omitted
|50stat=optional-
|55=u
|55aliases=user/U/by
|55label='''u'''ser
|55d=user name, or other text. May be coded e.g. with {{tl|U}}, {{tl|Uc}}, {{tl|Ud}}, {{tl|Ut}}, …<br />
Use <code>U=</code> to create the user link: <code>U=xyz</code> ⇒ <code><nowiki>{{U|xyz}}</nowiki></code>.{{Clarify|date=November 2024}}<br />
'''<code>by</code>''' creates a user link. May be coded with "[" or "{" (see {{Tl|By}})
|55stat=optional-
|60=code<br>code2<br>code3
|60aliases=c1…c3
|60label=code display
|60d=display of the [[Template:Created with code/doc#Template parameters|source code]] used for generation, e.g. the SVG code. In this case
* parameter <code>l1=</code> or <code>syntax=</code> may specify or change the [[mw:Extension:SyntaxHighlight GeSHi#Supported languages|code]] '''l'''anguage (syntax)
* parameter <code>h1=</code> or <code>title=</code> may specify another '''h'''eadline, or suppress "<code>none</code>"
* parameter <code>f1=</code> or <code>format=</code> may specify '''f'''ormat style options
* parameter <code>s1=</code> or <code>collapse=</code> may specify a title text for collapsability headline
* parameter <code>d1=</code> for category diffusion
* parameter <code>e1=</code> may specify '''e'''xplanatory text preceding the code block
* parameter <code>g1=</code> for font size
* parameter <code>n1=</code> for a trailing '''n'''ote below of the code block
: More parameters with suffices "2" and "3" can be used for more codes:
:* <code>c2=</code>, <code>l2=</code> or <code>code2</code> with <code>syntax2</code>, <code>title2</code>, <code>format2</code> etc.
:* <code>c3=</code>, <code>l3=</code> or <code>code3</code> with <code>syntax3</code>, <code>title3</code>, <code>format3</code> and so on
|60stat=optional-
|65=vsub<ref name="c"/>
|65aliases=Vs
|65label='''vs'''ub
|65d=category diffusion <code>of Text editor</code> for e.g. HandSVG, Inkscape-Hand, Adobe-hand;<br />
Use <code>Vs=</code> for an inbetween space; set <code>vsub=-</code> to suppress the category diffusion.
|65def=<code>s</code>
|65stat=optional-
|70=vs<ref name="c" />
|70aliases=vstyle
|70label='''vs'''tyle
|70d=[[#vstyle|vstyle option]]: <code>vs=</code> or <code>vs=fl</code> for float-left (= same line){{Clarify|date=November 2024}}
|70def='''<code>-</code>'''
|70stat=optional-
|75=p
|75aliases=P
|75label='''p'''receding
|75d=additional '''p'''receding text; to be displayed ''left'' or ''above'' of the boxes
|75stat=optional-
|80=t
|80aliases=T
|80label='''t'''railing text
|80d={{anchor|trailtext}}additional '''t'''railing text; is displayed ''right'' or ''below'' of the boxes<br />If tags or secondary tools should appear in another sequence, use
* t2 (before Commonist}
* t3 (after Commonist, before <code>code</code>)
* t4 (immediately after <code>code</code>) <!-- – use uppercase "T " to precede with <code><nowiki><br></nowiki></code> -->
* t5 (before "Quality image")
* t6 (after QI, <small>the last ''advantage'' tag, before all the ''disadvantage'' tags</small>)
The same with an uppercase <code>T</code> cares for a newline before
|80stat=optional-
|85=g
|85aliases=gl
|85label='''g'''raphic lab
|85d=specify the national {{Tl|Graphic Lab}} with the {{w|List of ISO 639-1 codes|ISO 639-1}} language code<br />
(uses the [[#subcat|topics-subcategory]]), e.g. <code>gl=it|s=m</code> for the {{tl|Laboratorio grafico mappa}}<br />
Abbreviations: "gd" for "g=de", "ge" for "g=es", "gf" for "g=fr", "gi" for "g=it", but "gl" for "g=en"<br />
Together with <code>s=c/f/m</code> the national [[Commons:WikiProject Heraldry|heraldry project]] is achieved (e.g. {{T0|Projekt Wappen|de}}, {{T0|THV|es}}, {{T0|Projet Blasons|fr}}).<br />
The parameters <code>gs=</code> may be used to specify the <code>style</code>{{Clarify|date=November 2024}}, <code>gc=</code> for [[#o-sub|subcategorizing]].<br />
See {{T0|Graphic Lab/statistics}} for more information.
|85stat=optional-
|90=r<ref name="c" />
|90label='''r'''etouched
|90d=specify the {{tl|Retouched picture}}, with parameters r= <small>and</small> editor= editoff= orig= origoff=<br />
See [[#RetP|Retouched picture]] for more information.
|90stat=optional-
|95=w<ref name="c" />
|95aliases=what/topic<ref name="c" />
|95label='''w'''hat (topic)
|95d=With <code>w=</code> the [[Template talk:Igen/top|topic]] can be altered or suppressed<br />
See also the [[#Subcategory specification|subcategories description]]
|95def=<code>s</code>
|95stat=optional-
<!------------------------------------------------------------------------------------------------
TEMPLATE BOX - END OF parameter section
-------------------------------------------------------------------------------------------------->
|name={{BASEPAGENAME}}
|desc={{Non-native-en}}
{{Lua|Module:Igenmod}}Short notation for the {{C|SVG created with ... templates}} {{nobold|and the non-SVG}} {{C|Created with ... templates}}, {{nobold|helps to display}}
<div style="float:left;padding-right:2em;width:30%">{{nobold|__TOC__}}</div>
* {{nobold|W3C validation}}
* {{nobold|SVG tool}}
* <small>optional: </small> SVG code <small>used for creation</small><br /><small>{{0|WWWWw}}{{nobold|and ''a great number of [[#Other tags|other taggings]]''}}</small> {{nobold|formatted ''within one single line''.}}<br />
Categorisings {{nobold|occur depending on tool name, validation and other tags.}}
{{nobold|Some parameters/tags are ''only'' for SVG files, a few others only for raster images.}}
In case of difficulties {{nobold|using this template, its tag codes and this documentation, you may use {{U|User:Aaron Liu/SvgCheck-Minus.js|the simpleSVGcheck utility script}}, or the easier {{T|File generation description|incl=3}}. }}
{{nobold|Parameters for {{Tlf|File generation description}} can be e.g.}}
<pre style="font-weight:normal">
|other fields = {{ File generation description
|SVG tool = ChemDraw
|W3C error count = 0
|Topic = structural formula
|Text as path = yes }}
</pre>
{{nobold|less cryptic than{{0}} <pre style="font-weight:normal">|other fields={{Image generation|C|+|<}}</pre> {{0}}which does exactly the same.}}
<br />
<br />
{{nobold|<s>{{T0|Igen/coa}} was</s> a version for {{W|Coats of arms}}, in special with {{T0|COAInformation}}.}}<br />
{{nobold|Now {{W|Coats of arms}} are serviced with {{T0|COAInformation}} and {{M|IgenCoa}}, after conversion.}}{{Clarify|date=November 2024}}
{{clr}}
|namespace=file
|usergroup=all
|placement=
|usage-notes=<!--
--------------------------------------------------------------------------------------------------
TEMPLATE BOX - BEGIN OF usage-notes
-------------------------------------------------------------------------------------------------->
=== Script support ===
The {{W|User scripts|user script|commons}} {{Em|{{U|User:Aaron Liu/SvgCheck-Minus.js}}}} has been developed to help maintaining file descriptions. Paste the following three lines into [[Special:Mypage/common.js|your common.js]], or other MediaWiki skin-related JavaScript page. If required, look for your specific script page via the ''Skin'' section of [[Special:Preferences#mw-prefsection-rendering|your preferences]].
<syntaxhighlight lang=javascript line copy>
// [[User:Aaron Liu/SvgCheck-Minus.js]]
if (mw.config.get('wgNamespaceNumber') === 6 && /SVG/i.test(mw.config.get('wgTitle').slice(-3)))
mw.loader.load('//commons.wikimedia.org/w/index.php?title=User:Aaron Liu/SvgCheck-Minus.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
The ''simpleSVGcheck.js'' script enables users to use {{T|Image generation}} template without knowing all details of its parametrizing. The script cares for the most essential settings, and does a lot of standardizing the file descriptions. Expert users may complete the suggestions made by the script (e.g. by adding more tags) before saving the script’s changes of the file description page.
=== Alternative template ===
{{T|File generation description}} is a version with <u>descriptive parameter names</u> for users not liking the cryptic short codes.<br />
Most taggings can be specified in a better human-readable format with this more talkative <!-- inbetween --> template. A rich and detailed {{T0|File generation description/doc|documentation}} explains how easy it is to use that option.
=== Other tags ===
Can be set either by a shorthand notation code, or expressed like in the following examples:
<table>
<tr>
<th style="text-align:left">other tag template</th><th style="text-align:center"><small>code</small></th>
</tr><tr>
<td>{{tl|Add languages}}</td><td>{{0|(}}<code>%a</code></td>
</tr><tr>
<td>{{tl|BadSVG}}</td><td>{{0|((}}<code>!</code></td>
</tr><tr>
<td>{{tl|TopoSVG}}</td><td>{{0|l}}<code>!=t</code></td>
</tr><tr>
<td>{{tl|TopoSVG}} (required raster)</td><td>{{0|l}}<code>!=r</code></td>
</tr><tr>
<td>{{tl|FakeSVG}}</td><td>{{0|i}}<code>!=f</code></td>
</tr><tr>
<td>{{tl|Broken file}}</td><td><code>(bf)</code></td>
</tr><tr>
<td>{{tl|Cdata}}</td><td>{{0|((}}<code>~</code></td>
</tr><tr>
<td>{{tl|Colorblind}}</td><td><code>(bl)</code></td>
</tr><tr>
<td>{{tl|Commonist}}</td><td>{{0|((}}<code>$</code></td>
</tr><tr>
<td>{{tl|Coablazon}}</td><td>{{0|((}}<code>cb</code></td>
</tr><tr>
<td>{{tl|COAref}}</td><td>{{0|((}}<code>rf</code></td>
</tr><tr>
<td>{{tl|Convert to SVG}}</td><td></td>
</tr><tr>
<td>{{tl|UseXML|Convert to HTML}}</td><td><code>(××)</code></td>
</tr><tr>
<td>{{tl|Convert to international}}</td><td><code>(in)</code></td>
</tr><tr>
<td>{{tl|Convert to multilang}}</td><td><code>(ml)</code></td>
</tr><tr>
<td>{{tl|Convert to wikichart}}</td><td><code>(wc)</code></td>
</tr><tr>
<td>{{tl|Convert to wikitable}}</td><td><code>(wt)</code></td>
</tr><tr>
<td>{{tl|Created with code}}</td><td><code>(ci)</code></td>
</tr><tr>
<td>{{tl|Disputed map}}</td><td><code>(dm)</code></td>
</tr><tr>
<td>{{tl|Easy-border}}</td><td>{{0|((}}<code>°</code></td>
</tr><tr>
<td>{{tl|Fictional}},<br />{{tl|Fictitious flag}}</td><td><code>(ff)</code><br /><code>(ff)</code></td>
</tr><tr>
<td>{{tl|Fake sports logo}}</td><td><code>(fi)</code></td>
</tr><tr>
<td>{{tl|Fotowerkstatt}}</td><td><code>(fw)</code></td>
</tr><tr>
<td>{{tl|Graphic Lab}}:<br />{{tl|Projet Blasons}},<br />{{tl|Projekt Wappen}}</td><td>{{0|(}}<code>g…</code></td>
</tr><tr>
<td>{{C|Large SVG files|<code><nowiki>{{Large SVG}}</nowiki></code>}}</td><td>{{0|((}}<code><nowiki>></nowiki></code></td>
</tr><tr>
<td>{{tl|Logo history}}</td><td><code>(lh)</code></td>
</tr><tr>
<td>{{tl|NoInkscape}}</td><td><code>(ni)*</code></td>
</tr><tr>
<td>{{tl|NoUpdate}}</td><td><code>(nu)*</code></td>
</tr><tr>
<td>{{tl|Opaque}}</td><td><code>(oq)</code></td>
</tr><tr>
<td>{{tl|Overlay}}</td><td><code>(ov)</code></td>
</tr><tr>
<td>{{tl|Igen/ptx|Path text SVG}}</td><td>{{0|((}}<code><nowiki><</nowiki></code></td>
</tr><tr>
<td>{{tl|PDF version available}}</td><td>{{0|(}}<code>\#</code></td>
</tr><tr>
<td>{{tl|Quality image}},<br />{{Tl|Valued image}}</td><td>{{0|((}}<code>^</code></td>
</tr><tr>
<td>{{tl|QGIS}}</td><td>{{0|((}}<code>&</code></td>
</tr><tr>
<td>{{tl|Recent}}</td><td><code>(re)</code></td>
</tr><tr>
<td>{{tl|Redrawn with Text Editor|Redrawn}}</td><td><code>(rd)</code></td>
</tr><tr>
<td>{{tl|Restoration}}</td><td><code>(rs)</code></td>
</tr><tr>
<td>{{tl|Retouched picture}}</td><td>{{0|((}}<code>R</code></td>
</tr><tr>
<td>{{tl|Rsvg bug}}</td><td>{{0|(}}<code>?…</code></td>
</tr><tr>
<td>{{tl|Should be text}}</td><td></td>
</tr><tr>
<td>{{tl|SimplSVG}}</td><td>{{0|((}}<code>S</code></td>
</tr><tr>
<td>{{tl|Igen/sni}}</td><td>{{0|(}}<code>S*</code></td>
</tr><tr>
<td>{{tl|Redrawn with Text Editor|rd}}&{{tl|Igen/sni|sni}}</td><td>{{0|(}}<code>S&</code></td>
</tr><tr>
<td>{{tl|Scripted SVG}}</td><td></td>
</tr><tr>
<td>{{tl|Superseded}}</td><td>{{0|(}}<code>\-</code></td>
</tr><tr>
<td>{{tl|Supersedes}}</td><td>{{0|(}}<code>\+</code></td>
</tr><tr>
<td>{{tl|SVG 1.2}}</td><td>{{0|i}}<code>1.2</code></td>
</tr><tr>
<td>{{tl|Taken with ...}}</td><td><code>(tw)</code></td>
</tr><tr>
<td>{{tl|Technically replaced}}</td><td></td>
</tr><tr>
<td>{{tl|Tincture}}</td><td>{{0|((}}<code>C</code></td>
</tr><tr>
<td>{{tl|TracedSVG}}</td><td>{{0|((}}<code>§</code></td> <!-- = {{tl|PoorSVG}} -->
</tr><tr>
<td>{{tl|Igen/emb|Translate}}</td><td><code>(tr)</code></td>
</tr><tr>
<td>{{tl|Update}}</td><td><code>(up)</code></td>
</tr><tr>
<td>{{tl|UseXML}}</td><td>{{0|(}}<code>××</code></td>
</tr><tr>
<td>{{tl|Valid SVG}} or {{tl|Invalid SVG}}</td><td></td>
</tr><tr>
<td>{{tl|Vector version available}}</td><td>{{0|(}}<code>\\</code></td>
</tr>
</table>
=== Parameter settings ===
The flexibility of parameter definition allows to use the template with high variability.
The same result can be achieved by different settings.<br />All parameters are optional; when used, unnamed
* parameter #1 {{0}} contains either
::* tool name abbreviation letter (default: <big><code>I</code></big> for ''Inkscape'')
::* tool name
::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and [[#Reference of all parameters|more]].
* parameter #2 {{0}} contains either
::* <code>v</code>, <code>n</code>, <code>s</code>,
::* numeric error count (W3C),
::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more.
:: ''See'' also [[#Parameter 2]]
* parameter #3 to #9 contains each one either
::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more.
{{Clarify|date=October 2024}}
It is recommended '''''always to specify the tool''''' with parameter #1. Files defaulted to Inkscape are collected in a {{C|Created with Inkscape-undef|maintenance category}}.
<!------------------------------------------------------------------------------------------------
TEMPLATE BOX - END OF usage-notes
-------------------------------------------------------------------------------------------------->
|setscats=
|i18n-method=-
|i18ndesc=different translation methods
|lines=
|shorthand={{((}}[[Template:Igen|Igen]]{{!}}… parameters as described …{{))}}<br/><small>''See also'' the template {{tl|Creation}} for simpler usages within the {{T0|Information}} box.</small>
|relieson=
* {{W|Extension:ParserFunctions||mw}}
* {{M|Igenmod|||+}}
* {{T|1color|+|incl=8}}
* {{T|Add languages|+|incl=8}}
* {{T|Artifacts|+|incl=8}}
* {{T|BadSVG|+|incl=8}}
* {{T|Broken file|+|incl=8}}
* {{T|Cdata|+|incl=8}}
* {{T|Clear|+|incl=8}}
* {{T|Coablazon|+|incl=8}}
* {{T|COAref|+|incl=8}}
* {{T|Colour blind|+|incl=8}}
* {{T|Commonist|+|incl=8}}
* {{T|Convert to international|+|incl=8}}
* {{T|Convert to multilang|+|incl=8}}
* {{T|Convert to wikichart|+|incl=8}}
* {{T|Convert to wikitable|+|incl=8}}
* {{T|Created with code|+|incl=8}}
* {{T|Current|+|incl=8}}
* {{T|Easy-border|+|incl=8}}
* {{T|Error|+|incl=8}}
* {{T|Fake flag|+|incl=8}}
* {{T|FakeSVG|+|incl=8}}
* {{T|Fictitious flag|+|incl=8}}
* {{T|Fotowerkstatt|+|incl=8}}
* {{T|I18n/COA|+|incl=8}}
* {{T|Igen/2nd|+|incl=8}}
* {{T|Igen/amp|+|incl=8}}
* {{T|Igen/cat|+|incl=8}}
* {{T|Igen/cod|+|incl=8}}
* {{T|Igen/csd|+|incl=8}}
* {{T|Igen/csf|+|incl=8}}
* {{T|Igen/cwt|+|incl=8}}
* {{T|Igen/emb|+|incl=8}}
* {{T|Igen/fif|+|incl=8}}
* {{T|Igen/glc|+|incl=8}}
* {{T|Igen/lab|+|incl=8}}
* {{T|Igen/msg|+|incl=8}}
* {{T|Igen/par|+|incl=8}}
* {{T|Igen/ptx|+|incl=8}}
* {{T|Igen/qui|+|incl=8}}
* {{T|Igen/sni|+|incl=8}}
* {{T|Igen/sub|+|incl=8}}
* {{T|Igen/swv|+|incl=8}}
* {{T|Igen/top|+|incl=8}}
* {{T|Igen/twt|+|incl=8}}
* {{T|Igen/upl|+|incl=8}}
* {{T|Igen/usr|+|incl=8}}
* {{T|Inaccurate-map-disputed|+|incl=8}}
* {{T|Information field|+|incl=8}}
* {{T|Invtext|+|incl=8}}
* {{T|Logo history|+|incl=8}}
* {{T|Nil2|+|incl=8}}
* {{T|NoInkscape|+|incl=8}}
* {{T|NoUpdate|+|incl=8}}
* {{T|Opaque|+|incl=8}}
* {{T|Out of borders|+|incl=8}}
* {{T|Overlay|+|incl=8}}
* {{T|PDF version available|+|incl=8}}
* {{T|Recent|+|incl=8}}
* {{T|Redrawn with Text Editor|+|incl=8}}
* {{T|Restoration|+|incl=8}}
* {{T|Retouched picture|+|incl=8}}
* {{T|Rsvg bug|+|incl=8}}
* {{T|SimplSVG|+|incl=8}}
* {{T|Superseded|+|incl=8}}
* {{T|Supersedes|+|incl=8}}
* {{T|SVG|+|incl=8}}
* {{T|SVG 1.2|+|incl=8}}
* {{T|Tincture|+|incl=8}}
* {{T|TopoSVG|+|incl=8}}
* {{T|TracedSVG|+|incl=8}}
* {{T|Translate|+|incl=8}}
* {{T|U|+|incl=8}}
* {{T|Update|+|incl=8}}
* {{T|UseXML|+|incl=8}}
* {{T|Vector version available|+|incl=8}}
* {{U|ZooFari/Template:SVG|User:Zoofari/Template:SVG}}
}}<!--
==================================================================================================
END OF TEMPLATE BOX
==================================================================================================-->
== Specific information ==
The template is intended to be used within the {{tl|Information}} box, e.g. at <code>Other fields=</code>, or anywhere outside
{{NoteBox
|type = warn
|1 = Because the prevalent majority of files belongs to {{C|Valid SVG created with Inkscape}}, <code>1=Inkscape</code> and <code>2=v</code> are the default values{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's initial revision (141159746, 2014). --><br />
This defaulting is a '''failure'''; {{T0|Created with Inkscape-default|Inkscape-default}} categorizes to a {{C|Created with Inkscape-default|maintenance category}}.{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's revision 436629186 (2020). --> See also {{T0|Created with Inkscape-undef|Inkscape-undef}}.
}}<!-- The author of these statements is dead. -->
=== Subtemplates ===
The template uses several specific subtemplates, e.g.
<div style="font-size:smaller;">
* {{tl|Nil2}}{{0|0000}} – decides whether {{T|Information field}} is used
* {{tl|I18n/COA}} – translation of the name
* {{tl|Igen/2nd}} – extends the codes *, @, ), \, ° to taggings
* {{tl|Igen/amp}} – analizes whether more than one SVG tool is used
* {{tl|Igen/bug}} – adapter to {{T|SVGbug}}
* {{tl|Igen/cat}} – tool for categorization
* {{tl|Igen/cbx}} – {{T|ColorBox}} together with {{T|Igen/cbox}}<!--
{{tl|Igen/clt}} – -->
* <s>{{tl|Igen/coa}} – after textsplitting of {{T|COAInformation/Image|link=no}}</s>
* {{tl|Igen/cod}} – for [[mw:Extension:SyntaxHighlight#Supported_languages|syntax]] of {{T|Created with code}}
* {{tl|Igen/csd}} – creates subcategory differentiation
* {{tl|Igen/csf}} – checks whether an SVG drawing is a structural formula
* {{tl|Igen/cwt}} – dictionary of shortcodes to translate into corresponding "created with..." template
* {{tl|Igen/emb}} – embedded text is found
* {{tl|Igen/fgd}} – evaluates whether a topic is valid
* {{tl|Igen/fif}} – for fictional items
* {{tl|Igen/flg}} – subtemplate for {{T0|Infobox flag}}
* {{tl|Igen/glc}} – Graphic Lab CoA treatment
* {{tl|Igen/lab}} – adapter for {{T|Graphic Lab}}<!-- ,
{{tl|Igen/lgd}} – -->
* {{tl|Igen/map}} – subtemplate for {{T0|Map}} Infobox
* {{tl|Igen/nil}} – does absolutely nothing – nevertheless often used
* {{tl|Igen/par}} – analizes parameter 1 (tool name) and parameter 2 (error count}
* {{tl|Igen/ptx}} – path text is found
* {{tl|Igen/qui}} – adapter for {{T|Quality image}}
* {{tl|Igen/sni}} – displays text for "no inkscape"
* {{tl|Igen/sub}} – prepares the topic code for subcategorizion
* {{tl|Igen/swv}} – <code><switch></code> controlled variations
* {{tl|Igen/top}} – prepares the topic code for the display
* {{tl|Igen/trg}} – adapter for 'topographic raster graphics'<!-- ,
{{tl|Igen/tst}} – [for special testing purposes]
{{tl|Igen/uns}} – for W3C-unspecifieds -->
* {{tl|Igen/twt}} – adapter for {{T|Taken with}}
* {{tl|Igen/THV}} – display & caregorize THV
* {{tl|Igen/upl}} – extends one-letter-codes to category names
* {{tl|Igen/wph}} – Wikipedia Project Heraldry display
* {{tl|BadSVG-t}}, {{tl|Created with X}} and more.</div>
Such subtemplating allows swift maintenance while the large main template does not need to be touched.
The template and its subtemplates are using several internationalization methods, like {{tl|autotranslate}} and {{tl|LangSwitch}}.
=== Additional notes ===
<references />
Because ''letters'' are used for the abbreviation of tool names, parameters #1 to #9 use ''other characters''.{{Clarify|date=October 2024}}
=== Examples ===
{| class="wikitable" style="width:100%"
|-
!Input{{0|WWWWWWWWWWWWWWW}}
!Result
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I}}</code>
|{{Image generation|I}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I|p2=cf|n}}</code>
|{{Image generation|I|cf=n}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I|1}}</code>
|{{Image generation|I|1|}} {{0}} same as <code style="font-size:smaller">{{Tle|t=Image generation|I|p2=e|1}}</code>
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I|+}}</code>
|''see next line how it appears in the Information box''{{Image generation|I|v|fn=SVG{{I18n/COA|development}}}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|-}}</code>
|{{Image generation|-}} ( "nil" transclusion - it does nothing)
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|A}}</code>
|{{Image generation|A}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|A$}}</code>
|{{Image generation|A$}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|IA}}</code>
|{{Image generation|IA}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|Im}}</code>
|{{Image generation|Im|t= {{0}} option "IMPORTANT"}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|B}}</code>
|{{Image generation|B}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|C}}</code>
|{{Image generation|C}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|D}}</code>
|{{Image generation|D}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|H}}</code>
|{{Image generation|H}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|G}}</code>
|{{Image generation|G}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|J}}</code>
|{{Image generation|J}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|L|n}}</code>
|{{Image generation|L|n|t={{0}} Raster graphics without W3C}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|M|s|p3=e|0}}</code>
|{{Image generation|M|s|e=0|t= {{0}} due to "s" without W3C – set W3C error count!}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|P|p2=o|n|p3=e|1}}</code>
|{{Image generation|P|o=n|e=1|t= {{0}} due to "opt=n" without W3C – set W3C error count!}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|U|12|>}}</code>
|{{Image generation|U|12|>}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|Q|17|p3=e|23}}</code>
|{{Image generation|Q|17|err=23|T=:(from two given values 17 and 23, the <code>err=</code> value has '''precedence''')}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|S|$}}</code>
|{{Image generation|S|$}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|ArcMap}}</code>
|{{Image generation|ArcMap}} {{0}} name "ArcMap"
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|GeoGebra|n}}</code>
|{{Image generation|GeoGebra|n}} {{0}} "GeoGebra" '''n'''on-SVG
|}
When expressing some more options without expressing them by the shorthand parameters it can become a long line:<br />
<code><nowiki>{{</nowiki>Image generation|Inkscape|v|+'''|u='''<nowiki>{{</nowiki>U|Username}}'''|s=''':Drapeaux created by User:Username'''|m='''-<nowiki>[[</nowiki>Help:Inkscape#Inkscape SVG vs. Plain SVG|<nowiki>''</nowiki>important<nowiki>''</nowiki>]]'''|t='''<nowiki>{{</nowiki>Translation possible}}<nowiki>{{</nowiki>Translate|switch=yes}}<nowiki>{{</nowiki>Cdata}}<nowiki>{{</nowiki>BadSVG}}<nowiki>{{</nowiki>SVGbug|description=hairline crack}}<nowiki>{{</nowiki>TracedSVG}}<nowiki>{{</nowiki>Path text SVG}}<nowiki>{{</nowiki>Quality image}}<nowiki>{{</nowiki>RetouchedPicture|1=Translation en → fr|editoff=Username|origoff=Carbon14 with activity labels.svg}}<nowiki>{{</nowiki>Projet Blasons}}<nowiki>{{</nowiki>Atelier graphique}}}}</code>
=== Parameter table ===
The table shows for some given simple situations one of several possibilities to set parameters:
* if the ''tool'' needs to be specified, it’s only possible with parameter #1
* an ''error'' number can be specified either with parameter #2, or everywhere with err=
* the <code>n</code> at parameter #2 clarifies that the file is non-SVG
* to tag a file which is not SVG the <code>n</code> needs to be set with parameter #2
* when used as an argument of <code>Other fields</code>, the <code>+</code> <u>is necessary</u>
* when used ''outside'' the information box, the <code>-</code> ''may be'' necessary
{| class="wikitable" style="margin:.8em 0 0 1.6em"
| placement || colspan="4" | ''other fields'' || colspan="4" | standalone
|-
! style="text-align:right"| parameters !!p1 !!p2 !!p3 !! p4{{0}}!!p1 !!p2 !!p3 !!p4{{0}}
|-
| valid Inkscape || + || || || || – || || ||
|-
| Inkscape 1 error || + || 1 || || || – || 1 || ||
|-
| valid BKchem || B || + || || || B || – || ||
|-
| Gnuplot 4 errors || G || 4 || + || || G || 4 || – ||
|-
| Python raster || P || n || + || || P || n || – ||
|-
| valid PHP ||PHP|| + || || ||PHP|| – || ||
|-
| PHP 17 errors ||PHP||17 || + || ||PHP||17 || – ||
|}
=== Parameter 2 ===
Parameter #2 has historically been the place to specify the file’s validation, as in transclusions like <code><nowiki>{{Inkscape||</nowiki><u>v</u>}}</code>.
Now it may contain one of the following:
* The character "v" to mark a '''v'''alid SVG file. Because this is the default for SVG files it ''is '''not necessary''''' to be specified and can be omitted.
* The character "n" to mark a '''n'''on-SVG file. Because this is the default for non-SVG files it is not necessary to be specified explicitly.
* The character "s" to mark a SVG file with '''s'''uppression of the W3C-box. To enable proper category sorting, "e= " must be specified explicitly (''<code>e=0</code>'' for "valid").
<!-- * The "/" sign is used here to omit the W3C link for SVG files. This ''disables'' the category diffusion and is therefore ''not recommended''. -->
* The {{W|W3C}} error count: either "0" (for a valid SVG), a number > zero or -1. This error count can also be given with the parameter <code>e=</code>. Default is "0".
* The value "-1" for SVG code that can't be checked by the W3C validator (a common reason is the missing XML header which can be easily fixed); "Other tool" is implied, no need to specify it.
* One of the signs <code>$</code>, <code>+</code>, <code>-</code> or <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code>. These can also occur as arguments for any one of the unnamed parameters #1 through #9.
=== Suppress the validity box ===
Parameter #2 set to "n" for <u>raster graphics</u> avoids the validity box and enables correct categorizing.<br />
To suppress the box for <u>SVG files</u>, set parameter #2 to "s". When the SVG file is invalid, '''always''' set the <code>e=</code> parameter, otherwise <code>e=0</code> to enable correct categorizing and sorting within the category. Setting "<code>s</code>" ''without'' "<code>e=</code>" let the file be {{C|SVG files without W3C-specification|W3C-unspecified}}.
If it seems necessary to tag a file with more than one generation tool, the other tool(s) can be added with e.g. <code><nowiki>t={{Created with ...|err=…|vo=n}}</nowiki></code>.
The ''validator option'' <code>vo</code> set to "n" avoids to show the box again, while <code>err</code> must specify the error count (or "0") to categorize correctly, including the descending sorting within the category in the case of validation errors.
=== SimplSVG template ===
To combine both the advantages of {{T0|SimplSVG}} and {{T0|Image generation}} it is possible to transclude the first one by the second.
This can be done by setting {{Tle|t=Igen|…|…|+|'''S'''|and then the parameters for SimplSVG, followed by them for Image generation}}.<br />{{Anchor|SimplSVG}}Keep in mind that the tool for the <u>former image</u> must be specified, while the {{T0|HandSVG|Text Editor}} is always assumed as the tool for the <u>simplified image</u>!
An example may be e.g. {{F|Non-EU-section-with-MK-2012.svg|-}} with {{Tle|t=Igen|I|18034|272|v|%|+|'''S'''}}<br />
To ''suppress'' the categorization to {{C|SVG Simplified}} subcategories, use <code>|S|sub=-</code> (with <code>-</code>!), or short <code>|S-</code> (with <code>-</code>!).<br />
<code>S</code> (or <code>S-</code>) can be specified at any position from 2 to 13 (<code>S-</code> even instead of the toolname <code>T</code> at position 1), e.g. <code>10=S</code> (or <code>10=S-</code>).<br />
Exactly the same can be specified alterny with the parameters {{Tle|t=Igen|I|+|p3=sb|18034|p4=sa|272|%|p6=s|v}} ,
: where <code>sb</code> specifies the <code>size-before</code>, and <code>sa</code> the <code>size-actual</code>;
: <noinclude><span style="background-color:#cfe;width:60%;"></noinclude>for the {{T0|File generation description|'''File generation description'''|+|case=l}} that is expressed with the ''pair of numbers'' e.g. <code>Simplified SVG = 18034/272</code><noinclude></span></noinclude>
plus additional positional and named parameters for <code>SimplSVG</code> (like e.g. <code>vs=-</code>),<br />
''plus'' additional positional and named parameters for <code>Igen</code> like e.g. <code>%</code>, <code>vsub=</code> and/or <code>T=</code>.<br />
No conflict can occur with the free-position parameters because {{T0|SimplSVG}} uses letters, and {{T0|Image generation}} uses other characters. {{Anchor|vstyle}}
<noinclude><div style="background-color:#cef;width:60%;"></noinclude>
The ''layout'' can be controlled with the parameter <code>vs</code>:
* mimimized layout, 1 line: <code>{{0|000}}</code> default (parameter skipped, or <code>vs=-</code> / <code>vs=n</code>)
* small layout with 2 lines: <code>vs=</code> (or <code>vs=fl</code> <small>for "float-left"</small>)
* medium layout, 3 lines:{{0}} <code>vs=z</code> (or <code>vs=Z</code>)
* large layout with 3 lines:{{0}} <code>vs</code> with any other value than the above <noinclude></div></noinclude>
=== Color boxes ===
'''C''': '''{{T0|Tincture}}s''' can be specified with parameter '''<code>C=</code>''', e.g. <code>C=a/g/v</code> or <code>C=or/gules</code>;
the parameter <code>Css=</code> can be used to select [[Template talk:Tincture/box|another tincture variation]].<br />
'''cb''': It is also possible to draw different '''Color Boxes''' above the other line(s) of the templates output.
While the {{T|ColorString|+|case=l}} can be used everywhere, e.g. at the "description" field of the {{T|Information}}
to draw such boxes, within {{T0|Image generation}} the parameter '''<code>cb=</code>''' is provided for that.
For {{T0|File generation description}} the parameter <code>Colorbox=</code> does the same.<br />
<u>Parameter value:</u> consists in each case of subparameters, separated by slashes. <br />
In general, a pair of subparameters, or a series of such pairs is specified.
*The ''first'' parameter of each pair is a valid [[Template talk:ColorString|CSS color name]], a valid {{T0|tincture}} name or a valid hexadecimal color code;<br />it can as well be expressed as an argument of {{T|Xconv}}, e.g. {{Tle|t=Xconv|rgb(204,51,102)}} ({{Colorbox |{{Xconv|rgb(204,51,102)}}}}), or {{Tle|t=Xconv|75%50%100%}} ({{Colorbox|{{Xconv|75%50%100%}}}})
*The ''second'' parameter can specify a descriptional text, e.g. "rouge" or something else, it may also be a (wiki)link;<br />it can as well be expressed as an argument of {{T|Xconv}}. When it is missing (specified empty), the first parameter is displayed.
These parameter values can be preceded by a <u>pair of control characters</u>:
The first control code may be a "+" to generate a field name; other characters or none won't.<br />
Control code 1 <code>+</code> will generate the standard field name as shown below, with <code>+=</code> any other text can be specified.<br />
{{Lua|Module:Color2dec}}The second control code may specify the type of color boxes:
* none or " " or "C" to use the template {{T0|Legend}} with parameter pairs – the standard usage.
* "B" to use the template {{T0|ColorBox}} with single parameter values,
* "D" to use the template {{T0|ColorBox}} with parameter pairs,,
* "L" to use the template {{T0|Legend}} with single parameter values, ¹)
* "M" to use the template {{T0|Legend-small}} with parameter pairs, ²)
* "S" to use the template {{T0|Legend-small}} with single parameter values,
* "T" to use the template {{T0|Tbc}} with parameter pairs, and special treatment for the title.
:¹) <small>the "L" possibility exists just for completion – normally a "Legend" without an explaining second value will not be useful.</small>
:²) <small>the "M" possibility can as well be specified with the second control code "-". </small>
To show it again, formatted as a table:
{| class="wikitable" style="text-align:center"
!template||parameters||control code 1||control code 2||Example <small>(xxx/yyy/... stands for the parameter pairs)</small>||{{T0|InFi|field name}} {{Nobold|(title) ⁴)}}
|-
|{{T0|Legend}}||pairs||"+" or none||none||style="text-align:left"|<code>+/ /xxx/yyy/...</code> or <code>{{0|+}}/C/xxx/yyy/...</code>³)
|" "<small>=Legend,</small> "C"<small>=Colour(s)</small>
|-
|{{T0|ColorBox}}||'''single'''||"+" or none||<code>B</code>{{0|000}}||style="text-align:left"|<code>+/B/xxx/xxx/...</code> or <code>{{0|+}}/B/xxx/xxx/...</code>
|Colour(s)
|-
|{{T0|ColorBox}}||pairs||"+" or none||<code>D</code>||style="text-align:left"|<code>+/D/xxx/yyy/...</code> or <code>{{0|+}}/D/xxx/yyy/...</code>
|Colour(s)
|-
|{{T0|Legend}}||'''single'''||"+" or none||<code>L</code>{{0|000}}||style="text-align:left"|<code>+/L/xxx/xxx/...</code> or <code>{{0|+}}/L/xxx/xxx/...</code>
|Legend
|-
|{{T0|Legend-small}}||pairs||"+" or none||<code>M</code>||style="text-align:left"|<code>+/-/xxx/yyy/...</code> or <code>{{0|+}}/M/xxx/yyy/...</code>
|Colour(s)
|-
|{{T0|Legend-small}}||'''single'''||"+" or none||<code>S</code>{{0|000}}||style="text-align:left"|<code>+/S/xxx/xxx/...</code> or <code>{{0|v}}/S/xxx/xxx/...</code>
|Color box(es)
|-
|{{T0|Tbc}}||pairs||none or "e"||<code>T</code>||style="text-align:left"|<code>{{0|v}}/T/xxx/yyy/...</code> or <code>e/T/xxx/yyy/...</code>
|Used color(s) ⁵)
|}
:³) <code>{{0|+}}/ /xxx/yyy/...</code> can as well be written <code>xxx/yyy/...</code> (without the empty control characters)<br />
::but for the control code 2 instead of " " the value "C" may be used to title "Colors" instead of "Legend"
⁴) With the ''control code 1'' <code>+=</code> the free selection of another field name than the standard one is possible,, e.g. <code><nowiki>|cb=+={{I18n/Colors}}/ ... </nowiki></code> <!-- for a (translated) field name<br /> -->
:''without'' the <code>+</code> (just <code>|cb=/</code>) ''flags'' will get the field name "Flag colors".
{{#tag:span|{{0}}See some examples of using <kbd>cb</kbd> (with control code 2: B, D, M, S and T) and of <kbd>+=</kbd> at {{C|Wikimedia icons|+}}.{{0}}|style=border:1px solid #3C3;background-color:#DFD}}<br />
'''Stripes and lines:'''
Legend boxes can be ''striped'' by {{C|SVG stripe texture overlays|different patterns}}, and/or mixed with {{T0|Legend-line}}s.
See examples at the [[Template:Legend/doc#Examples|documentation]].<br />
{{Anchor|Tbc}}
<big>'''{{T0|Tbc}}'''</big> needs decimal coded color codes.
Internal functions can convert ''hexadecimal triplets'', {{T0|tincture|tincture names}} and [[Template talk:ColorString|CSS color names]] for <code>Tbc</code>.<br />Other color names are not decimalizable, because of that not all ''color names'' can be used for <code>Tbc</code>.<br />
A {{T0|InFi|field name}} is always created and can't be deselected, independent from the first control code (which can be "e" for {{T0|Easy border}}).
<big>Example strings for '''{{T0|Tbc}}''':</big>
{|
|-
|<code>{{0|e}}<nowiki>/T/#900/wikidata red/#396/wikidata green/#069/wikidata blue </nowiki></code> || hexadecimal triplets & names
|-
|<code>{{0|e}}<nowiki>/T/argent//céleste//gules//sable </nowiki></code> || tinctures w/o names
|-
|<code>{{0|e}}<nowiki>/T/CornflowerBlue/#6495ED/BlanchedAlmond/#FFEBCD </nowiki></code> || CSS colors, and their hex codes for names
|-
|<code>{{T0|Easy border|e}}<nowiki>/T/#6495ED/blue/cendrée/gris/YellowGreen/green </nowiki></code> || colors from mixed sources, + {{T0|Easy border}}
|-
|<code><nowiki>Guatemal colors/T/#FFFFFF/blanco/#4997D0/azul </nowiki></code> || with individual <code>field name</code>
|-
|<code><<nowiki>nowiki/> {{Wf|Drapeau tricolore}}/T/#0055A4/bleu/#FFF/blanc/#EF4531/rouge</nowiki></code> || with individual <code>field name</code>, + {{T0|Easy border}}
|}
:⁵) (the ''individual field name'' starting with a space, e.g. "<<nowiki>nowiki/> </nowiki>", for signalling the {{T0|Easy border}} request)
=== SVG source code display ===
is performed centrally by Image generation; previously it had been an option of some single {{C|SVG created with ... templates|templates}}, now it can only be done when such a template is invoked by Image generation.
The {{C|SVG created with ... templates|table}} shows where the code-categories are defined.
The {{T0|Created with code|documentation}} explains how the different parameters can be used to format the output; a short reference can be found [[#Reference of all parameters|below]].
=== Category ===
All the {{C|Created with ... templates}} categorize to "Created with ...", the {{C|SVG created with ... templates}} to "[in]valid SVG created with ...".<br />
This automatic generated category can be customized with [[#Subcategory specification|subcategory specification]] and/or sorting keys (key=).
:''It is strongly recommended to change that reasonable categorizing '''only''' in cases of very good reason!''
With the parameter "cat=" (or short "c=", also "category=") the automatic categorizing can be ''overwritten'':
* with <code>cat=-</code> every categorization will be suppressed (it can as well be done with "cat=n" or just "cat=").
* another value ''without'' "[<nowiki/>[" brackets (e.g. <code>cat=xxx</code>), will be completed with the specified values of subcategory and/or sorting key, brackets and namespace:<br />e.g. <code><nowiki>[[Category:{{{cat}}}{{{sub|}}}|{{{key|}}}]]</nowiki></code>
* when the value starts with brackets (e.g. <code>cat=[[</code>…), it will be used as-it-is: nothing is changed, specified values of the parameters sub and key are then ''ignored''.{{Anchor|o-cat}}
<u>Other parameters for categories:</u>
{|
|-
|{{blue|■}} <code>!c</code>= for {{t0|BadSVG}}s|| <code>^c</code>= for {{t0|QI}} || <code>cc</code>= for [[Template:Created_with_code/doc#Categorizing|Created with code]]/suppression
|-
|{{blue|■}} <code>&c</code>= for e.g. {{t0|Igen/amp|QGIS}} || <code>$c</code>= for {{t0|Commonist}}
|-
|{{blue|■}} <code><c</code>= for {{t0|Path text}} || <code>>c</code>= for {{C|Large SVG files}}
|-
|{{blue|■}} <code>tc</code>= for {{t0|Taken with}} || <code>Cc</code>= for {{t0|Tincture}}
|-
|{{blue|■}} <code>fc</code>= for {{C|Special or fictional flags|Fictional files}} || <code>bfc</code>= for {{t0|Broken file}}
|-
|{{blue|■}} <code>cni</code>=<small> for {{C|SVG created with Inkscape:Important}}</small> {{0}} || <code>cw</code>= the "Created with" category
|}
{{Anchor|cw_par}}
The parameter <code>cw</code> has three functions:
# the <code>logo</code> will be {{Tle|t=F|<nowiki>{{{cw}}}</nowiki> logo.svg}}
# the <code>toolname</code> will be the link {{Tle|t=W|<nowiki>{{{cw}}}</nowiki>}}
# the <code>category</code> will be {{Tle|t=C|Created with <nowiki>{{{cw}}}</nowiki>}}
to simulate together with e.g. {{T0|Created with Other tool|Other tool}} a not-yet existent tool.
=== Subcategory specification ===
The template offers various possibilities to diffuse a category by subcategories.
* With <code>sub=</code> a suffix to the category name is specified;
** when this suffix string needs to be prefixed with a semicolon "<code>:</code>" <!-- "&#58;", --> use the parameter <code>s:=</code> or <code>sub:=</code> <br />{the display occurs with "lcfirst"; to force an "ucfirst" the parameter <code>su:=</code> can be used).
** or when this suffix string needs to be prefixed with a hyphen "<code>-</code>" <!-- "&#45;", --> use the parameter <code>s-=</code> or <code>sub-=</code>.
* An uppercase <code><big>S</big>=</code> does the same but an in-between space is inserted.
* Recommended is to use the parameter <code>s=</code> which bears several advantages:
:* With a code of one letter (or an abbreviation of some letters) many predefined subcategories are accessable; the subtemplate {{T0|Igen/sub}} cares for the expansion.
:* Such a short code is also used as a ''[[#Topics|topic]]'' for the description by many other templates;<br />while Igen/sub expands only to ''subcategory names'' in English, the subtemplate {{T0|Igen/top}} transposes multilingual.
Only in cases where the required topic differs from the subcategory, or no subcategory should come in effect, another code can be defined to substitute the <code>s=</code> value. This topic letter can be defined with the parameter <code>topic=</code> or <code>what</code>/<code>w=</code> and becomes expanded instead. <small>("w" for <code>what=</code> because the "t" had been used for "trailing text", and cannot be used to abbreviate <code>topic=</code>)</small>.
{{Anchor|o-sub}}<br />
<u>Other parameters for subcategories:</u>
{|
|-
|{{blue|■}} <code>!s</code>= for {{tl|BadSVG}}s || <code><nowiki><s</nowiki></code>= for {{tl|Igen/ptx}}
|-
|{{blue|■}} <code>?s</code>= for {{tl|Rsvg bug}}s || <code>§s</code>= for {{tl|TracedSVG}}
|-
|{{blue|■}} <code>&s</code>= for e.g. {{tl|Igen/amp|QGIS}} || <code>$s</code>= for {{tl|Commonist}}
|-
|{{blue|■}} <code>gc</code>= for {{tl|Graphic Lab}}-xx {{0}} ||
|}
With the parameter <code>sd=</code> always a <u>subcategory differentiation</u> can be defined.
==== Topics ====
{{see also|Template:Igen/sub|Template:Igen/top}}
When as well <code>s=</code> ''and'' <code>sub=</code> or <code><big>S</big>=</code> are defined, sub/S is used for subcategorizing (or suppression with <code>sub=-</code>) and <code>s=</code> can then be used like <code>w=</code> for topic specification. The topic option can alse be suppressed with <code>w=-</code>, independent from <code>s/sub/S</code>.<br />
<!-- See also the parameters <code>&s</code> and <code>&c</code>.
-->
As said above, the parameter <code>s</code> can be used for subcategorizing; when no parameter <code>topic=</code> (or <code>what</code>/<code>w=</code>) is specified the value of <code>s</code> is also used for the topic text by the national versions of the {{C|Created with ... templates}}. Except of this defaulting the two parameters can be defined and/or suppressed completely independent from each other.<br />
{{Color|b|2=These '''[[Template talk:Image generation#TopTb|tables]]''' show the conversion of <code>s=</code>, and the conversion & translation of <code>w=</code>.|css=border:#000 solid 1px;padding:2px 4px}}<br />
These ''topics'' are passed to many other templates. While a few of the {{C|Created with ... templates}} have ''default topics'' defined, only an ''explicitely specified'' topic can be passed further.
==== Subcat & topic ====
{{see also|Template:Igen/sub|Template:Igen/top}}
It is also possible to define with one single parameter sub-category ''and'' topic, with a subcategory-separator semicolon "<code>:</code>" or minus "<code>-</code>".<br />
Parameter values of "<code>s:</code>" and "<code>s-</code>" specify a subcategory; they are prefixd with a "<code>:</code>" resp. a "<code>-</code>",
but except that they are used as-they-are.<br />
When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of
"<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated.
Parameter values of "s:" and "s-" specify a subcategory which is prefixed with a "<code>:</code>" resp. a "<code>-</code>",
the first letter is capitalized and a final (plural-)"s" is added.<br />
Example: <code>s:=digit</code> specifies the subcategory ":Digits" (as is done with <code>s=7</code>).<br />
When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of
"<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated.<br />
Similar is the result with <code>sub:=</code> and <code>sub-=</code> but neither case changing nor adding of a plural-"s" occurs.<br />
The parameters <code>S:</code> and <code>Sub:</code> are working like <code>s:</code> and <code>sub:</code>, with an additional space after the semicolon.
==== Usage of "s" and "w" ====
{{see also|Template:Igen/sub|Template:Igen/top}}
The parameter <code>s=</code> specifies a topic for subcategorization, ''and'' for the display (if no "w=" is specified).<br />
The parameter <code>w=</code> specifies a topic only for the display; it will be nationalized into the user's language.<br />
Example: <code>|s=tl|</code> specifies the subcategory <code>:Text logos</code>, and (without "w=") also the display text "text logo" in different languages;<br />but with <code>|w=tl|s=l|</code> the subcatory will be <code>:Logos</code> with the nationalized display text "text logo".
=== Graphic Lab ===
{{Anchor|GLab}}
For the connection of files with the {{C|Graphic Lab}} exist multiple possibilities.
Graphic labs are in general for all images, special subcategories exist for {{C|CoA Lab|coats of arms}}, {{C|Flag Lab|flags}} and {{C|Map Lab|maps}}.
Dependent to the need these are divided into more subcategories, and e.g. the {{C|CoA Lab-fr}} has many ''user subcats''.<br />
Some graphic lab subcategories contain only a few items, while others are extremely crowded and may need further subcategorizing.
{{T0|Image generation}} knows many two-letter codes for graphic lab access, consisting of the letter <code>g</code> for graphic lab, and another character for the nationality.<br />
Comparable to the {{T0|W|-}} which also has in most cases a one-letter abbreviation for the national Wikipedia, this system is effectiv but has limits.<br />
Because of the manageable total <!-- number amount --> of graphic labs, this seems sufficient and clear enough: <code>f</code> stands for <kbd>fr</kbd>, <code>h</code> for <kbd>hu</kbd>, <code>i</code> for <kbd>it</kbd> and so on.
With the two-letter code g{{sub|×}} as parameter at any position {{T0|Igen}} is enforced to a special treatment; most of it is done by the subtemplate {{T0|Igen/lab}}.
<u>User category</u>: can be defined with the two-letter-code specifying a user name, e.g. <code>gH=ARK|s=c</code> categorizes the file to {{C|CoA Lab-ch:ARK}}.<br>
Same can be done with <code>|u=ARK|gH|s=c</code>. To ''avoid'' categorization, write <code>|u=ARK|s=c|gH=</code>
==== The [[MediaWiki:InformationToCOA.js|conversion script]] ====
To avoid the necessity of defining ever and ever again long parameter combinations, such defintions can be deposited for each user and automatically transfered.<br />
From each definition, the module creates a complete {{Tle|T=igen|...|...|...}} transclusion parameter and passes it to the file description.<br />
It is possible to have ''more than one'' definition for a user (with different keys!), and the parameter values can be manually [[#Modification|modified]].<br />
This treatment in ''intended'' for coats of arms using the {{T0|COAInformation|-}} but it can as well be used for any other file;<br />
an {{T0|Igenc|interface}} template can serve for the connection to the module and the stored parameters.{{Clarify|date=November 2024}}
The definitions are stored in a Lua module's internal table; it needs some care but not much skill to modify it or to add definitions.<br />
The automatism is done by [[User:Sarang/cleanup.js|the cleanup script]], which can be performed as the last step of different flow modes.
These are the different flows:
{| style="padding:2 0 2 0"
|-
|1: ToCoa only || style="background:#CCC"|ToCoa script||e1||style="background:none"| ||style="background:none"| ||style="background:none"|
|-
|2: ToCoa & SVG || style="background:#CCC"|ToCoa script||e1||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanupscript||e2
|-
|3: Coa + cleanup{{Clarify|date=November 2024}}|| style="background:#CCC"|ToCoa script||e1||style="background:none"|---------------→ ||style="background:#CEF"|cleanupscript||e2
|-
|4: SVGcheck|| style="background:none"| || ||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanup script||e2
|-
|5: cleanup only|| style="background:none"| || || style="background:none"| ||style="background:#CEF"|cleanup script||e2
|}
;Explanation::
: 1) in any case, an Information template can be converted to a COAInformation template
:: <code>e1</code>after the conversation, the script offers the changed description in edit mode; final edits can be done before the conversion is saved.
: 2) for SVG files, after the steps as above the SVGcheck script can be started, which continues with the cleanup.
:: <code>e2</code> the cleanup script will offer the changed description in edit mode for final editing before it is published
::: after that publishing save, Imge generatkion will run and the success can immediately be seen;
::: of course it will be better to have first a preview, to check whether it is free of errors and looks good !
: 3) after the conversion can directly proceeded to cleanup - for raster images th SVGcheck is not possible.
: 4) but for SVG images always the SVGcheck can be performed, which continues with the cleanup.
:: The cleanup can be performed for any file, when necessary repeatedly.
In the case that a file description is done with COAInformation, the cleanup script compares the author name with an internal user list and provides the parameter <code>|image =</code> with the found key. Modifications can be done by the editing user before the changes are published.
The cleanup script can detect whether the image is an element or a raster graphic, and select the appropriate key;<br /> ''but it cannot see'' whether it's an ecclesiastical image, this is evident <u>only for the editing user</u> who has to do the modification.
==== The Module {{M|IgenCoa}} ====
Keys for some national labs are further diffused, e.g.
{| class="wikitable" style="text-align:center"
|-
| g_lab|| coa || <u>c</u>harges || <u>e</u>ccles. || <u>i</u>ndivid. || e<u>x</u>cl. cat
|-
| {{C|CoA Lab-de|gd}} || d || dc || de || di || dx
|-
| {{C|CoA Lab-es|ge}} || e || ec || ee || ei || ex
|-
| {{C|CoA Lab-fr|gf}} || f || fc || fe || fi || fx
|}{{Clarify|date=November 2024}}
== Parameter reference ==
=== Named and unnamed parameters ===
Each one of the following parameter codes can be used either ''positional'' to set taggings with extern templates,
or they can be used as ''parameter names'' to pass an individual information to the templates.{{Clarify|date=November 2024}}
The function is like using the templates with the <code>|t=</code> parameter, either without or with an individual information.<br />
'''Example:'''
* (positional) "?" can also be written as "t=<nowiki>{{</nowiki>SVGbug}}"
* (named p.) "?=rendering error" can also be written as "<nowiki>t={{SVGbug|description=rendering error}}"</nowiki>
'''In general''':
when ''subparameters'' exist, their specification makes the main parameter redundant.<br />
As an example, <code>\</code> or <code>\=file name</code> invokes {{T1|Superseded}} resp. {{T1|Bitmap version available}}.
* <code>\x=file extension</code> and/or
* <code>\r=reason</code> will invoke that template as well.
This option is valid for all subparameters.
{| class="wikitable" style="margin:.8em 0 0 1.6em"
|-
! code !!template !! passed individual information
|-
| %<br />%r<br />%v<br />%f<br />%i<br />%s || {{tl|Igen/emb}} || <code><nowiki>|1={{{%}}}|2=s|s={{{s|}}}</nowiki></code><br />
<code><nowiki>|s={{{s|}}}|v=r</nowiki></code><br />
<code><nowiki>|s={{{s|}}}|v=v</nowiki></code><br />
<code><nowiki>|1=vf|s={{{s|}}}</nowiki></code><br />
<code><nowiki>|1=i|s={{{s|}}}</nowiki></code><br />
<code><nowiki>|1={{{%s}}}|s={{{s|}}}|switch=yes</nowiki></code>
|-
| ~ || {{tl|Cdata}} || <code><nowiki>|sub={{{~}}}</nowiki></code>
|-
| ! || {{tl|BadSVG}} || <code><nowiki>|1={{{!}}}|subcat={{{!s|}}}</nowiki></code>
|-
| ? || {{tl|Rsvg bug}} || <code><nowiki>|description={{{?}}}|sub={{{?s}}}</nowiki></code>
|-
| § || {{tl|TracedSVG}} || <code><nowiki>|1={{{§}}}|s={{{s|}}}</nowiki></code>
|-
| & || {{tl|Igen/amp|QGIS}} || <code><nowiki>|1={{{&}}}|2={{{&&|}}}</nowiki></code>
|-
| < || {{tl|Igen/ptx}} || <code><nowiki>|sub={{{<}}}|s={{{s|}}}</nowiki></code>
|-
| ^ || {{tl|QI}} || <code><nowiki>|SVG={{{^}}}</nowiki></code>
|-
| > || {{tl|SVGvalid}} || <code><nowiki>|opt=<nowiki/></nowiki></code>
|-
| × || {{tl|SimplSVG}} || <code><nowiki>|3={{{000}}}|4={{{×|}}}|5={{{×d|}}}</nowiki></code>
|-
| \ || {{tl|Superseded}} || <code><nowiki>|1={{{\}}}|2={{{\r|}}}</nowiki></code>
|-
| → || {{tl|Convert to SVG}} || <code><nowiki>|1={{{→|{{{w|{{{s|}}}}}}}}}</nowiki></code>
|-
| ° || {{tl|Easy-border}} || <code><nowiki>|topic={{{°}}}</nowiki></code>
|-
| ge || {{tl|THV}} || <code><nowiki>|1={{{k|}}}|2={{{s|}}}</nowiki></code>
|}
=== Reference of all parameters ===
For the setting of parameter #1 and parameter #2 see also [[#Parameter settings]].<br />
The following tables reference all other parameters possibly occurring;
* when <code>10=S</code> all the parameters of {{T0|SimplSVG}} or {{T0|HandSVG}} can occur as well;
* the many parameters when [[Template:Created with code/doc#Template parameters|source code]] is to display are explained [[Template:Created with code/doc#Template parameters|there]]
{| class="wikitable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em"
|-
! colspan="3"| {{0|000}} Created with code {{0|000}}
|-
| '''code''' || '''alias''' || '''description'''
|-
| c1 || code || the source '''c'''ode
|-
| d1 || || '''d'''iffusion of category
|-
| e1 || || '''e'''xplanatory text ahead
|-
| f1 || style || '''f'''ormat attributes
|-
| g1 || || '''g'''reater or smaller, and ''type'' of font
|-
| h1<ref name="s"><br /><u>Suppressable:</u> to suppress the usage of the default value for a parameter "x", use <code>x=-</code> or <code>x=n</code>, or an '''''empty'' value''' like <code>x=</code>.</ref> || title<ref name="s"/> || '''h'''eadline
|-
| l1 || syntax || '''l'''anguage {{W|mw:Extension:SyntaxHighlight#Supported_languages|code}}
|-
| n1 || || '''n'''ote afterwards
|-
| s1<ref name="s"/> || collapse<ref name="s"/> || '''s'''ecluded
|-
| colspan="3"| two more source codes can be shown; all the parameters<br />
are specified like for the first code, but with "2" resp. "3",<br />
e.g. <code>c2</code> or <code>code2</code> and so on
|-
| colspan="3"| Formatting parameters
|-
| +c || || global field name
|-
| cc || || global category
|-
| nt || || global headline suppress
|-
| p1 ||number|| headline "preferred", note ''byte count''
|}
==== Final tags ====
to transclude templates with a 2-byte-code{{Clarify|date=November 2024}}
{| class="wikitable sortable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em"
|+ table
|-
! code !! template !! parm{{Clarify|date=November 2024}}
|-
| ni || {{T0|NoInkscape}} || 14
|-
| nu || {{T0|NoUpdate}} || 21
|-
| re || {{T0|Recent}} || 22
|-
| up || {{T0|Update needed}}/{{T0|Outdated}} || 23
|-
| lh || {{T0|Logo history}} || 24
|-
| ci || {{T0|Current}} || 25
|-
| dm || {{T0|Disputed map}} || 43
|-
| ov || {{T0|Overlay}} || 26
|-
| oq || {{T0|Opaque}} || 27
|-
| tr || {{T0|Translate}} || 28
|-
| in || {{T0|Convert to international}} || 29
|-
| ml || {{T0|Convert to multilang}} || 30
|-
| wc || {{T0|Convert to wikichart}} || 31
|-
| wt || {{T0|Convert to wikitable}} || 32
|-
| bl || {{T0|Colour blind}} || 33
|-
| ff || {{T0|Fictitious flag}} || 34
|-
| rd || {{T0|Redrawn with Text Editor}} || 35
|-
| fi || {{T0|Fake sports logo}} || 36
|-
| bf || {{T0|Broken file}} || 37
|-
| rs || {{T0|Restoration}} || 38
|-
| zf || [[User:ZooFari/Template:SVG|zoofari]] || 39
|-
| ob || {{T0|out of borders|link=n}} || 41
|-
| ar || {{T0|Artifacts}} || 42
|-
| cb || {{T0|Coablazon}} || 43
|-
| rf || {{T0|COAref}} || 44
|}
----
=== Reference list ===
{| class="wikitable" style="margin:.8em 0 0 1.6em"
! code !! alias !! description
|-
| %<br />{{0|-}}%r<br />{{0|-}}%m<br />{{0|-}}%M<br />{{0|-}}%v<br />{{0|-}}%n<br />{{0|-}}%f<br />{{0|-}}%u<br />{{0|-}}%i<br />{{0|-}}%I || || the file contains {{C|Translation possible - SVG|translatable}} plain text; specifications are<br />"r" for reduced display, with {{C|Translation possible - SVG|categorizing}}<br />"m" like "r" for modifyable text<br />{{0|00}}"M" like "m" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box<br />"v" for reduced display, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"n" for reduced display/numbers, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"f" for reduced display in same line, no <s>{{C|Translation possible - SVG|categorizing}}</s>.<br />"u" when the generated text is invisible.<br />"i" recommends <switch> option<br />{{0|00}}"I" like "i" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box
|-
| %s<br />%S<br />%C|| || the file contains multilingual text using the {{C|Translation possible - SVG (switch)|switch}} option<br />and <!-- to be kept simple --> it should ''not'' be maintained with [[Commons:SVG Translate tool|Toolforge]]<br /><code><switch></code> controlled variations, with {{C|Switch-controlled SVG|categorizing}}
|-
| %a<br />%w|| || to transclude {{tl|Add languages}}<br />for (invisible) textual watermarks, %sc=subcat
|-
| ~<ref name="s"/><br /><br />{{0}}~k<br />{{0}}~u || || the file is bloated by {{C|Adobe files with CDATA blocks|Adobe PGF CDATA}} blocks<br />(specify <code>~=n</code> to avoid subcategorization with u/U)<br />possible sort key for the category<br />user name for categorizing
|-
| !<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0|00}}!c<ref name="s"/><br />{{0|00}}<br />{{0|00}}!s<ref name="s"/><br />{{0|00}}!k<ref name="s"/> || || the file contains embedded {{C|SVG images with embedded raster graphics|raster graphics}}<br />Use <code>!=''a''</code> when it consists <u>only</u> of an embedded raster<br />Use <code>!=''f''</code> when the file is just a {{C|Fake SVG}}<br />Use <code>!=''x''</code> when the file is a {{C|Fake SVG}} with just text<br />Use <code>!=''t''</code> when it is only for {{T0|TopoSVG|''topographic structures''}}<br />Use <code>!=''r''</code> when it is for other {{C|SVG images with required raster graphics|required structures}}<br />other category ("-" for none), either full "[<nowiki/>[.." or user name<br />(<code>!c=</code> has precedence over <code>U=</code> and <code>u=</code>)<br />{{C|SVG images with embedded raster graphics|subcategory}} ("-" for none)<br />a sorting key within the category
|-
| ?<br />{{0}}?b<br />{{0}}?c<br />{{0}}?f<br />{{0}}?o<br />{{0}}?p<br />{{0}}?r<br />{{0}}?u<br />{{0}}?x<br />{{0|00}}?s<ref name="s"/><br />{{0|00}}?w<br />{{0|00}}?t<br />{{0|00}}?k<br />{{0|00}}?n ||style="vertical-align:top"| ⁇ || the file contains {{C|Pictures showing a librsvg bug|SVG bugs}}<br />{{C|Pictures showing a librsvg bug (feGaussianBlur)|blur bug}}<br />{{C|SVG compatibility issues|compatibility}}<br />{{C|Pictures formerly showing a librsvg bug|former bug}}<br />{{C|Pictures showing a librsvg bug (overwritten with a workaround)|overwritten bug}}<br />specify a <code>phab</code> number (see {{t0|Rsvg bug|parameter 1}})<br />{{C|Pictures showing a librsvg bug (SVG replaced)|replaced bug}}<br />{{C|Pictures showing a librsvg bug (unsolved)|unsolved bug}}<br />flowRoot e<u>x</u>ception<br />[[#o-sub|subcategory]] {{0|000}} (see {{t2|Rsvg bug}} docu)<br />topic<br />tool<br />sortkey<br />file name for {{t2|Technically replaced}}
|-
| § <br />{{0}}§s || || the file is {{C|SVG images with poorly traced elements|inadequately}} vectorized <br /> possible subcategorizing
|-
| &<br />{{0}}&&<br />{{0}}&c<ref name="s"/><br />{{0}}&k<br />{{0}}&<code>l</code><ref name="s"/><br />{{0}}&s<ref name="s"/> || || the file generation was participated by a ''with_tool''<br />&&=''main_tool'' (default: Inkscape)<br />&c to specify, or "-" suppress, the categorizing<br />&k to specify a sort key<br />&l to specify, or "-" suppress, a logo<br />&s to specify a [[#o-sub|subcategory]]
|-
| <<br /><h <br /><i <br /><x <br /><v <br /><n <br /><l <br />{{0}}<s<br />{{0}}<c<ref name="s"/> || || the text has been converted to {{C|Path text SVG|path}}s; specifications are<br />"h" for highlighting (also with <code><s=h</code>)<br />"i" to specify that internationalization is required<br />"x" for tagging with {{T0|Should be text}}<br />"v" for reduced text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />only number(s) path text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />due to Librsvg restrictions, no <s>{{C|Path text SVG|categorizing}}</s><br /> possible subcategorizing<br />no categorizing
|-
| ^<br />{{0}}^s <br />{{0}}^t <br />{{0}}^p <br />{{0}}^c <br />{{0}}^w <br />{{0}}^b || ||type: {{C|Quality images|Quality image}} and/or {{C|Valued images|Valued image}}: see {{T0|Igen/qui}}.<br />scope <br />timestamp <br />page <br />category (prefixed by 'Valued image of ') <br />topic <br />by
|-
| ><br />{{0}}>c<ref name="s"/> || || the file size is too {{C|Large SVG files|large}} to display the source code<br /><code>>c=-</code> to suppress categorization
|-
| ×<br />{{0}}×c<ref name="s"/><br />{{0}}×d<br />{{0}}×k<br />{{0}}×n<ref name="s"/><br />{{0}}×s<br />{{0}}×t<ref name="s"/><br />{{0}}×× || || the file is extremely {{C|SVG files to be drawn by hand|simple}} and easy to draw manually<br />or ×=- to suppress categorization<br />display size for the example, in pixel<br />key<br />but it is nowhere used – not worth any effort !<br />subc<br />topic for subcategorizing, e.g. m, c, f, ...<br />flag with {{T|UseXML}} (see {{C|Diagonal bisection square flags (plain)|examples}})
|-
| $<br />{{0}}$c<ref name="s"/><br />{{0}}$f<ref name="s"/><br />{{0}}$l<ref name="s"/><br />{{0}}$s<ref name="s"/><br />{{0}}$m<br />{{0}}$u<br />{{0}}$w ||{{0}}<br />{{0|r}}<s>cc</s><ref name="s"/><br />{{0|r}}cf<ref name="s"/><br />{{0|r}}cl<ref name="s"/><br />{{0|r}}cs<ref name="s"/><br />{{0|r}}cm<br />{{0|r}}cu<br />{{0}} || the file was {{C|uploaded with Commonist}}<br />Commonist category, e.g. <code><nowiki>[[Category:Othercat| ]]</nowiki></code><br />Commonist linefeed_before, e.g. <code>$f=br</code><br />Commonist logo, e.g. <code><nowiki>[[File:xyz.svg|20px]]</nowiki></code><br />Commonist subcategory<br />Commonist "more" text, e.g. <code>&nbsp; explanation</code><br />Commonist user, e.g. <code><nowiki>{{U|user}}</nowiki></code><br />to display a topic for Commonist
|-
| +<br />{{0|-}}+c|| || to generate the parameter <code>Name=</code> for {{t2|Information field}}<br />field name for {{T0|Created with code}}
|-
| – || || to generate a final {{t2|clr|clear-linefeed}}
|-
| \+<br />{{0|-}}\+r<br />{{0|-}}\+t<ref name="s"/><br />{{0|-}}\+u<br />{{0|-}}\+l|| <br />\r<br />\t<ref name="s"/><br />\u<br />\l || this file {{lc:{{t0|supersedes}}}} another one<br />the ''reason'' for superseding<br />topic (default: "w", "s" <small>when not suppressed</small>)<br />option: by user<br />option: <code>lang=</code>
|-
| \-<br />{{0}}<br />{{0|-}}\-r<br />{{0|-}}\-x<br />{{0|-}}\-t<br />{{0|-}}\-l || \<br />{{0}}<br />\r<br />\x<br />\t<br />\l || the file is {{lc:{{t0|superseded}}}} by another one,<br />or a {{T0|bitmap version}} exists for an SVG<br />the ''reason'' for being superseded<br />an extension (when not <code>.png</code>)<br />topic<br />option: <code>lang=</code>
|-
| \\<br />{{0|-}}\\r<br />{{0|-}}\\q<br />{{0|-}}\\l || <br />\r<br />\q<br />\l || A {{T0|Vector version available|vector version is available}} to that raster image<br />reason text<br />quality tag (s, i)<br />option: <code>lang=</code>
|-
| \# || || insert {{tl|PDF version available}}.
|-
| →<br />⇒ || || {{Tle|T=Convert to SVG|→}}<br />{{Tle|T=Convert to SVG|⇒|simple}}
|-
| ←<br />{{0|-}}←s<br />{{0|-}}←t|| <!-- <s>ni</s> --> || {{Tl|NoInkscape}}: <code>←</code>, <code>←=+</code> , <code>←=-</code> or <code>←=tt</code><br />a style option for {{T0|NoInkscape}}, e.g. <code>←s=0</code>/h /0h <br />text for a topic in NoInkscape
|-
| ° || || {{Tle|T=Easy-border|p1=topic|w/s|p2=pixel|°}}
|-
| — || || (U+2014) to categorize {{C|Unused SVG images}}
|-
| bf<br />{{0}}bfc || || description for {{tl|Broken file}}<br />category
|-
| {{0|.}}ff || || for {{T0|Fictitious flag}}
|-
| {{0|.}}bl || || for {{T0|Colorblind|+}}
|-
| by || U || creates a link to a user name; see {{t0|by|+}}
|-
| c<ref name="s"/> || cat<ref name="s"/> || change or suppress (<code>c=-</code>) category
|-
| cat2 || || name of an additional category that should be used
|-
| cb || || Color box, see {{T0|Igen/cbx}} and [[Template:File generation description/doc#Colorboxes|colorboxes]]
|-
| cc<ref name="s"/> || || suppress automatic [[Template:Created_with_code/doc#Categorizing|categorization]] with ' code'
|-
| ci<br />{{0|-}}ci2 || || the {{T|Current|+}} interval, for frequent updates<br />possible 2{{exp|nd}} parameter
|-
| cni<ref name="s"/> || || only for "Im": category text (or suppression: "-" for none)<br />replaces <small>{{C|SVG created with Inkscape:Important}}</small>
|-
| ct || c_text || category text, replaces "created with"
|-
| C<br />{{0|-}}Ct<br />{{0|-}}Cc<ref name="s"/><br />{{0|-}}Cl<br />{{0|-}}Cf<ref name="s"/><br />{{0|-}}C+<ref name="s"/> <br />{{0|-}}Css<ref name="s"/> ||<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />c+<ref name="s"/> <br />ss<ref name="s"/> || {{T0|Tincture}}s<br />a color for the tincture-"tc" parameter<br />a category for the tincture-"cat" parameter ("-" for none)<br />other label than "Tincture"<br />Cf=n or Cf= for no field name<br />"+" for field name (=default)<br /><code>Css=BY</code> for [[Template talk:Tincture/box|Bavarian]] or other shades
|-
| cw || || the "[[#cw_par|Created with]]" parameter, for logo/cat/tool
|-
| e || err || error count ≥ 0, instead of definition with parameter# 2
|-
| colspan="2" | editor, editoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]])
|-
| f<br />{{0|-}}ft<br />{{0|-}}fc || || for fictional items, see {{t0|Igen/fif}}<br />for other topic<br />for other category
|-
| {{0|.}}ff || || for {{T0|Fictitious flag}}
|-
| fn || || field name for {{T0|Information field}}, instead of the "+"
|-
| fw<br />{{0|-}}fwc<br />{{0|-}}fwe<br />{{0|-}}fwo<br />{{0|-}}fwl<br />{{0|-}}fwt<br />{{0|-}}fws || || {{T0|Fotowerkstatt|}}, with optional parameters (see [[Template:Fotowerkstatt/doc#Igen|description]])<br />{{0|-}}changes<br />{{0|-}}editor<br />{{0|-}}orig<br />{{0|-}}orig-lang<br />{{0|-}}topic<br />{{0|-}}style
|-
| g<br />{{0|-}}gb<br />{{0|-}}gc<br />{{0|-}}gd<br />{{0|-}}ge<br />{{0|-}}gf<br />{{0|-}}gH<br />{{0|-}}gi<br />{{0|-}}gj<br />{{0|-}}gP<br />{{0|-}}gr<br />{{0|-}}gs<br />{{0|-}}gt<br />{{0|-}}gw<br />g=<code>xx</code><br /><br />{{0|-}}gc=<br />{{0|-}}gk=<br />{{0|-}}gs=
| style="vertical-align:top"| <code>gl</code> || {{t0|Graphic Lab/statistics|Graphic Lab}}; g or gl for "{{C|Graphic Lab-en|Graphic Lab-'''en'''}}"<br />or <code>g=bn</code> for "{{C|Graphic Lab-bn}}"<br />or <code>g=c{{color|#aaa|m}}</code> for "{{C|Graphic Lab-Commons}}"<br />or <code>g=de</code> for "{{C|Graphic Lab-de}}"<br />or <code>g=es</code> for "{{C|Graphic Lab-es}}"<br />or <code>g=fr</code> for "{{C|Graphic Lab-fr}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-ch}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-it}}"<br />or <code>g=he</code> for "{{C|Graphic Lab-he}}"<br />or <code>g=pl</code> for "{{C|Graphic Lab-pl}}"<br />or <code>g=ru</code> for "{{C|Graphic Lab-ru}}"<br />or <code>g=sv</code> for "{{C|Graphic Lab-sv}}"<br />or <code>g=tr</code> for "{{C|Graphic Lab-tr}}"<br />or <code>g=w{{color|#aaa|s}}</code> for "{{C|Graphic workshop}}"<br />{{0|00l}}for other "<code>Graphic Lab-xx</code>", if exists<br />{{0}}(use g='''F'''i for "{{C|Graphic Lab-fi}}")<br />a [[#o-sub|subcategory]] for an above Graphic Lab<br />a category sorting key<br />[[Template:Graphic Lab/doc#style|style]] for {{T0|Graphic Lab}}, either nl (new line) or sx (small text)
|-
| {{0|-}}in || || for {{T0|Convert to international}}
|-
| k<ref name="s"/><br />K || key<br />{{0}} || sort key for category (and for {{t0|THV}})<br />upper case "K" with space
|-
| l || L || upload info, or categorization info
|-
|{{0|.}}lh || || for {{T|Logo history|+}}
|-
| m<br />M || more<br />{{0}} || additional text (use <code>m=</code> to suppress the final dot)<br />upper case "M" with space
|-
| {{0|.}}ml || || for {{T0|Convert to multilang}}
|-
| msg || || additional message box(es)
|-
| n<br />N || name<br />{{0}} || tool name of <code>Other tool</code> / <code>Unknown SVG facility</code><br />upper case "N" with space
|-
| {{0|-}}nu || || for {{T0|NoUpdate|+}}
|-
| o || opt || W3C validator option (see vo / vopt)
|-
| {{0|-}}oq || || for {{T0|Opaque|+}}
|-
| {{0|-}}ov || || for {{T0|Overlay|+}}
|-
| colspan="2" | orig, origoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]])
|-
| p || || preceding text
|-
| pu || || previous user name (for {{T0|SimplSVG}})
|-
| r<ref name="s"/><br />R<br /><br /><br /><br /> || || {{t2|Retouched picture}} with parameters{{Anchor|RetP}}<br /><small>(upper case "R" for an advancing {{T0|clr|clear}} is not necessary)</small>
r/R= modifications (<code>r=-</code> if modifications unspecified)<br />editor= / editoff=<br />orig= / origoff=
|-
| {{0|.}}rd || || for {{T0|Redrawn with Text Editor|Redrawn|+}} with Text Editor
|-
| {{0|.}}re || || for {{T0|Recent|+}}
|-
| {{0|.}}rf || || for {{T0|COAref|+}}
|-
| s<br />S<br />s:, su:<br />S:<br />s- || sub<ref name="s"/><br />{{0}}<br />sub:{{0}}<br />Sub:<br />sub- || [[#Subcategory specification|subcategory]]; lower case "s" with expand option<br />upper case "S" with prefixed space "␢"<br /><code>s:</code> to be prefixed with a semicolon ":"<br /><code>S:</code> prefix with semicolon ''and'' space ":␢"<br /><code>s-</code> to be prefixed with a hyphen/minus "-"
|-
| S- || S || to use {{T0|SimplSVG|+}}
|-
| S* || || to use {{tl|Igen/sni|sni}}
|-
| S+ || || to use {{tl|Igen/sni|sni}}, with parameter %p
|-
| S& || || to use {{tl|Redrawn with Text Editor|rd}} & {{tl|Igen/sni|sni}}
|-
| sa<br />sb || || '''s'''ize ('''a'''ctual) for [[#Template SimplSVG|template SimplSVG]]<br />'''s'''ize ('''b'''efore)
|-
| sc || || <code>sc=u</code> to prevent the lowercasing of the 1{{exp|st}} <code>sub</code>-character
|-
| sd || || subcategory differentiation
|-
| subcat<ref name="s"/> || !s<ref name="s"/> || ''topic'' for {{C|SVG images with embedded raster graphics:Topics}}
|-
| ss<ref name="s"/> || || ''see'' <code>Css</code>
|-
| colspan="2" | source || additional text, currently only used by {{T0|Created with perl|perl}} and {{T0|Created with ItB|ItB}}
|-
| t<br />T ||<br />T1…T7 || trailing text<br />upper case "T" with an advancing {{T0|clr|clear}}
|-
| {{0|-}}tr || || for {{T0|Translate|+}}
|-
| tw<br />{{0}}t<code>l</code><ref name="s"/><br />{{0}}tc<ref name="s"/><br />{{0}}tu<ref name="s"/><br />{{0}}tx<ref name="s"/> || {{0}}<br />{{0}}<br />{{0}} || specify a tool (camera) for {{t2|Taken with}}<br />logo or "-"<br />category or "-"<br />username or "-"<br />text or "-"
|-
| u<br />U || user<br />{{0}}by || user name (or user name link, e.g. <nowiki>{{Ut|user}}</nowiki>)<br />uppercase "{{T0|U}}" creates the user name link
|-
| {{0|.}}up || || for {{T0|Update|+}} = {{T0|Outdated}}
|-
| vc<br />vo<br />vt<br />vs<ref name="s"/><br />vw || vcat<br />vopt<br />vtxt<br />vstyle<ref name="s"/><br />vwidth || validator categorization<br />validator option (also o or opt)<br />validator more-text<br />[[#vstyle|validator style]] option, mainly for {{T0|SimplSVG}}<br />validator width (not used)
|-
| vsub<ref name="s"/><br />Vs || || subcategory of Text editor ("-" to suppress subcategorizing)<br />"Vs" like "vsub" with space
|-
| v<ref name="s"/><br />V || vt, vtxt<br />{{0}} ||additional validation text<br />upper case "V" with space
|-
| w<ref name="s"/><br />{{0}} || what<ref name="s"/><br />topic<ref name="s"/> || define (if other than <code>s</code>) or suppress (with <code>w=-</code>)<br />the code for the {{t0|Igen/top|topic}}
|-
| {{0|.}}wc || || for {{T0|Convert to wikichart}}
|-
| {{0|.}}wt || || for {{T0|Convert to wikitable}}
|- style="background:#EEF"
|colspan="3"| more parameters – mainly for the {{C|Created with ... templates}} (raster graphics)
|-
|colspan="2"|par1|| to specify e.g. a number
|-
|colspan="2"|mode|| e.g. the stacking mode
|-
|colspan="2"|type, item, par2|| not yet used
|}
<references/>
<includeonly>[[Category:Image generation templates| ]]{{ifsandbox|[[Category:Sandbox templates]]
|[[Category:Formatting templates|{{PAGENAME}}]]{{Protected}}
[[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]]
}}</includeonly>
6dhjlccwaiqevja0uyypufl9jdec4j3
10972
10971
2026-08-25T23:38:39Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Image_generation/doc]]
10971
wikitext
text/x-wiki
<!-- {{redirects|Igen}}
-->{{Multilingual description
|en = This template generates a description about an SVG file's creation and properties, and adds appropriate categories.
|de = Diese Vorlage dient zur Generierung der Beschreibung, wie eine SVG-Datei erzeugt worden ist und welche Eigenschaften ihr zukommen;<br>
{{0|WWW}}es werden die entsprechenden Kategorisierungen vorgenommen — diese können zahlreich sein.
|es = Esta plantilla genera una descripción de la creación y propiedades de un archivo SVG, añadiendo las categorías apropiadas.
|fr = Ce modèle génère une description sur la création d'une image et ses propriétés, et ajoute aux catégories (potentiellement nombreuses) appropriées.
|ja = このテンプレートは、SVGファイルの作成およびプロパティに関する解説を生成し、適切なカテゴリを追加します。
|it = Questo template genera una descrizione relativa alla creazione di un file SVG e alle sue proprietà;<br />{{0|WWW}}vengono associate una o più categorie.
|nl = Dit sjabloon genereert een beschrijving over de aanmaak en eigenschappen van een SVG-bestand, en voegt de juiste categorieën toe.
}}
----
{{Heavily used template|edit=✔|3=✔}} <!-- edit sandbox -->
{{Use sandbox|testcase= }}<!--
==================================================================================================
BEGIN OF TEMPLATE BOX
==================================================================================================-->
{{TemplateBox
<!------------------------------------------------------------------------------------------------
TEMPLATE BOX - BEGIN OF parameter section
-------------------------------------------------------------------------------------------------->
|1=1
|1d= {{Mbox
|text = The "tool" this refers to can be either the tool which generated the current version of this file, or a different tool which generated a previous version of the same image.<!-- Chealer 2024-10-21 -->
|type = content
}}
Name of the tool (case sensitive) to get the template name "Created with <nowiki>{{{1}}}</nowiki>"
:: or
Abbreviation of the tool name, case-insensitive:
* <code>A</code> for {{tl|Created with Adobe Illustrator|Adobe Illustrator}}
* <code>AH</code> for {{tl|Created with Adobe-hand|Adobe-hand}}
* <code>B</code> for {{tl|Created with BKchem|BKchem}}
* <code>C</code> for {{tl|Created with ChemDraw|ChemDraw}}
* <code>D</code> for {{tl|Created with CorelDRAW|Corel'''D'''RAW}}
* <code>E</code> for {{tl|Created with ElCompLib|ElCompLib}}
* <code>F</code> for {{tl|Created with Fig2SVG|Fig2SVG}}
* <code>G</code> for {{tl|Created with Gnuplot|Gnuplot}}
* <code>H</code> for {{tl|Created with Inkscape-hand|Inkscape-hand}}
* <code>I</code> for {{tl|Created with Inkscape|Inkscape}} {{color|#777|(default tool)}}
* <code>J</code> for {{tl|Created with JFreeChart|JFreeChart}}
* <code>L</code> for {{tl|Created with LibreOffice|LibreOffice}}
* <code>M</code> for {{tl|Created with MetaPost|MetaPost}}
* <code>O</code> for {{tl|Created with Other tool|Other tool}}
* <code>P</code> for {{tl|Created with Pstoedit|Pstoedit}}
* <code>Q</code> for {{tl|Created with QGIS|QGIS}}
* <code>R</code> for {{tl|Created with R|R}}
* <code>S</code> for {{tl|Created with Sodipodi|Sodipodi}}
* <code>T</code> for {{tl|Created with Text Editor|Text Editor}} ''via the adapter'' {{tl|HandSVG}}
* <code>U</code> for {{tl|Created with Unknown SVG facility|Unknown tool}}
* <code>V</code> for {{tl|Created with Vim|Vim}}
* <code>VM</code> for {{tl|Created with Vector Magic|Vector Magic}}
* <code>W</code> for {{tl|Created with Winplot|Winplot}}
* <code>X</code> for {{tl|Extracted with Inkscape}}
'''Note''': "<code>A$</code>" abbreviates for "{{T0|Adobe and Commonist}}"
: {{0|ww}}"<code>Ac</code>" abbreviates for "{{T0|Created with Vectornator|Adobe and Vectornator}}"
: {{0|ww}}"<code>IA</code>" abbreviates for the mixture {{C|SVG created with Inkscape and Adobe Illustrator|Inkscape & Adobe}}
: {{0|ww}}"<code>Ih</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki></code>
: {{0|ww}}"<code>IH</code>" abbreviates <code><nowiki>{{Inkscape-hand}}</nowiki> without</code> {{t|HandSVG}}
: {{0|ww}}"<code>II</code>" abbreviates for "{{T0|Inkscape and Heraldicon|link=n}}"
: {{0|ww}}"<code>Im</code>" abbreviates <code><nowiki>{{Inkscape|…|IMPORTANT=yes}}</nowiki></code>
: {{0|ww}}"<code>Ic</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://github.com/RazrFalcon/svgcleaner|SVG cleaner}} postprocessing</code>
: {{0|ww}}"<code>Io</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://jakearchibald.github.io/svgomg/|SVGO}} postprocessing</code>
: {{0|ww}}"<code>Is</code>" abbreviates <code><nowiki>{{Inkscape}}</nowiki> and {{Plainlinks|https://svgoptimizer.com/|svgoptimizer}} postprocessing</code>
: {{0|ww}}"<code>Iz</code>" abbreviates <code><nowiki>{{Inkscape|…|optimized}}</nowiki></code> (scour)
: {{0|ww}}"<code>I$</code>" abbreviates for "{{T0|Inkscape and Commonist}}"
: {{0|ww}}"<code>ItB</code>" abbreviates <code><nowiki>{{</nowiki>'''I'''nkscape '''t'''o '''B'''itmap<nowiki>}}</nowiki></code>
: {{0|ww}}"<code>S-</code>" abbreviates for "{{T0|SimplSVG|Simplified SVG}}", drawn with Text Editor
|1def=<code>Inkscape</code> <!-- A$ -->
|1stat=optional-
|2=2
|2d=''either'' character "v" ('''v'''alid) (if absent, <code>v</code> is assumed with SVG files)
: ''or'' the numeric error count from W3C validation ("0" = "v", "-1" = uncheckable)
: ''or'' character "s" for SVG files, to suppress the validity box (but with error count <code>e=</code>){{Clarify|date=November 2024}}
''See'' the detailed information for [[#Parameter 2|parameter #2]] and [[#Suppress the validity box|suppressing validity information]]
|2def=<code>v</code>
|2stat=optional-
|3=3<ref name="a">Every one of the signs ($, +, -) or parameters (%, ~, !, ?, §, &, <, ^,
>, ×, \, →, ⇒, °, <code>Ɨ</code>) can be passed in any sequence, each as an argument for one of the unnamed parameters #1 through #9.{{Clarify|date=October 2024}}</ref>
|3d=necessary because the template cannot determine from where it is transcluded{{Clarify|date=November 2024|Yet, it's marked as optional. Chealer 2024-11-01}}:
* a "-" (minus sign) to terminate the left-floating with {{tl|clr}}<br />''<small>Can be necessary if the template is used '''outside''' the {{tl|Information}} box</small>''
* a "+" (plus sign) when used in <code><nowiki>|Other fields</nowiki></code> or <code><nowiki>|Other fields 1</nowiki></code>. In this case parameter <code>fn=</code> may specify a <code>field name</code> for {{tl|Information field}}.
{{Mbox
|text = When a <code>field name</code> is specified, value <code>+</code> is implied, so that this parameter can be omitted. Otherwise, the <code>field name</code> "development" is nationalized by {{tl|I18n/COA}}.
}}
|3stat=optional-
|4=4<ref name="a" />
|4d=a "$" (dollar sign) when "[[File:Commonist2.svg|14px]] Uploaded with Commonist" should be added. In this case
* parameter <code>$u=</code> may specify a user, e.g. <nowiki>{{U|user}}</nowiki>
* parameter <code>$l=</code> may specify a logo (☭){{Clarify|date=November 2024}}, e.g. <nowiki>[[File:xyz.svg|20px]]</nowiki><ref name="c">This parameter allows suppression with the parameter value "-" (or just the parameter without any value, e.g. <code>cat=</code>){{Clarify|date=November 2024}}</ref>
* parameter <code>$m=</code> may specify a more, e.g. &nbsp; explanation
* parameter <code>$c=</code> may specify a category, e.g. <nowiki>[[Category:Othercat| ]]</nowiki><ref name="c" />
* parameter <code>$s=</code> may specify a subcategory, e.g. <code>:diffusion</code><ref name="c" />
* parameter <code>$w=</code> may specify a [[Template:Igen/sub|topic]], e.g. <code>m</code> or <code>projection</code>
* parameter <code>$f=</code> may specify a linefeed before, e.g. <code><nowiki>br</nowiki></code>, <code>clr (default: <code>none</code></code><ref name="c" />)
If any one of these seven parameters is specified the "<code>$</code>" is implied and can be omitted;<br />
for <code>$l</code>, <code>$c</code>, <code>$s</code> or <code>$f</code> it is enough if the suppression is defined with an empty value e.g. <code>$c=</code>{{Clarify|date=November 2024}}
|4stat=optional-
|5=5<ref name="a" /><ref>Every one of the eight signs can be used either as a positional parameter, or as a named parameter passing the value to the corresponding template; see [[#Named and unnamed parameters|Named and unnamed parameters]].</ref>
|5d=For additional parametrizing see [[#Named and unnamed parameters|individual information]]
* a "%" (percent sign) or "%v" to insert the {{tl|Igen/emb|Translate}} tag, "%s" when option [[Commons:Translation possible/Learn more#Multiple translations within one SVG file|<switch>]].
* a "~" (tilde) to insert the {{tl|Cdata|pgf-Cdata}} tag.
* an "<code>!</code>" (exclamation mark) to insert the {{tl|BadSVG}} tag.
* a "?" (question mark) to insert the {{tl|Rsvg bug}} tag.
* a "§" ("section" sign) to insert the {{tl|TracedSVG}} tag.
* an "&" (ampersand) to insert the {{tl|Igen/amp|QGIS}} tag.
* a "<" ("less" sign) to insert the {{tl|Igen/ptx|Path text SVG}} tag.
* a "<code>^</code>" {{anchor|circum}}(circumflex sign) to insert the {{tl|Quality image}} tag.
* a ">" ("greater" sign) to inhibit for {{C|Large SVG files|large SVG}} the "show source" validator option.
* a "<code>×</code>" (multiplication sign) to insert the {{tl|SimplSVG|draw by hand}} tag.
* a "<code>\-</code>" (backslash&minus) or "\" to insert the {{tl|Superseded}} tag, or
: a "<code>\+</code>" (backslash&plus) to insert the {{tl|Supersedes}} tag', or
: a "<code>\\</code>" (backslash twice) to insert the {{tl|VVA}} tag.
: a "<code>\#</code>" (backslash&number) to insert {{tl|PDF version available}}.
* an "→" (arrow right) or "⇒" to insert the {{tl|Convert to SVG}} tag.
* an "←" (arrow left) to insert the {{tl|NoInkscape}} tag.
* a "<code>°</code>" (degree sign) to insert the {{tl|Easy border}} tag.
|5stat=optional-:
<!--
|6=6<ref name="a" />
|7=7<ref name="a" />
|8=8<ref name="a" />
|8d=(''free for future expansions'')
|8stat=optional- -->
|10=e
|10aliases=err
|10label='''e'''rror count
|10d=''when invalid SVG'': error count from W3C validation ("0" for ''valid'', "-1" for ''uncheckable''){{Clarify|date=November 2024}}<br />
(has precedence over any argument of parameter 2)<br />
'''Note''': when uncheckability is specified, <code>Other tool</code> is always implied.
|10stat=optional-
|15=m
|15aliases=more
|15label='''m'''ore text
|15d=optional additional text (use <code>M=</code> to precede that text with a space{{Clarify|date=November 2024}})
|15def=<code>.</code>
|15stat=optional-
|20=c<ref name="c" />
|20aliases=cat
|20label='''c'''ategories
|20d=category/categories, complete with brackets (and sorting), or without; or suppress with <code>c=-</code><br />
plain text ''without'' brackets becomes completed with <code><nowiki>[[Category: ]]</nowiki></code>
|20stat=optional-
|25=C
|25label='''C'''olor
|25d=the {{t0|tincture|tincture}} can be defined
|25stat=optional-
|26=cb
|26label='''c'''olor '''b'''oxes
|26d=for more details see section [[#Color boxes]]
|26stat=optional-
|30=s<ref name="c" />{{Anchor|subcat}}
|30aliases=sub
|30label='''s'''ubcategory
|30d=suffix to the category name for diffusion but also an information for subtemplates
* <code>sub=</code> is used only for category diffusion (use <code>sub=-</code> for no diffusion){{Clarify|date=November 2024}}
* <code>S=</code> (upper case) like <code>sub=</code>, with the insertion of an inbetween space
* <code>s:=</code>, <code>s-=</code> (lower case) with insertions, see [[#Subcat & topic]]
* <code>s=</code> (lower case) can be used instead, or ''in addition'' to all the above;
: With a [[Template_talk:Image_generation/Archive_1#TopTb|''one-letter-code'']] for <code>s=</code> the {{T0|Igen/top|topic}}s-subcategory may be [[Template:Igen/sub|defined]], as
: :CoA, :Diagrams, :Flags, :Icons, :Logos, :Maps, :Signs, :Unicode, :Trigonometry,
: When <code>sub</code>/<code>S</code> and <code>s</code> are both defined, <code>sub</code>/<code>S</code> is used for subcategorizing,
: and <code>s</code> is used (like <code>w</code>) as an [[#Subcategory specification|information]] and ''[[Template:Igen/sub|topic]]'' for several subtemplates
<span style="background:#FFD;border:1px #B40 solid;padding:0 6px;">Select the best fitting subcategory, or create an appropriate new one</span>
|30stat=optional-
|35=k
|35aliases=key
|35label=sort '''k'''ey
|35d=key for sorting within the category (use <code>K=</code> for the insertion of a preceding space)<br />
<code>key</code> is used e.g. for category sorting, and in {{T0|HandSVG}} for subcategorizing
|35stat=optional-
|40=v
|40aliases=vt/vtxt
|40label='''v'''alid, invalid
|40d=additional text for Valid/Invalid SVG box (use <code>V=</code> to precede that text with a space){{Clarify|date=November 2024}}
|40stat=optional-
|45=o
|45aliases=opt
|45label='''o'''ption
|45d=to set or overwrite the ''display source'' option for ValidSVG/InvalidSVG{{Clarify|date=November 2024}}
|45stat=optional-
|50=n
|50aliases=name
|50label=tool '''n'''ame
|50d=a tool name or a description for {{tl|Created with other tool}}{{Clarify|date=November 2024}}<br />
'''Note''': when <code>n[ame]</code> is specified, <code>Other tool</code> is implied and parameter 1 can be omitted
|50stat=optional-
|55=u
|55aliases=user/U/by
|55label='''u'''ser
|55d=user name, or other text. May be coded e.g. with {{tl|U}}, {{tl|Uc}}, {{tl|Ud}}, {{tl|Ut}}, …<br />
Use <code>U=</code> to create the user link: <code>U=xyz</code> ⇒ <code><nowiki>{{U|xyz}}</nowiki></code>.{{Clarify|date=November 2024}}<br />
'''<code>by</code>''' creates a user link. May be coded with "[" or "{" (see {{Tl|By}})
|55stat=optional-
|60=code<br>code2<br>code3
|60aliases=c1…c3
|60label=code display
|60d=display of the [[Template:Created with code/doc#Template parameters|source code]] used for generation, e.g. the SVG code. In this case
* parameter <code>l1=</code> or <code>syntax=</code> may specify or change the [[mw:Extension:SyntaxHighlight GeSHi#Supported languages|code]] '''l'''anguage (syntax)
* parameter <code>h1=</code> or <code>title=</code> may specify another '''h'''eadline, or suppress "<code>none</code>"
* parameter <code>f1=</code> or <code>format=</code> may specify '''f'''ormat style options
* parameter <code>s1=</code> or <code>collapse=</code> may specify a title text for collapsability headline
* parameter <code>d1=</code> for category diffusion
* parameter <code>e1=</code> may specify '''e'''xplanatory text preceding the code block
* parameter <code>g1=</code> for font size
* parameter <code>n1=</code> for a trailing '''n'''ote below of the code block
: More parameters with suffices "2" and "3" can be used for more codes:
:* <code>c2=</code>, <code>l2=</code> or <code>code2</code> with <code>syntax2</code>, <code>title2</code>, <code>format2</code> etc.
:* <code>c3=</code>, <code>l3=</code> or <code>code3</code> with <code>syntax3</code>, <code>title3</code>, <code>format3</code> and so on
|60stat=optional-
|65=vsub<ref name="c"/>
|65aliases=Vs
|65label='''vs'''ub
|65d=category diffusion <code>of Text editor</code> for e.g. HandSVG, Inkscape-Hand, Adobe-hand;<br />
Use <code>Vs=</code> for an inbetween space; set <code>vsub=-</code> to suppress the category diffusion.
|65def=<code>s</code>
|65stat=optional-
|70=vs<ref name="c" />
|70aliases=vstyle
|70label='''vs'''tyle
|70d=[[#vstyle|vstyle option]]: <code>vs=</code> or <code>vs=fl</code> for float-left (= same line){{Clarify|date=November 2024}}
|70def='''<code>-</code>'''
|70stat=optional-
|75=p
|75aliases=P
|75label='''p'''receding
|75d=additional '''p'''receding text; to be displayed ''left'' or ''above'' of the boxes
|75stat=optional-
|80=t
|80aliases=T
|80label='''t'''railing text
|80d={{anchor|trailtext}}additional '''t'''railing text; is displayed ''right'' or ''below'' of the boxes<br />If tags or secondary tools should appear in another sequence, use
* t2 (before Commonist}
* t3 (after Commonist, before <code>code</code>)
* t4 (immediately after <code>code</code>) <!-- – use uppercase "T " to precede with <code><nowiki><br></nowiki></code> -->
* t5 (before "Quality image")
* t6 (after QI, <small>the last ''advantage'' tag, before all the ''disadvantage'' tags</small>)
The same with an uppercase <code>T</code> cares for a newline before
|80stat=optional-
|85=g
|85aliases=gl
|85label='''g'''raphic lab
|85d=specify the national {{Tl|Graphic Lab}} with the {{w|List of ISO 639-1 codes|ISO 639-1}} language code<br />
(uses the [[#subcat|topics-subcategory]]), e.g. <code>gl=it|s=m</code> for the {{tl|Laboratorio grafico mappa}}<br />
Abbreviations: "gd" for "g=de", "ge" for "g=es", "gf" for "g=fr", "gi" for "g=it", but "gl" for "g=en"<br />
Together with <code>s=c/f/m</code> the national [[Commons:WikiProject Heraldry|heraldry project]] is achieved (e.g. {{T0|Projekt Wappen|de}}, {{T0|THV|es}}, {{T0|Projet Blasons|fr}}).<br />
The parameters <code>gs=</code> may be used to specify the <code>style</code>{{Clarify|date=November 2024}}, <code>gc=</code> for [[#o-sub|subcategorizing]].<br />
See {{T0|Graphic Lab/statistics}} for more information.
|85stat=optional-
|90=r<ref name="c" />
|90label='''r'''etouched
|90d=specify the {{tl|Retouched picture}}, with parameters r= <small>and</small> editor= editoff= orig= origoff=<br />
See [[#RetP|Retouched picture]] for more information.
|90stat=optional-
|95=w<ref name="c" />
|95aliases=what/topic<ref name="c" />
|95label='''w'''hat (topic)
|95d=With <code>w=</code> the [[Template talk:Igen/top|topic]] can be altered or suppressed<br />
See also the [[#Subcategory specification|subcategories description]]
|95def=<code>s</code>
|95stat=optional-
<!------------------------------------------------------------------------------------------------
TEMPLATE BOX - END OF parameter section
-------------------------------------------------------------------------------------------------->
|name={{BASEPAGENAME}}
|desc={{Non-native-en}}
{{Lua|Module:Igenmod}}Short notation for the {{C|SVG created with ... templates}} {{nobold|and the non-SVG}} {{C|Created with ... templates}}, {{nobold|helps to display}}
<div style="float:left;padding-right:2em;width:30%">{{nobold|__TOC__}}</div>
* {{nobold|W3C validation}}
* {{nobold|SVG tool}}
* <small>optional: </small> SVG code <small>used for creation</small><br /><small>{{0|WWWWw}}{{nobold|and ''a great number of [[#Other tags|other taggings]]''}}</small> {{nobold|formatted ''within one single line''.}}<br />
Categorisings {{nobold|occur depending on tool name, validation and other tags.}}
{{nobold|Some parameters/tags are ''only'' for SVG files, a few others only for raster images.}}
In case of difficulties {{nobold|using this template, its tag codes and this documentation, you may use {{U|User:Aaron Liu/SvgCheck-Minus.js|the simpleSVGcheck utility script}}, or the easier {{T|File generation description|incl=3}}. }}
{{nobold|Parameters for {{Tlf|File generation description}} can be e.g.}}
<pre style="font-weight:normal">
|other fields = {{ File generation description
|SVG tool = ChemDraw
|W3C error count = 0
|Topic = structural formula
|Text as path = yes }}
</pre>
{{nobold|less cryptic than{{0}} <pre style="font-weight:normal">|other fields={{Image generation|C|+|<}}</pre> {{0}}which does exactly the same.}}
<br />
<br />
{{nobold|<s>{{T0|Igen/coa}} was</s> a version for {{W|Coats of arms}}, in special with {{T0|COAInformation}}.}}<br />
{{nobold|Now {{W|Coats of arms}} are serviced with {{T0|COAInformation}} and {{M|IgenCoa}}, after conversion.}}{{Clarify|date=November 2024}}
{{clr}}
|namespace=file
|usergroup=all
|placement=
|usage-notes=<!--
--------------------------------------------------------------------------------------------------
TEMPLATE BOX - BEGIN OF usage-notes
-------------------------------------------------------------------------------------------------->
=== Script support ===
The {{W|User scripts|user script|commons}} {{Em|{{U|User:Aaron Liu/SvgCheck-Minus.js}}}} has been developed to help maintaining file descriptions. Paste the following three lines into [[Special:Mypage/common.js|your common.js]], or other MediaWiki skin-related JavaScript page. If required, look for your specific script page via the ''Skin'' section of [[Special:Preferences#mw-prefsection-rendering|your preferences]].
<syntaxhighlight lang=javascript line copy>
// [[User:Aaron Liu/SvgCheck-Minus.js]]
if (mw.config.get('wgNamespaceNumber') === 6 && /SVG/i.test(mw.config.get('wgTitle').slice(-3)))
mw.loader.load('//commons.wikimedia.org/w/index.php?title=User:Aaron Liu/SvgCheck-Minus.js&action=raw&ctype=text/javascript');
</syntaxhighlight>
The ''simpleSVGcheck.js'' script enables users to use {{T|Image generation}} template without knowing all details of its parametrizing. The script cares for the most essential settings, and does a lot of standardizing the file descriptions. Expert users may complete the suggestions made by the script (e.g. by adding more tags) before saving the script’s changes of the file description page.
=== Alternative template ===
{{T|File generation description}} is a version with <u>descriptive parameter names</u> for users not liking the cryptic short codes.<br />
Most taggings can be specified in a better human-readable format with this more talkative <!-- inbetween --> template. A rich and detailed {{T0|File generation description/doc|documentation}} explains how easy it is to use that option.
=== Other tags ===
Can be set either by a shorthand notation code, or expressed like in the following examples:
<table>
<tr>
<th style="text-align:left">other tag template</th><th style="text-align:center"><small>code</small></th>
</tr><tr>
<td>{{tl|Add languages}}</td><td>{{0|(}}<code>%a</code></td>
</tr><tr>
<td>{{tl|BadSVG}}</td><td>{{0|((}}<code>!</code></td>
</tr><tr>
<td>{{tl|TopoSVG}}</td><td>{{0|l}}<code>!=t</code></td>
</tr><tr>
<td>{{tl|TopoSVG}} (required raster)</td><td>{{0|l}}<code>!=r</code></td>
</tr><tr>
<td>{{tl|FakeSVG}}</td><td>{{0|i}}<code>!=f</code></td>
</tr><tr>
<td>{{tl|Broken file}}</td><td><code>(bf)</code></td>
</tr><tr>
<td>{{tl|Cdata}}</td><td>{{0|((}}<code>~</code></td>
</tr><tr>
<td>{{tl|Colorblind}}</td><td><code>(bl)</code></td>
</tr><tr>
<td>{{tl|Commonist}}</td><td>{{0|((}}<code>$</code></td>
</tr><tr>
<td>{{tl|Coablazon}}</td><td>{{0|((}}<code>cb</code></td>
</tr><tr>
<td>{{tl|COAref}}</td><td>{{0|((}}<code>rf</code></td>
</tr><tr>
<td>{{tl|Convert to SVG}}</td><td></td>
</tr><tr>
<td>{{tl|UseXML|Convert to HTML}}</td><td><code>(××)</code></td>
</tr><tr>
<td>{{tl|Convert to international}}</td><td><code>(in)</code></td>
</tr><tr>
<td>{{tl|Convert to multilang}}</td><td><code>(ml)</code></td>
</tr><tr>
<td>{{tl|Convert to wikichart}}</td><td><code>(wc)</code></td>
</tr><tr>
<td>{{tl|Convert to wikitable}}</td><td><code>(wt)</code></td>
</tr><tr>
<td>{{tl|Created with code}}</td><td><code>(ci)</code></td>
</tr><tr>
<td>{{tl|Disputed map}}</td><td><code>(dm)</code></td>
</tr><tr>
<td>{{tl|Easy-border}}</td><td>{{0|((}}<code>°</code></td>
</tr><tr>
<td>{{tl|Fictional}},<br />{{tl|Fictitious flag}}</td><td><code>(ff)</code><br /><code>(ff)</code></td>
</tr><tr>
<td>{{tl|Fake sports logo}}</td><td><code>(fi)</code></td>
</tr><tr>
<td>{{tl|Fotowerkstatt}}</td><td><code>(fw)</code></td>
</tr><tr>
<td>{{tl|Graphic Lab}}:<br />{{tl|Projet Blasons}},<br />{{tl|Projekt Wappen}}</td><td>{{0|(}}<code>g…</code></td>
</tr><tr>
<td>{{C|Large SVG files|<code><nowiki>{{Large SVG}}</nowiki></code>}}</td><td>{{0|((}}<code><nowiki>></nowiki></code></td>
</tr><tr>
<td>{{tl|Logo history}}</td><td><code>(lh)</code></td>
</tr><tr>
<td>{{tl|NoInkscape}}</td><td><code>(ni)*</code></td>
</tr><tr>
<td>{{tl|NoUpdate}}</td><td><code>(nu)*</code></td>
</tr><tr>
<td>{{tl|Opaque}}</td><td><code>(oq)</code></td>
</tr><tr>
<td>{{tl|Overlay}}</td><td><code>(ov)</code></td>
</tr><tr>
<td>{{tl|Igen/ptx|Path text SVG}}</td><td>{{0|((}}<code><nowiki><</nowiki></code></td>
</tr><tr>
<td>{{tl|PDF version available}}</td><td>{{0|(}}<code>\#</code></td>
</tr><tr>
<td>{{tl|Quality image}},<br />{{Tl|Valued image}}</td><td>{{0|((}}<code>^</code></td>
</tr><tr>
<td>{{tl|QGIS}}</td><td>{{0|((}}<code>&</code></td>
</tr><tr>
<td>{{tl|Recent}}</td><td><code>(re)</code></td>
</tr><tr>
<td>{{tl|Redrawn with Text Editor|Redrawn}}</td><td><code>(rd)</code></td>
</tr><tr>
<td>{{tl|Restoration}}</td><td><code>(rs)</code></td>
</tr><tr>
<td>{{tl|Retouched picture}}</td><td>{{0|((}}<code>R</code></td>
</tr><tr>
<td>{{tl|Rsvg bug}}</td><td>{{0|(}}<code>?…</code></td>
</tr><tr>
<td>{{tl|Should be text}}</td><td></td>
</tr><tr>
<td>{{tl|SimplSVG}}</td><td>{{0|((}}<code>S</code></td>
</tr><tr>
<td>{{tl|Igen/sni}}</td><td>{{0|(}}<code>S*</code></td>
</tr><tr>
<td>{{tl|Redrawn with Text Editor|rd}}&{{tl|Igen/sni|sni}}</td><td>{{0|(}}<code>S&</code></td>
</tr><tr>
<td>{{tl|Scripted SVG}}</td><td></td>
</tr><tr>
<td>{{tl|Superseded}}</td><td>{{0|(}}<code>\-</code></td>
</tr><tr>
<td>{{tl|Supersedes}}</td><td>{{0|(}}<code>\+</code></td>
</tr><tr>
<td>{{tl|SVG 1.2}}</td><td>{{0|i}}<code>1.2</code></td>
</tr><tr>
<td>{{tl|Taken with ...}}</td><td><code>(tw)</code></td>
</tr><tr>
<td>{{tl|Technically replaced}}</td><td></td>
</tr><tr>
<td>{{tl|Tincture}}</td><td>{{0|((}}<code>C</code></td>
</tr><tr>
<td>{{tl|TracedSVG}}</td><td>{{0|((}}<code>§</code></td> <!-- = {{tl|PoorSVG}} -->
</tr><tr>
<td>{{tl|Igen/emb|Translate}}</td><td><code>(tr)</code></td>
</tr><tr>
<td>{{tl|Update}}</td><td><code>(up)</code></td>
</tr><tr>
<td>{{tl|UseXML}}</td><td>{{0|(}}<code>××</code></td>
</tr><tr>
<td>{{tl|Valid SVG}} or {{tl|Invalid SVG}}</td><td></td>
</tr><tr>
<td>{{tl|Vector version available}}</td><td>{{0|(}}<code>\\</code></td>
</tr>
</table>
=== Parameter settings ===
The flexibility of parameter definition allows to use the template with high variability.
The same result can be achieved by different settings.<br />All parameters are optional; when used, unnamed
* parameter #1 {{0}} contains either
::* tool name abbreviation letter (default: <big><code>I</code></big> for ''Inkscape'')
::* tool name
::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and [[#Reference of all parameters|more]].
* parameter #2 {{0}} contains either
::* <code>v</code>, <code>n</code>, <code>s</code>,
::* numeric error count (W3C),
::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more.
:: ''See'' also [[#Parameter 2]]
* parameter #3 to #9 contains each one either
::* parameters <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code> or sign <code>$</code>, <code>+</code>, <code>-</code> and more.
{{Clarify|date=October 2024}}
It is recommended '''''always to specify the tool''''' with parameter #1. Files defaulted to Inkscape are collected in a {{C|Created with Inkscape-undef|maintenance category}}.
<!------------------------------------------------------------------------------------------------
TEMPLATE BOX - END OF usage-notes
-------------------------------------------------------------------------------------------------->
|setscats=
|i18n-method=-
|i18ndesc=different translation methods
|lines=
|shorthand={{((}}[[Template:Igen|Igen]]{{!}}… parameters as described …{{))}}<br/><small>''See also'' the template {{tl|Creation}} for simpler usages within the {{T0|Information}} box.</small>
|relieson=
* {{W|Extension:ParserFunctions||mw}}
* {{M|Igenmod|||+}}
* {{T|1color|+|incl=8}}
* {{T|Add languages|+|incl=8}}
* {{T|Artifacts|+|incl=8}}
* {{T|BadSVG|+|incl=8}}
* {{T|Broken file|+|incl=8}}
* {{T|Cdata|+|incl=8}}
* {{T|Clear|+|incl=8}}
* {{T|Coablazon|+|incl=8}}
* {{T|COAref|+|incl=8}}
* {{T|Colour blind|+|incl=8}}
* {{T|Commonist|+|incl=8}}
* {{T|Convert to international|+|incl=8}}
* {{T|Convert to multilang|+|incl=8}}
* {{T|Convert to wikichart|+|incl=8}}
* {{T|Convert to wikitable|+|incl=8}}
* {{T|Created with code|+|incl=8}}
* {{T|Current|+|incl=8}}
* {{T|Easy-border|+|incl=8}}
* {{T|Error|+|incl=8}}
* {{T|Fake flag|+|incl=8}}
* {{T|FakeSVG|+|incl=8}}
* {{T|Fictitious flag|+|incl=8}}
* {{T|Fotowerkstatt|+|incl=8}}
* {{T|I18n/COA|+|incl=8}}
* {{T|Igen/2nd|+|incl=8}}
* {{T|Igen/amp|+|incl=8}}
* {{T|Igen/cat|+|incl=8}}
* {{T|Igen/cod|+|incl=8}}
* {{T|Igen/csd|+|incl=8}}
* {{T|Igen/csf|+|incl=8}}
* {{T|Igen/cwt|+|incl=8}}
* {{T|Igen/emb|+|incl=8}}
* {{T|Igen/fif|+|incl=8}}
* {{T|Igen/glc|+|incl=8}}
* {{T|Igen/lab|+|incl=8}}
* {{T|Igen/msg|+|incl=8}}
* {{T|Igen/par|+|incl=8}}
* {{T|Igen/ptx|+|incl=8}}
* {{T|Igen/qui|+|incl=8}}
* {{T|Igen/sni|+|incl=8}}
* {{T|Igen/sub|+|incl=8}}
* {{T|Igen/swv|+|incl=8}}
* {{T|Igen/top|+|incl=8}}
* {{T|Igen/twt|+|incl=8}}
* {{T|Igen/upl|+|incl=8}}
* {{T|Igen/usr|+|incl=8}}
* {{T|Inaccurate-map-disputed|+|incl=8}}
* {{T|Information field|+|incl=8}}
* {{T|Invtext|+|incl=8}}
* {{T|Logo history|+|incl=8}}
* {{T|Nil2|+|incl=8}}
* {{T|NoInkscape|+|incl=8}}
* {{T|NoUpdate|+|incl=8}}
* {{T|Opaque|+|incl=8}}
* {{T|Out of borders|+|incl=8}}
* {{T|Overlay|+|incl=8}}
* {{T|PDF version available|+|incl=8}}
* {{T|Recent|+|incl=8}}
* {{T|Redrawn with Text Editor|+|incl=8}}
* {{T|Restoration|+|incl=8}}
* {{T|Retouched picture|+|incl=8}}
* {{T|Rsvg bug|+|incl=8}}
* {{T|SimplSVG|+|incl=8}}
* {{T|Superseded|+|incl=8}}
* {{T|Supersedes|+|incl=8}}
* {{T|SVG|+|incl=8}}
* {{T|SVG 1.2|+|incl=8}}
* {{T|Tincture|+|incl=8}}
* {{T|TopoSVG|+|incl=8}}
* {{T|TracedSVG|+|incl=8}}
* {{T|Translate|+|incl=8}}
* {{T|U|+|incl=8}}
* {{T|Update|+|incl=8}}
* {{T|UseXML|+|incl=8}}
* {{T|Vector version available|+|incl=8}}
* {{U|ZooFari/Template:SVG|User:Zoofari/Template:SVG}}
}}<!--
==================================================================================================
END OF TEMPLATE BOX
==================================================================================================-->
== Specific information ==
The template is intended to be used within the {{tl|Information}} box, e.g. at <code>Other fields=</code>, or anywhere outside
{{NoteBox
|type = warn
|1 = Because the prevalent majority of files belongs to {{C|Valid SVG created with Inkscape}}, <code>1=Inkscape</code> and <code>2=v</code> are the default values{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's initial revision (141159746, 2014). --><br />
This defaulting is a '''failure'''; {{T0|Created with Inkscape-default|Inkscape-default}} categorizes to a {{C|Created with Inkscape-default|maintenance category}}.{{Clarify|date=September 2024}}<!-- This statement was added in Sarang's revision 436629186 (2020). --> See also {{T0|Created with Inkscape-undef|Inkscape-undef}}.
}}<!-- The author of these statements is dead. -->
=== Subtemplates ===
The template uses several specific subtemplates, e.g.
<div style="font-size:smaller;">
* {{tl|Nil2}}{{0|0000}} – decides whether {{T|Information field}} is used
* {{tl|I18n/COA}} – translation of the name
* {{tl|Igen/2nd}} – extends the codes *, @, ), \, ° to taggings
* {{tl|Igen/amp}} – analizes whether more than one SVG tool is used
* {{tl|Igen/bug}} – adapter to {{T|SVGbug}}
* {{tl|Igen/cat}} – tool for categorization
* {{tl|Igen/cbx}} – {{T|ColorBox}} together with {{T|Igen/cbox}}<!--
{{tl|Igen/clt}} – -->
* <s>{{tl|Igen/coa}} – after textsplitting of {{T|COAInformation/Image|link=no}}</s>
* {{tl|Igen/cod}} – for [[mw:Extension:SyntaxHighlight#Supported_languages|syntax]] of {{T|Created with code}}
* {{tl|Igen/csd}} – creates subcategory differentiation
* {{tl|Igen/csf}} – checks whether an SVG drawing is a structural formula
* {{tl|Igen/cwt}} – dictionary of shortcodes to translate into corresponding "created with..." template
* {{tl|Igen/emb}} – embedded text is found
* {{tl|Igen/fgd}} – evaluates whether a topic is valid
* {{tl|Igen/fif}} – for fictional items
* {{tl|Igen/flg}} – subtemplate for {{T0|Infobox flag}}
* {{tl|Igen/glc}} – Graphic Lab CoA treatment
* {{tl|Igen/lab}} – adapter for {{T|Graphic Lab}}<!-- ,
{{tl|Igen/lgd}} – -->
* {{tl|Igen/map}} – subtemplate for {{T0|Map}} Infobox
* {{tl|Igen/nil}} – does absolutely nothing – nevertheless often used
* {{tl|Igen/par}} – analizes parameter 1 (tool name) and parameter 2 (error count}
* {{tl|Igen/ptx}} – path text is found
* {{tl|Igen/qui}} – adapter for {{T|Quality image}}
* {{tl|Igen/sni}} – displays text for "no inkscape"
* {{tl|Igen/sub}} – prepares the topic code for subcategorizion
* {{tl|Igen/swv}} – <code><switch></code> controlled variations
* {{tl|Igen/top}} – prepares the topic code for the display
* {{tl|Igen/trg}} – adapter for 'topographic raster graphics'<!-- ,
{{tl|Igen/tst}} – [for special testing purposes]
{{tl|Igen/uns}} – for W3C-unspecifieds -->
* {{tl|Igen/twt}} – adapter for {{T|Taken with}}
* {{tl|Igen/THV}} – display & caregorize THV
* {{tl|Igen/upl}} – extends one-letter-codes to category names
* {{tl|Igen/wph}} – Wikipedia Project Heraldry display
* {{tl|BadSVG-t}}, {{tl|Created with X}} and more.</div>
Such subtemplating allows swift maintenance while the large main template does not need to be touched.
The template and its subtemplates are using several internationalization methods, like {{tl|autotranslate}} and {{tl|LangSwitch}}.
=== Additional notes ===
<references />
Because ''letters'' are used for the abbreviation of tool names, parameters #1 to #9 use ''other characters''.{{Clarify|date=October 2024}}
=== Examples ===
{| class="wikitable" style="width:100%"
|-
!Input{{0|WWWWWWWWWWWWWWW}}
!Result
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I}}</code>
|{{Image generation|I}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I|p2=cf|n}}</code>
|{{Image generation|I|cf=n}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I|1}}</code>
|{{Image generation|I|1|}} {{0}} same as <code style="font-size:smaller">{{Tle|t=Image generation|I|p2=e|1}}</code>
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|I|+}}</code>
|''see next line how it appears in the Information box''{{Image generation|I|v|fn=SVG{{I18n/COA|development}}}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|-}}</code>
|{{Image generation|-}} ( "nil" transclusion - it does nothing)
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|A}}</code>
|{{Image generation|A}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|A$}}</code>
|{{Image generation|A$}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|IA}}</code>
|{{Image generation|IA}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|Im}}</code>
|{{Image generation|Im|t= {{0}} option "IMPORTANT"}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|B}}</code>
|{{Image generation|B}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|C}}</code>
|{{Image generation|C}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|D}}</code>
|{{Image generation|D}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|H}}</code>
|{{Image generation|H}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|G}}</code>
|{{Image generation|G}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|J}}</code>
|{{Image generation|J}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|L|n}}</code>
|{{Image generation|L|n|t={{0}} Raster graphics without W3C}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|M|s|p3=e|0}}</code>
|{{Image generation|M|s|e=0|t= {{0}} due to "s" without W3C – set W3C error count!}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|P|p2=o|n|p3=e|1}}</code>
|{{Image generation|P|o=n|e=1|t= {{0}} due to "opt=n" without W3C – set W3C error count!}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|U|12|>}}</code>
|{{Image generation|U|12|>}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|Q|17|p3=e|23}}</code>
|{{Image generation|Q|17|err=23|T=:(from two given values 17 and 23, the <code>err=</code> value has '''precedence''')}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|S|$}}</code>
|{{Image generation|S|$}}
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|ArcMap}}</code>
|{{Image generation|ArcMap}} {{0}} name "ArcMap"
|-
|<code style="font-size:smaller">{{Tle|t=Image generation|GeoGebra|n}}</code>
|{{Image generation|GeoGebra|n}} {{0}} "GeoGebra" '''n'''on-SVG
|}
When expressing some more options without expressing them by the shorthand parameters it can become a long line:<br />
<code><nowiki>{{</nowiki>Image generation|Inkscape|v|+'''|u='''<nowiki>{{</nowiki>U|Username}}'''|s=''':Drapeaux created by User:Username'''|m='''-<nowiki>[[</nowiki>Help:Inkscape#Inkscape SVG vs. Plain SVG|<nowiki>''</nowiki>important<nowiki>''</nowiki>]]'''|t='''<nowiki>{{</nowiki>Translation possible}}<nowiki>{{</nowiki>Translate|switch=yes}}<nowiki>{{</nowiki>Cdata}}<nowiki>{{</nowiki>BadSVG}}<nowiki>{{</nowiki>SVGbug|description=hairline crack}}<nowiki>{{</nowiki>TracedSVG}}<nowiki>{{</nowiki>Path text SVG}}<nowiki>{{</nowiki>Quality image}}<nowiki>{{</nowiki>RetouchedPicture|1=Translation en → fr|editoff=Username|origoff=Carbon14 with activity labels.svg}}<nowiki>{{</nowiki>Projet Blasons}}<nowiki>{{</nowiki>Atelier graphique}}}}</code>
=== Parameter table ===
The table shows for some given simple situations one of several possibilities to set parameters:
* if the ''tool'' needs to be specified, it’s only possible with parameter #1
* an ''error'' number can be specified either with parameter #2, or everywhere with err=
* the <code>n</code> at parameter #2 clarifies that the file is non-SVG
* to tag a file which is not SVG the <code>n</code> needs to be set with parameter #2
* when used as an argument of <code>Other fields</code>, the <code>+</code> <u>is necessary</u>
* when used ''outside'' the information box, the <code>-</code> ''may be'' necessary
{| class="wikitable" style="margin:.8em 0 0 1.6em"
| placement || colspan="4" | ''other fields'' || colspan="4" | standalone
|-
! style="text-align:right"| parameters !!p1 !!p2 !!p3 !! p4{{0}}!!p1 !!p2 !!p3 !!p4{{0}}
|-
| valid Inkscape || + || || || || – || || ||
|-
| Inkscape 1 error || + || 1 || || || – || 1 || ||
|-
| valid BKchem || B || + || || || B || – || ||
|-
| Gnuplot 4 errors || G || 4 || + || || G || 4 || – ||
|-
| Python raster || P || n || + || || P || n || – ||
|-
| valid PHP ||PHP|| + || || ||PHP|| – || ||
|-
| PHP 17 errors ||PHP||17 || + || ||PHP||17 || – ||
|}
=== Parameter 2 ===
Parameter #2 has historically been the place to specify the file’s validation, as in transclusions like <code><nowiki>{{Inkscape||</nowiki><u>v</u>}}</code>.
Now it may contain one of the following:
* The character "v" to mark a '''v'''alid SVG file. Because this is the default for SVG files it ''is '''not necessary''''' to be specified and can be omitted.
* The character "n" to mark a '''n'''on-SVG file. Because this is the default for non-SVG files it is not necessary to be specified explicitly.
* The character "s" to mark a SVG file with '''s'''uppression of the W3C-box. To enable proper category sorting, "e= " must be specified explicitly (''<code>e=0</code>'' for "valid").
<!-- * The "/" sign is used here to omit the W3C link for SVG files. This ''disables'' the category diffusion and is therefore ''not recommended''. -->
* The {{W|W3C}} error count: either "0" (for a valid SVG), a number > zero or -1. This error count can also be given with the parameter <code>e=</code>. Default is "0".
* The value "-1" for SVG code that can't be checked by the W3C validator (a common reason is the missing XML header which can be easily fixed); "Other tool" is implied, no need to specify it.
* One of the signs <code>$</code>, <code>+</code>, <code>-</code> or <code>%</code>, <code>~</code>, <code>!</code>, <code>?</code>, <code>§</code>, <code>&</code>, <code><</code>, <code>^</code>, <code>></code>. These can also occur as arguments for any one of the unnamed parameters #1 through #9.
=== Suppress the validity box ===
Parameter #2 set to "n" for <u>raster graphics</u> avoids the validity box and enables correct categorizing.<br />
To suppress the box for <u>SVG files</u>, set parameter #2 to "s". When the SVG file is invalid, '''always''' set the <code>e=</code> parameter, otherwise <code>e=0</code> to enable correct categorizing and sorting within the category. Setting "<code>s</code>" ''without'' "<code>e=</code>" let the file be {{C|SVG files without W3C-specification|W3C-unspecified}}.
If it seems necessary to tag a file with more than one generation tool, the other tool(s) can be added with e.g. <code><nowiki>t={{Created with ...|err=…|vo=n}}</nowiki></code>.
The ''validator option'' <code>vo</code> set to "n" avoids to show the box again, while <code>err</code> must specify the error count (or "0") to categorize correctly, including the descending sorting within the category in the case of validation errors.
=== SimplSVG template ===
To combine both the advantages of {{T0|SimplSVG}} and {{T0|Image generation}} it is possible to transclude the first one by the second.
This can be done by setting {{Tle|t=Igen|…|…|+|'''S'''|and then the parameters for SimplSVG, followed by them for Image generation}}.<br />{{Anchor|SimplSVG}}Keep in mind that the tool for the <u>former image</u> must be specified, while the {{T0|HandSVG|Text Editor}} is always assumed as the tool for the <u>simplified image</u>!
An example may be e.g. {{F|Non-EU-section-with-MK-2012.svg|-}} with {{Tle|t=Igen|I|18034|272|v|%|+|'''S'''}}<br />
To ''suppress'' the categorization to {{C|SVG Simplified}} subcategories, use <code>|S|sub=-</code> (with <code>-</code>!), or short <code>|S-</code> (with <code>-</code>!).<br />
<code>S</code> (or <code>S-</code>) can be specified at any position from 2 to 13 (<code>S-</code> even instead of the toolname <code>T</code> at position 1), e.g. <code>10=S</code> (or <code>10=S-</code>).<br />
Exactly the same can be specified alterny with the parameters {{Tle|t=Igen|I|+|p3=sb|18034|p4=sa|272|%|p6=s|v}} ,
: where <code>sb</code> specifies the <code>size-before</code>, and <code>sa</code> the <code>size-actual</code>;
: <noinclude><span style="background-color:#cfe;width:60%;"></noinclude>for the {{T0|File generation description|'''File generation description'''|+|case=l}} that is expressed with the ''pair of numbers'' e.g. <code>Simplified SVG = 18034/272</code><noinclude></span></noinclude>
plus additional positional and named parameters for <code>SimplSVG</code> (like e.g. <code>vs=-</code>),<br />
''plus'' additional positional and named parameters for <code>Igen</code> like e.g. <code>%</code>, <code>vsub=</code> and/or <code>T=</code>.<br />
No conflict can occur with the free-position parameters because {{T0|SimplSVG}} uses letters, and {{T0|Image generation}} uses other characters. {{Anchor|vstyle}}
<noinclude><div style="background-color:#cef;width:60%;"></noinclude>
The ''layout'' can be controlled with the parameter <code>vs</code>:
* mimimized layout, 1 line: <code>{{0|000}}</code> default (parameter skipped, or <code>vs=-</code> / <code>vs=n</code>)
* small layout with 2 lines: <code>vs=</code> (or <code>vs=fl</code> <small>for "float-left"</small>)
* medium layout, 3 lines:{{0}} <code>vs=z</code> (or <code>vs=Z</code>)
* large layout with 3 lines:{{0}} <code>vs</code> with any other value than the above <noinclude></div></noinclude>
=== Color boxes ===
'''C''': '''{{T0|Tincture}}s''' can be specified with parameter '''<code>C=</code>''', e.g. <code>C=a/g/v</code> or <code>C=or/gules</code>;
the parameter <code>Css=</code> can be used to select [[Template talk:Tincture/box|another tincture variation]].<br />
'''cb''': It is also possible to draw different '''Color Boxes''' above the other line(s) of the templates output.
While the {{T|ColorString|+|case=l}} can be used everywhere, e.g. at the "description" field of the {{T|Information}}
to draw such boxes, within {{T0|Image generation}} the parameter '''<code>cb=</code>''' is provided for that.
For {{T0|File generation description}} the parameter <code>Colorbox=</code> does the same.<br />
<u>Parameter value:</u> consists in each case of subparameters, separated by slashes. <br />
In general, a pair of subparameters, or a series of such pairs is specified.
*The ''first'' parameter of each pair is a valid [[Template talk:ColorString|CSS color name]], a valid {{T0|tincture}} name or a valid hexadecimal color code;<br />it can as well be expressed as an argument of {{T|Xconv}}, e.g. {{Tle|t=Xconv|rgb(204,51,102)}} ({{Colorbox |{{Xconv|rgb(204,51,102)}}}}), or {{Tle|t=Xconv|75%50%100%}} ({{Colorbox|{{Xconv|75%50%100%}}}})
*The ''second'' parameter can specify a descriptional text, e.g. "rouge" or something else, it may also be a (wiki)link;<br />it can as well be expressed as an argument of {{T|Xconv}}. When it is missing (specified empty), the first parameter is displayed.
These parameter values can be preceded by a <u>pair of control characters</u>:
The first control code may be a "+" to generate a field name; other characters or none won't.<br />
Control code 1 <code>+</code> will generate the standard field name as shown below, with <code>+=</code> any other text can be specified.<br />
{{Lua|Module:Color2dec}}The second control code may specify the type of color boxes:
* none or " " or "C" to use the template {{T0|Legend}} with parameter pairs – the standard usage.
* "B" to use the template {{T0|ColorBox}} with single parameter values,
* "D" to use the template {{T0|ColorBox}} with parameter pairs,,
* "L" to use the template {{T0|Legend}} with single parameter values, ¹)
* "M" to use the template {{T0|Legend-small}} with parameter pairs, ²)
* "S" to use the template {{T0|Legend-small}} with single parameter values,
* "T" to use the template {{T0|Tbc}} with parameter pairs, and special treatment for the title.
:¹) <small>the "L" possibility exists just for completion – normally a "Legend" without an explaining second value will not be useful.</small>
:²) <small>the "M" possibility can as well be specified with the second control code "-". </small>
To show it again, formatted as a table:
{| class="wikitable" style="text-align:center"
!template||parameters||control code 1||control code 2||Example <small>(xxx/yyy/... stands for the parameter pairs)</small>||{{T0|InFi|field name}} {{Nobold|(title) ⁴)}}
|-
|{{T0|Legend}}||pairs||"+" or none||none||style="text-align:left"|<code>+/ /xxx/yyy/...</code> or <code>{{0|+}}/C/xxx/yyy/...</code>³)
|" "<small>=Legend,</small> "C"<small>=Colour(s)</small>
|-
|{{T0|ColorBox}}||'''single'''||"+" or none||<code>B</code>{{0|000}}||style="text-align:left"|<code>+/B/xxx/xxx/...</code> or <code>{{0|+}}/B/xxx/xxx/...</code>
|Colour(s)
|-
|{{T0|ColorBox}}||pairs||"+" or none||<code>D</code>||style="text-align:left"|<code>+/D/xxx/yyy/...</code> or <code>{{0|+}}/D/xxx/yyy/...</code>
|Colour(s)
|-
|{{T0|Legend}}||'''single'''||"+" or none||<code>L</code>{{0|000}}||style="text-align:left"|<code>+/L/xxx/xxx/...</code> or <code>{{0|+}}/L/xxx/xxx/...</code>
|Legend
|-
|{{T0|Legend-small}}||pairs||"+" or none||<code>M</code>||style="text-align:left"|<code>+/-/xxx/yyy/...</code> or <code>{{0|+}}/M/xxx/yyy/...</code>
|Colour(s)
|-
|{{T0|Legend-small}}||'''single'''||"+" or none||<code>S</code>{{0|000}}||style="text-align:left"|<code>+/S/xxx/xxx/...</code> or <code>{{0|v}}/S/xxx/xxx/...</code>
|Color box(es)
|-
|{{T0|Tbc}}||pairs||none or "e"||<code>T</code>||style="text-align:left"|<code>{{0|v}}/T/xxx/yyy/...</code> or <code>e/T/xxx/yyy/...</code>
|Used color(s) ⁵)
|}
:³) <code>{{0|+}}/ /xxx/yyy/...</code> can as well be written <code>xxx/yyy/...</code> (without the empty control characters)<br />
::but for the control code 2 instead of " " the value "C" may be used to title "Colors" instead of "Legend"
⁴) With the ''control code 1'' <code>+=</code> the free selection of another field name than the standard one is possible,, e.g. <code><nowiki>|cb=+={{I18n/Colors}}/ ... </nowiki></code> <!-- for a (translated) field name<br /> -->
:''without'' the <code>+</code> (just <code>|cb=/</code>) ''flags'' will get the field name "Flag colors".
{{#tag:span|{{0}}See some examples of using <kbd>cb</kbd> (with control code 2: B, D, M, S and T) and of <kbd>+=</kbd> at {{C|Wikimedia icons|+}}.{{0}}|style=border:1px solid #3C3;background-color:#DFD}}<br />
'''Stripes and lines:'''
Legend boxes can be ''striped'' by {{C|SVG stripe texture overlays|different patterns}}, and/or mixed with {{T0|Legend-line}}s.
See examples at the [[Template:Legend/doc#Examples|documentation]].<br />
{{Anchor|Tbc}}
<big>'''{{T0|Tbc}}'''</big> needs decimal coded color codes.
Internal functions can convert ''hexadecimal triplets'', {{T0|tincture|tincture names}} and [[Template talk:ColorString|CSS color names]] for <code>Tbc</code>.<br />Other color names are not decimalizable, because of that not all ''color names'' can be used for <code>Tbc</code>.<br />
A {{T0|InFi|field name}} is always created and can't be deselected, independent from the first control code (which can be "e" for {{T0|Easy border}}).
<big>Example strings for '''{{T0|Tbc}}''':</big>
{|
|-
|<code>{{0|e}}<nowiki>/T/#900/wikidata red/#396/wikidata green/#069/wikidata blue </nowiki></code> || hexadecimal triplets & names
|-
|<code>{{0|e}}<nowiki>/T/argent//céleste//gules//sable </nowiki></code> || tinctures w/o names
|-
|<code>{{0|e}}<nowiki>/T/CornflowerBlue/#6495ED/BlanchedAlmond/#FFEBCD </nowiki></code> || CSS colors, and their hex codes for names
|-
|<code>{{T0|Easy border|e}}<nowiki>/T/#6495ED/blue/cendrée/gris/YellowGreen/green </nowiki></code> || colors from mixed sources, + {{T0|Easy border}}
|-
|<code><nowiki>Guatemal colors/T/#FFFFFF/blanco/#4997D0/azul </nowiki></code> || with individual <code>field name</code>
|-
|<code><<nowiki>nowiki/> {{Wf|Drapeau tricolore}}/T/#0055A4/bleu/#FFF/blanc/#EF4531/rouge</nowiki></code> || with individual <code>field name</code>, + {{T0|Easy border}}
|}
:⁵) (the ''individual field name'' starting with a space, e.g. "<<nowiki>nowiki/> </nowiki>", for signalling the {{T0|Easy border}} request)
=== SVG source code display ===
is performed centrally by Image generation; previously it had been an option of some single {{C|SVG created with ... templates|templates}}, now it can only be done when such a template is invoked by Image generation.
The {{C|SVG created with ... templates|table}} shows where the code-categories are defined.
The {{T0|Created with code|documentation}} explains how the different parameters can be used to format the output; a short reference can be found [[#Reference of all parameters|below]].
=== Category ===
All the {{C|Created with ... templates}} categorize to "Created with ...", the {{C|SVG created with ... templates}} to "[in]valid SVG created with ...".<br />
This automatic generated category can be customized with [[#Subcategory specification|subcategory specification]] and/or sorting keys (key=).
:''It is strongly recommended to change that reasonable categorizing '''only''' in cases of very good reason!''
With the parameter "cat=" (or short "c=", also "category=") the automatic categorizing can be ''overwritten'':
* with <code>cat=-</code> every categorization will be suppressed (it can as well be done with "cat=n" or just "cat=").
* another value ''without'' "[<nowiki/>[" brackets (e.g. <code>cat=xxx</code>), will be completed with the specified values of subcategory and/or sorting key, brackets and namespace:<br />e.g. <code><nowiki>[[Category:{{{cat}}}{{{sub|}}}|{{{key|}}}]]</nowiki></code>
* when the value starts with brackets (e.g. <code>cat=[[</code>…), it will be used as-it-is: nothing is changed, specified values of the parameters sub and key are then ''ignored''.{{Anchor|o-cat}}
<u>Other parameters for categories:</u>
{|
|-
|{{blue|■}} <code>!c</code>= for {{t0|BadSVG}}s|| <code>^c</code>= for {{t0|QI}} || <code>cc</code>= for [[Template:Created_with_code/doc#Categorizing|Created with code]]/suppression
|-
|{{blue|■}} <code>&c</code>= for e.g. {{t0|Igen/amp|QGIS}} || <code>$c</code>= for {{t0|Commonist}}
|-
|{{blue|■}} <code><c</code>= for {{t0|Path text}} || <code>>c</code>= for {{C|Large SVG files}}
|-
|{{blue|■}} <code>tc</code>= for {{t0|Taken with}} || <code>Cc</code>= for {{t0|Tincture}}
|-
|{{blue|■}} <code>fc</code>= for {{C|Special or fictional flags|Fictional files}} || <code>bfc</code>= for {{t0|Broken file}}
|-
|{{blue|■}} <code>cni</code>=<small> for {{C|SVG created with Inkscape:Important}}</small> {{0}} || <code>cw</code>= the "Created with" category
|}
{{Anchor|cw_par}}
The parameter <code>cw</code> has three functions:
# the <code>logo</code> will be {{Tle|t=F|<nowiki>{{{cw}}}</nowiki> logo.svg}}
# the <code>toolname</code> will be the link {{Tle|t=W|<nowiki>{{{cw}}}</nowiki>}}
# the <code>category</code> will be {{Tle|t=C|Created with <nowiki>{{{cw}}}</nowiki>}}
to simulate together with e.g. {{T0|Created with Other tool|Other tool}} a not-yet existent tool.
=== Subcategory specification ===
The template offers various possibilities to diffuse a category by subcategories.
* With <code>sub=</code> a suffix to the category name is specified;
** when this suffix string needs to be prefixed with a semicolon "<code>:</code>" <!-- "&#58;", --> use the parameter <code>s:=</code> or <code>sub:=</code> <br />{the display occurs with "lcfirst"; to force an "ucfirst" the parameter <code>su:=</code> can be used).
** or when this suffix string needs to be prefixed with a hyphen "<code>-</code>" <!-- "&#45;", --> use the parameter <code>s-=</code> or <code>sub-=</code>.
* An uppercase <code><big>S</big>=</code> does the same but an in-between space is inserted.
* Recommended is to use the parameter <code>s=</code> which bears several advantages:
:* With a code of one letter (or an abbreviation of some letters) many predefined subcategories are accessable; the subtemplate {{T0|Igen/sub}} cares for the expansion.
:* Such a short code is also used as a ''[[#Topics|topic]]'' for the description by many other templates;<br />while Igen/sub expands only to ''subcategory names'' in English, the subtemplate {{T0|Igen/top}} transposes multilingual.
Only in cases where the required topic differs from the subcategory, or no subcategory should come in effect, another code can be defined to substitute the <code>s=</code> value. This topic letter can be defined with the parameter <code>topic=</code> or <code>what</code>/<code>w=</code> and becomes expanded instead. <small>("w" for <code>what=</code> because the "t" had been used for "trailing text", and cannot be used to abbreviate <code>topic=</code>)</small>.
{{Anchor|o-sub}}<br />
<u>Other parameters for subcategories:</u>
{|
|-
|{{blue|■}} <code>!s</code>= for {{tl|BadSVG}}s || <code><nowiki><s</nowiki></code>= for {{tl|Igen/ptx}}
|-
|{{blue|■}} <code>?s</code>= for {{tl|Rsvg bug}}s || <code>§s</code>= for {{tl|TracedSVG}}
|-
|{{blue|■}} <code>&s</code>= for e.g. {{tl|Igen/amp|QGIS}} || <code>$s</code>= for {{tl|Commonist}}
|-
|{{blue|■}} <code>gc</code>= for {{tl|Graphic Lab}}-xx {{0}} ||
|}
With the parameter <code>sd=</code> always a <u>subcategory differentiation</u> can be defined.
==== Topics ====
{{see also|Template:Igen/sub|Template:Igen/top}}
When as well <code>s=</code> ''and'' <code>sub=</code> or <code><big>S</big>=</code> are defined, sub/S is used for subcategorizing (or suppression with <code>sub=-</code>) and <code>s=</code> can then be used like <code>w=</code> for topic specification. The topic option can alse be suppressed with <code>w=-</code>, independent from <code>s/sub/S</code>.<br />
<!-- See also the parameters <code>&s</code> and <code>&c</code>.
-->
As said above, the parameter <code>s</code> can be used for subcategorizing; when no parameter <code>topic=</code> (or <code>what</code>/<code>w=</code>) is specified the value of <code>s</code> is also used for the topic text by the national versions of the {{C|Created with ... templates}}. Except of this defaulting the two parameters can be defined and/or suppressed completely independent from each other.<br />
{{Color|b|2=These '''[[Template talk:Image generation#TopTb|tables]]''' show the conversion of <code>s=</code>, and the conversion & translation of <code>w=</code>.|css=border:#000 solid 1px;padding:2px 4px}}<br />
These ''topics'' are passed to many other templates. While a few of the {{C|Created with ... templates}} have ''default topics'' defined, only an ''explicitely specified'' topic can be passed further.
==== Subcat & topic ====
{{see also|Template:Igen/sub|Template:Igen/top}}
It is also possible to define with one single parameter sub-category ''and'' topic, with a subcategory-separator semicolon "<code>:</code>" or minus "<code>-</code>".<br />
Parameter values of "<code>s:</code>" and "<code>s-</code>" specify a subcategory; they are prefixd with a "<code>:</code>" resp. a "<code>-</code>",
but except that they are used as-they-are.<br />
When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of
"<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated.
Parameter values of "s:" and "s-" specify a subcategory which is prefixed with a "<code>:</code>" resp. a "<code>-</code>",
the first letter is capitalized and a final (plural-)"s" is added.<br />
Example: <code>s:=digit</code> specifies the subcategory ":Digits" (as is done with <code>s=7</code>).<br />
When there is neither a parameter "topic", "what"/"w", nor "s" then the parameter values of
"<code>s:</code>" / "<code>s-</code>" are used also for topics, with their first letter lower-cased, but not translated.<br />
Similar is the result with <code>sub:=</code> and <code>sub-=</code> but neither case changing nor adding of a plural-"s" occurs.<br />
The parameters <code>S:</code> and <code>Sub:</code> are working like <code>s:</code> and <code>sub:</code>, with an additional space after the semicolon.
==== Usage of "s" and "w" ====
{{see also|Template:Igen/sub|Template:Igen/top}}
The parameter <code>s=</code> specifies a topic for subcategorization, ''and'' for the display (if no "w=" is specified).<br />
The parameter <code>w=</code> specifies a topic only for the display; it will be nationalized into the user's language.<br />
Example: <code>|s=tl|</code> specifies the subcategory <code>:Text logos</code>, and (without "w=") also the display text "text logo" in different languages;<br />but with <code>|w=tl|s=l|</code> the subcatory will be <code>:Logos</code> with the nationalized display text "text logo".
=== Graphic Lab ===
{{Anchor|GLab}}
For the connection of files with the {{C|Graphic Lab}} exist multiple possibilities.
Graphic labs are in general for all images, special subcategories exist for {{C|CoA Lab|coats of arms}}, {{C|Flag Lab|flags}} and {{C|Map Lab|maps}}.
Dependent to the need these are divided into more subcategories, and e.g. the {{C|CoA Lab-fr}} has many ''user subcats''.<br />
Some graphic lab subcategories contain only a few items, while others are extremely crowded and may need further subcategorizing.
{{T0|Image generation}} knows many two-letter codes for graphic lab access, consisting of the letter <code>g</code> for graphic lab, and another character for the nationality.<br />
Comparable to the {{T0|W|-}} which also has in most cases a one-letter abbreviation for the national Wikipedia, this system is effectiv but has limits.<br />
Because of the manageable total <!-- number amount --> of graphic labs, this seems sufficient and clear enough: <code>f</code> stands for <kbd>fr</kbd>, <code>h</code> for <kbd>hu</kbd>, <code>i</code> for <kbd>it</kbd> and so on.
With the two-letter code g{{sub|×}} as parameter at any position {{T0|Igen}} is enforced to a special treatment; most of it is done by the subtemplate {{T0|Igen/lab}}.
<u>User category</u>: can be defined with the two-letter-code specifying a user name, e.g. <code>gH=ARK|s=c</code> categorizes the file to {{C|CoA Lab-ch:ARK}}.<br>
Same can be done with <code>|u=ARK|gH|s=c</code>. To ''avoid'' categorization, write <code>|u=ARK|s=c|gH=</code>
==== The [[MediaWiki:InformationToCOA.js|conversion script]] ====
To avoid the necessity of defining ever and ever again long parameter combinations, such defintions can be deposited for each user and automatically transfered.<br />
From each definition, the module creates a complete {{Tle|T=igen|...|...|...}} transclusion parameter and passes it to the file description.<br />
It is possible to have ''more than one'' definition for a user (with different keys!), and the parameter values can be manually [[#Modification|modified]].<br />
This treatment in ''intended'' for coats of arms using the {{T0|COAInformation|-}} but it can as well be used for any other file;<br />
an {{T0|Igenc|interface}} template can serve for the connection to the module and the stored parameters.{{Clarify|date=November 2024}}
The definitions are stored in a Lua module's internal table; it needs some care but not much skill to modify it or to add definitions.<br />
The automatism is done by [[User:Sarang/cleanup.js|the cleanup script]], which can be performed as the last step of different flow modes.
These are the different flows:
{| style="padding:2 0 2 0"
|-
|1: ToCoa only || style="background:#CCC"|ToCoa script||e1||style="background:none"| ||style="background:none"| ||style="background:none"|
|-
|2: ToCoa & SVG || style="background:#CCC"|ToCoa script||e1||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanupscript||e2
|-
|3: Coa + cleanup{{Clarify|date=November 2024}}|| style="background:#CCC"|ToCoa script||e1||style="background:none"|---------------→ ||style="background:#CEF"|cleanupscript||e2
|-
|4: SVGcheck|| style="background:none"| || ||style="background:#CCF"|SVGcheck script ||style="background:#CEF"|cleanup script||e2
|-
|5: cleanup only|| style="background:none"| || || style="background:none"| ||style="background:#CEF"|cleanup script||e2
|}
;Explanation::
: 1) in any case, an Information template can be converted to a COAInformation template
:: <code>e1</code>after the conversation, the script offers the changed description in edit mode; final edits can be done before the conversion is saved.
: 2) for SVG files, after the steps as above the SVGcheck script can be started, which continues with the cleanup.
:: <code>e2</code> the cleanup script will offer the changed description in edit mode for final editing before it is published
::: after that publishing save, Imge generatkion will run and the success can immediately be seen;
::: of course it will be better to have first a preview, to check whether it is free of errors and looks good !
: 3) after the conversion can directly proceeded to cleanup - for raster images th SVGcheck is not possible.
: 4) but for SVG images always the SVGcheck can be performed, which continues with the cleanup.
:: The cleanup can be performed for any file, when necessary repeatedly.
In the case that a file description is done with COAInformation, the cleanup script compares the author name with an internal user list and provides the parameter <code>|image =</code> with the found key. Modifications can be done by the editing user before the changes are published.
The cleanup script can detect whether the image is an element or a raster graphic, and select the appropriate key;<br /> ''but it cannot see'' whether it's an ecclesiastical image, this is evident <u>only for the editing user</u> who has to do the modification.
==== The Module {{M|IgenCoa}} ====
Keys for some national labs are further diffused, e.g.
{| class="wikitable" style="text-align:center"
|-
| g_lab|| coa || <u>c</u>harges || <u>e</u>ccles. || <u>i</u>ndivid. || e<u>x</u>cl. cat
|-
| {{C|CoA Lab-de|gd}} || d || dc || de || di || dx
|-
| {{C|CoA Lab-es|ge}} || e || ec || ee || ei || ex
|-
| {{C|CoA Lab-fr|gf}} || f || fc || fe || fi || fx
|}{{Clarify|date=November 2024}}
== Parameter reference ==
=== Named and unnamed parameters ===
Each one of the following parameter codes can be used either ''positional'' to set taggings with extern templates,
or they can be used as ''parameter names'' to pass an individual information to the templates.{{Clarify|date=November 2024}}
The function is like using the templates with the <code>|t=</code> parameter, either without or with an individual information.<br />
'''Example:'''
* (positional) "?" can also be written as "t=<nowiki>{{</nowiki>SVGbug}}"
* (named p.) "?=rendering error" can also be written as "<nowiki>t={{SVGbug|description=rendering error}}"</nowiki>
'''In general''':
when ''subparameters'' exist, their specification makes the main parameter redundant.<br />
As an example, <code>\</code> or <code>\=file name</code> invokes {{T1|Superseded}} resp. {{T1|Bitmap version available}}.
* <code>\x=file extension</code> and/or
* <code>\r=reason</code> will invoke that template as well.
This option is valid for all subparameters.
{| class="wikitable" style="margin:.8em 0 0 1.6em"
|-
! code !!template !! passed individual information
|-
| %<br />%r<br />%v<br />%f<br />%i<br />%s || {{tl|Igen/emb}} || <code><nowiki>|1={{{%}}}|2=s|s={{{s|}}}</nowiki></code><br />
<code><nowiki>|s={{{s|}}}|v=r</nowiki></code><br />
<code><nowiki>|s={{{s|}}}|v=v</nowiki></code><br />
<code><nowiki>|1=vf|s={{{s|}}}</nowiki></code><br />
<code><nowiki>|1=i|s={{{s|}}}</nowiki></code><br />
<code><nowiki>|1={{{%s}}}|s={{{s|}}}|switch=yes</nowiki></code>
|-
| ~ || {{tl|Cdata}} || <code><nowiki>|sub={{{~}}}</nowiki></code>
|-
| ! || {{tl|BadSVG}} || <code><nowiki>|1={{{!}}}|subcat={{{!s|}}}</nowiki></code>
|-
| ? || {{tl|Rsvg bug}} || <code><nowiki>|description={{{?}}}|sub={{{?s}}}</nowiki></code>
|-
| § || {{tl|TracedSVG}} || <code><nowiki>|1={{{§}}}|s={{{s|}}}</nowiki></code>
|-
| & || {{tl|Igen/amp|QGIS}} || <code><nowiki>|1={{{&}}}|2={{{&&|}}}</nowiki></code>
|-
| < || {{tl|Igen/ptx}} || <code><nowiki>|sub={{{<}}}|s={{{s|}}}</nowiki></code>
|-
| ^ || {{tl|QI}} || <code><nowiki>|SVG={{{^}}}</nowiki></code>
|-
| > || {{tl|SVGvalid}} || <code><nowiki>|opt=<nowiki/></nowiki></code>
|-
| × || {{tl|SimplSVG}} || <code><nowiki>|3={{{000}}}|4={{{×|}}}|5={{{×d|}}}</nowiki></code>
|-
| \ || {{tl|Superseded}} || <code><nowiki>|1={{{\}}}|2={{{\r|}}}</nowiki></code>
|-
| → || {{tl|Convert to SVG}} || <code><nowiki>|1={{{→|{{{w|{{{s|}}}}}}}}}</nowiki></code>
|-
| ° || {{tl|Easy-border}} || <code><nowiki>|topic={{{°}}}</nowiki></code>
|-
| ge || {{tl|THV}} || <code><nowiki>|1={{{k|}}}|2={{{s|}}}</nowiki></code>
|}
=== Reference of all parameters ===
For the setting of parameter #1 and parameter #2 see also [[#Parameter settings]].<br />
The following tables reference all other parameters possibly occurring;
* when <code>10=S</code> all the parameters of {{T0|SimplSVG}} or {{T0|HandSVG}} can occur as well;
* the many parameters when [[Template:Created with code/doc#Template parameters|source code]] is to display are explained [[Template:Created with code/doc#Template parameters|there]]
{| class="wikitable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em"
|-
! colspan="3"| {{0|000}} Created with code {{0|000}}
|-
| '''code''' || '''alias''' || '''description'''
|-
| c1 || code || the source '''c'''ode
|-
| d1 || || '''d'''iffusion of category
|-
| e1 || || '''e'''xplanatory text ahead
|-
| f1 || style || '''f'''ormat attributes
|-
| g1 || || '''g'''reater or smaller, and ''type'' of font
|-
| h1<ref name="s"><br /><u>Suppressable:</u> to suppress the usage of the default value for a parameter "x", use <code>x=-</code> or <code>x=n</code>, or an '''''empty'' value''' like <code>x=</code>.</ref> || title<ref name="s"/> || '''h'''eadline
|-
| l1 || syntax || '''l'''anguage {{W|mw:Extension:SyntaxHighlight#Supported_languages|code}}
|-
| n1 || || '''n'''ote afterwards
|-
| s1<ref name="s"/> || collapse<ref name="s"/> || '''s'''ecluded
|-
| colspan="3"| two more source codes can be shown; all the parameters<br />
are specified like for the first code, but with "2" resp. "3",<br />
e.g. <code>c2</code> or <code>code2</code> and so on
|-
| colspan="3"| Formatting parameters
|-
| +c || || global field name
|-
| cc || || global category
|-
| nt || || global headline suppress
|-
| p1 ||number|| headline "preferred", note ''byte count''
|}
==== Final tags ====
to transclude templates with a 2-byte-code{{Clarify|date=November 2024}}
{| class="wikitable sortable float-right mw-collapsible mw-collapsed" style="margin:.8em 0 0 1.6em"
|+ table
|-
! code !! template !! parm{{Clarify|date=November 2024}}
|-
| ni || {{T0|NoInkscape}} || 14
|-
| nu || {{T0|NoUpdate}} || 21
|-
| re || {{T0|Recent}} || 22
|-
| up || {{T0|Update needed}}/{{T0|Outdated}} || 23
|-
| lh || {{T0|Logo history}} || 24
|-
| ci || {{T0|Current}} || 25
|-
| dm || {{T0|Disputed map}} || 43
|-
| ov || {{T0|Overlay}} || 26
|-
| oq || {{T0|Opaque}} || 27
|-
| tr || {{T0|Translate}} || 28
|-
| in || {{T0|Convert to international}} || 29
|-
| ml || {{T0|Convert to multilang}} || 30
|-
| wc || {{T0|Convert to wikichart}} || 31
|-
| wt || {{T0|Convert to wikitable}} || 32
|-
| bl || {{T0|Colour blind}} || 33
|-
| ff || {{T0|Fictitious flag}} || 34
|-
| rd || {{T0|Redrawn with Text Editor}} || 35
|-
| fi || {{T0|Fake sports logo}} || 36
|-
| bf || {{T0|Broken file}} || 37
|-
| rs || {{T0|Restoration}} || 38
|-
| zf || [[User:ZooFari/Template:SVG|zoofari]] || 39
|-
| ob || {{T0|out of borders|link=n}} || 41
|-
| ar || {{T0|Artifacts}} || 42
|-
| cb || {{T0|Coablazon}} || 43
|-
| rf || {{T0|COAref}} || 44
|}
----
=== Reference list ===
{| class="wikitable" style="margin:.8em 0 0 1.6em"
! code !! alias !! description
|-
| %<br />{{0|-}}%r<br />{{0|-}}%m<br />{{0|-}}%M<br />{{0|-}}%v<br />{{0|-}}%n<br />{{0|-}}%f<br />{{0|-}}%u<br />{{0|-}}%i<br />{{0|-}}%I || || the file contains {{C|Translation possible - SVG|translatable}} plain text; specifications are<br />"r" for reduced display, with {{C|Translation possible - SVG|categorizing}}<br />"m" like "r" for modifyable text<br />{{0|00}}"M" like "m" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box<br />"v" for reduced display, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"n" for reduced display/numbers, no <s>{{C|Translation possible - SVG|categorizing}}</s><br />"f" for reduced display in same line, no <s>{{C|Translation possible - SVG|categorizing}}</s>.<br />"u" when the generated text is invisible.<br />"i" recommends <switch> option<br />{{0|00}}"I" like "i" with the [[File:Merge-sub-arrows.svg|[[Template:Convert to multilang]]|16px]] box
|-
| %s<br />%S<br />%C|| || the file contains multilingual text using the {{C|Translation possible - SVG (switch)|switch}} option<br />and <!-- to be kept simple --> it should ''not'' be maintained with [[Commons:SVG Translate tool|Toolforge]]<br /><code><switch></code> controlled variations, with {{C|Switch-controlled SVG|categorizing}}
|-
| %a<br />%w|| || to transclude {{tl|Add languages}}<br />for (invisible) textual watermarks, %sc=subcat
|-
| ~<ref name="s"/><br /><br />{{0}}~k<br />{{0}}~u || || the file is bloated by {{C|Adobe files with CDATA blocks|Adobe PGF CDATA}} blocks<br />(specify <code>~=n</code> to avoid subcategorization with u/U)<br />possible sort key for the category<br />user name for categorizing
|-
| !<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0}}<br />{{0|00}}!c<ref name="s"/><br />{{0|00}}<br />{{0|00}}!s<ref name="s"/><br />{{0|00}}!k<ref name="s"/> || || the file contains embedded {{C|SVG images with embedded raster graphics|raster graphics}}<br />Use <code>!=''a''</code> when it consists <u>only</u> of an embedded raster<br />Use <code>!=''f''</code> when the file is just a {{C|Fake SVG}}<br />Use <code>!=''x''</code> when the file is a {{C|Fake SVG}} with just text<br />Use <code>!=''t''</code> when it is only for {{T0|TopoSVG|''topographic structures''}}<br />Use <code>!=''r''</code> when it is for other {{C|SVG images with required raster graphics|required structures}}<br />other category ("-" for none), either full "[<nowiki/>[.." or user name<br />(<code>!c=</code> has precedence over <code>U=</code> and <code>u=</code>)<br />{{C|SVG images with embedded raster graphics|subcategory}} ("-" for none)<br />a sorting key within the category
|-
| ?<br />{{0}}?b<br />{{0}}?c<br />{{0}}?f<br />{{0}}?o<br />{{0}}?p<br />{{0}}?r<br />{{0}}?u<br />{{0}}?x<br />{{0|00}}?s<ref name="s"/><br />{{0|00}}?w<br />{{0|00}}?t<br />{{0|00}}?k<br />{{0|00}}?n ||style="vertical-align:top"| ⁇ || the file contains {{C|Pictures showing a librsvg bug|SVG bugs}}<br />{{C|Pictures showing a librsvg bug (feGaussianBlur)|blur bug}}<br />{{C|SVG compatibility issues|compatibility}}<br />{{C|Pictures formerly showing a librsvg bug|former bug}}<br />{{C|Pictures showing a librsvg bug (overwritten with a workaround)|overwritten bug}}<br />specify a <code>phab</code> number (see {{t0|Rsvg bug|parameter 1}})<br />{{C|Pictures showing a librsvg bug (SVG replaced)|replaced bug}}<br />{{C|Pictures showing a librsvg bug (unsolved)|unsolved bug}}<br />flowRoot e<u>x</u>ception<br />[[#o-sub|subcategory]] {{0|000}} (see {{t2|Rsvg bug}} docu)<br />topic<br />tool<br />sortkey<br />file name for {{t2|Technically replaced}}
|-
| § <br />{{0}}§s || || the file is {{C|SVG images with poorly traced elements|inadequately}} vectorized <br /> possible subcategorizing
|-
| &<br />{{0}}&&<br />{{0}}&c<ref name="s"/><br />{{0}}&k<br />{{0}}&<code>l</code><ref name="s"/><br />{{0}}&s<ref name="s"/> || || the file generation was participated by a ''with_tool''<br />&&=''main_tool'' (default: Inkscape)<br />&c to specify, or "-" suppress, the categorizing<br />&k to specify a sort key<br />&l to specify, or "-" suppress, a logo<br />&s to specify a [[#o-sub|subcategory]]
|-
| <<br /><h <br /><i <br /><x <br /><v <br /><n <br /><l <br />{{0}}<s<br />{{0}}<c<ref name="s"/> || || the text has been converted to {{C|Path text SVG|path}}s; specifications are<br />"h" for highlighting (also with <code><s=h</code>)<br />"i" to specify that internationalization is required<br />"x" for tagging with {{T0|Should be text}}<br />"v" for reduced text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />only number(s) path text, no <s>{{C|Path text SVG|categorizing}}</s>.<br />due to Librsvg restrictions, no <s>{{C|Path text SVG|categorizing}}</s><br /> possible subcategorizing<br />no categorizing
|-
| ^<br />{{0}}^s <br />{{0}}^t <br />{{0}}^p <br />{{0}}^c <br />{{0}}^w <br />{{0}}^b || ||type: {{C|Quality images|Quality image}} and/or {{C|Valued images|Valued image}}: see {{T0|Igen/qui}}.<br />scope <br />timestamp <br />page <br />category (prefixed by 'Valued image of ') <br />topic <br />by
|-
| ><br />{{0}}>c<ref name="s"/> || || the file size is too {{C|Large SVG files|large}} to display the source code<br /><code>>c=-</code> to suppress categorization
|-
| ×<br />{{0}}×c<ref name="s"/><br />{{0}}×d<br />{{0}}×k<br />{{0}}×n<ref name="s"/><br />{{0}}×s<br />{{0}}×t<ref name="s"/><br />{{0}}×× || || the file is extremely {{C|SVG files to be drawn by hand|simple}} and easy to draw manually<br />or ×=- to suppress categorization<br />display size for the example, in pixel<br />key<br />but it is nowhere used – not worth any effort !<br />subc<br />topic for subcategorizing, e.g. m, c, f, ...<br />flag with {{T|UseXML}} (see {{C|Diagonal bisection square flags (plain)|examples}})
|-
| $<br />{{0}}$c<ref name="s"/><br />{{0}}$f<ref name="s"/><br />{{0}}$l<ref name="s"/><br />{{0}}$s<ref name="s"/><br />{{0}}$m<br />{{0}}$u<br />{{0}}$w ||{{0}}<br />{{0|r}}<s>cc</s><ref name="s"/><br />{{0|r}}cf<ref name="s"/><br />{{0|r}}cl<ref name="s"/><br />{{0|r}}cs<ref name="s"/><br />{{0|r}}cm<br />{{0|r}}cu<br />{{0}} || the file was {{C|uploaded with Commonist}}<br />Commonist category, e.g. <code><nowiki>[[Category:Othercat| ]]</nowiki></code><br />Commonist linefeed_before, e.g. <code>$f=br</code><br />Commonist logo, e.g. <code><nowiki>[[File:xyz.svg|20px]]</nowiki></code><br />Commonist subcategory<br />Commonist "more" text, e.g. <code>&nbsp; explanation</code><br />Commonist user, e.g. <code><nowiki>{{U|user}}</nowiki></code><br />to display a topic for Commonist
|-
| +<br />{{0|-}}+c|| || to generate the parameter <code>Name=</code> for {{t2|Information field}}<br />field name for {{T0|Created with code}}
|-
| – || || to generate a final {{t2|clr|clear-linefeed}}
|-
| \+<br />{{0|-}}\+r<br />{{0|-}}\+t<ref name="s"/><br />{{0|-}}\+u<br />{{0|-}}\+l|| <br />\r<br />\t<ref name="s"/><br />\u<br />\l || this file {{lc:{{t0|supersedes}}}} another one<br />the ''reason'' for superseding<br />topic (default: "w", "s" <small>when not suppressed</small>)<br />option: by user<br />option: <code>lang=</code>
|-
| \-<br />{{0}}<br />{{0|-}}\-r<br />{{0|-}}\-x<br />{{0|-}}\-t<br />{{0|-}}\-l || \<br />{{0}}<br />\r<br />\x<br />\t<br />\l || the file is {{lc:{{t0|superseded}}}} by another one,<br />or a {{T0|bitmap version}} exists for an SVG<br />the ''reason'' for being superseded<br />an extension (when not <code>.png</code>)<br />topic<br />option: <code>lang=</code>
|-
| \\<br />{{0|-}}\\r<br />{{0|-}}\\q<br />{{0|-}}\\l || <br />\r<br />\q<br />\l || A {{T0|Vector version available|vector version is available}} to that raster image<br />reason text<br />quality tag (s, i)<br />option: <code>lang=</code>
|-
| \# || || insert {{tl|PDF version available}}.
|-
| →<br />⇒ || || {{Tle|T=Convert to SVG|→}}<br />{{Tle|T=Convert to SVG|⇒|simple}}
|-
| ←<br />{{0|-}}←s<br />{{0|-}}←t|| <!-- <s>ni</s> --> || {{Tl|NoInkscape}}: <code>←</code>, <code>←=+</code> , <code>←=-</code> or <code>←=tt</code><br />a style option for {{T0|NoInkscape}}, e.g. <code>←s=0</code>/h /0h <br />text for a topic in NoInkscape
|-
| ° || || {{Tle|T=Easy-border|p1=topic|w/s|p2=pixel|°}}
|-
| — || || (U+2014) to categorize {{C|Unused SVG images}}
|-
| bf<br />{{0}}bfc || || description for {{tl|Broken file}}<br />category
|-
| {{0|.}}ff || || for {{T0|Fictitious flag}}
|-
| {{0|.}}bl || || for {{T0|Colorblind|+}}
|-
| by || U || creates a link to a user name; see {{t0|by|+}}
|-
| c<ref name="s"/> || cat<ref name="s"/> || change or suppress (<code>c=-</code>) category
|-
| cat2 || || name of an additional category that should be used
|-
| cb || || Color box, see {{T0|Igen/cbx}} and [[Template:File generation description/doc#Colorboxes|colorboxes]]
|-
| cc<ref name="s"/> || || suppress automatic [[Template:Created_with_code/doc#Categorizing|categorization]] with ' code'
|-
| ci<br />{{0|-}}ci2 || || the {{T|Current|+}} interval, for frequent updates<br />possible 2{{exp|nd}} parameter
|-
| cni<ref name="s"/> || || only for "Im": category text (or suppression: "-" for none)<br />replaces <small>{{C|SVG created with Inkscape:Important}}</small>
|-
| ct || c_text || category text, replaces "created with"
|-
| C<br />{{0|-}}Ct<br />{{0|-}}Cc<ref name="s"/><br />{{0|-}}Cl<br />{{0|-}}Cf<ref name="s"/><br />{{0|-}}C+<ref name="s"/> <br />{{0|-}}Css<ref name="s"/> ||<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />{{0|-}}<br />c+<ref name="s"/> <br />ss<ref name="s"/> || {{T0|Tincture}}s<br />a color for the tincture-"tc" parameter<br />a category for the tincture-"cat" parameter ("-" for none)<br />other label than "Tincture"<br />Cf=n or Cf= for no field name<br />"+" for field name (=default)<br /><code>Css=BY</code> for [[Template talk:Tincture/box|Bavarian]] or other shades
|-
| cw || || the "[[#cw_par|Created with]]" parameter, for logo/cat/tool
|-
| e || err || error count ≥ 0, instead of definition with parameter# 2
|-
| colspan="2" | editor, editoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]])
|-
| f<br />{{0|-}}ft<br />{{0|-}}fc || || for fictional items, see {{t0|Igen/fif}}<br />for other topic<br />for other category
|-
| {{0|.}}ff || || for {{T0|Fictitious flag}}
|-
| fn || || field name for {{T0|Information field}}, instead of the "+"
|-
| fw<br />{{0|-}}fwc<br />{{0|-}}fwe<br />{{0|-}}fwo<br />{{0|-}}fwl<br />{{0|-}}fwt<br />{{0|-}}fws || || {{T0|Fotowerkstatt|}}, with optional parameters (see [[Template:Fotowerkstatt/doc#Igen|description]])<br />{{0|-}}changes<br />{{0|-}}editor<br />{{0|-}}orig<br />{{0|-}}orig-lang<br />{{0|-}}topic<br />{{0|-}}style
|-
| g<br />{{0|-}}gb<br />{{0|-}}gc<br />{{0|-}}gd<br />{{0|-}}ge<br />{{0|-}}gf<br />{{0|-}}gH<br />{{0|-}}gi<br />{{0|-}}gj<br />{{0|-}}gP<br />{{0|-}}gr<br />{{0|-}}gs<br />{{0|-}}gt<br />{{0|-}}gw<br />g=<code>xx</code><br /><br />{{0|-}}gc=<br />{{0|-}}gk=<br />{{0|-}}gs=
| style="vertical-align:top"| <code>gl</code> || {{t0|Graphic Lab/statistics|Graphic Lab}}; g or gl for "{{C|Graphic Lab-en|Graphic Lab-'''en'''}}"<br />or <code>g=bn</code> for "{{C|Graphic Lab-bn}}"<br />or <code>g=c{{color|#aaa|m}}</code> for "{{C|Graphic Lab-Commons}}"<br />or <code>g=de</code> for "{{C|Graphic Lab-de}}"<br />or <code>g=es</code> for "{{C|Graphic Lab-es}}"<br />or <code>g=fr</code> for "{{C|Graphic Lab-fr}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-ch}}"<br />or <code>g=it</code> for "{{C|Graphic Lab-it}}"<br />or <code>g=he</code> for "{{C|Graphic Lab-he}}"<br />or <code>g=pl</code> for "{{C|Graphic Lab-pl}}"<br />or <code>g=ru</code> for "{{C|Graphic Lab-ru}}"<br />or <code>g=sv</code> for "{{C|Graphic Lab-sv}}"<br />or <code>g=tr</code> for "{{C|Graphic Lab-tr}}"<br />or <code>g=w{{color|#aaa|s}}</code> for "{{C|Graphic workshop}}"<br />{{0|00l}}for other "<code>Graphic Lab-xx</code>", if exists<br />{{0}}(use g='''F'''i for "{{C|Graphic Lab-fi}}")<br />a [[#o-sub|subcategory]] for an above Graphic Lab<br />a category sorting key<br />[[Template:Graphic Lab/doc#style|style]] for {{T0|Graphic Lab}}, either nl (new line) or sx (small text)
|-
| {{0|-}}in || || for {{T0|Convert to international}}
|-
| k<ref name="s"/><br />K || key<br />{{0}} || sort key for category (and for {{t0|THV}})<br />upper case "K" with space
|-
| l || L || upload info, or categorization info
|-
|{{0|.}}lh || || for {{T|Logo history|+}}
|-
| m<br />M || more<br />{{0}} || additional text (use <code>m=</code> to suppress the final dot)<br />upper case "M" with space
|-
| {{0|.}}ml || || for {{T0|Convert to multilang}}
|-
| msg || || additional message box(es)
|-
| n<br />N || name<br />{{0}} || tool name of <code>Other tool</code> / <code>Unknown SVG facility</code><br />upper case "N" with space
|-
| {{0|-}}nu || || for {{T0|NoUpdate|+}}
|-
| o || opt || W3C validator option (see vo / vopt)
|-
| {{0|-}}oq || || for {{T0|Opaque|+}}
|-
| {{0|-}}ov || || for {{T0|Overlay|+}}
|-
| colspan="2" | orig, origoff || parameters for Retouched picture ([[#RetP|see <code>r</code>]])
|-
| p || || preceding text
|-
| pu || || previous user name (for {{T0|SimplSVG}})
|-
| r<ref name="s"/><br />R<br /><br /><br /><br /> || || {{t2|Retouched picture}} with parameters{{Anchor|RetP}}<br /><small>(upper case "R" for an advancing {{T0|clr|clear}} is not necessary)</small>
r/R= modifications (<code>r=-</code> if modifications unspecified)<br />editor= / editoff=<br />orig= / origoff=
|-
| {{0|.}}rd || || for {{T0|Redrawn with Text Editor|Redrawn|+}} with Text Editor
|-
| {{0|.}}re || || for {{T0|Recent|+}}
|-
| {{0|.}}rf || || for {{T0|COAref|+}}
|-
| s<br />S<br />s:, su:<br />S:<br />s- || sub<ref name="s"/><br />{{0}}<br />sub:{{0}}<br />Sub:<br />sub- || [[#Subcategory specification|subcategory]]; lower case "s" with expand option<br />upper case "S" with prefixed space "␢"<br /><code>s:</code> to be prefixed with a semicolon ":"<br /><code>S:</code> prefix with semicolon ''and'' space ":␢"<br /><code>s-</code> to be prefixed with a hyphen/minus "-"
|-
| S- || S || to use {{T0|SimplSVG|+}}
|-
| S* || || to use {{tl|Igen/sni|sni}}
|-
| S+ || || to use {{tl|Igen/sni|sni}}, with parameter %p
|-
| S& || || to use {{tl|Redrawn with Text Editor|rd}} & {{tl|Igen/sni|sni}}
|-
| sa<br />sb || || '''s'''ize ('''a'''ctual) for [[#Template SimplSVG|template SimplSVG]]<br />'''s'''ize ('''b'''efore)
|-
| sc || || <code>sc=u</code> to prevent the lowercasing of the 1{{exp|st}} <code>sub</code>-character
|-
| sd || || subcategory differentiation
|-
| subcat<ref name="s"/> || !s<ref name="s"/> || ''topic'' for {{C|SVG images with embedded raster graphics:Topics}}
|-
| ss<ref name="s"/> || || ''see'' <code>Css</code>
|-
| colspan="2" | source || additional text, currently only used by {{T0|Created with perl|perl}} and {{T0|Created with ItB|ItB}}
|-
| t<br />T ||<br />T1…T7 || trailing text<br />upper case "T" with an advancing {{T0|clr|clear}}
|-
| {{0|-}}tr || || for {{T0|Translate|+}}
|-
| tw<br />{{0}}t<code>l</code><ref name="s"/><br />{{0}}tc<ref name="s"/><br />{{0}}tu<ref name="s"/><br />{{0}}tx<ref name="s"/> || {{0}}<br />{{0}}<br />{{0}} || specify a tool (camera) for {{t2|Taken with}}<br />logo or "-"<br />category or "-"<br />username or "-"<br />text or "-"
|-
| u<br />U || user<br />{{0}}by || user name (or user name link, e.g. <nowiki>{{Ut|user}}</nowiki>)<br />uppercase "{{T0|U}}" creates the user name link
|-
| {{0|.}}up || || for {{T0|Update|+}} = {{T0|Outdated}}
|-
| vc<br />vo<br />vt<br />vs<ref name="s"/><br />vw || vcat<br />vopt<br />vtxt<br />vstyle<ref name="s"/><br />vwidth || validator categorization<br />validator option (also o or opt)<br />validator more-text<br />[[#vstyle|validator style]] option, mainly for {{T0|SimplSVG}}<br />validator width (not used)
|-
| vsub<ref name="s"/><br />Vs || || subcategory of Text editor ("-" to suppress subcategorizing)<br />"Vs" like "vsub" with space
|-
| v<ref name="s"/><br />V || vt, vtxt<br />{{0}} ||additional validation text<br />upper case "V" with space
|-
| w<ref name="s"/><br />{{0}} || what<ref name="s"/><br />topic<ref name="s"/> || define (if other than <code>s</code>) or suppress (with <code>w=-</code>)<br />the code for the {{t0|Igen/top|topic}}
|-
| {{0|.}}wc || || for {{T0|Convert to wikichart}}
|-
| {{0|.}}wt || || for {{T0|Convert to wikitable}}
|- style="background:#EEF"
|colspan="3"| more parameters – mainly for the {{C|Created with ... templates}} (raster graphics)
|-
|colspan="2"|par1|| to specify e.g. a number
|-
|colspan="2"|mode|| e.g. the stacking mode
|-
|colspan="2"|type, item, par2|| not yet used
|}
<references/>
<includeonly>[[Category:Image generation templates| ]]{{ifsandbox|[[Category:Sandbox templates]]
|[[Category:Formatting templates|{{PAGENAME}}]]{{Protected}}
[[Category:SVG created with ... templates|<!-- intentional --> <!-- space -->{{PAGENAME}}]]
}}</includeonly>
6dhjlccwaiqevja0uyypufl9jdec4j3
Tempilet:Suppress categories
10
1441
10973
2024-08-28T17:27:08Z
commons>CptViraj
0
Protected "[[Template:Suppress categories]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10973
wikitext
text/x-wiki
<includeonly>{{</includeonly><includeonly>safesubst:</includeonly><includeonly>#invoke:Suppress categories|main}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
s55edmh1i64zjrwefm54pqc0xrgt289
10974
10973
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Suppress_categories]]
10973
wikitext
text/x-wiki
<includeonly>{{</includeonly><includeonly>safesubst:</includeonly><includeonly>#invoke:Suppress categories|main}}</includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. -->
</noinclude>
s55edmh1i64zjrwefm54pqc0xrgt289
Module:Suppress categories
828
1442
10975
2024-08-28T17:28:51Z
commons>CptViraj
0
Protected "[[Module:Suppress categories]]": [[Special:MyLanguage/Protection policy|Widely used Lua-module]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10975
Scribunto
text/plain
-- This is a simple module to strip categories from wikitext. It does
-- not support nested links or magic words like __TOC__, etc. Even so,
-- it should still handle most categories.
local p = {}
-- Detects if a category link is valid or not. If it is valid,
-- the function returns the blank string. If not, the input
-- is returned with no changes.
local function processCategory( all, submatch )
local beforePipe = mw.ustring.match( submatch, '^(.-)[%s_]*|[%s_]*.-$' )
beforePipe = beforePipe or submatch
if mw.ustring.match( beforePipe, '[%[%]<>{}%c\n]' ) then
return all
else
return ''
end
end
-- Preprocess the content if we aren't being called from #invoke,
-- and pass it to gsub to remove valid category links.
local function suppress( content, isPreprocessed )
if not isPreprocessed then
content = mw.getCurrentFrame():preprocess( content )
end
content = mw.ustring.gsub(
content,
'(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])',
processCategory
)
return content
end
-- Get the content to suppress categories from, and find
-- whether the content has already been preprocessed. (If the
-- module is called from #invoke, it has been preprocessed already.)
function p.main( frame )
local content, isPreprocessed
if frame == mw.getCurrentFrame() then
content = frame:getParent().args[1]
if frame.args[1] then
content = frame.args[1]
end
isPreprocessed = true
else
content = frame
isPreprocessed = false
end
return suppress( content, isPreprocessed )
end
return p
1q32hr238py5zckhzhojzbjzsdqguig
10976
10975
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Suppress_categories]]
10975
Scribunto
text/plain
-- This is a simple module to strip categories from wikitext. It does
-- not support nested links or magic words like __TOC__, etc. Even so,
-- it should still handle most categories.
local p = {}
-- Detects if a category link is valid or not. If it is valid,
-- the function returns the blank string. If not, the input
-- is returned with no changes.
local function processCategory( all, submatch )
local beforePipe = mw.ustring.match( submatch, '^(.-)[%s_]*|[%s_]*.-$' )
beforePipe = beforePipe or submatch
if mw.ustring.match( beforePipe, '[%[%]<>{}%c\n]' ) then
return all
else
return ''
end
end
-- Preprocess the content if we aren't being called from #invoke,
-- and pass it to gsub to remove valid category links.
local function suppress( content, isPreprocessed )
if not isPreprocessed then
content = mw.getCurrentFrame():preprocess( content )
end
content = mw.ustring.gsub(
content,
'(%[%[[%s_]*[cC][aA][tT][eE][gG][oO][rR][yY][%s_]*:[%s_]*(.-)[%s_]*%]%])',
processCategory
)
return content
end
-- Get the content to suppress categories from, and find
-- whether the content has already been preprocessed. (If the
-- module is called from #invoke, it has been preprocessed already.)
function p.main( frame )
local content, isPreprocessed
if frame == mw.getCurrentFrame() then
content = frame:getParent().args[1]
if frame.args[1] then
content = frame.args[1]
end
isPreprocessed = true
else
content = frame
isPreprocessed = false
end
return suppress( content, isPreprocessed )
end
return p
1q32hr238py5zckhzhojzbjzsdqguig
Tempilet:Bearbeiten
10
1443
10977
2024-08-08T13:25:30Z
commons>Jarekt
0
10977
wikitext
text/x-wiki
<onlyinclude>
<div><span class="mw-editsection plainlinks {{{2|}}}" style="margin-top:1em; clear: both; border: 2px dotted #666666; padding:0.5em 1em;" >
{{#if:{{{1|}}}|[{{fullurl:{{FULLPAGENAME}}/{{{1|}}}}} {{FULLPAGENAME}}/{{{1|}}} anzeigen] • }}
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=edit}} Bearbeiten] •
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=history}} Versionen] •
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=purge}} Cache löschen] •
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=info}} Seiteninformation]
</span></div></onlyinclude>
{{documentation}}
gynuzrszp20ieb5m65n8elrbzhsj788
10978
10977
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Bearbeiten]]
10977
wikitext
text/x-wiki
<onlyinclude>
<div><span class="mw-editsection plainlinks {{{2|}}}" style="margin-top:1em; clear: both; border: 2px dotted #666666; padding:0.5em 1em;" >
{{#if:{{{1|}}}|[{{fullurl:{{FULLPAGENAME}}/{{{1|}}}}} {{FULLPAGENAME}}/{{{1|}}} anzeigen] • }}
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=edit}} Bearbeiten] •
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=history}} Versionen] •
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=purge}} Cache löschen] •
[{{fullurl:{{NAMESPACE}}:{{PAGENAME}}{{#if:{{{1|}}}|/{{{1|}}}}}|action=info}} Seiteninformation]
</span></div></onlyinclude>
{{documentation}}
gynuzrszp20ieb5m65n8elrbzhsj788
Tempilet:Incl
10
1444
10979
2018-01-17T10:08:52Z
commons>Tacsipacsi
0
[[COM:AES|←]]Redirected page to [[Template:Bearbeiten]]
10979
wikitext
text/x-wiki
#REDIRECT [[Template:Bearbeiten]]
ezq9biif2elk3666fi6ga8mbt4jpy8x
10980
10979
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Incl]]
10979
wikitext
text/x-wiki
#REDIRECT [[Template:Bearbeiten]]
ezq9biif2elk3666fi6ga8mbt4jpy8x
Tempilet:NoteBox
10
1445
10981
2025-02-18T12:46:42Z
commons>CptViraj
0
Protected "[[Template:NoteBox]]": [[Special:MyLanguage/Commons:Protection policy|Widely used template]] ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10981
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Autotranslate|autotranslate
| base = NoteBox/i18n
| text = {{{1|{{{text|<noinclude>{{{text}}}</noinclude>}}}}}}
| type = {{{2|{{{type|}}}}}}
| inline = {{{inline|}}}
| demo = {{{demo|<noinclude>1</noinclude>}}}
}}</onlyinclude>
{{Documentation}}
bywbu7q1ogvljgnp50uve2nnzu2yaiu
10982
10981
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:NoteBox]]
10981
wikitext
text/x-wiki
<onlyinclude>{{#invoke:Autotranslate|autotranslate
| base = NoteBox/i18n
| text = {{{1|{{{text|<noinclude>{{{text}}}</noinclude>}}}}}}
| type = {{{2|{{{type|}}}}}}
| inline = {{{inline|}}}
| demo = {{{demo|<noinclude>1</noinclude>}}}
}}</onlyinclude>
{{Documentation}}
bywbu7q1ogvljgnp50uve2nnzu2yaiu
Tempilet:NoteBox/i18n/en
10
1446
10983
2021-07-21T02:11:14Z
commons>ExE Boss
0
Updating to match new version of source page: Sort parameters
10983
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{NoteBox/layout
<!-- Parameters -->
| text = {{{text|}}}
| type = {{{type|}}}
| inline = {{{inline|}}}
| demo = {{{demo|}}}
<!-- Translations -->
| msg-alt = Note
| msg-note = Note:
}}</onlyinclude>
{{Translated tag}}
qd4jqplt7zqvq6q6t3fes7kwbn0nu0b
10984
10983
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:NoteBox/i18n/en]]
10983
wikitext
text/x-wiki
<languages/>
<onlyinclude>{{NoteBox/layout
<!-- Parameters -->
| text = {{{text|}}}
| type = {{{type|}}}
| inline = {{{inline|}}}
| demo = {{{demo|}}}
<!-- Translations -->
| msg-alt = Note
| msg-note = Note:
}}</onlyinclude>
{{Translated tag}}
qd4jqplt7zqvq6q6t3fes7kwbn0nu0b
Tempilet:NoteBox/layout
10
1447
10985
2021-07-21T02:53:57Z
commons>ExE Boss
0
Use [[:File:OOjs UI icon lightbulb-yellow.svg|File:OOjs UI icon lightbulb‑yellow.svg]]
10985
wikitext
text/x-wiki
<onlyinclude>{{#if: {{#if:{{{text|}}}|{{{text|}}}|{{yesno|{{{demo|<noinclude>1</noinclude>}}}}}}}
| <templatestyles src="Template:NoteBox/styles.css"
/><div role="note" class="note note-{{#switch:{{{type|}}}
|gotcha=error
|=info
|#default={{{type|}}}
}} {{#if:{{yesno|{{{inline|}}}}}|note-inline}}">{{{text}}}</div>
| [[File:OOjs UI icon lightbulb-yellow.svg|18px|{{{msg-alt}}}|link=]] '''{{{msg-note}}}'''
}}</onlyinclude>
dya7ygc8pb84vjml6gnwxz3o16up3if
10986
10985
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:NoteBox/layout]]
10985
wikitext
text/x-wiki
<onlyinclude>{{#if: {{#if:{{{text|}}}|{{{text|}}}|{{yesno|{{{demo|<noinclude>1</noinclude>}}}}}}}
| <templatestyles src="Template:NoteBox/styles.css"
/><div role="note" class="note note-{{#switch:{{{type|}}}
|gotcha=error
|=info
|#default={{{type|}}}
}} {{#if:{{yesno|{{{inline|}}}}}|note-inline}}">{{{text}}}</div>
| [[File:OOjs UI icon lightbulb-yellow.svg|18px|{{{msg-alt}}}|link=]] '''{{{msg-note}}}'''
}}</onlyinclude>
dya7ygc8pb84vjml6gnwxz3o16up3if
Tempilet:NoteBox/styles.css
10
1448
10987
2025-08-04T00:53:09Z
commons>Nemoralis
0
10987
sanitized-css
text/css
.note {
background-position: left 7px top 50%;
padding: 0.5em 0.5em 0.5em 40px;
margin: 0.5em 0;
overflow: hidden;
background-color: var(--background-color-base, #fff);
color: var(--color-base, #202122);
background-repeat: no-repeat;
border: 1px solid var(--border-color-base, #ddd);
}
.note-inline {
display: inline-block;
vertical-align: middle;
}
.note-info {
background-color: var(--background-color-base, #fff);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_information-progressive.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);
background-size: 25px;
border: 1px solid var(--border-color-progressive, #6485d1);
padding-left: 40px;
min-height: 25px;
}
.note-reminder {
background-color: var(--background-color-warning-subtle, #fdf2d5);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);
background-size: 25px;
border: 1px solid var(--border-color-content-removed, #ffe49c);
min-height: 25px;
}
.note-warn {
background-color: var(--background-color-warning-subtle, #fdf2d5);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_alert-warning.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);
background-size: 25px;
border: 1px solid var(--border-color-content-removed, #ffe49c);
min-height: 25px;
}
.note-error {
background-color: var(--background-color-error-subtle, #ffe9e5);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_notice-destructive.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);
background-size: 25px;
border: 1px solid var(--border-color-destructive, #f54739);
min-height: 25px;
}
shgaxcgdm2r67fgvxo185eu5wvncnen
10988
10987
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:NoteBox/styles.css]]
10987
sanitized-css
text/css
.note {
background-position: left 7px top 50%;
padding: 0.5em 0.5em 0.5em 40px;
margin: 0.5em 0;
overflow: hidden;
background-color: var(--background-color-base, #fff);
color: var(--color-base, #202122);
background-repeat: no-repeat;
border: 1px solid var(--border-color-base, #ddd);
}
.note-inline {
display: inline-block;
vertical-align: middle;
}
.note-info {
background-color: var(--background-color-base, #fff);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_information-progressive.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/e/ec/OOjs_UI_icon_information-progressive.svg);
background-size: 25px;
border: 1px solid var(--border-color-progressive, #6485d1);
padding-left: 40px;
min-height: 25px;
}
.note-reminder {
background-color: var(--background-color-warning-subtle, #fdf2d5);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_lightbulb-yellow.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/a/a8/OOjs_UI_icon_lightbulb-yellow.svg);
background-size: 25px;
border: 1px solid var(--border-color-content-removed, #ffe49c);
min-height: 25px;
}
.note-warn {
background-color: var(--background-color-warning-subtle, #fdf2d5);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_alert-warning.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/3/3b/OOjs_UI_icon_alert-warning.svg);
background-size: 25px;
border: 1px solid var(--border-color-content-removed, #ffe49c);
min-height: 25px;
}
.note-error {
background-color: var(--background-color-error-subtle, #ffe9e5);
color: var(--color-base, #202122);
/* [[File:OOjs_UI_icon_notice-destructive.svg]] */
background-image: url(https://upload.wikimedia.org/wikipedia/commons/b/bf/OOjs_UI_icon_notice-destructive.svg);
background-size: 25px;
border: 1px solid var(--border-color-destructive, #f54739);
min-height: 25px;
}
shgaxcgdm2r67fgvxo185eu5wvncnen
Tempilet:I18n/important
10
1449
10989
2023-05-26T13:49:03Z
commons>TadejM
0
10989
wikitext
text/x-wiki
{{LangSwitch
|de=…Important
|it=…importante
|nl=…Belangrijk
|pt=…importante
|sl=… pomembno
|default=…important
|lang={{{lang|{{int:lang}}}}}}}<noinclude><br>for Inkscape
[[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude>
rufuzhsn881tkplvztl5pcg7cknips2
10990
10989
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:I18n/important]]
10989
wikitext
text/x-wiki
{{LangSwitch
|de=…Important
|it=…importante
|nl=…Belangrijk
|pt=…importante
|sl=… pomembno
|default=…important
|lang={{{lang|{{int:lang}}}}}}}<noinclude><br>for Inkscape
[[Category:Internationalization templates using LangSwitch|{{PAGENAME}}]]</noinclude>
rufuzhsn881tkplvztl5pcg7cknips2
Tempilet:Igen/cwt
10
1450
10991
2025-12-31T13:56:38Z
commons>Aaron Liu
0
add labplot
10991
wikitext
text/x-wiki
<noinclude>[[Category:Image generation subtemplates| ]]</noinclude>
<onlyinclude><includeonly>{{#ifeq:{{{2|}}}|-1|Created with|<!--
-->{{#ifeq:{{{1}}}|X|Extracted|Created}} {{#ifeq:{{{1}}}|K|in the|with}}}}<!--
--> {{#ifeq:{{{2|}}}|-1|Unknown tool|{{#switch:{{lc:{{{1|}}}}}
|a|a$|ia|adobe|illustrator=Adobe Illustrator
|ah=Adobe-hand
|ac=Vectornator
|b=BKchem
|c=ChemDraw
|d=CorelDRAW
|e=ElCompLib
|f=Fig2SVG
|g=Gnuplot
|h|ih=Inkscape-hand
|i|i$|im|io|ic|ii|iz=Inkscape
|is|ims|izs=Inkscape
|ib=ItB
|=Inkscape-default <!-- when "1=" ("||") -->
|j=JFreeChart
|k=SandBox
|l=LibreOffice
|lab|labplot=LabPlot
|m=MetaPost
|n=...<!-- -->
|ne=Natural Earth
|o=Other tool
|p=Pstoedit
|ps=PostScript
|q=QGIS
|r=R
|s=Sodipodi
|sp=Scalable Pixels
|t|text editor|t-|s-=HandSVG
|u=Unknown tool
|v=Vim
|vfpt=VectorFieldPlot
|vm=Vector Magic
|w=Winplot
|wpdc=Wpdc
|x=Inkscape<!-- -extract
y,z -->
|-=X
|gedit=gedit<!-- lcfirst -->
|#default={{#if:{{Igen/par|{{{1|}}}|1}}|{{{1}}}|<!--
-->{{#if:{{{3|}}}|Other tool|{{#ifeq:{{{2|}}}|-1|Other tool|Inkscape-undef}}}}}}}}}}</includeonly></onlyinclude>
rz0h7id10mrd30dyhlsbin22lbf9h0k
10992
10991
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Igen/cwt]]
10991
wikitext
text/x-wiki
<noinclude>[[Category:Image generation subtemplates| ]]</noinclude>
<onlyinclude><includeonly>{{#ifeq:{{{2|}}}|-1|Created with|<!--
-->{{#ifeq:{{{1}}}|X|Extracted|Created}} {{#ifeq:{{{1}}}|K|in the|with}}}}<!--
--> {{#ifeq:{{{2|}}}|-1|Unknown tool|{{#switch:{{lc:{{{1|}}}}}
|a|a$|ia|adobe|illustrator=Adobe Illustrator
|ah=Adobe-hand
|ac=Vectornator
|b=BKchem
|c=ChemDraw
|d=CorelDRAW
|e=ElCompLib
|f=Fig2SVG
|g=Gnuplot
|h|ih=Inkscape-hand
|i|i$|im|io|ic|ii|iz=Inkscape
|is|ims|izs=Inkscape
|ib=ItB
|=Inkscape-default <!-- when "1=" ("||") -->
|j=JFreeChart
|k=SandBox
|l=LibreOffice
|lab|labplot=LabPlot
|m=MetaPost
|n=...<!-- -->
|ne=Natural Earth
|o=Other tool
|p=Pstoedit
|ps=PostScript
|q=QGIS
|r=R
|s=Sodipodi
|sp=Scalable Pixels
|t|text editor|t-|s-=HandSVG
|u=Unknown tool
|v=Vim
|vfpt=VectorFieldPlot
|vm=Vector Magic
|w=Winplot
|wpdc=Wpdc
|x=Inkscape<!-- -extract
y,z -->
|-=X
|gedit=gedit<!-- lcfirst -->
|#default={{#if:{{Igen/par|{{{1|}}}|1}}|{{{1}}}|<!--
-->{{#if:{{{3|}}}|Other tool|{{#ifeq:{{{2|}}}|-1|Other tool|Inkscape-undef}}}}}}}}}}</includeonly></onlyinclude>
rz0h7id10mrd30dyhlsbin22lbf9h0k
Tempilet:Igen/2nd
10
1451
10993
2022-11-21T10:06:11Z
commons>Sarang
0
recycle
10993
wikitext
text/x-wiki
<noinclude>[[Category:Image generation subtemplates| ]]
this template does nothing — but its transclusion list will show where a 2{{exp|nd}} {{T0|Igen/cwt|access}} had been necessary
</noinclude>
8o4j2m5muqmdx64nsok950jvudnry4b
10994
10993
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:Igen/2nd]]
10993
wikitext
text/x-wiki
<noinclude>[[Category:Image generation subtemplates| ]]
this template does nothing — but its transclusion list will show where a 2{{exp|nd}} {{T0|Igen/cwt|access}} had been necessary
</noinclude>
8o4j2m5muqmdx64nsok950jvudnry4b
Module:Colon
828
1452
10995
2024-06-11T09:46:02Z
commons>Ebrahim
0
Changed protection settings for "[[Module:Colon]]": used in the interface MediaWiki:Userrights-summary ([Edit=Allow only template editors and administrators] (indefinite) [Move=Allow only template editors and administrators] (indefinite))
10995
Scribunto
text/plain
require('strict')
local getArgs = require('Module:Arguments').getArgs
local langSwitch = require('Module:LangSwitch')._langSwitch
local p = {}
function p._colon(args)
local lang = args.lang or mw.getCurrentFrame():preprocess("{{Int:Lang}}")
-- Please keep the ASCII colon returned as HTML-encoded everywhere, as it MUST NOT be parsed as wiki markup
local colons = {
-- Colon with no space before and space after
-- ": ""
['ger'] = ': ',
-- Colon with narrow space before and space after
-- " : "
['fr'] = ' : ',
--[=[ Colon with non-breaking space before and space after, avoiding confusion with:
several Arabic diacritics,
U+0589 Armenian punctuation Full stop,
U+05C3 Hebrew punctuation sign Sof Pasuk,
U+0983 Bengali combining sign Visarga,
U+0903 Devanagari combining sign Visarga,
U+0A03 Gurmukhi combining sign Visarga,
U+0A83 Gujarati combining sign Visarga,
U+0B03 Oryia combining sign Visarga,
U+0B83 Tamil combining sign Visarga,
Telugu combining sign Visarga,
Kannada combining sign Visarga,
U+0D03 Malayalam combining sign Visarga,
U+0D83 Sinhalese combining sign Visarga,
U+0F7F Tibetan combining sign Rnam Bcad (Nam Che),
U+17C7 / U+17C8 Khmer combining signs Reahmuk / Yukaleakpintu,
U+2D53 Tifinagh letter Yu (Touareg Yaw)
]=]
-- " : "
['sp'] = ' : ',
--[=[ Myanmar:
do not use the ASCII colon
(too confusable with a Myanmar letter in many fonts, notably at small sizes);
use an en-dash instead
]=]
-- " – "
['my'] = ' – ',
-- No spacing
-- ":"
['no'] = ':',
-- Ethiopic punctuation sign colon
-- "፥ "
['eth'] = '፥ ',
-- Mongolian/Mandchu punctuation sign colon
-- "᠄"
['mong'] = '᠄',
--[=[ CJK punctuation fullwidth colon
(rotated if vertical layout)
for Indo-Sinitic scripts used along with Chinese
]=]
-- ":"
['cjk'] = ':'
}
local text_args = {
['default'] = colons['ger'],
['af'] = colons['ger'],
['am'] = colons['eth'],
['ar'] = colons['sp'],
['Arab'] = colons['sp'],
['Armn'] = colons['sp'],
['arz'] = colons['sp'],
['bar'] = colons['ger'],
['be-tarask'] = colons['ger'],
['be'] = colons['ger'],
['Beng'] = colons['sp'],
['ber'] = colons['sp'],
['bg'] = colons['ger'],
['bn'] = colons['sp'],
['bo'] = colons['sp'],
['Bpmf'] = colons['cjk'],
['br'] = colons['fr'],
['bs'] = colons['ger'],
['ca'] = colons['ger'],
['co'] = colons['ger'],
['cs'] = colons['ger'],
['Cyrl'] = colons['ger'],
['de'] = colons['ger'],
['Deva'] = colons['sp'],
['el'] = colons['ger'],
['eml'] = colons['ger'],
['en'] = colons['ger'],
['es'] = colons['ger'],
['Ethi'] = colons['eth'],
['ext'] = colons['ger'],
['fa'] = colons['sp'],
['fr-be'] = colons['fr'],
['fr-ca'] = colons['fr'],
['fr-ch'] = colons['fr'],
['fr-lb'] = colons['fr'],
['fr'] = colons['fr'],
['gl'] = colons['ger'],
['glk'] = colons['sp'],
['Grek'] = colons['ger'],
['gsw'] = colons['gsw'],
['gu'] = colons['sp'],
['Gujr'] = colons['sp'],
['Guru'] = colons['sp'],
['Hang'] = colons['cjk'],
['Hani'] = colons['cjk'],
['Hans'] = colons['cjk'],
['Hant'] = colons['cjk'],
['he'] = colons['sp'],
['Hebr'] = colons['sp'],
['hi'] = colons['sp'],
['hr'] = colons['ger'],
['hu'] = colons['ger'],
['hy'] = colons['sp'],
['ii'] = colons['cjk'],
['it'] = colons['ger'],
['ja'] = colons['cjk'],
['Jpan'] = colons['cjk'],
['Khmr'] = colons['sp'],
['km'] = colons['sp'],
['kn'] = colons['sp'],
['Knda'] = colons['sp'],
['ko-kp'] = colons['ger'],
['ko'] = colons['ger'],
['la'] = colons['ger'],
['lb'] = colons['ger'],
['li'] = colons['ger'],
['lzh'] = colons['cjk'],
['mk'] = colons['ger'],
['ml'] = colons['sp'],
['Mlym'] = colons['sp'],
['mn-Mong'] = colons['mong'],
['Mong'] = colons['mong'],
['my'] = colons['my'],
['Mymr'] = colons['my'],
['nap'] = colons['ger'],
['nds-nl'] = colons['ger'],
['nds'] = colons['ger'],
['ne'] = colons['sp'],
['nl'] = colons['ger'],
['oc'] = colons['fr'],
['or'] = colons['sp'],
['Orya'] = colons['sp'],
['pa'] = colons['sp'],
['Phpa'] = colons['cjk'],
['pnt'] = colons['ger'],
['prd'] = colons['sp'],
['ps'] = colons['sp'],
['pt-br'] = colons['ger'],
['pt'] = colons['ger'],
['rgn'] = colons['ger'],
['rm'] = colons['ger'],
['ro'] = colons['ger'],
['ru'] = colons['ger'],
['scn'] = colons['ger'],
['shy'] = colons['sp'],
['si'] = colons['sp'],
['Sinh'] = colons['sp'],
['sk'] = colons['ger'],
['sl'] = colons['ger'],
['sr-ec'] = colons['ger'],
['sr-el'] = colons['ger'],
['sr-Latn'] = colons['ger'],
['sr'] = colons['ger'],
['ta'] = colons['sp'],
['Tale'] = colons['cjk'],
['Talu'] = colons['cjk'],
['Taml'] = colons['sp'],
['te'] = colons['sp'],
['Telu'] = colons['sp'],
['Tfng'] = colons['sp'],
['th'] = colons['no'],
['Thai'] = colons['no'],
['ti'] = colons['eth'],
['Tibt'] = colons['sp'],
['tzm'] = colons['sp'],
['ug'] = colons['sp'],
['ur'] = colons['sp'],
['vec'] = colons['ger'],
['vls'] = colons['ger'],
['wa'] = colons['fr'],
['wuu'] = colons['cjk'],
['ydd'] = colons['sp'],
['yi'] = colons['sp'],
['Yiii'] = colons['cjk'],
['yue'] = colons['cjk'],
['zh-Hans'] = colons['cjk'],
['zh-Hant'] = colons['cjk'],
['zh'] = colons['cjk'],
['Zinh-nbsp-Po-space'] = colons['sp'],
['Zinh-nnbsp-Po-space'] = colons['fr'],
['Zinh-Po-space'] = colons['ger'],
['Zinh-Po'] = colons['no']
}
return langSwitch(text_args, lang)
end
function p.colon(frame)
return p._colon(getArgs(frame))
end
return p
1uua8388ilhwwsz8m7s82edziquxn3u
10996
10995
2026-08-25T23:38:40Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Colon]]
10995
Scribunto
text/plain
require('strict')
local getArgs = require('Module:Arguments').getArgs
local langSwitch = require('Module:LangSwitch')._langSwitch
local p = {}
function p._colon(args)
local lang = args.lang or mw.getCurrentFrame():preprocess("{{Int:Lang}}")
-- Please keep the ASCII colon returned as HTML-encoded everywhere, as it MUST NOT be parsed as wiki markup
local colons = {
-- Colon with no space before and space after
-- ": ""
['ger'] = ': ',
-- Colon with narrow space before and space after
-- " : "
['fr'] = ' : ',
--[=[ Colon with non-breaking space before and space after, avoiding confusion with:
several Arabic diacritics,
U+0589 Armenian punctuation Full stop,
U+05C3 Hebrew punctuation sign Sof Pasuk,
U+0983 Bengali combining sign Visarga,
U+0903 Devanagari combining sign Visarga,
U+0A03 Gurmukhi combining sign Visarga,
U+0A83 Gujarati combining sign Visarga,
U+0B03 Oryia combining sign Visarga,
U+0B83 Tamil combining sign Visarga,
Telugu combining sign Visarga,
Kannada combining sign Visarga,
U+0D03 Malayalam combining sign Visarga,
U+0D83 Sinhalese combining sign Visarga,
U+0F7F Tibetan combining sign Rnam Bcad (Nam Che),
U+17C7 / U+17C8 Khmer combining signs Reahmuk / Yukaleakpintu,
U+2D53 Tifinagh letter Yu (Touareg Yaw)
]=]
-- " : "
['sp'] = ' : ',
--[=[ Myanmar:
do not use the ASCII colon
(too confusable with a Myanmar letter in many fonts, notably at small sizes);
use an en-dash instead
]=]
-- " – "
['my'] = ' – ',
-- No spacing
-- ":"
['no'] = ':',
-- Ethiopic punctuation sign colon
-- "፥ "
['eth'] = '፥ ',
-- Mongolian/Mandchu punctuation sign colon
-- "᠄"
['mong'] = '᠄',
--[=[ CJK punctuation fullwidth colon
(rotated if vertical layout)
for Indo-Sinitic scripts used along with Chinese
]=]
-- ":"
['cjk'] = ':'
}
local text_args = {
['default'] = colons['ger'],
['af'] = colons['ger'],
['am'] = colons['eth'],
['ar'] = colons['sp'],
['Arab'] = colons['sp'],
['Armn'] = colons['sp'],
['arz'] = colons['sp'],
['bar'] = colons['ger'],
['be-tarask'] = colons['ger'],
['be'] = colons['ger'],
['Beng'] = colons['sp'],
['ber'] = colons['sp'],
['bg'] = colons['ger'],
['bn'] = colons['sp'],
['bo'] = colons['sp'],
['Bpmf'] = colons['cjk'],
['br'] = colons['fr'],
['bs'] = colons['ger'],
['ca'] = colons['ger'],
['co'] = colons['ger'],
['cs'] = colons['ger'],
['Cyrl'] = colons['ger'],
['de'] = colons['ger'],
['Deva'] = colons['sp'],
['el'] = colons['ger'],
['eml'] = colons['ger'],
['en'] = colons['ger'],
['es'] = colons['ger'],
['Ethi'] = colons['eth'],
['ext'] = colons['ger'],
['fa'] = colons['sp'],
['fr-be'] = colons['fr'],
['fr-ca'] = colons['fr'],
['fr-ch'] = colons['fr'],
['fr-lb'] = colons['fr'],
['fr'] = colons['fr'],
['gl'] = colons['ger'],
['glk'] = colons['sp'],
['Grek'] = colons['ger'],
['gsw'] = colons['gsw'],
['gu'] = colons['sp'],
['Gujr'] = colons['sp'],
['Guru'] = colons['sp'],
['Hang'] = colons['cjk'],
['Hani'] = colons['cjk'],
['Hans'] = colons['cjk'],
['Hant'] = colons['cjk'],
['he'] = colons['sp'],
['Hebr'] = colons['sp'],
['hi'] = colons['sp'],
['hr'] = colons['ger'],
['hu'] = colons['ger'],
['hy'] = colons['sp'],
['ii'] = colons['cjk'],
['it'] = colons['ger'],
['ja'] = colons['cjk'],
['Jpan'] = colons['cjk'],
['Khmr'] = colons['sp'],
['km'] = colons['sp'],
['kn'] = colons['sp'],
['Knda'] = colons['sp'],
['ko-kp'] = colons['ger'],
['ko'] = colons['ger'],
['la'] = colons['ger'],
['lb'] = colons['ger'],
['li'] = colons['ger'],
['lzh'] = colons['cjk'],
['mk'] = colons['ger'],
['ml'] = colons['sp'],
['Mlym'] = colons['sp'],
['mn-Mong'] = colons['mong'],
['Mong'] = colons['mong'],
['my'] = colons['my'],
['Mymr'] = colons['my'],
['nap'] = colons['ger'],
['nds-nl'] = colons['ger'],
['nds'] = colons['ger'],
['ne'] = colons['sp'],
['nl'] = colons['ger'],
['oc'] = colons['fr'],
['or'] = colons['sp'],
['Orya'] = colons['sp'],
['pa'] = colons['sp'],
['Phpa'] = colons['cjk'],
['pnt'] = colons['ger'],
['prd'] = colons['sp'],
['ps'] = colons['sp'],
['pt-br'] = colons['ger'],
['pt'] = colons['ger'],
['rgn'] = colons['ger'],
['rm'] = colons['ger'],
['ro'] = colons['ger'],
['ru'] = colons['ger'],
['scn'] = colons['ger'],
['shy'] = colons['sp'],
['si'] = colons['sp'],
['Sinh'] = colons['sp'],
['sk'] = colons['ger'],
['sl'] = colons['ger'],
['sr-ec'] = colons['ger'],
['sr-el'] = colons['ger'],
['sr-Latn'] = colons['ger'],
['sr'] = colons['ger'],
['ta'] = colons['sp'],
['Tale'] = colons['cjk'],
['Talu'] = colons['cjk'],
['Taml'] = colons['sp'],
['te'] = colons['sp'],
['Telu'] = colons['sp'],
['Tfng'] = colons['sp'],
['th'] = colons['no'],
['Thai'] = colons['no'],
['ti'] = colons['eth'],
['Tibt'] = colons['sp'],
['tzm'] = colons['sp'],
['ug'] = colons['sp'],
['ur'] = colons['sp'],
['vec'] = colons['ger'],
['vls'] = colons['ger'],
['wa'] = colons['fr'],
['wuu'] = colons['cjk'],
['ydd'] = colons['sp'],
['yi'] = colons['sp'],
['Yiii'] = colons['cjk'],
['yue'] = colons['cjk'],
['zh-Hans'] = colons['cjk'],
['zh-Hant'] = colons['cjk'],
['zh'] = colons['cjk'],
['Zinh-nbsp-Po-space'] = colons['sp'],
['Zinh-nnbsp-Po-space'] = colons['fr'],
['Zinh-Po-space'] = colons['ger'],
['Zinh-Po'] = colons['no']
}
return langSwitch(text_args, lang)
end
function p.colon(frame)
return p._colon(getArgs(frame))
end
return p
1uua8388ilhwwsz8m7s82edziquxn3u
Module:Xconv
828
1453
10997
2025-09-22T23:40:40Z
commons>Jarekt
0
fix typo introduced in 17:34, 7 January 2025 edit by [[User:Verdy p]]
10997
Scribunto
text/plain
local p = {}
local min = math.min
local max = math.max
local floor = math.floor
local format = string.format
local sub = mw.ustring.sub
local gsub = mw.ustring.gsub
local upper = mw.ustring.upper
local lower = mw.ustring.lower
local trim = mw.text.trim
local split = mw.text.split
--------------------------------------------------------------------------------
-- Main function: for numeric check
-- Hex-conversion and selection of conversion mode
function p.xconv(frame)
-- local lprm = frame -- local parms
local gprm = frame.args -- global parms
-- local pprm = mw.getCurrentFrame():getParent().args
local inpt = {}
for i = 1, 3 do
local v = gprm[i] or ''
gprm[i] = v
v = trim(v)
inpt[i] = upper(v)
inpt[i + 3] = v
end
local err = '' -- detected errors
local fna = '' -- assumed mode
local fno = '' -- output mode
local fnr = '' -- 'r' for rgb() color, or '#' for hex color
local sp0 = '(' -- or 'rgb('
local sp1 = ',' -- or '%,'
local sp3 = ')' -- or '%)'
if inpt[3] ~= '' then
fna = '4' -- three parms: 4a (or 3c)
inpt[1] = inpt[1] .. '/' .. inpt[2] .. '/' .. inpt[3]
else
if inpt[2] ~= '' then -- only one param
inpt[5] = gsub(inpt[5], 'r', '')
if #inpt[2] > #inpt[5] then
sp0 = 'rgb('
end
if inpt[5] == 'n' then
fna = 'n' -- 1: d2h
elseif inpt[5] == 'h' then
fna = 'h' -- 2: h2d
elseif inpt[5] == 'o' then
fno = 'o' -- 3: rgb(3ab or 4bcd)
elseif inpt[5] == 'no' or inpt[5] == 'on' then
fna = 'n' -- 1: d2h, or 4bcd
fno = 'o' -- edit
elseif inpt[5] == 's' or inpt[5] == 'ns' or inpt[5] == 'sn' then
fna = 'n' -- 4bcd
fno = 's' -- shorten
elseif inpt[5] == 'ho' or inpt[5] == 'oh' then
fna = 'h' -- 2: h2d, or 3ab
fno = 'o' -- edit
elseif inpt[5] == '%' then
fna = 'h' -- rgb(3ab)
sp1 = '%,'
sp3 = '%)'
else
err = err .. '4' -- parm2 is wrong function code
end
end
if inpt[1] ~= '' then
if lower(sub(inpt[4], 1, 4)) == 'rgb(' then
fna = 'n' -- 4cd
fnr = 'r' -- rgb
inpt[1] = sub(inpt[1], 4, #inpt[1])
end
end
end
local rgp = '' -- empty or 3 rgb % signs
local num = '' -- number bytes
local hex = '' -- number + hex bytes
local nhs = '' -- number + hex bytes + separator slashes
local pts = 0 -- numbers of decimal points
for i = 1, #inpt[1] do
local tmp = sub(inpt[1], i, i)
-- if tmp >= '0' and tmp <= "9" then
if tmp == '0' or tmp == '1' or tmp == '2' or tmp == '3' or tmp == '4'
or tmp == '5' or tmp == '6' or tmp == '7' or tmp == '8' or tmp == '9' then
num = num .. tmp
hex = hex .. tmp
nhs = nhs .. tmp
elseif tmp == '.' then -- fnc = 4d
if pts == 0 then
num = num .. '.'
hex = hex .. '.'
nhs = nhs .. '.'
pts = 1
else
err = err .. '5' -- more than one point
end
-- elseif tmp >= 'A' and tmp <= 'F' then
elseif tmp == 'A' or tmp == 'B' or tmp == 'C' or tmp == 'D' or tmp == 'E' or tmp == 'F' then
hex = hex .. tmp
nhs = nhs .. tmp
elseif tmp == ' ' or tmp == ',' or tmp == '-' or tmp == '/' then
if sub(nhs, #nhs, #nhs) ~= '/' then
nhs = nhs .. '/'
pts = 0 -- reset for next item
elseif sub(inpt[1], i-1, i) ~= ', ' then
err = err .. '3' -- more than one delimiter in sequ.
end
elseif tmp == '%' then -- fnc = 4d
if i < #inpt[1] then
inpt[7] = sub(inpt[1], i + 1, i + 1)
end
if inpt[7] == ',' or inpt[7] == ')' then
inpt[7] = '/'
end
if i < #inpt[1] and inpt[7] ~= '/' then
nhs = nhs .. '/'
pts = 0 -- reset for next item
end
rgp = rgp .. '%' -- 3 times
if #rgp > 3 then
err = err .. '6' -- % sign error
end
elseif i == 1 then
if tmp == '(' then
fnr = 'r'
elseif tmp == '#' then
fnr = '#'
else
err = err .. '2' -- '(' or '#' occurs at non-first position
end
elseif i == #inpt[1] then
if tmp == ')' and fnr == 'r' then
tmp = tmp
end -- ignore end-')' when 'r'
elseif tmp ~= '' then -- ignore spacing separator
err = err .. '1' -- character not identifiable
end -- if
end -- for
local dect = {0, 0, 0}
local fnc = '' -- conversion mode
if fnr == '#' and err == '' then
if #hex == 3 then -- 3a
inpt[6] = sub(hex, 3, 3) .. sub(hex, 3, 3)
inpt[5] = sub(hex, 2, 2) .. sub(hex, 2, 2)
inpt[4] = sub(hex, 1, 1) .. sub(hex, 1, 1)
elseif #hex == 6 then
inpt[6] = sub(hex, 5, 6)
inpt[5] = sub(hex, 3, 4)
inpt[4] = sub(hex, 1, 2)
else
err = err .. '#'
end -- neither 6 nor 3
for i = 1, 3 do
dect[i] = tonumber(inpt[i + 3], 16)
if sp3 == '%)' then
dect[i] = floor(dect[i] / 255 * 1000) / 1000
end
end -- for
fnc = '3' -- 3
elseif #num < #hex or fna == 'h' then
if #nhs == #hex + 2 then -- 3bC
local sndt = split(nhs, '/')
for i = 1, 3 do
dect[i] = tonumber(sndt[i], 16)
if dect[i] > 255 then
err = err .. '8'
else
if sp3 == '%)' then
dect[i] = floor(dect[i] / 255 * 1000) / 1000
end
end
end -- for
fnc = '3' -- 3
else
if fnr ~= '#' then
dect[1] = tonumber(hex, 16)
fnc = '2' -- 2
end
end
else -- #num == #hex (a numeric value, and not 'h')
if #nhs == #hex then
fnc = '1' -- 1
inpt[1] = format('%X', num)
else -- #nhs == #hex + 2 == #num + 2 (3 num values) -- 4A, 4b or 4c, 4d
dect = split(nhs, '/')
fnc = '4' -- 4
for i = 1, 3 do
if rgp == '' then
if tonumber(dect[i]) > 255 then -- 4A, 4b, 4c
err = err .. '8'
end
inpt[i] = format('%02X', dect[i])
else -- rgp = '%%%' -- 4d
if rgp ~= '%%%' then
err = err .. '7' -- (6) not three '%'
end
if tonumber(dect[i]) > 100 then -- 4d
err = err .. '9'
end
dect[i + 3] = floor(dect[i] * 255 / 100 + .5)
inpt[i] = format('%02X', dect[i + 3])
end
end -- for
if fno == 's' -- shortening required ?
and sub(inpt[1], 1, 1) == sub(inpt[1], 2, 2)
and sub(inpt[2], 1, 1) == sub(inpt[2], 2, 2)
and sub(inpt[3], 1, 1) == sub(inpt[3], 2, 2) then
inpt[1] = sub(inpt[1], 1, 1)
inpt[2] = sub(inpt[2], 1, 1)
inpt[3] = sub(inpt[3], 1, 1)
end -- shorten #rrggbb to #rgb
end -- if #nhs
end -- if #num
--[[
err: string, indicates parsing errors that may have been encountered:
'1': non-numeric or non-hexadecimal characters
'2': '(' or '#' occurs at non-first position
'3': separator (or separator combination}
'4': parm2 input wrong function code
'5': decimal point error
'6': % sign error
'7': not three '%'
'8': not all decimal color codes are < 256
'9': more than 100%
inpt: table of 6 strings, contains 3 trimmed parameters after their uppercase versions
dect: table of 3 decimal values
num: string, contains all numeric bytes
hex: string, contains all numeric plus hexadecimal bytes
nhs: string, contains all numeric plus hexadecimal bytes plus inbetween slashes
rgp: string, may contain three '%' from rgb() notation
--]]
--[[ Only for tests:
if fnc == '4' then
return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc
.. ', '.. inpt[1]
.. ', '.. num .. '~' .. hex .. '~' .. nhs
.. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3])
.. ', ' .. rgp
.. ', ' .. inpt[1] .. '"' .. inpt[2] .. '"' .. inpt[3]
else
return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc
.. ', '.. inpt[1]
.. ', '.. num .. '~' .. hex .. '~' .. nhs
.. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3])
.. ', '.. rgp
end
--]]
if err ~= '' then
return 'Error = ' .. err
elseif fnc == '1' then
return inpt[1] .. '<sub>h</sub>'
elseif fnc == '2' then
return tostring(dect[1]) .. '<sub>d</sub>'
elseif fnc == '3' then
return sp0 .. dect[1] .. sp1 .. dect[2] .. sp1 .. dect[3] .. sp3
elseif fnc == '4' then
return '#'-- leading '#' HTML-escaped against MediaWiki reinterpretation
.. inpt[1] .. inpt[2] .. inpt[3]
end
end -- function xconv
--------------------------------------------------------------------------------
-- Convert hexadecimal value (from 0 to FFFFFFFFFFF) to decimal value(from 0 to 17592186044415)
function p.h2d(frame)
local gprm = frame.args -- global parms
return tonumber(gprm[1], 16) or ''
end -- function h2d
--------------------------------------------------------------------------------
-- Convert decimal value (from 0 to 17592186044415) to hexadecimal value(from 0 to FFFFFFFFFFF)
function p.d2h(frame)
local gprm = frame.args -- global parms
local value = tonumber(gprm[1]) or 0
local width = min(max(tonumber(gprm[2]) or 1, 1), 16)
return format('%0' .. tostring(width) .. 'X', value)
end -- function d2h
--------------------------------------------------------------------------------
return p
pin4hh35xqzfvjbk8i9ozemliaa9ovm
10998
10997
2026-08-25T23:38:41Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Xconv]]
10997
Scribunto
text/plain
local p = {}
local min = math.min
local max = math.max
local floor = math.floor
local format = string.format
local sub = mw.ustring.sub
local gsub = mw.ustring.gsub
local upper = mw.ustring.upper
local lower = mw.ustring.lower
local trim = mw.text.trim
local split = mw.text.split
--------------------------------------------------------------------------------
-- Main function: for numeric check
-- Hex-conversion and selection of conversion mode
function p.xconv(frame)
-- local lprm = frame -- local parms
local gprm = frame.args -- global parms
-- local pprm = mw.getCurrentFrame():getParent().args
local inpt = {}
for i = 1, 3 do
local v = gprm[i] or ''
gprm[i] = v
v = trim(v)
inpt[i] = upper(v)
inpt[i + 3] = v
end
local err = '' -- detected errors
local fna = '' -- assumed mode
local fno = '' -- output mode
local fnr = '' -- 'r' for rgb() color, or '#' for hex color
local sp0 = '(' -- or 'rgb('
local sp1 = ',' -- or '%,'
local sp3 = ')' -- or '%)'
if inpt[3] ~= '' then
fna = '4' -- three parms: 4a (or 3c)
inpt[1] = inpt[1] .. '/' .. inpt[2] .. '/' .. inpt[3]
else
if inpt[2] ~= '' then -- only one param
inpt[5] = gsub(inpt[5], 'r', '')
if #inpt[2] > #inpt[5] then
sp0 = 'rgb('
end
if inpt[5] == 'n' then
fna = 'n' -- 1: d2h
elseif inpt[5] == 'h' then
fna = 'h' -- 2: h2d
elseif inpt[5] == 'o' then
fno = 'o' -- 3: rgb(3ab or 4bcd)
elseif inpt[5] == 'no' or inpt[5] == 'on' then
fna = 'n' -- 1: d2h, or 4bcd
fno = 'o' -- edit
elseif inpt[5] == 's' or inpt[5] == 'ns' or inpt[5] == 'sn' then
fna = 'n' -- 4bcd
fno = 's' -- shorten
elseif inpt[5] == 'ho' or inpt[5] == 'oh' then
fna = 'h' -- 2: h2d, or 3ab
fno = 'o' -- edit
elseif inpt[5] == '%' then
fna = 'h' -- rgb(3ab)
sp1 = '%,'
sp3 = '%)'
else
err = err .. '4' -- parm2 is wrong function code
end
end
if inpt[1] ~= '' then
if lower(sub(inpt[4], 1, 4)) == 'rgb(' then
fna = 'n' -- 4cd
fnr = 'r' -- rgb
inpt[1] = sub(inpt[1], 4, #inpt[1])
end
end
end
local rgp = '' -- empty or 3 rgb % signs
local num = '' -- number bytes
local hex = '' -- number + hex bytes
local nhs = '' -- number + hex bytes + separator slashes
local pts = 0 -- numbers of decimal points
for i = 1, #inpt[1] do
local tmp = sub(inpt[1], i, i)
-- if tmp >= '0' and tmp <= "9" then
if tmp == '0' or tmp == '1' or tmp == '2' or tmp == '3' or tmp == '4'
or tmp == '5' or tmp == '6' or tmp == '7' or tmp == '8' or tmp == '9' then
num = num .. tmp
hex = hex .. tmp
nhs = nhs .. tmp
elseif tmp == '.' then -- fnc = 4d
if pts == 0 then
num = num .. '.'
hex = hex .. '.'
nhs = nhs .. '.'
pts = 1
else
err = err .. '5' -- more than one point
end
-- elseif tmp >= 'A' and tmp <= 'F' then
elseif tmp == 'A' or tmp == 'B' or tmp == 'C' or tmp == 'D' or tmp == 'E' or tmp == 'F' then
hex = hex .. tmp
nhs = nhs .. tmp
elseif tmp == ' ' or tmp == ',' or tmp == '-' or tmp == '/' then
if sub(nhs, #nhs, #nhs) ~= '/' then
nhs = nhs .. '/'
pts = 0 -- reset for next item
elseif sub(inpt[1], i-1, i) ~= ', ' then
err = err .. '3' -- more than one delimiter in sequ.
end
elseif tmp == '%' then -- fnc = 4d
if i < #inpt[1] then
inpt[7] = sub(inpt[1], i + 1, i + 1)
end
if inpt[7] == ',' or inpt[7] == ')' then
inpt[7] = '/'
end
if i < #inpt[1] and inpt[7] ~= '/' then
nhs = nhs .. '/'
pts = 0 -- reset for next item
end
rgp = rgp .. '%' -- 3 times
if #rgp > 3 then
err = err .. '6' -- % sign error
end
elseif i == 1 then
if tmp == '(' then
fnr = 'r'
elseif tmp == '#' then
fnr = '#'
else
err = err .. '2' -- '(' or '#' occurs at non-first position
end
elseif i == #inpt[1] then
if tmp == ')' and fnr == 'r' then
tmp = tmp
end -- ignore end-')' when 'r'
elseif tmp ~= '' then -- ignore spacing separator
err = err .. '1' -- character not identifiable
end -- if
end -- for
local dect = {0, 0, 0}
local fnc = '' -- conversion mode
if fnr == '#' and err == '' then
if #hex == 3 then -- 3a
inpt[6] = sub(hex, 3, 3) .. sub(hex, 3, 3)
inpt[5] = sub(hex, 2, 2) .. sub(hex, 2, 2)
inpt[4] = sub(hex, 1, 1) .. sub(hex, 1, 1)
elseif #hex == 6 then
inpt[6] = sub(hex, 5, 6)
inpt[5] = sub(hex, 3, 4)
inpt[4] = sub(hex, 1, 2)
else
err = err .. '#'
end -- neither 6 nor 3
for i = 1, 3 do
dect[i] = tonumber(inpt[i + 3], 16)
if sp3 == '%)' then
dect[i] = floor(dect[i] / 255 * 1000) / 1000
end
end -- for
fnc = '3' -- 3
elseif #num < #hex or fna == 'h' then
if #nhs == #hex + 2 then -- 3bC
local sndt = split(nhs, '/')
for i = 1, 3 do
dect[i] = tonumber(sndt[i], 16)
if dect[i] > 255 then
err = err .. '8'
else
if sp3 == '%)' then
dect[i] = floor(dect[i] / 255 * 1000) / 1000
end
end
end -- for
fnc = '3' -- 3
else
if fnr ~= '#' then
dect[1] = tonumber(hex, 16)
fnc = '2' -- 2
end
end
else -- #num == #hex (a numeric value, and not 'h')
if #nhs == #hex then
fnc = '1' -- 1
inpt[1] = format('%X', num)
else -- #nhs == #hex + 2 == #num + 2 (3 num values) -- 4A, 4b or 4c, 4d
dect = split(nhs, '/')
fnc = '4' -- 4
for i = 1, 3 do
if rgp == '' then
if tonumber(dect[i]) > 255 then -- 4A, 4b, 4c
err = err .. '8'
end
inpt[i] = format('%02X', dect[i])
else -- rgp = '%%%' -- 4d
if rgp ~= '%%%' then
err = err .. '7' -- (6) not three '%'
end
if tonumber(dect[i]) > 100 then -- 4d
err = err .. '9'
end
dect[i + 3] = floor(dect[i] * 255 / 100 + .5)
inpt[i] = format('%02X', dect[i + 3])
end
end -- for
if fno == 's' -- shortening required ?
and sub(inpt[1], 1, 1) == sub(inpt[1], 2, 2)
and sub(inpt[2], 1, 1) == sub(inpt[2], 2, 2)
and sub(inpt[3], 1, 1) == sub(inpt[3], 2, 2) then
inpt[1] = sub(inpt[1], 1, 1)
inpt[2] = sub(inpt[2], 1, 1)
inpt[3] = sub(inpt[3], 1, 1)
end -- shorten #rrggbb to #rgb
end -- if #nhs
end -- if #num
--[[
err: string, indicates parsing errors that may have been encountered:
'1': non-numeric or non-hexadecimal characters
'2': '(' or '#' occurs at non-first position
'3': separator (or separator combination}
'4': parm2 input wrong function code
'5': decimal point error
'6': % sign error
'7': not three '%'
'8': not all decimal color codes are < 256
'9': more than 100%
inpt: table of 6 strings, contains 3 trimmed parameters after their uppercase versions
dect: table of 3 decimal values
num: string, contains all numeric bytes
hex: string, contains all numeric plus hexadecimal bytes
nhs: string, contains all numeric plus hexadecimal bytes plus inbetween slashes
rgp: string, may contain three '%' from rgb() notation
--]]
--[[ Only for tests:
if fnc == '4' then
return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc
.. ', '.. inpt[1]
.. ', '.. num .. '~' .. hex .. '~' .. nhs
.. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3])
.. ', ' .. rgp
.. ', ' .. inpt[1] .. '"' .. inpt[2] .. '"' .. inpt[3]
else
return 'err=' .. err .. ', fn=' .. fna .. fno .. fnr .. fnc
.. ', '.. inpt[1]
.. ', '.. num .. '~' .. hex .. '~' .. nhs
.. ', '.. tostring(dect[1]) .. "'" .. tostring(dect[2]) .. "'" .. tostring(dect[3])
.. ', '.. rgp
end
--]]
if err ~= '' then
return 'Error = ' .. err
elseif fnc == '1' then
return inpt[1] .. '<sub>h</sub>'
elseif fnc == '2' then
return tostring(dect[1]) .. '<sub>d</sub>'
elseif fnc == '3' then
return sp0 .. dect[1] .. sp1 .. dect[2] .. sp1 .. dect[3] .. sp3
elseif fnc == '4' then
return '#'-- leading '#' HTML-escaped against MediaWiki reinterpretation
.. inpt[1] .. inpt[2] .. inpt[3]
end
end -- function xconv
--------------------------------------------------------------------------------
-- Convert hexadecimal value (from 0 to FFFFFFFFFFF) to decimal value(from 0 to 17592186044415)
function p.h2d(frame)
local gprm = frame.args -- global parms
return tonumber(gprm[1], 16) or ''
end -- function h2d
--------------------------------------------------------------------------------
-- Convert decimal value (from 0 to 17592186044415) to hexadecimal value(from 0 to FFFFFFFFFFF)
function p.d2h(frame)
local gprm = frame.args -- global parms
local value = tonumber(gprm[1]) or 0
local width = min(max(tonumber(gprm[2]) or 1, 1), 16)
return format('%0' .. tostring(width) .. 'X', value)
end -- function d2h
--------------------------------------------------------------------------------
return p
pin4hh35xqzfvjbk8i9ozemliaa9ovm
Tempilet:See also/styles.css
10
1454
10999
2024-08-27T08:54:24Z
commons>TheDJ
0
use horizontal padding, instead of cramming everything on top of each other.
10999
sanitized-css
text/css
/* Template:See also */
.see-also {
background: var(--background-color-interactive-subtle,#f8f9fa);
margin: 1em 0;
border: 1px solid var(--border-color-subtle,#c8ccd1);
padding: 2px;
color: var(--color-base, #202122);
clear: left;
overflow: hidden; /* force new block formatting context, so we can fit next to infoboxes */
}
/* {{Protected}} */
qvoitiur2qwdni24go06947ksrkgtvr
11000
10999
2026-08-25T23:38:41Z
RAPTOR7762
18
1 revision imported from [[:commons:Template:See_also/styles.css]]
10999
sanitized-css
text/css
/* Template:See also */
.see-also {
background: var(--background-color-interactive-subtle,#f8f9fa);
margin: 1em 0;
border: 1px solid var(--border-color-subtle,#c8ccd1);
padding: 2px;
color: var(--color-base, #202122);
clear: left;
overflow: hidden; /* force new block formatting context, so we can fit next to infoboxes */
}
/* {{Protected}} */
qvoitiur2qwdni24go06947ksrkgtvr
Module:Message box/mbox.css
828
1455
11001
2026-07-30T12:26:57Z
commons>Ebrahim
0
minor code format improve
11001
sanitized-css
text/css
.messagebox {
margin: 4px 0;
width: auto;
border-collapse: collapse;
border: 2px solid var(--border-color-progressive, #6485d1);
background-color: var(--background-color-neutral-subtle, #fbfcff);
color: var(--color-base, #202122);
box-sizing: border-box;
border-inline-start-width: 8px;
}
.messagebox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.mbox-warning, .mbox-speedy {
border: 2px solid var(--border-color-error, #b22222);
background: var(--background-color-error-subtle, #ffdbdb);
border-inline-start-width: 8px;
}
.mbox-serious, .mbox-delete, .mbox-stop {
border: 2px solid var(--border-color-error, #b22222);
border-inline-start-width: 8px;
}
.mbox-issue, .mbox-content {
border: 2px solid #f28500;
background:var(--background-color-warning-subtle, #ffe);
border-inline-start-width: 8px;
}
.mbox-query, .mbox-style {
border: 2px solid #f4c430;
background: var(--background-color-warning-subtle, #ffe);
border-inline-start-width: 8px;
}
.mbox-shit {
border: 2px solid #960;
border-inline-start-width: 8px;
}
.mbox-license {
border: 2px solid #88a;
border-inline-start-width: initial;
}
.mbox-legal {
border: 2px solid var(--border-color-notice, #666);
background: var(--background-color-base, #fff);
border-inline-start-width: 8px;
}
.mbox-honor {
border: 2px solid #ca3;
background: var(--background-color-warning-subtle, #fcf4db);
border-inline-start-width: 8px;
}
.mbox-growth {
border: 2px solid #8d4;
background:var(--background-color-success-subtle, #d5fdf4);
border-inline-start-width: 8px;
}
.mbox-move {
border: 2px solid #93c;
border-inline-start-width: 8px;
}
.mbox-protection, .mbox-message {
border: 2px solid var(--border-color-base, #aaa);
border-inline-start-width: 8px;
}
.messagebox .mbox-text {
border: none;
padding: 0.25em 0.9em;
width: 100%;
}
.messagebox .mbox-image {
border: none;
padding-top: 2px;
padding-bottom: 2px;
padding-inline-start: 0.9em;
padding-inline-end: 0;
text-align: center;
}
.messagebox .mbox-imageright {
border: none;
padding-top: 2px;
padding-bottom: 2px;
padding-inline-start: 0;
padding-inline-end: 0.9em;
text-align: center;
}
/* An empty narrow cell */
.messagebox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.messagebox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.messagebox {
margin: 4px 10%;
}
.messagebox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
/** T367463 */
body.skin--responsive table.messagebox img {
max-width: none !important;
}
bpj5ev2w3xohrs4ixzt2v4aln2v4zxk
11002
11001
2026-08-25T23:38:41Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:Message_box/mbox.css]]
11001
sanitized-css
text/css
.messagebox {
margin: 4px 0;
width: auto;
border-collapse: collapse;
border: 2px solid var(--border-color-progressive, #6485d1);
background-color: var(--background-color-neutral-subtle, #fbfcff);
color: var(--color-base, #202122);
box-sizing: border-box;
border-inline-start-width: 8px;
}
.messagebox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.mbox-warning, .mbox-speedy {
border: 2px solid var(--border-color-error, #b22222);
background: var(--background-color-error-subtle, #ffdbdb);
border-inline-start-width: 8px;
}
.mbox-serious, .mbox-delete, .mbox-stop {
border: 2px solid var(--border-color-error, #b22222);
border-inline-start-width: 8px;
}
.mbox-issue, .mbox-content {
border: 2px solid #f28500;
background:var(--background-color-warning-subtle, #ffe);
border-inline-start-width: 8px;
}
.mbox-query, .mbox-style {
border: 2px solid #f4c430;
background: var(--background-color-warning-subtle, #ffe);
border-inline-start-width: 8px;
}
.mbox-shit {
border: 2px solid #960;
border-inline-start-width: 8px;
}
.mbox-license {
border: 2px solid #88a;
border-inline-start-width: initial;
}
.mbox-legal {
border: 2px solid var(--border-color-notice, #666);
background: var(--background-color-base, #fff);
border-inline-start-width: 8px;
}
.mbox-honor {
border: 2px solid #ca3;
background: var(--background-color-warning-subtle, #fcf4db);
border-inline-start-width: 8px;
}
.mbox-growth {
border: 2px solid #8d4;
background:var(--background-color-success-subtle, #d5fdf4);
border-inline-start-width: 8px;
}
.mbox-move {
border: 2px solid #93c;
border-inline-start-width: 8px;
}
.mbox-protection, .mbox-message {
border: 2px solid var(--border-color-base, #aaa);
border-inline-start-width: 8px;
}
.messagebox .mbox-text {
border: none;
padding: 0.25em 0.9em;
width: 100%;
}
.messagebox .mbox-image {
border: none;
padding-top: 2px;
padding-bottom: 2px;
padding-inline-start: 0.9em;
padding-inline-end: 0;
text-align: center;
}
.messagebox .mbox-imageright {
border: none;
padding-top: 2px;
padding-bottom: 2px;
padding-inline-start: 0;
padding-inline-end: 0.9em;
text-align: center;
}
/* An empty narrow cell */
.messagebox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.messagebox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.messagebox {
margin: 4px 10%;
}
.messagebox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
/** T367463 */
body.skin--responsive table.messagebox img {
max-width: none !important;
}
bpj5ev2w3xohrs4ixzt2v4aln2v4zxk
Module:TNT/config
828
1456
11003
2026-07-21T03:07:56Z
commons>Fdsdsfsdf
0
[[Special:MyLanguage/COM:AES|←]]Created page with 'local p = {}; -- The tracking category name for global TemplateData pages located on Commons -- under "Data:Templatedata/" instead of "Data:TemplateData/", -- defaults to `"Templates using legacy global TemplateData table name"` -- when not set; set to `false` to disable all categorisation p.legacyTemplateDataCategoryName = nil; -- Whether to add the language subtag to the template name using {{#translation:}}, -- defaults to `false` p...'
11003
Scribunto
text/plain
local p = {};
-- The tracking category name for global TemplateData pages located on Commons
-- under "Data:Templatedata/" instead of "Data:TemplateData/",
-- defaults to `"Templates using legacy global TemplateData table name"`
-- when not set; set to `false` to disable all categorisation
p.legacyTemplateDataCategoryName = nil;
-- Whether to add the language subtag to the template name using {{#translation:}},
-- defaults to `false`
p.translatableCategoryLink = true;
return p;
feifiyrqk27bj288o6etsyyn8h6qanf
11004
11003
2026-08-25T23:38:41Z
RAPTOR7762
18
1 revision imported from [[:commons:Module:TNT/config]]
11003
Scribunto
text/plain
local p = {};
-- The tracking category name for global TemplateData pages located on Commons
-- under "Data:Templatedata/" instead of "Data:TemplateData/",
-- defaults to `"Templates using legacy global TemplateData table name"`
-- when not set; set to `false` to disable all categorisation
p.legacyTemplateDataCategoryName = nil;
-- Whether to add the language subtag to the template name using {{#translation:}},
-- defaults to `false`
p.translatableCategoryLink = true;
return p;
feifiyrqk27bj288o6etsyyn8h6qanf
MediaWiki:Protectedpagetext
8
1457
11007
2022-05-08T17:43:24Z
en>Izno
0
/* top */add mw-parser-output wrapper in preparation for TemplateStyles in [[Module:Message box]]
11007
wikitext
text/x-wiki
<div class="mw-parser-output">
__NOTOC__{{#switch:{{CASCADINGSOURCES}}
| {{FULLPAGENAME}}|= {{#ifexist: Template:Editnotices/Protection/{{FULLPAGENAME}}
| {{Template:Editnotices/Protection/{{FULLPAGENAME}}|$1|$2}}
| {{#ifeq: {{#titleparts:{{FULLPAGENAME}}|1|1}} | Special:Upload
| {{Generic image names|protected}}
| {{#switch: $1
| protect | editprotected = {{protected page text/full|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Fully protected -->
| templateeditor = {{protected page text/template|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Template protected -->
| extendedconfirmed = {{protected page text/extendedconfirmed|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Extendedconfirmed protected -->
| #default = {{protected page text/semi|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Semi-protected -->
}}{{#switch:$2|edit|create={{editnotice load|notice action = view}}}}
}}
|#default = <!-- defer to MediaWiki:Cascadeprotected -->
}}
}}
</div>
58ya3abftxsz3iyo7z84w3qg6cko5ic
11008
11007
2026-08-26T11:32:47Z
RAPTOR7762
18
1 revision imported from [[:en:MediaWiki:Protectedpagetext]]
11007
wikitext
text/x-wiki
<div class="mw-parser-output">
__NOTOC__{{#switch:{{CASCADINGSOURCES}}
| {{FULLPAGENAME}}|= {{#ifexist: Template:Editnotices/Protection/{{FULLPAGENAME}}
| {{Template:Editnotices/Protection/{{FULLPAGENAME}}|$1|$2}}
| {{#ifeq: {{#titleparts:{{FULLPAGENAME}}|1|1}} | Special:Upload
| {{Generic image names|protected}}
| {{#switch: $1
| protect | editprotected = {{protected page text/full|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Fully protected -->
| templateeditor = {{protected page text/template|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Template protected -->
| extendedconfirmed = {{protected page text/extendedconfirmed|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Extendedconfirmed protected -->
| #default = {{protected page text/semi|$1|$2|talk-protected={{#if:{{PROTECTIONLEVEL:edit|{{TALKPAGENAME}}}}|true|false}}}} <!-- Semi-protected -->
}}{{#switch:$2|edit|create={{editnotice load|notice action = view}}}}
}}
|#default = <!-- defer to MediaWiki:Cascadeprotected -->
}}
}}
</div>
58ya3abftxsz3iyo7z84w3qg6cko5ic
MediaWiki mossa:Protectedpagetext
9
1458
11011
2025-12-24T16:58:19Z
en>Andrybak
0
/* Links to editnotices for template editors and page movers */ reply
11011
wikitext
text/x-wiki
{{Talk header}}
{{User:MiszaBot/config
| archive = MediaWiki talk:Protectedpagetext/Archive %(counter)d
| counter = 1
| algo = old(90d)
| maxarchivesize = 150k
| archiveheader = {{Talk archive navigation}}
| minthreadstoarchive = 2
| minthreadsleft = 5
}}
{{Interface explanation|[[{{SUBJECTPAGENAME}}]] is an [[WP:Editnotice|edit notice]] shown to a user attempting to edit any [[WP:PP|protected page]], if the user doesn't have permission to do so.}}
{{tmbox|text=Most of the code used in this message has been migrated to [[Template:Protected page text]] to ease maintenance.}}
== Protected edit request on 11 July 2021 ==
{{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}}
Make sure the other protected notice [if the page is protected again by admistrators, not the CSS/JS/JSON message] is removed because the page is already protected no matter what. [[User:أحمدمحمدرمضانسعيد|أحمدمحمدرمضانسعيد]] Day 1/30 of editing 17 times a day {{#ifeq:{{FULLPAGENAME}}|User talk:أحمدمحمدرمضانسعيد|([[User talk:أحمدمحمدرمضانسعيد#top|talk]])|([[User talk:أحمدمحمدرمضانسعيد|talk]])}} 08:41, 11 July 2021 (UTC)
:{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request. — [[User:Xaosflux|<span style="color:#FF9933; font-weight:bold; font-family:monotype;">xaosflux</span>]] <sup>[[User talk:Xaosflux|<span style="color:#009933;">Talk</span>]]</sup> 11:32, 11 July 2021 (UTC)
== Someone did something ==
Someone replaced the edit with $2 [[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:34, 1 April 2022 (UTC)
:{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request.[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:53, 1 April 2022 (UTC)
== Semi-protected edit request on 1 April 2022 ==
{{edit semi-protected|MediaWiki:Protectedpagetext|answered=yes}}
Someone replaced the edit word with $2 I need to replace that with edit[[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:35, 1 April 2022 (UTC)
:it was April 1st what were you expecting buddy [[User:Usersnipedname|Usersnipedname]] ([[User talk:Usersnipedname|talk]]) 05:33, 28 March 2024 (UTC)
::The joke seems to have run its course. [[User:Testtubewaltz|Testtubewaltz]] ([[User talk:Testtubewaltz|talk]]) 03:51, 17 October 2025 (UTC)
{{notdone}}, what are you requesting?[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:39, 1 April 2022 (UTC)
== Protected edit request on 14 December 2025 ==
{{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}}
Is it safe yet to implement the changes I made in [[/sandbox]] (modelled off of [[MediaWiki:Protectedinterface]])? Since user CSS/JS(ON) pages are already automatically interface-protected, it's redundant to display another protection message if the page is also full-, template-, extended-confirmed- or semi-protected by an administrator. [[User:2600 etc|2600 etc]] ([[User talk:2600 etc|talk]]) 23:22, 14 December 2025 (UTC)
: First off the links in the comment in the sandbox are broken. Second off, is this really necessary? The situation where a page is both a user CSS/JS?/JSON page and manually protected seems rare enough I'm inclined to not care. [[User:Pppery|* Pppery *]] [[User talk:Pppery|<sub style="color:#800000">it has begun...</sub>]] 04:53, 15 December 2025 (UTC)
== Links to editnotices for template editors and page movers ==
As a non-admin, I cannot edit [[Portal:Current events]]. As a template editor, I can edit [[Template:Editnotices/Page/Portal:Current events]]. However, if I view the source of [[Portal:Current events]], I don't see a link to [[Template:Editnotices/Page/Portal:Current events]], because it is actually being loaded by [[MediaWiki:Protectedpagetext]] through the redirect {{noredirect|Template:Editnotices/Protection/Portal:Current events}}, instead of the "usual" way the editnotices are loaded by [[Template:Editnotice load]].
It would be nice to also have these links to editnotices here in [[MediaWiki:Protectedpagetext]]. Maybe this page could even use {{tlx|Editnotice load/core|pagenotice{{=}}Template:Editnotices/Protection/<nowiki>{{FULLPAGENAME}}</nowiki>}}, but the /core template does not support taking <code>$1</code> and <code>$2</code> as parameters and passing them to the protection editnotice.{{Efn|text=As far as I can tell from [https://en.wikipedia.org/w/index.php?search=insource%3A%2F%5C%7B%5C%7B%5C%7B%5B12%5D%2F+subpageof%3AEditnotices&title=Special%3ASearch&profile=advanced&fulltext=1&advancedSearch-current=%7B%22fields%22%3A%7B%22subpageof%22%3A%22Editnotices%22%7D%7D&ns10=1 a search], the only users of these positional parameters are [[Template:Editnotices/Protection/Wikipedia:Requests for adminship]] and [[Template:Editnotices/Protection/Wikipedia:Requested moves]].}} Alternatively, the wikitext which generates the links (parts of [[Template:Editnotice load/core]] with the CSS classes <code>sysop-show templateeditor-show extendedmover-show</code>) could be adapted here without using the /core template.
<s>Another, more weird example is [[Main Page]]: I am allowed to edit [[Template:Editnotices/Page/Main Page]], but because I am not an admin, I never see the editnotice, so there is no "opportunity" to show the links to it to me.</s> {{small|Not an example of what's being discussed, see below. —[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC)}}
This applies to users in the [[Wikipedia:Page mover|page mover]] and the [[Wikipedia:Template editor|template editor]] groups, both of which are allowed to edit [[Wikipedia:Editnotice|editnotices]]. This also applies to the page [[MediaWiki:Cascadeprotected]].
{{reflist-talk|title=Footnotes|group=lower-alpha}} —[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 15:24, 24 December 2025 (UTC)
: A protection notice (under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]]) is not the same thing as an edit notice (under [[Special:PrefixIndex/Template:Editnotices/Page/|Template:Editnotices/Page/]]). It's used for cases where the default message is somehow inappropriate, often for cases where people somehow wind up trying to edit a protected template when trying to edit an article, and then the usual "submit an edit request" results in misplaced edit requests on the template's talk page. I don't know that also displaying the edit notice (if one also exists) alongside the custom protection notice would always be appropriate (and when people do want that, they could add <syntaxhighlight lang=wikitext inline>{{#switch:{{{2}}}|edit|create={{editnotice load|notice action = view}}}}</syntaxhighlight> into their custom protection notice), and linking to one when it's not displayed would be confusing and probably pointless.{{pb}}Similarly, I don't know how useful it would be to have a "Protection notice" link from every protected page. Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice. For custom notices, if only shown to people who could edit the notice, 🤷 I guess having such a link would be unlikely to do harm. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 16:46, 24 December 2025 (UTC)
::{{tq|1=Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice.}} do you mean if a red link is shown? I think it makes sense showing the link only when the custom protection notice exists already, because it is a rare use case – just 52 subpages exist right now under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]].
::
:: As for confusion between the two types – thank you for the clarification, it's helpful. I indeed confused non-existent [[Template:Editnotices/Protection/Main Page]] with [[Template:Editnotices/Page/Main Page]] in the process of writing the message above. —[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC)
ofynzbzw6jvxgo42oy5d1ghjzq1y693
11012
11011
2026-08-26T11:32:48Z
RAPTOR7762
18
1 revision imported from [[:en:MediaWiki_talk:Protectedpagetext]]
11011
wikitext
text/x-wiki
{{Talk header}}
{{User:MiszaBot/config
| archive = MediaWiki talk:Protectedpagetext/Archive %(counter)d
| counter = 1
| algo = old(90d)
| maxarchivesize = 150k
| archiveheader = {{Talk archive navigation}}
| minthreadstoarchive = 2
| minthreadsleft = 5
}}
{{Interface explanation|[[{{SUBJECTPAGENAME}}]] is an [[WP:Editnotice|edit notice]] shown to a user attempting to edit any [[WP:PP|protected page]], if the user doesn't have permission to do so.}}
{{tmbox|text=Most of the code used in this message has been migrated to [[Template:Protected page text]] to ease maintenance.}}
== Protected edit request on 11 July 2021 ==
{{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}}
Make sure the other protected notice [if the page is protected again by admistrators, not the CSS/JS/JSON message] is removed because the page is already protected no matter what. [[User:أحمدمحمدرمضانسعيد|أحمدمحمدرمضانسعيد]] Day 1/30 of editing 17 times a day {{#ifeq:{{FULLPAGENAME}}|User talk:أحمدمحمدرمضانسعيد|([[User talk:أحمدمحمدرمضانسعيد#top|talk]])|([[User talk:أحمدمحمدرمضانسعيد|talk]])}} 08:41, 11 July 2021 (UTC)
:{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request. — [[User:Xaosflux|<span style="color:#FF9933; font-weight:bold; font-family:monotype;">xaosflux</span>]] <sup>[[User talk:Xaosflux|<span style="color:#009933;">Talk</span>]]</sup> 11:32, 11 July 2021 (UTC)
== Someone did something ==
Someone replaced the edit with $2 [[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:34, 1 April 2022 (UTC)
:{{not done}} it is not clear what edit you want to make, please mock up your suggested change in [[MediaWiki talk:Protectedpagetext/sandbox]] then reactivate the edit request.[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:53, 1 April 2022 (UTC)
== Semi-protected edit request on 1 April 2022 ==
{{edit semi-protected|MediaWiki:Protectedpagetext|answered=yes}}
Someone replaced the edit word with $2 I need to replace that with edit[[User:HelpmePlsWhy|HelpmePlsWhy]] ([[User talk:HelpmePlsWhy|talk]]) 17:35, 1 April 2022 (UTC)
:it was April 1st what were you expecting buddy [[User:Usersnipedname|Usersnipedname]] ([[User talk:Usersnipedname|talk]]) 05:33, 28 March 2024 (UTC)
::The joke seems to have run its course. [[User:Testtubewaltz|Testtubewaltz]] ([[User talk:Testtubewaltz|talk]]) 03:51, 17 October 2025 (UTC)
{{notdone}}, what are you requesting?[[User:Pavlov2|Pavlov2]] ([[User talk:Pavlov2|talk]]) 17:39, 1 April 2022 (UTC)
== Protected edit request on 14 December 2025 ==
{{edit fully-protected|MediaWiki:Protectedpagetext|answered=yes}}
Is it safe yet to implement the changes I made in [[/sandbox]] (modelled off of [[MediaWiki:Protectedinterface]])? Since user CSS/JS(ON) pages are already automatically interface-protected, it's redundant to display another protection message if the page is also full-, template-, extended-confirmed- or semi-protected by an administrator. [[User:2600 etc|2600 etc]] ([[User talk:2600 etc|talk]]) 23:22, 14 December 2025 (UTC)
: First off the links in the comment in the sandbox are broken. Second off, is this really necessary? The situation where a page is both a user CSS/JS?/JSON page and manually protected seems rare enough I'm inclined to not care. [[User:Pppery|* Pppery *]] [[User talk:Pppery|<sub style="color:#800000">it has begun...</sub>]] 04:53, 15 December 2025 (UTC)
== Links to editnotices for template editors and page movers ==
As a non-admin, I cannot edit [[Portal:Current events]]. As a template editor, I can edit [[Template:Editnotices/Page/Portal:Current events]]. However, if I view the source of [[Portal:Current events]], I don't see a link to [[Template:Editnotices/Page/Portal:Current events]], because it is actually being loaded by [[MediaWiki:Protectedpagetext]] through the redirect {{noredirect|Template:Editnotices/Protection/Portal:Current events}}, instead of the "usual" way the editnotices are loaded by [[Template:Editnotice load]].
It would be nice to also have these links to editnotices here in [[MediaWiki:Protectedpagetext]]. Maybe this page could even use {{tlx|Editnotice load/core|pagenotice{{=}}Template:Editnotices/Protection/<nowiki>{{FULLPAGENAME}}</nowiki>}}, but the /core template does not support taking <code>$1</code> and <code>$2</code> as parameters and passing them to the protection editnotice.{{Efn|text=As far as I can tell from [https://en.wikipedia.org/w/index.php?search=insource%3A%2F%5C%7B%5C%7B%5C%7B%5B12%5D%2F+subpageof%3AEditnotices&title=Special%3ASearch&profile=advanced&fulltext=1&advancedSearch-current=%7B%22fields%22%3A%7B%22subpageof%22%3A%22Editnotices%22%7D%7D&ns10=1 a search], the only users of these positional parameters are [[Template:Editnotices/Protection/Wikipedia:Requests for adminship]] and [[Template:Editnotices/Protection/Wikipedia:Requested moves]].}} Alternatively, the wikitext which generates the links (parts of [[Template:Editnotice load/core]] with the CSS classes <code>sysop-show templateeditor-show extendedmover-show</code>) could be adapted here without using the /core template.
<s>Another, more weird example is [[Main Page]]: I am allowed to edit [[Template:Editnotices/Page/Main Page]], but because I am not an admin, I never see the editnotice, so there is no "opportunity" to show the links to it to me.</s> {{small|Not an example of what's being discussed, see below. —[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC)}}
This applies to users in the [[Wikipedia:Page mover|page mover]] and the [[Wikipedia:Template editor|template editor]] groups, both of which are allowed to edit [[Wikipedia:Editnotice|editnotices]]. This also applies to the page [[MediaWiki:Cascadeprotected]].
{{reflist-talk|title=Footnotes|group=lower-alpha}} —[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 15:24, 24 December 2025 (UTC)
: A protection notice (under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]]) is not the same thing as an edit notice (under [[Special:PrefixIndex/Template:Editnotices/Page/|Template:Editnotices/Page/]]). It's used for cases where the default message is somehow inappropriate, often for cases where people somehow wind up trying to edit a protected template when trying to edit an article, and then the usual "submit an edit request" results in misplaced edit requests on the template's talk page. I don't know that also displaying the edit notice (if one also exists) alongside the custom protection notice would always be appropriate (and when people do want that, they could add <syntaxhighlight lang=wikitext inline>{{#switch:{{{2}}}|edit|create={{editnotice load|notice action = view}}}}</syntaxhighlight> into their custom protection notice), and linking to one when it's not displayed would be confusing and probably pointless.{{pb}}Similarly, I don't know how useful it would be to have a "Protection notice" link from every protected page. Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice. For custom notices, if only shown to people who could edit the notice, 🤷 I guess having such a link would be unlikely to do harm. [[User:Anomie|Anomie]][[User talk:Anomie|⚔]] 16:46, 24 December 2025 (UTC)
::{{tq|1=Your own confusion suggests that it might result in unnecessary and incorrect overrides of the standard protection notice.}} do you mean if a red link is shown? I think it makes sense showing the link only when the custom protection notice exists already, because it is a rare use case – just 52 subpages exist right now under [[Special:PrefixIndex/Template:Editnotices/Protection/|Template:Editnotices/Protection/]].
::
:: As for confusion between the two types – thank you for the clarification, it's helpful. I indeed confused non-existent [[Template:Editnotices/Protection/Main Page]] with [[Template:Editnotices/Page/Main Page]] in the process of writing the message above. —[[User:Andrybak|andrybak]] ([[User talk:Andrybak|talk]]) 16:58, 24 December 2025 (UTC)
ofynzbzw6jvxgo42oy5d1ghjzq1y693
Tempilet:Protected page text
10
1459
11013
2025-12-20T16:49:14Z
en>Pppery
0
GIve template links in module namespace
11013
wikitext
text/x-wiki
<includeonly><div class="mw-parser-output"><!-- TODO? should probably try to restrain direct use of mw-parser-output to MW space but I'm being lazy and most of the gunk is in this template --><templatestyles src="Protected page text/styles.css"/>{{fmbox
| id = mw-protectedpagetext
| type = system
| image = none
| style = border-style:none;
| text =
{{mbox
| type = protection
| textstyle = font-weight:bold; font-size:130%;
| image = [[File:{{{image|Full-protection-shackle.svg}}}|40x40px|link=|alt=]]
| text = <div style="text-align: center;">{{{protection-message}}}</div>
}}
<div class="pptext-whywhat">
<div class="pptext-why">
<h2>Why is the page protected?</h2>
<ul>
<li>{{#ifexist:{{{title|{{FULLPAGENAME}}}}}|{{{protection-reason|}}}|{{{protection-reason-salt|Some titles are [[Wikipedia:Protected titles|permanently protected]] from creation because they are deemed unsuitable for inclusion on Wikipedia, because they are [[Wikipedia:Spam|spam]] or [[Wikipedia:Vandalism|vandalism]], or because they violate the [[Wikipedia:Deletion policy|deletion policy]]. The reason for this may be recorded in the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deletion log].}}}}}</li>
<li>{{{log-text|The reason for protection can be found in the [{{fullurl:Special:Log|type=protect&page={{urlencode:{{#ifeq:{{NAMESPACENUMBER}}|-1|{{#titleparts:{{{title|{{FULLPAGENAME}}}}}|0|2}}|{{{title|{{FULLPAGENAME}}}}}}}}}}} protection log]. If there are no relevant entries in the protection log, the page may have been moved after being protected.}}}
</li>
</ul>
</div>
<div class="pptext-what">
<h2>What can I do?</h2>
<ul>
{{#if: {{{login-message|}}}
| <li>If you have a user account, [[Special:UserLogin|log in]] first. If you do not yet have an account, you may [{{fullurl:Special:UserLogin|type=signup&campaign=semiprotectednotice}} create one]; after [[Wikipedia:User access levels#Autoconfirmed users|4 days and 10 edits]], you will be able to edit semi-protected pages.</li>
}}{{#ifexist:{{{title|{{FULLPAGENAME}}}}}|
{{#ifeq: {{#if:{{{main-page-links|}}}|{{{title|{{FULLPAGENAME}}}}}}} | Main Page
|
<li class="anonymous-show">[[Wikipedia:Why create an account?|Register for an account]] if you don't already have one.</li>
<li>Visit the [[Wikipedia:Sandbox|sandbox]] to make test edits.</li>
<li>Check out the [[Wikipedia:Tutorial|tutorial]] to learn more about editing.</li>
<li>[[Wikipedia:Main Page/Errors|Report errors on the Main Page]].</li>
| {{#switch: {{#if:{{{template-links|}}}|{{NAMESPACE}}}} | Template|Module=
{{#switch:
{{#ifexist: {{{title|{{FULLPAGENAME}}}}}/doc
| doc
}}{{#ifexist: {{{title|{{FULLPAGENAME}}}}}/sandbox
| sandbox
}}
| doc = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – which may be freely edited.</li>
| sandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – which may be freely edited.</li>
| docsandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – and a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – both may be freely edited.</li>
}}
}}{{#ifexist: {{{title|{{FULLPAGENAME}}}}}
| {{#ifeq: {{NAMESPACE}} | {{TALKSPACE}}
|
| {{#if: {{TALKPAGENAME}}| {{#if:{{{notalk|}}}||
<li>[[{{TALKPAGENAME}}|Discuss this page]] with others.</li>
}}}}
<li>For move-protected pages, see [[Wikipedia:requested moves|requested moves]].</li>
}}
}}
{{#if: {{{hide-requestlower|}}}||<li>{{{requestlower|[[Wikipedia:Requests for page protection#Current requests for reduction in protection level|Request that the page's protection level be reduced]].</li>}}}}}
<li>[[Help:Introduction|Find out more about how to get started editing Wikipedia]].</li>
{{#if: {{TALKPAGENAME}}
| {{#ifeq: {{{talk-protected|false}}} | true |
<li>If you have noticed an error or have a suggestion for a '''simple, non-controversial''' change, please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed. If the issue has not been discussed yet, you can submit an edit request at [[Wikipedia:Requests for page protection/Edit]]. Make sure to clearly describe which page your request is about, and which change exactly you are requesting.</li>|
<li>If you have noticed an error or have a suggestion for a '''simple, non-controversial change''', you can submit an edit request by clicking the button below and following the instructions. {{{who-can-edit}}} may then make the change on your behalf. Please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed.</li>
<li class="pptext-submit"><div>
{{Submit an edit request|type={{{request-type}}}}}
</div></li>
}}
}}
}}
|
<li>If you believe this page was deleted in violation of the [[Wikipedia:Deletion policy|deletion policy]], then you may contact the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deleting administrator] or raise the matter of the deletion at [[Wikipedia:Deletion review|deletion review]]. Be sure to give an explanation as to why you think the page does not violate the deletion policy.</li>
<li>If the page you are creating is a different topic than the previously deleted page, you may request this page be created. Please ask for help on the [[Wikipedia:Administrators' noticeboard|administrators' noticeboard]] or by {{Submit an edit request/link|type={{{request-type}}}|display=opening an edit request}}, making sure to give a full reason why this page should be created. Be sure to specify the exact title (especially by [[Help:Link|linking]] it) of the page you are trying to create, and if it might be misunderstood (for example, an article with an unusual name), consider explaining briefly what you want to do.</li>
}}
<li>If you wrote any text, please save it temporarily to your device until you can {{#ifexist:{{{title|{{FULLPAGENAME}}}}}|edit|create}} this page.</li>
</ul>
</div>
</div>
}}</div></includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
fvcsvobfdz8vztd1w0mdpfahy5kkgg6
11014
11013
2026-08-26T11:32:48Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Protected_page_text]]
11013
wikitext
text/x-wiki
<includeonly><div class="mw-parser-output"><!-- TODO? should probably try to restrain direct use of mw-parser-output to MW space but I'm being lazy and most of the gunk is in this template --><templatestyles src="Protected page text/styles.css"/>{{fmbox
| id = mw-protectedpagetext
| type = system
| image = none
| style = border-style:none;
| text =
{{mbox
| type = protection
| textstyle = font-weight:bold; font-size:130%;
| image = [[File:{{{image|Full-protection-shackle.svg}}}|40x40px|link=|alt=]]
| text = <div style="text-align: center;">{{{protection-message}}}</div>
}}
<div class="pptext-whywhat">
<div class="pptext-why">
<h2>Why is the page protected?</h2>
<ul>
<li>{{#ifexist:{{{title|{{FULLPAGENAME}}}}}|{{{protection-reason|}}}|{{{protection-reason-salt|Some titles are [[Wikipedia:Protected titles|permanently protected]] from creation because they are deemed unsuitable for inclusion on Wikipedia, because they are [[Wikipedia:Spam|spam]] or [[Wikipedia:Vandalism|vandalism]], or because they violate the [[Wikipedia:Deletion policy|deletion policy]]. The reason for this may be recorded in the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deletion log].}}}}}</li>
<li>{{{log-text|The reason for protection can be found in the [{{fullurl:Special:Log|type=protect&page={{urlencode:{{#ifeq:{{NAMESPACENUMBER}}|-1|{{#titleparts:{{{title|{{FULLPAGENAME}}}}}|0|2}}|{{{title|{{FULLPAGENAME}}}}}}}}}}} protection log]. If there are no relevant entries in the protection log, the page may have been moved after being protected.}}}
</li>
</ul>
</div>
<div class="pptext-what">
<h2>What can I do?</h2>
<ul>
{{#if: {{{login-message|}}}
| <li>If you have a user account, [[Special:UserLogin|log in]] first. If you do not yet have an account, you may [{{fullurl:Special:UserLogin|type=signup&campaign=semiprotectednotice}} create one]; after [[Wikipedia:User access levels#Autoconfirmed users|4 days and 10 edits]], you will be able to edit semi-protected pages.</li>
}}{{#ifexist:{{{title|{{FULLPAGENAME}}}}}|
{{#ifeq: {{#if:{{{main-page-links|}}}|{{{title|{{FULLPAGENAME}}}}}}} | Main Page
|
<li class="anonymous-show">[[Wikipedia:Why create an account?|Register for an account]] if you don't already have one.</li>
<li>Visit the [[Wikipedia:Sandbox|sandbox]] to make test edits.</li>
<li>Check out the [[Wikipedia:Tutorial|tutorial]] to learn more about editing.</li>
<li>[[Wikipedia:Main Page/Errors|Report errors on the Main Page]].</li>
| {{#switch: {{#if:{{{template-links|}}}|{{NAMESPACE}}}} | Template|Module=
{{#switch:
{{#ifexist: {{{title|{{FULLPAGENAME}}}}}/doc
| doc
}}{{#ifexist: {{{title|{{FULLPAGENAME}}}}}/sandbox
| sandbox
}}
| doc = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – which may be freely edited.</li>
| sandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – which may be freely edited.</li>
| docsandbox = <li>This {{lcfirst:{{NAMESPACE}}}} has a [[Wikipedia:Template documentation|documentation]] page – [[{{{title|{{FULLPAGENAME}}}}}/doc]] – and a [[Wikipedia:Template test cases|sandbox]] page – [[{{{title|{{FULLPAGENAME}}}}}/sandbox]] – both may be freely edited.</li>
}}
}}{{#ifexist: {{{title|{{FULLPAGENAME}}}}}
| {{#ifeq: {{NAMESPACE}} | {{TALKSPACE}}
|
| {{#if: {{TALKPAGENAME}}| {{#if:{{{notalk|}}}||
<li>[[{{TALKPAGENAME}}|Discuss this page]] with others.</li>
}}}}
<li>For move-protected pages, see [[Wikipedia:requested moves|requested moves]].</li>
}}
}}
{{#if: {{{hide-requestlower|}}}||<li>{{{requestlower|[[Wikipedia:Requests for page protection#Current requests for reduction in protection level|Request that the page's protection level be reduced]].</li>}}}}}
<li>[[Help:Introduction|Find out more about how to get started editing Wikipedia]].</li>
{{#if: {{TALKPAGENAME}}
| {{#ifeq: {{{talk-protected|false}}} | true |
<li>If you have noticed an error or have a suggestion for a '''simple, non-controversial''' change, please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed. If the issue has not been discussed yet, you can submit an edit request at [[Wikipedia:Requests for page protection/Edit]]. Make sure to clearly describe which page your request is about, and which change exactly you are requesting.</li>|
<li>If you have noticed an error or have a suggestion for a '''simple, non-controversial change''', you can submit an edit request by clicking the button below and following the instructions. {{{who-can-edit}}} may then make the change on your behalf. Please check [[{{TALKPAGENAMEE}}|the talk page]] first in case the issue is already being discussed.</li>
<li class="pptext-submit"><div>
{{Submit an edit request|type={{{request-type}}}}}
</div></li>
}}
}}
}}
|
<li>If you believe this page was deleted in violation of the [[Wikipedia:Deletion policy|deletion policy]], then you may contact the [{{fullurl:Special:Log/delete|page={{urlencode:{{{title|{{FULLPAGENAME}}}}}}}}} deleting administrator] or raise the matter of the deletion at [[Wikipedia:Deletion review|deletion review]]. Be sure to give an explanation as to why you think the page does not violate the deletion policy.</li>
<li>If the page you are creating is a different topic than the previously deleted page, you may request this page be created. Please ask for help on the [[Wikipedia:Administrators' noticeboard|administrators' noticeboard]] or by {{Submit an edit request/link|type={{{request-type}}}|display=opening an edit request}}, making sure to give a full reason why this page should be created. Be sure to specify the exact title (especially by [[Help:Link|linking]] it) of the page you are trying to create, and if it might be misunderstood (for example, an article with an unusual name), consider explaining briefly what you want to do.</li>
}}
<li>If you wrote any text, please save it temporarily to your device until you can {{#ifexist:{{{title|{{FULLPAGENAME}}}}}|edit|create}} this page.</li>
</ul>
</div>
</div>
}}</div></includeonly><noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
fvcsvobfdz8vztd1w0mdpfahy5kkgg6
Tempilet:Protected page text/semi
10
1460
11015
2026-06-30T21:32:11Z
en>TechnoSquirrel69
0
Implementing [[Template talk:Protected page text#Protected edit request on 10 June 2026|fully protected edit request]] from [[User:Reconrabbit|Reconrabbit]]
11015
wikitext
text/x-wiki
{{protected page text
| image = Semi-protection-shackle.svg
| protection-message = This page is currently semi-protected so that only [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established]], [[Wikipedia:Why create an account?|registered users]] can {{{2}}} it.
| suggestions = yes
| protection-reason = While most articles can be edited by anyone, [[Wikipedia:Protection policy#Semi-protection|semi-protection]] is sometimes necessary to prevent [[Wikipedia:Vandalism|vandalism]] to popular pages.
| login-message = yes
| who-can-edit = An [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established user]]
| request-type = {{#if:{{yesno|{{{manual-editrequest|}}}}}|manual|semi}}
| attempted-action = {{{2}}}
| talk-protected = {{{talk-protected|false}}}
}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
2nq9zzrybrp6n0ysisi82w21dvxkxic
11016
11015
2026-08-26T11:32:48Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Protected_page_text/semi]]
11015
wikitext
text/x-wiki
{{protected page text
| image = Semi-protection-shackle.svg
| protection-message = This page is currently semi-protected so that only [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established]], [[Wikipedia:Why create an account?|registered users]] can {{{2}}} it.
| suggestions = yes
| protection-reason = While most articles can be edited by anyone, [[Wikipedia:Protection policy#Semi-protection|semi-protection]] is sometimes necessary to prevent [[Wikipedia:Vandalism|vandalism]] to popular pages.
| login-message = yes
| who-can-edit = An [[Wikipedia:User groups#Confirmed and autoconfirmed accounts|established user]]
| request-type = {{#if:{{yesno|{{{manual-editrequest|}}}}}|manual|semi}}
| attempted-action = {{{2}}}
| talk-protected = {{{talk-protected|false}}}
}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
2nq9zzrybrp6n0ysisi82w21dvxkxic
Tempilet:Protected page text/styles.css
10
1461
11017
2022-07-22T15:19:27Z
en>Xaosflux
0
fix
11017
sanitized-css
text/css
/* {{pp|small=y}} */
.pptext-whywhat h2 {
margin-top: 1em;
border-bottom: 0;
font-size: 130%;
font-weight: bold;
padding: 0.15em;
}
.pptext-submit {
list-style: none;
display: inline;
text-align: center;
}
.pptext-whywhat {
display: flex;
flex-wrap: wrap;
column-gap: 2em;
}
.pptext-whywhat > div {
flex: 1 1 400px;
}
79s3kzhhzgx1t3j569x0tc254t7s0qh
11018
11017
2026-08-26T11:32:49Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Protected_page_text/styles.css]]
11017
sanitized-css
text/css
/* {{pp|small=y}} */
.pptext-whywhat h2 {
margin-top: 1em;
border-bottom: 0;
font-size: 130%;
font-weight: bold;
padding: 0.15em;
}
.pptext-submit {
list-style: none;
display: inline;
text-align: center;
}
.pptext-whywhat {
display: flex;
flex-wrap: wrap;
column-gap: 2em;
}
.pptext-whywhat > div {
flex: 1 1 400px;
}
79s3kzhhzgx1t3j569x0tc254t7s0qh
Tempilet:Submit an edit request
10
1462
11019
2017-07-13T03:51:44Z
en>Xaosflux
0
Changed protection level for "[[Template:Submit an edit request]]": used in mediawiki interface ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite))
11019
wikitext
text/x-wiki
{{#invoke:Submit an edit request|button}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
fmz461vtigl3b81wdjepv19k95bs8u3
11020
11019
2026-08-26T11:32:49Z
RAPTOR7762
18
1 revision imported from [[:en:Template:Submit_an_edit_request]]
11019
wikitext
text/x-wiki
{{#invoke:Submit an edit request|button}}<noinclude>
{{documentation}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
fmz461vtigl3b81wdjepv19k95bs8u3
Module:Clickable button
828
1463
11023
2024-07-26T22:19:50Z
en>HouseBlaster
0
HouseBlaster moved page [[Module:Clickable button 2]] to [[Module:Clickable button]]: match with [[tm:Clickable button]]
11023
Scribunto
text/plain
-- This module implements {{clickable button 2}}.
local yesno = require('Module:Yesno')
local delink = require('Module:Delink')._delink
local p = {}
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- If first arg or a url is not provided,
-- but we have a second arg, make a button.
-- Otherwise, return nothing.
args.originalInput = args[1]
args[1] = delink({args[1]})
if args[1] == "" then
args[1] = nil
end
if not args[1] and not args.url then
if args[2] then
p.nolink = true
else
return ''
end
end
local data = p.makeLinkData(args)
local link = p.renderLink(args.originalInput, data)
local trackingCategories = p.renderTrackingCategories(args)
return link .. trackingCategories
end
function p.makeLinkData(args)
local data = {}
-- Get the link and display values,
-- and find whether we are outputting
-- a wikilink or a URL.
if args.url then
data.isUrl = true
data.link = args.url
if args[1] then
data.display = args[1]
elseif args[2] then
data.display = args[2]
else
data.display = args.url
p.urlisdisplay = true
end
else
data.isUrl = false
p.urlisdisplay = false
data.link = args[1]
if args[2] then
data.display = args[2]
else
data.display = args[1]
end
if args[1] and args[1]:find('http') then
data.isUrl = true
end
end
if yesno(args.link) == false then
p.nolink = true
end
-- Colours
-- For the merge with {{clickable button}}
local colour = args.color and args.color:lower()
-- Classes
local class = args.class and args.class:lower()
data.classes = {}
if class == 'ui-button-green'
or class == 'ui-button-blue'
or class == 'ui-button-red'
then
table.insert(
data.classes,
'submit ui-button ui-widget ui-state-default ui-corner-all'
.. ' ui-button-text-only ui-button-text'
)
else
table.insert(data.classes, 'mw-ui-button')
end
--If class is unset,
--then let color determine class
if not class then
if colour == 'blue' then
class = 'mw-ui-progressive'
elseif colour == 'red' then
class = 'mw-ui-destructive'
elseif colour == 'green' then
class = 'mw-ui-constructive'
end
end
if class then
table.insert(data.classes, class)
end
-- Styles
do
--[[
-- Check whether we are on the same page as we have specified in
-- args[1], but not if we are using a URL link, as then args[1] is only
-- a display value. If we are currently on the page specified in
-- args[1] make the button colour darker so that it stands out from
-- other buttons on the page.
--]]
local success, linkTitle, currentTitle
if not data.isUrl then
currentTitle = mw.title.getCurrentTitle()
success, linkTitle = pcall(mw.title.new, args[1])
elseif p.urlisdisplay then
currentTitle = mw.title.getCurrentTitle()
end
if success
and linkTitle
and mw.title.equals(currentTitle, linkTitle)
and not p.urlisdisplay
then
if class == 'ui-button-blue'
or class == 'mw-ui-progressive'
or class == 'mw-ui-constructive'
then
data.backgroundColor = '#2962CB'
data.color = '#fff'
elseif class == 'ui-button-green' then
data.backgroundColor = '#008B6D'
elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then
data.backgroundColor = '#A6170F'
else
data.backgroundColor = '#CCC'
data.color = '#666'
end
elseif p.urlisdisplay then
data.dummyLink = tostring(currentTitle)
end
-- Add user-specified styles.
data.style = args.style
end
return data
end
function p.renderLink(originalInput, data)
-- Render the display span tag.
local display
do
local displaySpan = mw.html.create('span')
for i, class in ipairs(data.classes or {}) do
displaySpan:addClass(class)
end
displaySpan
:css{
['background-color'] = data.backgroundColor,
color = data.color
}
if data.style then
displaySpan:cssText(data.style)
end
displaySpan:wikitext(data.display)
display = tostring(displaySpan)
end
-- Render the link
local link
if originalInput and originalInput:find('|') then
link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display)
elseif p.nolink then
if p.urlisdisplay then
link = string.format('[[%s|%s]]', data.dummyLink, display)
else
link = string.format('%s', display)
end
else
if data.isUrl then
link = string.format('[%s %s]', data.link, display)
else
link = string.format('[[%s |%s]]', data.link, display)
end
end
return string.format('<span class="plainlinks clickbutton">%s</span>', link)
end
function p.renderTrackingCategories(args)
if yesno(args.category) == false then
return ''
end
local class = args.class and args.class:lower()
if class == 'ui-button-green'
or class == 'ui-button-blue'
or class == 'ui-button-red'
then
return '[[Category:Pages using old style ui-button-color]]'
else
return ''
end
end
return p
2y4zqg2drz0jqpm59tyakc7koi33ehg
11024
11023
2026-08-26T11:32:49Z
RAPTOR7762
18
1 revision imported from [[:en:Module:Clickable_button]]
11023
Scribunto
text/plain
-- This module implements {{clickable button 2}}.
local yesno = require('Module:Yesno')
local delink = require('Module:Delink')._delink
local p = {}
function p.main(frame)
local getArgs = require('Module:Arguments').getArgs
local args = getArgs(frame)
return p._main(args)
end
function p._main(args)
-- If first arg or a url is not provided,
-- but we have a second arg, make a button.
-- Otherwise, return nothing.
args.originalInput = args[1]
args[1] = delink({args[1]})
if args[1] == "" then
args[1] = nil
end
if not args[1] and not args.url then
if args[2] then
p.nolink = true
else
return ''
end
end
local data = p.makeLinkData(args)
local link = p.renderLink(args.originalInput, data)
local trackingCategories = p.renderTrackingCategories(args)
return link .. trackingCategories
end
function p.makeLinkData(args)
local data = {}
-- Get the link and display values,
-- and find whether we are outputting
-- a wikilink or a URL.
if args.url then
data.isUrl = true
data.link = args.url
if args[1] then
data.display = args[1]
elseif args[2] then
data.display = args[2]
else
data.display = args.url
p.urlisdisplay = true
end
else
data.isUrl = false
p.urlisdisplay = false
data.link = args[1]
if args[2] then
data.display = args[2]
else
data.display = args[1]
end
if args[1] and args[1]:find('http') then
data.isUrl = true
end
end
if yesno(args.link) == false then
p.nolink = true
end
-- Colours
-- For the merge with {{clickable button}}
local colour = args.color and args.color:lower()
-- Classes
local class = args.class and args.class:lower()
data.classes = {}
if class == 'ui-button-green'
or class == 'ui-button-blue'
or class == 'ui-button-red'
then
table.insert(
data.classes,
'submit ui-button ui-widget ui-state-default ui-corner-all'
.. ' ui-button-text-only ui-button-text'
)
else
table.insert(data.classes, 'mw-ui-button')
end
--If class is unset,
--then let color determine class
if not class then
if colour == 'blue' then
class = 'mw-ui-progressive'
elseif colour == 'red' then
class = 'mw-ui-destructive'
elseif colour == 'green' then
class = 'mw-ui-constructive'
end
end
if class then
table.insert(data.classes, class)
end
-- Styles
do
--[[
-- Check whether we are on the same page as we have specified in
-- args[1], but not if we are using a URL link, as then args[1] is only
-- a display value. If we are currently on the page specified in
-- args[1] make the button colour darker so that it stands out from
-- other buttons on the page.
--]]
local success, linkTitle, currentTitle
if not data.isUrl then
currentTitle = mw.title.getCurrentTitle()
success, linkTitle = pcall(mw.title.new, args[1])
elseif p.urlisdisplay then
currentTitle = mw.title.getCurrentTitle()
end
if success
and linkTitle
and mw.title.equals(currentTitle, linkTitle)
and not p.urlisdisplay
then
if class == 'ui-button-blue'
or class == 'mw-ui-progressive'
or class == 'mw-ui-constructive'
then
data.backgroundColor = '#2962CB'
data.color = '#fff'
elseif class == 'ui-button-green' then
data.backgroundColor = '#008B6D'
elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then
data.backgroundColor = '#A6170F'
else
data.backgroundColor = '#CCC'
data.color = '#666'
end
elseif p.urlisdisplay then
data.dummyLink = tostring(currentTitle)
end
-- Add user-specified styles.
data.style = args.style
end
return data
end
function p.renderLink(originalInput, data)
-- Render the display span tag.
local display
do
local displaySpan = mw.html.create('span')
for i, class in ipairs(data.classes or {}) do
displaySpan:addClass(class)
end
displaySpan
:css{
['background-color'] = data.backgroundColor,
color = data.color
}
if data.style then
displaySpan:cssText(data.style)
end
displaySpan:wikitext(data.display)
display = tostring(displaySpan)
end
-- Render the link
local link
if originalInput and originalInput:find('|') then
link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display)
elseif p.nolink then
if p.urlisdisplay then
link = string.format('[[%s|%s]]', data.dummyLink, display)
else
link = string.format('%s', display)
end
else
if data.isUrl then
link = string.format('[%s %s]', data.link, display)
else
link = string.format('[[%s |%s]]', data.link, display)
end
end
return string.format('<span class="plainlinks clickbutton">%s</span>', link)
end
function p.renderTrackingCategories(args)
if yesno(args.category) == false then
return ''
end
local class = args.class and args.class:lower()
if class == 'ui-button-green'
or class == 'ui-button-blue'
or class == 'ui-button-red'
then
return '[[Category:Pages using old style ui-button-color]]'
else
return ''
end
end
return p
2y4zqg2drz0jqpm59tyakc7koi33ehg