From 9085db12be97a72314ac2b451276df3337ae1e6c Mon Sep 17 00:00:00 2001
From: tonyford <tonyford@strategy-investor.de>
Date: Sun, 16 Oct 2022 08:39:32 +0200
Subject: [PATCH] add saison 37 und verbesserungen

---
 html/37.php                              |  32 +++
 html/_data/global.yml                    |   2 +-
 html/_layouts/default.php                |  57 ++++-
 html/assets/css/custom.scss              |  81 ++++++-
 html/assets/js/script.js                 | 271 +++++++++++++++++------
 html/functions/db_methods.php            | 121 ++++++----
 html/images/facegenerator/fg_beard_0.png | Bin 0 -> 1141 bytes
 html/images/facegenerator/fg_beard_1.png | Bin 0 -> 1106 bytes
 html/images/facegenerator/fg_beard_2.png | Bin 0 -> 1124 bytes
 html/images/facegenerator/fg_beard_3.png | Bin 0 -> 1078 bytes
 html/images/facegenerator/fg_beard_4.png | Bin 0 -> 1135 bytes
 html/images/facegenerator/fg_beard_5.png | Bin 0 -> 1108 bytes
 html/images/facegenerator/fg_beard_6.png | Bin 0 -> 1108 bytes
 html/images/facegenerator/fg_beard_7.png | Bin 0 -> 1128 bytes
 html/images/facegenerator/fg_eyes_0.png  | Bin 0 -> 1132 bytes
 html/images/facegenerator/fg_eyes_1.png  | Bin 0 -> 1141 bytes
 html/images/facegenerator/fg_eyes_10.png | Bin 0 -> 1145 bytes
 html/images/facegenerator/fg_eyes_11.png | Bin 0 -> 1135 bytes
 html/images/facegenerator/fg_eyes_12.png | Bin 0 -> 1152 bytes
 html/images/facegenerator/fg_eyes_13.png | Bin 0 -> 1130 bytes
 html/images/facegenerator/fg_eyes_2.png  | Bin 0 -> 1141 bytes
 html/images/facegenerator/fg_eyes_3.png  | Bin 0 -> 1141 bytes
 html/images/facegenerator/fg_eyes_4.png  | Bin 0 -> 1134 bytes
 html/images/facegenerator/fg_eyes_5.png  | Bin 0 -> 1113 bytes
 html/images/facegenerator/fg_eyes_6.png  | Bin 0 -> 1150 bytes
 html/images/facegenerator/fg_eyes_7.png  | Bin 0 -> 1140 bytes
 html/images/facegenerator/fg_eyes_8.png  | Bin 0 -> 1145 bytes
 html/images/facegenerator/fg_eyes_9.png  | Bin 0 -> 1142 bytes
 html/images/facegenerator/fg_hair_0.png  | Bin 0 -> 1226 bytes
 html/images/facegenerator/fg_hair_1.png  | Bin 0 -> 1241 bytes
 html/images/facegenerator/fg_hair_10.png | Bin 0 -> 1078 bytes
 html/images/facegenerator/fg_hair_11.png | Bin 0 -> 1182 bytes
 html/images/facegenerator/fg_hair_12.png | Bin 0 -> 1178 bytes
 html/images/facegenerator/fg_hair_13.png | Bin 0 -> 1178 bytes
 html/images/facegenerator/fg_hair_14.png | Bin 0 -> 1177 bytes
 html/images/facegenerator/fg_hair_15.png | Bin 0 -> 1170 bytes
 html/images/facegenerator/fg_hair_2.png  | Bin 0 -> 1199 bytes
 html/images/facegenerator/fg_hair_3.png  | Bin 0 -> 1222 bytes
 html/images/facegenerator/fg_hair_4.png  | Bin 0 -> 1198 bytes
 html/images/facegenerator/fg_hair_5.png  | Bin 0 -> 1181 bytes
 html/images/facegenerator/fg_hair_6.png  | Bin 0 -> 1183 bytes
 html/images/facegenerator/fg_hair_7.png  | Bin 0 -> 1190 bytes
 html/images/facegenerator/fg_hair_8.png  | Bin 0 -> 1188 bytes
 html/images/facegenerator/fg_hair_9.png  | Bin 0 -> 1211 bytes
 html/images/facegenerator/fg_head_0.png  | Bin 0 -> 1176 bytes
 html/images/facegenerator/fg_head_1.png  | Bin 0 -> 1183 bytes
 html/images/facegenerator/fg_head_2.png  | Bin 0 -> 1208 bytes
 html/images/facegenerator/fg_head_3.png  | Bin 0 -> 1188 bytes
 html/images/facegenerator/fg_head_4.png  | Bin 0 -> 1185 bytes
 html/images/facegenerator/fg_head_5.png  | Bin 0 -> 1183 bytes
 html/images/facegenerator/fg_head_6.png  | Bin 0 -> 1184 bytes
 html/images/facegenerator/fg_head_7.png  | Bin 0 -> 1180 bytes
 html/images/facegenerator/fg_mouth_0.png | Bin 0 -> 1120 bytes
 html/images/facegenerator/fg_mouth_1.png | Bin 0 -> 1120 bytes
 html/images/facegenerator/fg_mouth_2.png | Bin 0 -> 1103 bytes
 html/images/facegenerator/fg_mouth_3.png | Bin 0 -> 1107 bytes
 html/images/facegenerator/fg_mouth_4.png | Bin 0 -> 1107 bytes
 html/images/facegenerator/fg_mouth_5.png | Bin 0 -> 1130 bytes
 html/images/facegenerator/fg_mouth_6.png | Bin 0 -> 1103 bytes
 html/images/facegenerator/fg_mouth_7.png | Bin 0 -> 1104 bytes
 60 files changed, 423 insertions(+), 141 deletions(-)
 create mode 100644 html/37.php
 create mode 100644 html/images/facegenerator/fg_beard_0.png
 create mode 100644 html/images/facegenerator/fg_beard_1.png
 create mode 100644 html/images/facegenerator/fg_beard_2.png
 create mode 100644 html/images/facegenerator/fg_beard_3.png
 create mode 100644 html/images/facegenerator/fg_beard_4.png
 create mode 100644 html/images/facegenerator/fg_beard_5.png
 create mode 100644 html/images/facegenerator/fg_beard_6.png
 create mode 100644 html/images/facegenerator/fg_beard_7.png
 create mode 100644 html/images/facegenerator/fg_eyes_0.png
 create mode 100644 html/images/facegenerator/fg_eyes_1.png
 create mode 100644 html/images/facegenerator/fg_eyes_10.png
 create mode 100644 html/images/facegenerator/fg_eyes_11.png
 create mode 100644 html/images/facegenerator/fg_eyes_12.png
 create mode 100644 html/images/facegenerator/fg_eyes_13.png
 create mode 100644 html/images/facegenerator/fg_eyes_2.png
 create mode 100644 html/images/facegenerator/fg_eyes_3.png
 create mode 100644 html/images/facegenerator/fg_eyes_4.png
 create mode 100644 html/images/facegenerator/fg_eyes_5.png
 create mode 100644 html/images/facegenerator/fg_eyes_6.png
 create mode 100644 html/images/facegenerator/fg_eyes_7.png
 create mode 100644 html/images/facegenerator/fg_eyes_8.png
 create mode 100644 html/images/facegenerator/fg_eyes_9.png
 create mode 100644 html/images/facegenerator/fg_hair_0.png
 create mode 100644 html/images/facegenerator/fg_hair_1.png
 create mode 100644 html/images/facegenerator/fg_hair_10.png
 create mode 100644 html/images/facegenerator/fg_hair_11.png
 create mode 100644 html/images/facegenerator/fg_hair_12.png
 create mode 100644 html/images/facegenerator/fg_hair_13.png
 create mode 100644 html/images/facegenerator/fg_hair_14.png
 create mode 100644 html/images/facegenerator/fg_hair_15.png
 create mode 100644 html/images/facegenerator/fg_hair_2.png
 create mode 100644 html/images/facegenerator/fg_hair_3.png
 create mode 100644 html/images/facegenerator/fg_hair_4.png
 create mode 100644 html/images/facegenerator/fg_hair_5.png
 create mode 100644 html/images/facegenerator/fg_hair_6.png
 create mode 100644 html/images/facegenerator/fg_hair_7.png
 create mode 100644 html/images/facegenerator/fg_hair_8.png
 create mode 100644 html/images/facegenerator/fg_hair_9.png
 create mode 100644 html/images/facegenerator/fg_head_0.png
 create mode 100644 html/images/facegenerator/fg_head_1.png
 create mode 100644 html/images/facegenerator/fg_head_2.png
 create mode 100644 html/images/facegenerator/fg_head_3.png
 create mode 100644 html/images/facegenerator/fg_head_4.png
 create mode 100644 html/images/facegenerator/fg_head_5.png
 create mode 100644 html/images/facegenerator/fg_head_6.png
 create mode 100644 html/images/facegenerator/fg_head_7.png
 create mode 100644 html/images/facegenerator/fg_mouth_0.png
 create mode 100644 html/images/facegenerator/fg_mouth_1.png
 create mode 100644 html/images/facegenerator/fg_mouth_2.png
 create mode 100644 html/images/facegenerator/fg_mouth_3.png
 create mode 100644 html/images/facegenerator/fg_mouth_4.png
 create mode 100644 html/images/facegenerator/fg_mouth_5.png
 create mode 100644 html/images/facegenerator/fg_mouth_6.png
 create mode 100644 html/images/facegenerator/fg_mouth_7.png

diff --git a/html/37.php b/html/37.php
new file mode 100644
index 0000000..939826a
--- /dev/null
+++ b/html/37.php
@@ -0,0 +1,32 @@
+---
+layout: default
+saison: 37
+date: '2022-10-21'
+ligaspieltag: 8
+step: 1
+finals_step: 2
+finalteams: 8
+startliste:
+  -
+    - is
+    - es
+    - bw
+    - nl
+    - cm
+    - se
+    - co
+    - pl
+    - tz
+
+startliste_partien_pause:
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 2
+  - 0
+---
diff --git a/html/_data/global.yml b/html/_data/global.yml
index c2fd52e..3784f1d 100644
--- a/html/_data/global.yml
+++ b/html/_data/global.yml
@@ -1 +1 @@
-saison_now: 36
+saison_now: 37
diff --git a/html/_layouts/default.php b/html/_layouts/default.php
index 7bd9f1e..fbc8083 100644
--- a/html/_layouts/default.php
+++ b/html/_layouts/default.php
@@ -43,10 +43,12 @@ if( !empty($csv) ){
         $w=preg_split('/,/',$v);
         if( !empty($TEAMS[$w[0]]) ){
           if( $TEAMS[$w[0]] == $w[1] ){
-            db_addSpieler($v,$secret);
+            //db_addSpieler($v,$secret);
           }
         }
       }
+    } else if( trim($C[0]) == 'SpielerID,Spieler,Alter,Nt,Saison,Liga,TeamID,Team,S,T,A,Z+,Z-,Zd,Bk,Bi+,Bi-,Attr,Face,Karriereende' ){
+      db_addSpieler(array_pop($C),$secret);
     }
   }
 
@@ -100,7 +102,7 @@ if( !empty($csv) ){
     STATISTIK_SAISON={};
     STAT_SAISON.forEach(
       function(v,i){
-        if( STATISTIK_SAISON[v.SpielerID] == undefined ) STATISTIK_SAISON[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [] };
+        if( STATISTIK_SAISON[v.SpielerID] == undefined ) STATISTIK_SAISON[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [], 'face' : '' };
         STATISTIK_SAISON[v.SpielerID].S++;
         STATISTIK_SAISON[v.SpielerID].T+=v.Tore*1;
         STATISTIK_SAISON[v.SpielerID].A+=v.Assists*1;
@@ -113,13 +115,14 @@ if( !empty($csv) ){
         STATISTIK_SAISON[v.SpielerID].age_saison=v.age_saison*1;
         STATISTIK_SAISON[v.SpielerID].nt=v.nt;
         STATISTIK_SAISON[v.SpielerID].attr=v.attr;
+        STATISTIK_SAISON[v.SpielerID].face=v.face;
       }
     );
 
     STATISTIK_ALL={};
     STAT_ALL.forEach(
       function(v,i){
-        if( STATISTIK_ALL[v.SpielerID] == undefined ) STATISTIK_ALL[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [] };
+        if( STATISTIK_ALL[v.SpielerID] == undefined ) STATISTIK_ALL[v.SpielerID]={ 'S' :0, 'T' : 0, 'A' : 0, 'Z' : 0, 'Zpos' : 0, 'Zneg' : 0, 'MID' : [], 'face' : '' };
         STATISTIK_ALL[v.SpielerID].S++;
         STATISTIK_ALL[v.SpielerID].T+=v.Tore*1;
         STATISTIK_ALL[v.SpielerID].A+=v.Assists*1;
@@ -132,6 +135,7 @@ if( !empty($csv) ){
         STATISTIK_ALL[v.SpielerID].age_saison=v.age_saison*1;
         STATISTIK_ALL[v.SpielerID].nt=v.nt;
         STATISTIK_ALL[v.SpielerID].attr=v.attr;
+        STATISTIK_ALL[v.SpielerID].face=v.face;
       }
     );
 
@@ -153,16 +157,16 @@ if( !empty($csv) ){
           calculatePartien('{{ page.saison }}', '{{ page.date }}');
           calculatePunktestand('{{ page.saison }}', '7');
           //calculatePunktestand( 0, '7');
-          calculateTore('{{ page.saison }}');
-          calculateAssists('{{ page.saison }}');
-          calculateZwk('{{ page.saison }}');
+          calculateTabelle('{{ page.saison }}','T');
+          calculateTabelle('{{ page.saison }}','A');
+          calculateTabelle('{{ page.saison }}','Z');
 
           $('h4.tabelle button').on('click',
             function(){
               $('h4.tabelle button').toggleClass('active',false);
               $(this).toggleClass('active',true);
               $('table.tabelle').toggleClass('d-none',true);
-              $('#tabelle_'+$(this).text().toLowerCase()).toggleClass('d-none',false);
+              $('#tabelle_'+$(this).text()[0]).toggleClass('d-none',false);
             }
           );
           $('#news tbody').html('');
@@ -231,6 +235,33 @@ if( !empty($csv) ){
               $(td).text( st == 1 ? 'vor ' + st + ' Tag' : 'vor ' + st + ' Tagen' );
               $(tr).append(td);
 
+              var td = document.createElement('td');
+              var div = document.createElement('div');
+              div.classList='face';
+
+              var img = document.createElement('img');
+              img.src='images/facegenerator/fg_head_' + v.face.split(/_/g)[0] + '.png';
+              $(div).append(img);
+
+              var img = document.createElement('img');
+              img.src='images/facegenerator/fg_hair_' + v.face.split(/_/g)[1] + '.png';
+              $(div).append(img);
+
+              var img = document.createElement('img');
+              img.src='images/facegenerator/fg_beard_' + v.face.split(/_/g)[2] + '.png';
+              $(div).append(img);
+
+              var img = document.createElement('img');
+              img.src='images/facegenerator/fg_mouth_' + v.face.split(/_/g)[3] + '.png';
+              $(div).append(img);
+
+              var img = document.createElement('img');
+              img.src='images/facegenerator/fg_eyes_' + v.face.split(/_/g)[4] + '.png';
+              $(div).append(img);
+
+              $(td).append(div);
+              $(tr).append(td);
+
               var td = document.createElement('td');
               var img = document.createElement('img');
 
@@ -310,7 +341,7 @@ if( !empty($csv) ){
     </div>
     <h4 class="tabelle">Tabelle <button>Zweikampf</button><button>Assists</button><button>Tore</button><button class="punktestand active">Punktestand</button></h2>
 
-    <table id="tabelle_punktestand" class="tabelle">
+    <table id="tabelle_P" class="tabelle">
       <thead>
         <tr>
           <th>Pl.</th>
@@ -333,11 +364,12 @@ if( !empty($csv) ){
       </tbody>
     </table>
 
-    <table id="tabelle_tore" class="tabelle d-none">
+    <table id="tabelle_T" class="tabelle d-none">
       <thead>
         <tr>
           <th>Pl.</th>
           <th>Sp.</th>
+          <th></th>
           <th>Name</th>
           <th>Team</th>
           <th>T</th>
@@ -347,11 +379,12 @@ if( !empty($csv) ){
       </tbody>
     </table>
 
-    <table id="tabelle_assists" class="tabelle d-none">
+    <table id="tabelle_A" class="tabelle d-none">
       <thead>
         <tr>
           <th>Pl.</th>
           <th>Sp.</th>
+          <th></th>
           <th>Name</th>
           <th>Team</th>
           <th>A</th>
@@ -361,11 +394,12 @@ if( !empty($csv) ){
       </tbody>
     </table>
 
-    <table id="tabelle_zweikampf" class="tabelle d-none">
+    <table id="tabelle_Z" class="tabelle d-none">
       <thead>
         <tr>
           <th>Pl.</th>
           <th>Sp.</th>
+          <th></th>
           <th>Name</th>
           <th>Team</th>
           <th>Z</th>
@@ -401,6 +435,7 @@ if( !empty($csv) ){
     <table id="news">
       <thead>
         <th>Zeit</th>
+        <th></th>
         <th>Nt</th>
         <th>Spieler</th>
         <th>Team</th>
diff --git a/html/assets/css/custom.scss b/html/assets/css/custom.scss
index e97d47f..350dea5 100644
--- a/html/assets/css/custom.scss
+++ b/html/assets/css/custom.scss
@@ -177,6 +177,7 @@ tr.begegnungen {
 img.flags {
   width: 20px;
   border: 1px solid darkgrey;
+  /*margin-right: 10px; */
 }
 
 #copypaste {
@@ -239,7 +240,7 @@ tr.stats {
   }
 }
 
-#tabelle_tore, #tabelle_assists, #tabelle_zweikampf {
+#tabelle_T, #tabelle_A, #tabelle_Z {
   tr {
     td,th {
       &:last-child {
@@ -248,8 +249,17 @@ tr.stats {
       }
       &:nth-child(1) { width: 30px; text-align: right; }
       &:nth-child(2) { width: 30px; text-align: right; }
-      &:nth-child(3) { width: 280px; }
-      &:nth-child(4) { width: 200px; }
+      &:nth-child(3) { width: 30px; text-align: right; }
+      &:nth-child(4) { width: 280px; }
+      &:nth-child(5) { width: 200px; }
+    }
+  }
+}
+
+#tabelle_team {
+  tr {
+    td,th {
+      &:nth-child(1) { width: 350px; text-align: left; }
     }
   }
 }
@@ -346,21 +356,72 @@ td.n { color: firebrick; }
   thead { display: table; }
   tbody { display: block; max-height: 200px; overflow: auto; }
   tr > th,td {
-    &:nth-child(1) { width: 100px; }
-    &:nth-child(2) { width: 30px; }
-    &:nth-child(3) { width: 270px; }
-    &:nth-child(4) { width: 200px; }
+    &:nth-child(1) { width: 70px; }
+    &:nth-child(2) { width: 20px; }
+    &:nth-child(3) { width: 30px; }
+    &:nth-child(4) { width: 270px; }
+    &:nth-child(5) { width: 190px; }
   }
   tr > td:nth-child(1){ font-size: 0.7em; }
   tr:nth-child(odd){
     background: whitesmoke;
   }
-  i.fas {
-    padding-right:5px;
-  }
+
 }
 
 .mono {
   font-family: monospace;
   font-size: 1.2em;
 }
+
+.face {
+  position: fixed;
+  top: 100px;
+  right: 65%;
+  > img {
+    position: absolute;
+    &:nth-child(1){ z-index: 1 }
+    &:nth-child(2){ z-index: 5 }
+    &:nth-child(3){ z-index: 2 }
+    &:nth-child(4){ z-index: 3 }
+    &:nth-child(5){ z-index: 4; position: relative; }
+  }
+  span {
+    margin-left:10px;
+  }
+}
+
+#news div.face {
+  position: relative;
+  img {
+    width: 20px;
+    left: 12px;
+    top: -100px;
+  }
+}
+
+.tabelle td.face {
+  position: initial;
+  img {
+    width: 20px;
+  }
+}
+
+.tabelle span.face {
+  position: initial;
+  img {
+    width: 20px;
+    margin-right: 10px;
+  }
+}
+
+
+
+
+i.fas {
+  padding-right:5px;
+}
+
+.tabelle img.flags {
+  margin-right: 5px;
+}
diff --git a/html/assets/js/script.js b/html/assets/js/script.js
index 84c2ec7..d14b407 100644
--- a/html/assets/js/script.js
+++ b/html/assets/js/script.js
@@ -429,7 +429,7 @@ function calculatePunktestand(saison,runde,show=true){
     return Tabelle;
   }
 
-  var tabelle='#tabelle_punktestand tbody';
+  var tabelle='#tabelle_P tbody';
   $(tabelle).html('');
 
   var TabelleLast= ( saison > 26 ) ? calculateAllPunktestand()[saison-27] : [];
@@ -451,7 +451,7 @@ function calculatePunktestand(saison,runde,show=true){
       var finalist=( calculateAllPunktestand().filter((a) => ( a[1].nt == v.nt.toLowerCase() ) ).length + ERGEBNISSE.filter((a) => ( a.runde=='F' && ( a.H.toLowerCase() == v.nt.toLowerCase() && a.TH < a.TA || a.A.toLowerCase() == v.nt.toLowerCase() && a.TH > a.TA ) ) ).length );
 
       tmp+='<td class="'+border+'">'+S+'</td>';
-      tmp+='<td class="'+border+'"><img class="flags" src="./images/flags/'+(( v.flag ) ? v.flag : v.nt.toLowerCase())+'.svg"> <a href="javascript:calculateTeam('+((saison == 0) ? SAISON_NOW : saison)+',\''+v.nt+'\')">'+v.name.replace(/\(NL\)/g,'<sup>'+v.nt.toUpperCase()+'</sup></a>')+' <a href="'+v.link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'+(( trophy.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-trophy"></i>' : '') +
+      tmp+='<td class="'+border+'"><img class="flags" src="./images/flags/'+(( v.flag ) ? v.flag : v.nt.toLowerCase())+'.svg"> <a href="javascript:calculateTeam('+((saison == 0 && false) ? SAISON_NOW : saison)+',\''+v.nt+'\')">'+v.name.replace(/\(NL\)/g,'<sup>'+v.nt.toUpperCase()+'</sup></a>')+' <a href="'+v.link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>'+(( trophy.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-trophy"></i>' : '') +
       ' '+(( master.toLowerCase() == v.nt.toLowerCase() ) ? ' <i class="fas fa-crown"></i>' : '') +'</td>';
       tmp+='<td class="'+border+'">'+((pokal>0) ? pokal : '')+'</td>';
       tmp+='<td class="'+border+'">'+((meistertitel>0) ? meistertitel : '')+'</td>';
@@ -471,126 +471,257 @@ function calculatePunktestand(saison,runde,show=true){
 
 }
 
-function calculateTore(saison){
+function calculateTabelle(saison,param){
   var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON;
-  var n=Object.entries( STATISTIK ).sort( function(a,b){ return ( ( a[1].T < b[1].T || ( a[1].T == b[1].T && a[1].S > b[1].S ) ) ? 1 : -1 ) } ).slice(0,10).map(
+  var n=Object.entries( STATISTIK ).sort( (a,b) => ( a[1][param] < b[1][param] || ( a[1][param] == b[1][param] && a[1].S > b[1].S ) ) ? 1 : -1 ).slice(0,10).map(
     function(v,i){
       var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) );
+
       if( team.length == 0 ){
-        var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">';
-        var team_name='';
+        var flag = document.createElement('img');
+        flag.classList='flags';
+        flag.src='./images/flags/xx.svg'
+        flag.title='n/a';
+        //var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">';
+        //var team_name='';
+        var span = document.createElement('span');
+        span.innerText='';
+
       } else {
-        var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">';
-        var team_name='<a href="javascript:calculateTeam('+saison+',\''+team[0].nt+'\')">'+team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup></a>')+' <a href="'+team[0].link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>';
+
+        var face = document.createElement('td');
+        face.classList='face';
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_head_' + v[1].face.split(/_/g)[0] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_hair_' + v[1].face.split(/_/g)[1] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_beard_' + v[1].face.split(/_/g)[2] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_mouth_' + v[1].face.split(/_/g)[3] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_eyes_' + v[1].face.split(/_/g)[4] + '.png';
+        $(face).append(img);
+
+        var flag = document.createElement('img');
+        flag.classList='flags';
+        flag.src='./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg';
+        flag.title=team[0].name.split('(NL)')[0].trim();
+
+        var span = document.createElement('span');
+        var a_ = document.createElement('a');
+        a_.href='javascript:calculateTeam('+saison+',\''+team[0].nt+'\')';
+        a_.innerHTML=team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup> ');
+        span.append(a_);
+
+        var a_ = document.createElement('a');
+        a_.href=team[0].link;
+        a_.target='ultrasoccer';
+        var i_ = document.createElement('i');
+        i_.classList='fas fa-link';
+        a_.append(i_);
+        span.append(a_);
       }
 
-      var attr=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' ');
+      var attr=document.createElement('span');
+      attr.innerHTML=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' && a != 'fas' ? '<i class="fas '+a+'"></i>' : '' ) ).join('');
+
+      var tr=document.createElement('tr');
+
+      var td=document.createElement('td');
+      td.innerText=(i+1);
+      tr.append(td);
+
+      var td=document.createElement('td');
+      td.innerText=(( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0);
+      tr.append(td);
+
+      tr.append(face);
+
+      var td=document.createElement('td');
+      td.append(flag);
+      td.append(attr);
+
+      var a_=document.createElement('a');
+      a_.href='https://ultrasoccer.de/playerprofile/?id='+v[0];
+      a_.target='ultrasoccer';
+      a_.innerText=(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : v[0] );
+      td.append(a_);
+      tr.append(td);
+
+      var td=document.createElement('td');
+      td.append(span)
+      tr.append(td);
+
+      var td=document.createElement('td');
+      td.innerText = ( param == 'Z' &&  v[1][param] > 0 ) ? '+' + v[1][param] :  v[1][param];
+      if( param == 'Z' ) td.classList = v[1][param] > 0 ? 'p' : ( v[1][param] == 0 ) ? 'u' : 'n';
+      tr.append(td);
+
+      return tr;
 
-      return '<td>'+
-      [
-        i+1,
-        (( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0),
-        team_flag+' '+attr+' '+(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : '<a href="https://ultrasoccer.de/playerprofile/?id='+v[0]+'" target="ultrasoccer">'+v[0]+'</a>' ),
-        team_name,
-        v[1].T
-      ].join('</td><td>')+'</td>';
     }
   );
-  $('#tabelle_tore tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' );
+
+  $('#tabelle_'+param+' tbody').html( n );
 }
-function calculateAssists(saison){
+
+function calculateTeam_old(saison,nt){
   var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON;
-  var n=Object.entries( STATISTIK ).sort( (a,b) => ( a[1].A < b[1].A || ( a[1].A == b[1].A && a[1].S > b[1].S ) ) ? 1 : -1 ).slice(0,10).map(
-    function(v,i){
-      var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) );
+
+  var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( STATISTIK[b.id] ) ).filter( (c) => ( c !== undefined ) ).map(
+    function(v){
+
+      var team=TEAMS.filter( (a) => ( a.nt == v.nt ) );
       if( team.length == 0 ){
         var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">';
         var team_name='';
       } else {
         var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">';
-        var team_name='<a href="javascript:calculateTeam('+saison+',\''+team[0].nt+'\')">'+team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup></a>')+' <a href="'+team[0].link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>';
+        var team_name='<a href="'+team[0].link+'" target="ultrasoccer">'+team[0].name+'</a>';
       }
 
-      var attr=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' ');
+      var attr=((v.attr != undefined) ? v.attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' ');
 
-      return '<td>'+
-      [
-        i+1,
-        (( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0),
-        team_flag+' '+attr+' '+(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : '<a href="https://ultrasoccer.de/playerprofile/?id='+v[0]+'" target="ultrasoccer">'+v[0]+'</a>' ),
-        team_name,
-        v[1].A
-      ].join('</td><td>')+'</td>';
+      var tmp='';
+      tmp+='<td>'+team_flag+' '+attr+' '+v.name+'</td>';
+      tmp+='<td>'+(v.age*1+saison*1-v.age_saison)+'</td>';
+      tmp+='<td>'+v.S+'/'+v.T+'/'+v.A+'</td>';
+      tmp+='<td class="'+(( v.Z > 0 ) ? 'p' : (( v.Z < 0 ) ? 'n' : 'u' ) )+'">'+v.Zpos+'/'+v.Zneg+'</td>';
+      return tmp;
     }
   );
-  $('#tabelle_assists tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' );
+  $('table.tabelle').toggleClass('d-none',true);
+  $('#tabelle_team').toggleClass('d-none',false);
+  $('#tabelle_team tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' );
 }
-function calculateZwk(saison){
+function calculateTeam(saison,nt){
   var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON;
-  var n=Object.entries( STATISTIK ).sort( (a,b) => ( a[1].Z < b[1].Z || ( a[1].Z == b[1].Z && a[1].S > b[1].S ) ) ? 1 : -1 ).slice(0,10).map(
+
+  var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( [ b.id, STATISTIK[b.id] ] ) ).filter( (c) => ( c[1] !== undefined ) ).map(
     function(v,i){
+
+      console.log(v,i);
       var team=TEAMS.filter( (a) => ( a.nt == v[1].nt ) );
       if( team.length == 0 ){
-        var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">';
-        var team_name='';
+        var flag = document.createElement('img');
+        flag.classList='flags';
+        flag.src='./images/flags/xx.svg'
+        flag.title='n/a';
+        //var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">';
+        //var team_name='';
+        var span = document.createElement('span');
+        span.innerText='';
+
       } else {
-        var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">';
-        var team_name='<a href="javascript:calculateTeam('+saison+',\''+team[0].nt+'\')">'+team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup></a>')+' <a href="'+team[0].link+'" target="ultrasoccer"><i class="fas fa-link"></i></a>';
+
+        var face = document.createElement('span');
+        face.classList='face';
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_head_' + v[1].face.split(/_/g)[0] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_hair_' + v[1].face.split(/_/g)[1] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_beard_' + v[1].face.split(/_/g)[2] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_mouth_' + v[1].face.split(/_/g)[3] + '.png';
+        $(face).append(img);
+
+        var img = document.createElement('img');
+        img.src='images/facegenerator/fg_eyes_' + v[1].face.split(/_/g)[4] + '.png';
+        $(face).append(img);
+
+        var flag = document.createElement('img');
+        flag.classList='flags';
+        flag.src='./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg';
+        flag.title=team[0].name.split('(NL)')[0].trim();
+
+        var span = document.createElement('span');
+        var a_ = document.createElement('a');
+        a_.href='javascript:calculateTeam('+saison+',\''+team[0].nt+'\')';
+        a_.innerHTML=team[0].name.replace(/\(NL\)/g,'<sup>'+team[0].nt.toUpperCase()+'</sup> ');
+        span.append(a_);
+
+        var a_ = document.createElement('a');
+        a_.href=team[0].link;
+        a_.target='ultrasoccer';
+        var i_ = document.createElement('i');
+        i_.classList='fas fa-link';
+        a_.append(i_);
+        span.append(a_);
       }
 
-      var attr=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' ');
+      var attr=document.createElement('span');
+      attr.innerHTML=((v[1].attr != undefined) ? v[1].attr : '').split(' ').map( (a) => ( a != '' && a != 'fas' ? '<i class="fas '+a+'"></i>' : '' ) ).join('');
 
-      return '<td>'+
-      [
-        i+1,
-        (( STATISTIK[v[0]] != undefined ) ? STATISTIK[v[0]].S : 0),
-        team_flag+' '+attr+' '+(( v[1].name != null ) ? v[1].name+' ('+(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison)+')' : '<a href="https://ultrasoccer.de/playerprofile/?id='+v[0]+'" target="ultrasoccer">'+v[0]+'</a>' ),
-        team_name,
-        (( v[1].Z > 0 ) ? '+' : '' )+v[1].Z
-      ].join('</td><td>')+'</td>';
-    }
-  );
+      var tr=document.createElement('tr');
 
-  $('#tabelle_zweikampf tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' );
-}
-function calculateTeam(saison,nt){
-  var STATISTIK=saison == 0 ? STATISTIK_ALL : STATISTIK_SAISON;
+      var td=document.createElement('td');
+      td.append(face);
+      td.append(flag);
+      td.append(attr);
+      var a_=document.createElement('a');
+      a_.href='https://ultrasoccer.de/playerprofile/?id='+i;
+      a_.target='ultrasoccer';
+      a_.innerText=(( v[1].name != null ) ? v[1].name : v[0] );
+      td.append(a_);
+      tr.append(td);
 
-  var n=SPIELER.filter( (a) => ( a.nt == nt ) ).map( (b) => ( STATISTIK[b.id] ) ).filter( (c) => ( c !== undefined ) ).map(
-    function(v){
 
-      var team=TEAMS.filter( (a) => ( a.nt == v.nt ) );
-      if( team.length == 0 ){
-        var team_flag='<img class="flags" src="./images/flags/xx.svg" title="n/a">';
-        var team_name='';
-      } else {
-        var team_flag='<img class="flags" src="./images/flags/'+(( team[0].flag ) ? team[0].flag : team[0].nt.toLowerCase())+'.svg" title="'+team[0].name.split('(NL)')[0].trim()+'">';
-        var team_name='<a href="'+team[0].link+'" target="ultrasoccer">'+team[0].name+'</a>';
-      }
+      var td=document.createElement('td');
+      td.innerText=(v[1].age*1+((saison == 0 ) ? SAISON_NOW : saison )*1-v[1].age_saison);
+      tr.append(td);
 
-      var attr=((v.attr != undefined) ? v.attr : '').split(' ').map( (a) => ( a != '' ? '<i class="fas '+a+'"></i>' : '' ) ).join(' ');
+      var td=document.createElement('td');
+      td.innerText=v[1].S+'/'+v[1].T+'/'+v[1].A;
+      tr.append(td);
 
+      var td=document.createElement('td');
+      td.innerText=v[1].Zpos+'/'+v[1].Zneg;
+      td.classList=(( v[1].Z > 0 ) ? 'p' : (( v[1].Z < 0 ) ? 'n' : 'u' ) )
+      tr.append(td);
+
+      /*
       var tmp='';
       tmp+='<td>'+team_flag+' '+attr+' '+v.name+'</td>';
       tmp+='<td>'+(v.age*1+saison*1-v.age_saison)+'</td>';
       tmp+='<td>'+v.S+'/'+v.T+'/'+v.A+'</td>';
       tmp+='<td class="'+(( v.Z > 0 ) ? 'p' : (( v.Z < 0 ) ? 'n' : 'u' ) )+'">'+v.Zpos+'/'+v.Zneg+'</td>';
       return tmp;
+      */
+
+      return tr;
     }
   );
   $('table.tabelle').toggleClass('d-none',true);
   $('#tabelle_team').toggleClass('d-none',false);
-  $('#tabelle_team tbody').html( '<tr>'+n.join('</tr><tr>') + '</tr>' );
+  $('#tabelle_team tbody').html( n );
 }
 function calculateEwige(){
   calculatePunktestand(0,'7');
-  calculateTore(0);
-  calculateAssists(0);
-  calculateZwk(0);
+  calculateTabelle(0,'T');
+  calculateTabelle(0,'A');
+  calculateTabelle(0,'Z');
   $('button.active').toggleClass('active',false);
   $('#ewige').toggleClass('active',true);
   $('table.tabelle').toggleClass('d-none',true);
-  $('#tabelle_punktestand').toggleClass('d-none');
+  $('#tabelle_P').toggleClass('d-none');
   $('h4.tabelle > button.punktestand').toggleClass('active',true);
   $('h4.tabelle').toggleClass('d-none',false);
 }
diff --git a/html/functions/db_methods.php b/html/functions/db_methods.php
index c28d841..9e4da9b 100644
--- a/html/functions/db_methods.php
+++ b/html/functions/db_methods.php
@@ -1,50 +1,5 @@
 <?php
 
-function db_addPartie( $csv ){
-
-  echo $csv;
-  return;
-
-  $data=array(
-    'member:'.get_0($member),
-    'location:'.$location,
-    'tags:'.$tags,
-    'url:'.$url,
-    'orderlist:'.preg_replace('/\r\n/',PHP_EOL,$orderlist),
-    'price:'.number_format( $price,8,'.','' ),
-    'shipping:'.number_format( $shipping,8,'.','' ),
-    'currency:'.$currency
-  );
-  $datastring=implode(PHP_EOL,$data);
-  $m=db_getFromMembersById( $member );
-
-  $F=new FaircoinAddress($m['fair_address'],false);
-  if( !$F->verifymessage($datastring , $signature ) ){
-    // signature invalid
-    return array( 'success' => false, 'message' => 'signature could not be verified!', 'd' => [ $m['fair_address'], $datastring, $signature ] );
-  }
-
-  $db=new db;
-
-  $signature_hex=bin2hex( base64_decode($signature) );
-  $sql = "INSERT INTO stargate_list ( member, location, tags, url, orderlist, price, shipping, currency, signature ) VALUES ( ".$member.",'".$location."','".$tags."','".$url."','".$orderlist."',".$price.", ".$shipping.",'".$currency."', 0x".$signature_hex.")";
-
-  if ( $db->query($sql) === TRUE) {
-      // success
-      $result=array( 'success' => true, 'message' => 'order verified and added successfully!', 'data' => db_getFromListBySignature($signature));
-  } else {
-      // check if already exists
-      $row=db_getFromListBySignature($signature);
-      if($row){
-        $result=array( 'success' => true, 'message' => 'order already exists and successfully verified!', 'data' => $row );
-      } else {
-        $result=array( 'success' => false, 'message' => 'sql error!' );
-      }
-  }
-
-  unset($db);
-  return $result;
-}
 function db_addErgebnisse( $csv, $secret ){
 
   $C=preg_split('/,/',$csv);
@@ -77,7 +32,7 @@ function db_addErgebnisse( $csv, $secret ){
   unset($db);
   return $result;
 }
-function db_addSpieler( $csv, $secret ){
+function db_addSpieler_old( $csv, $secret ){
 
   $C=preg_split('/,/',$csv);
   $C[1]='"'.$C[1].'"';
@@ -114,7 +69,75 @@ function db_addSpieler( $csv, $secret ){
 
   if ( $db->query( $sql ) === TRUE) {
       // success
-      $result=array( 'success' => true, 'message' => 'Spieltag erfolgreich hinzugefügt!', 'data' => [] );
+      $result=array( 'success' => true, 'message' => 'Spieler erfolgreich hinzugefügt!', 'data' => [] );
+  } else {
+      echo 'SQL-Error: '.$sql.'<br>';
+  }
+
+  unset($db);
+  return $result;
+}
+function db_addSpieler( $csv, $secret ){
+
+  //CSV: SpielerID,Spieler,Alter,Nt,Saison,Liga,TeamID,Team,S,T,A,Z+,Z-,Zd,Bk,Bi+,Bi-,Attr,Face,Karriereende
+
+  // ba79796eb0452460503db15aefe3c332,Maximilian Koller,20,at,36,4-3,1496,Verein Bottrop,4,3,0,9,5,4,7,12,4,,6_9_7_1_5,0
+  // ba79796eb0452460503db15aefe3c332,Maximilian Koller,20,at,36,3-3,1613,SV Saint-Pierre,1,0,0,0,0,0,6,7,0,,6_9_7_1_5,1
+
+  //DB: teamID,nt,id,attr,name,age,age_saison,face,userID,zeitstempel
+
+  $C=preg_split('/,/',$csv);
+
+  $TEAMS=db_getIdNtFromTeams();
+  if( $TEAMS[$C[6]] != $C[3] ) return false;
+
+  $D=[];
+  $D[]=$C[6];  // teamID
+  $D[]='"'.$C[3].'"';  // nt
+  $D[]='0x'.$C[0];  // id
+  $D[]='"'.$C[17].'"'; // attr
+  $D[]='"'.$C[1].'"';  // name
+  $D[]=$C[2];  // age
+  $D[]=$C[4];  // age_saison
+  $D[]='"'.$C[18].'"'; // face
+
+
+  /*
+  $C[1]='"'.$C[1].'"';
+  $C[2]='0x'.$C[2];
+  $C[3]='"'.$C[3].'"';
+  $C[4]='"'.$C[4].'"';
+  unset($C[6]);
+  unset($C[7]);
+  unset($C[8]);
+  unset($C[9]);
+  unset($C[10]);
+  unset($C[11]);
+  unset($C[12]);
+  unset($C[13]);
+  */
+
+  //$C[]=SAISON_NOW;
+  $user=db_checkSecret($secret);
+  if( empty( $user ) ) return false;
+
+  $D[]=$user['id'];
+
+  if( $S=db_getFromSpielerById($D[2]) ){
+    $D[]='"'.$S['zeitstempel'].'"';
+  } else {
+    $D[]='NOW()';
+  }
+
+  $csv=implode($D,',');
+
+  $db=new db;
+
+  $sql = "REPLACE INTO Spieler VALUES ( ".$csv." )";
+
+  if ( $db->query( $sql ) === TRUE) {
+      // success
+      $result=array( 'success' => true, 'message' => 'Spieler erfolgreich hinzugefügt!', 'data' => [] );
   } else {
       echo 'SQL-Error: '.$sql.'<br>';
   }
@@ -350,7 +373,7 @@ function db_getFromStatistikBySaison($saison){
           WHERE Ergebnisse.saison = '.$saison.'
           GROUP BY SpielerID, MID';
   */
-  $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk" FROM Statistik
+  $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk", Spieler.face FROM Statistik
           INNER JOIN Ergebnisse ON Ergebnisse.MID = Statistik.MID
           LEFT JOIN Spieler     ON Spieler.id = Statistik.SpielerID
           LEFT JOIN Teams       ON Teams.id = Spieler.teamID
@@ -374,7 +397,7 @@ function db_getFromStatistikBySaison($saison){
 function db_getFromStatistik(){
 
   $db=new db;
-  $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk" FROM Statistik
+  $sql='SELECT Statistik.MID, Statistik.SpielerID, Spieler.name, Spieler.nt, Spieler.attr, Spieler.age, Spieler.age_saison, Teams.id, Statistik.Tore, Statistik.Assists, Statistik.Zpos, Statistik.Zneg, Statistik.Zpos - Statistik.Zneg AS "Zwk", Spieler.face FROM Statistik
           INNER JOIN Ergebnisse ON Ergebnisse.MID = Statistik.MID
           LEFT JOIN Spieler     ON Spieler.id = Statistik.SpielerID
           LEFT JOIN Teams       ON Teams.id = Spieler.teamID
diff --git a/html/images/facegenerator/fg_beard_0.png b/html/images/facegenerator/fg_beard_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..77a36aebd6722ffea8fe9688a02697784dd6cf7c
GIT binary patch
literal 1141
zcmbVLO=#3W6pkoWE5(Zn3PMb8>LxSU>}DtJw#{y`cGazAyV%;3X)@i0HkmY;x@j-1
zUc`goRS-RiAR_2N1QiueB8Z?OC{)3V2SEkBhzBRz-RhwfF_8Iv-}k-u=Dl;nLx;LL
z_jGa`*Hs=gs%#!e{w*DByzb5}vuQUq$LI)|qzx;?obHeb%$Gf@j;q*m=4YScUXI&1
z>DI>RSmmf@6Hl}f8!`3*hUU25{y4DgX-xSETzCDv@a5h^fp?v}Fq)}=N>Id8?%+a*
zM;3-^_QJG{9HGCD?~OG^;9+X<u{YyKTAUY}yc%04$CAJ|P3Ux9SaE8sGRzlAi1~~N
zQZ~p!KC6gO0Z2gyc^N<;L0JN73IZ*oY5?-BPhe`HGpSXLQcH{N^1>9QfhI|fMni0*
zMH1E}h!B#1EXi_;S)`(QpIULskGk6o29E5|4X8_eK4G*b$Q;cJ%+r++yr5E9CHA9M
zqFBnL*a{>l0?G4|xSG}xt>Qm!tZ5z9<^wEMaYW`qo4v<mcN@%dx4uwf$h^^xg)Vy(
zYsMh<oQHi{Hu3_y5gpgjRFG3(8tB<l&M<Wd3&=>L98^p_YnE~-)8<$U3kpR&msT=J
zMFxbXt`}9KR5UZ7kOevfr8c(gN7V9d+}3rOZVRidi`9xDwkQc}gv_)nV0em95>1hS
zFOFnH$d9_dLmE-?JS))}ICM{8rxX&8Z{}BX*VIQKjexA0NKN8K$kcPPtQO@G3k4}c
z3+wz(&LrlHloZEb#nL`v6__knOP_64n+N->V?x#%zYZL}#@gy?+0bk8+t2TwbuIBb
zHVr7p?d{awx2vFjALxm*@Y~X2ecO_A`|I5oug9NUd3pBA=4Lzo>+onaed)pD-t)I+
z&)pxFc6M>x2ea{L`Qq~6D@Gw6dGoXWX$if*v$+4nMvlAtWA6p&^2cNuKkpexrny}k
YI=G{i9eu`)t)~;!vN>ejESx;^8*#u|6951J

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_beard_1.png b/html/images/facegenerator/fg_beard_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff605757114a4a59b8b812130be90eb9d8f05f3b
GIT binary patch
literal 1106
zcmbVLOK8+U7>)>{#g*bs1sPJ%i<_BbA9=8`&2Dz>f?MnEVi!DUn#^`Xn@pNa-Lw^o
zy?OL5;;Dk5H$7C)q6Z&mK~Pi>yeXc%cyh9jDpD#skj(4*zW*`*e|>uDOlsul2*+`$
z>ZDm`^F;FP-^c!U-Ng@VIzr1W+8}M(wL;7p4w=QE>REHRjxA?-@g**B+}^g^Y|&Qj
ztY#BWuo8?AdjVr}Twy#8EPEbPFpKA0U+2F)dcp(O(fOHN4b_4Y?zodHA#SWpHSLvo
zTXp#H)1VM*Ou)m`0<pK?M_R1&Jzb5hlViw(9)!;8eBY^7Z5otFh(S(3X&dE5kk1NY
z7O7eF6p)aJpeR8kr$waYWDSX6FnDGyblO_otPE_ioz8bC4KxV5-LBBh2qc_?qN=J8
zNl=o~43UnOeQL#NKN=e<m^iXSH=r)@L855Qk|nD1%+r1dUQnxT3;WR^Q7mOJwgM;$
z2zp);R}UT0I{xLxj_9bl9AH?-5m^dt_8#rAA(`cFcS8w~d83^RUG^x}f=TQp5Bs!g
z>O8v<9M{ogq-4bmGV&G0EE}R&RLzX4h}p7{FIN;bH`LgPD<K9gm2#>qGiKRPL?u(K
z$TCukQbksbA-C#B)bedSwCggv18#O#u2u@MMM>BsWMNnV(;Y%d)FA;VHFAOoW?bJP
z-6(mUezYbI-7DCsgv0~A{A%tF_T}u~;_h>u|H&C-&cLKNek+#Y5v#ytxn25fv)w${
zXB`u=)_4)Uzr@;Vy=ofG`0bZ>MrsQjoH)OEyS+KOK1!`S(bkP;KOSE@0l%jB%*D^Q
zF0cmum$7#5<8kHr>eZWtH;0aK+}4AqYkN-qA@J(^0mMDr7+F31dgD`aS1nJO_luX;
Fe*z~jNizTd

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_beard_2.png b/html/images/facegenerator/fg_beard_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d760759490fe3d06c7fb5151932178a6ec3934b
GIT binary patch
literal 1124
zcmbVLO=#0l9FO?HnD*e!`2itQ@L-eo($8e8Gfh%gv~{$_^&&1yUfZxGFH2r+I}nBl
zB8Vb*ncfu?g?aGc4(=j4P}o_)yQmDjdGO<<Yc~&LpbwJw-v9l7zyJ5miQ?JF;Nd}r
zVIui)twi@T;Wx04{vX?OpXfG3^eQRi8fh6mViXHcBR20CbyPxz)tOsGqYSgVW>>1D
zS~xG8*x`*(hi^L`MKjFkSlctq8ARA=RJYv>x4!&}V{I$LO(qJU;Hju#kI(z4JYTGs
z^E0Moabu_1(Y8zp97GJZ?aaD?+|F=aUYVXlvB0ri6*80IHk_&!CRi2wh)wVyYJwzW
zlW`u#ffSccu_Ay#fT93WQ3&KjN(PYaEsk3At(siYay?u0mf;$Nc(Ne0S}nd6<FQ{C
zpd?8G5Cu_;QjKWPaf#86y1{UtK|_J*+a9s8%Z7}`G;Wd%M?KvL!SM=(O=36bC5om@
zXd9jYc_27W7*|(2ASJZr#<to)rQ;!?gaX|3O<IrIa34%_x3i&8k$NLv@NHTYV^+gv
z(?KrDYZ;Ed@Rn`KDUgoC7*LYAw5BT%W+g2qrD0rGl6o#JCHfrOVRPx27SAf8lv0uq
z>PlKuMKz@>qLP!cnv&~d^KL*4*F=50HnrQs!X2@)>LY_-zk=~>zXK*3nBbs+JytCz
zc*suLu7z7cSe}h&HRRh@kd^bX!*=s4+uPXJp{hd~w3L&m#}KAdK$B<}sYxxVWr4)?
zu-5<NOrXvPVRQV|EPWB}!0@=)`t-6nJjkUJ<I~Yt#+RSavAUPnluG-<*N;n)1#n=`
z%Auv9ku~v1bOb!G%WHd&UteF2-zLv5ow&RB)PH!94(Y$FU-y4}+yA0DboJKJpT=16
z7{jdGXsx_|_hxGK(U;GZ>1F48{q4XO<;lf!3%eNhPNezUJNP=3=k=oYEIW1W4;xBT
A{r~^~

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_beard_3.png b/html/images/facegenerator/fg_beard_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..c89b4e90a1242766a67d2ec377406a17939f1478
GIT binary patch
literal 1078
zcmbVLJ#W)M7<SsKf}%=YVLG{M<GXV{?6YcGC$?!MQmQ1-jJWnCv0D3F`%2sjq>7CV
ziGP6*BMTBNEKD#kAO?N`QWwO`IZX;f)uEPr_uk#}yx;GOo$Y(eOLvweNm_1g*&VTO
z7XOV!vAzxue~Rrkclx}`27K(LRI&oLM?ov{hO|Sy;P~(}U6-W!LD=i_e*3=Rvq<p@
zjFLx*U`x{aMxJ>7KILGK4#U`#&)$EOK^U0wZmo^lNt2Gkt&@~?Pqush$-YkldE+iv
z&kdm<qTB;{bP#7oZpstAhLDSED1!-v@0;?uQ~mZ1XtI=onu5wcs$)>ED!7VBm8=03
zVFa-XkyggYsA&emVEW0zS{e+Dj_pouiIXXhI8O`+$K$awt|%-WLQDvONQJ6e7Kn0o
z9CI%($Jy#kgH1C(4HF)+7!(@4J$A%RS$KLLLX@=I7mDL-nkbPnn0pDt3W8Bo#5F-@
zyhH!FaVa|M9VZlaXvU6GU({o;IwOnRU2UiU3U7=DX()=~9oWo2ifGJRwkeAjB?tpU
zLwXfgkX3he+p#ci5W7NjTy?Cv<Laa~({UM>AmnOdAsTTocC1Fj(XBcmO~JPj)@IyR
zoN+Jq>CA2@>`u74>t4w<nkn@-OM8qR%sOCa#5l`FECJ1KO~GI{i~}~#it?OCYtuA*
zLIXEt5t!uH2rsdZ8U$4cQZ<KYMcjlqmaeK=Q*}isq$*Fj!F6&5g)^{dj{llvb|pHn
z5HDI^94>~3#$sYpF&ZCUt{^d1gO+Xe@*lsxmP(SeFpqwpJvG0}Z(e;HcE8+Q0h^~%
kX>Q@h^@Y=0kEGI~^zhyMv$eTDpNdItIotNz#^dLI0oDLLga7~l

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_beard_4.png b/html/images/facegenerator/fg_beard_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d30572273e695f0cf4f17b42816d8e88c9b8a8f
GIT binary patch
literal 1135
zcmbVLO=#0l91l!IrxOJ)+bLuhg*AEUN7{teEp3vmu-4KR)}vYSx`r-!S@O1a#lsLq
zM1<XBL;Sc*@GwEqgI`lTiATLSK{inIAnqt$#Fws}9>zc)yzl?-_y4|J$dC5*4)jtK
z)t4Ppiew)N=D`DGy=%>UBwIgLE4YNJxS@NHl1(%T>8!0!!6MYn`I*-+Nl`sjt6agA
z+_+>Qo7DpuwrRTrO;O3=rmGuui0Mf<WjQHk>&Y5JTV{%xh~+@e&A^&9*79Jfl`k8u
zx*?j(@M${Pln8+hu}(MbX~&nEDW=UUk#q3OF?3r5*Hg^4QI%YQ&L9ucF&2ajAn>#h
zW%(!&qv8-920Y;SFbCox9!Rmc1bDhL7^2NHt5Q+XI=aX$#ndo%C5~$}8f+uNB5#W0
zMN#BHm<xwPL?YzRJ6Laq9DlIOpg`a7EEikIp#w&J63yZiLoD5P!FF@G9b(7t1d4==
zYw9k?vw*Yhz^}HnkBjh+8M{jR<#`u!Md+hh&mj4z4tBvLc6%!d1c^1$8P6g~(Wez;
z%-YbwStZ4gAJ()?DGm}*J_2MxODL+$^J!6uhzUNb%7UsT#8{VOH*7-FG(jMcxJ;0$
zET+YTD1%5mt)x|1j&!kE$H%&3z^-14=<Q(TJ+V^8gE~fD8KLQJ1r%xsBfo}RI#Y_V
zJUwAKCTjRWdbYh)pl8iNQ}d8bx8o~WyXaT>jLH+IMNNzcekbBU5lIzg1VvENKx8^t
z^M7K-5o5TZIQ}Y@?h~oN;J8!z<g(K|&><b;k=A%OQsYQl-OMU-xw-!B!^=Yp;K=^M
zV19Fab+f!m*5h01iBl)nf1p(K(&%z&VCntC>(A??P5)*5TE6}0Me^$B`!grLtiw-l
zTW=m;JW5d;&-&fPr$1NjeZLdjN|9T0+Sd;6#?pngS2w7Il?R6b)w6i)+|acv`+~o$
LnpalSXV3ozjAmWy

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_beard_5.png b/html/images/facegenerator/fg_beard_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..446a853d612617dc0361adb8c090acd57002b981
GIT binary patch
literal 1108
zcmbVL&ui0A91j$96o+R$$Rpd)=Dnn8n}l^++O)1<>+B-y(JXmw<C?rQd9~R@1QEf1
zK)reKw1WpddYB+8qJnx<@Zw1jy{RYhr9Y;JF=2tcpWn~t^ZkC`_j_x#ab`AsGR<+^
zY;DD8vUxfAXO6IO$L)V&(+OH>(KXVhLo39b?vM=(YM#}>O>8+^{g-%w<5F$cY|&Qz
ztY#BWuo4>~_5z0HxP_%Su<T7t!3OTQev$wFc$WvRQ{>lkbyN?^xa+QLhj?wfVcOf9
zw(9Upi(nzv7=eeW1!Aw~M_OFuN4y$aC&!QnBNMt=<i}36>Z_nkLJV>O%Gf9`g1jt<
zGE!yrG?0*ppeR99$cRYG6*MG*$;UIb&}nN;qdL)IyCUDEG|(U%4u`@pE0C}QMO9TH
zlAt7Im_;Vq@~IVP{Ag~<VBp9O-GI8p2MMFKK?bzQGf&4MctO3sN9;$FM6r~?*b1O1
zAn18XTqEm<Ht}CK_O*`8tpLL&j>sUi*?Y9-reK!4gM|`9=8bkPblIa=J%iW-5Bs!c
z6nS<dIIg1=kRpp&r01)OQPD-Qq#9XO5#@@WuT&K^H|5w5D`!jD0;-nOLV+PGx+3d}
zt{`2Nq^yh#eTuF55w(09Pjy|UJHhG)VzqLJElNU@klwTcR=b3fs7nG+Udst0Sa*Gg
z45Q?E#?cx$bT4D48WInT@~gS~=ojSw#XZJ4hshaa&cLKN{wbE}5v#ytxmWsZv)4S>
zXB`u=*0>|xjaXaVs2RE$fB5=QpM8R6mft-zU&;07_sweV&9T8-`}pUpsd*U8OOGym
zyYwtI>cqnh*LLom`nCA;$NBzi*kcqg(z{O^-13*(T#D<zPha_MAHA6{*D4L;LFwZ4
EKcA;aiU0rr

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_beard_6.png b/html/images/facegenerator/fg_beard_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f1e2b6ec291def81e937b18e083bdd891e5db20
GIT binary patch
literal 1108
zcmbVLy>HV%6t@(Fs*3&ruyAr27>Lj3I*Dz?q;BlcNVt?Vq7f1ju6=1tYoBXhiCY9h
zh=l>MF|e^PAeDgu2^e7GV`E?e33cadg#~d=;sR1t5SDzOzu)`4_wKzL^K&OA#t)5i
z95>ONHCt?+&i=9eY`pKUePGi;YIW!W>C(OvW6to%5(dq{S;j5wcpGc4aFyc<UBBI-
z9s8u_l0a}WjF1KqV{=@!mPU@df+<+S%YLZyU!OkXf$!=3V#yZmsE&L7>}HG?Hs{*z
z=8CI&eC;@>rW!L4VCsN0SPc^`)%k&4jjgj|$b$iduIT*Gsg6Al>LkXXB#1><EF(~s
z1tg2AtR4fBh(w4aC{~I{)JhdiL}2vsOfB}hTFY#VwAfDPdz3~Rg#CVB=uZhGUWQ0j
zRVYeOl8OvbOg2L5q{T3q%q^HWabrKCJ_$i)(ODwvROgwe!w`bVws#DN$tY1QWiWLj
zhy)P^K^E5lozNEk<;Je)q`eVg*un`}k6rd2-N~HHa<{io24vo7r(&NyinD4GcRj!%
zZJIjIZUoQww2G+6Xi7B74aKw!gl1H8N>z|-8D*=XsHNP-Zd}<gM8mKeYNf)MmZ2c2
ztSBaG)MZJXLFJs=3=`^vF3xp*raR(VdvdjUj2%kiHX*Bd1<dydB}tD&puSKN5Lom>
zkMxu5d4|!NIQB1MuMv{~4Dze_yXaTszr{V|djFF%$ee*$ar{;+`4OwYY`IhVY_rom
zIAk3Yv(`9LeOqB|b-igC?eyKJ_opYGg9FpX6X0IB=SXj^-uZr%AFF-T3%2n2u-Sd|
z`rKAJXvBXWew?l8+n2v=y?E(faS9x#ocRW~_x(wqeterNaCaNymu}wr{4l#~T65-u
Ine*3v0yZf~e*gdg

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_beard_7.png b/html/images/facegenerator/fg_beard_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..71eec17b0f724bb9e3072048b97ee988c1053f3c
GIT binary patch
literal 1128
zcmbVM-D}fO6pxOH4hzFKr^QQ#FR~^#UDGyUb!(e+tJ*rc!usIDvgEc6TXM7H&UOPq
z_u>Q*@yR_114U3leDY<84wNbCgZLnR%snbh(0@SirXSOXF~vY~KXQJ*-#O==b1#kN
zhXY+bT@1qnvLi}?jzj*tcMtvEHD^B4;UG~<WDJ){O>+^GH1H$>Sxc*+0@94RnHOk)
zVLHlYu|!I_Q?iaNPV;TJy5&$b!wd}89ZjD?1WcleX(!n4E00-V8VPn>%)y+KMpbiU
z-bG{c`Jz5QrAr1ocpMDWWlCTnqJg?KZF_P(!8UkhI`_AE7Bo!ARDx|fRmzQmG<FdX
zIT+GmQ~=QkCq$qWk@`Rw3Xm7VJdA||D2p)}3ZV6{RLwQYazV+owCF0qRta%rp0Cwv
zT&<tOZiN>lN#bFc4~Ik4BIM24M5~8vueZ&hAWwHqhnUy~KBG2?XGwyko;E|UoLp{;
z*!Eh9qABC+n!^hm<SomOt6}Yt0{ZR7w$@&8&Ov+ud3e^<>3NiU+hCfzorQcu>WzHb
zHR+*f(+bvSEo76dl3?i{&M*x*2ICQ-A10%jxS}QnAtfpOQe23r$*7u%OJbX2JFFOn
z>6D<TQY=Q1YBCj%M3XS3rX*1eM^&|r&DtK(Y#p_AO{&|%Dm!B3w2L%?-6F=*?FtyJ
zVuHOYc0hVe<ODEo+6Jz9{_!-URgi0*MMlQO7HH&GHn-7_MgA6d6KniW&Uoq!?-$1(
z#nRrQ73fd5N}n#ang`jmV_e!Ax5m!hrfqdSt0ar{58pn%*>@i9?|hOu^VIybx@&#a
zJbaV`i;D}dA9Z%Eo%}j{XzBg2O7&SsqZ$A8v;6KdKJwtz+na08Hy>W4x51B%pmXis
zQa->i%bUTgJ@k^e6YP%FhN_fuWBujNV01Tg;!F1gb7LiNVer6}K3^)U=9T-YiG^QN
Ck5>Hv

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_0.png b/html/images/facegenerator/fg_eyes_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..41c7f620b35cad5b94ec726421ec5fa3a86ebe50
GIT binary patch
literal 1132
zcmbVLOK8+U7>>3|TPO$xY4s9PJn1HxeJ3_;(@nPB+FeU_p^H>7O=i2HO(spIZnlVs
zC$-?!ORswHAbL|23O(7253C@2@ajbnQSeZtPWDkf)CvYN&+q&G$Nc~8*}`Oh->E)|
zqWW`Fibm$~@b5WJ#)sC*M=}jzwTz3Xf@``5DcM8|kj~lqBGjO6)>pRS2t{>OtWp`5
z^E0A>Y*r63Y+$>DO;ICbfvX!!5Yr2A(Q+i_%kxc!woHkcOXT^yn}JnpYR!YiwL-~Q
zTQUTb85^ZX0+9&V5bJbcFFU>%NK8{#B<t{)W9TLXFG)<xsd9dn&L9uc36_r-d=k*f
zI1A#u5EstTQ6BIdh;n=?0(dcz5_v$kKZaQI%!;Tf*|sgRlb9;TuE=q<T8*v6SmZ5o
zKoA6uk8;sygdie*-NAYgas1(qf&zWRvs`Q;hYl6>1+<DKhIrZv!FKccePPFMCyJzu
z3v`zQEYI0?7*`YRV-5ax<3O}us=JWWppRBPgS<y&xI-qnJKRtRB;JS@J&QbwzN{c)
z)rJnvDH20&Skp4a6rYZR7%wNYX+@O*m=KhhkOpy8PO90okmzU}#FY~SrU;6VN(lg{
zavJaxsw~KSRLDe=YOKS}IX>1M19t3M#BQ6LIg~4AJg8&jl@MC)RKRQ%VdPhlOJ|A+
z7SMB+W1^ZLK2IxJ1$x$1Xl6ZR)6M*f)&cfY@qfkL;+p@HGmbdJg~jnlv2>0|1%}K0
z(kGk!=7A3B7>~5ZtFHqM(pDQeMJ@%6&y6R&H~16B-fTR*bJ{$4Ve&CPb8oxwRy*5!
ztEaws{^k8(Uc0<=srY(G`*ft)kcSMCd2M%V<J-F}d464+F7DMwX9#-lXV(M!+56oW
p*Bj_4MOCLi41DkYi^_OP=pLl*t`DfOAA>s~D5n;bM-x|W{sQHfR?Pqa

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_1.png b/html/images/facegenerator/fg_eyes_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..236ccbe446127f4ff0bd703e74ab7256fa780fc7
GIT binary patch
literal 1141
zcmbVLO=#0l91l!aHyJ4GqOuV(5rs9$>-v?rI=d!y)wPzkuzE8~Ue~ZCFHPP|*25e!
z4}yZoE`A&p(ZNvhrl1}@d6j_<MMRn6O+f^G>BsaiCm2ZHd;k1?zyHVk|1aco$9lT=
zc2gA9lNpl=WIgJ?J37htu3mdhmOWT5<07hHSFs_L)X*fPGlnt+3sBMKYR};?MRip4
zQW=-C<D!ZTR`D^cXIO+yQNtsirKr;o)01#YHxta4M^6}9*AmP`B+F;56s+oFbsHAz
zxsqC+Rt1e2IYJM6A`vhkR%p+dF&)uMFb!Ri?0qxG&<zNlPB6`&%Go@fLN=r$EFV<)
zD4?TZ7KC{rEDX{i9`GCpaeOQYcrg+ac|f-whIq5Jidc}+Enno6V5%5fBFDL|%eq4>
zvZpv82m;54xKJoa5J6|o#EKU*oq@K31Rd4ZEvzGx_7#;$G>a1qiL{x5VP&%$!lu(I
z6e$_!DHaD<o-+(TuLjz|1^7FRP0>zi&VpP4I%w8b$$eA?+GJ9@tsVJ55{-D$*2$$P
zGZIo~4QS$wlwimoR?{^x#>c~8h)+h-aY;@BFe*qxLL7wUWK>Sag-BatGj1{!PRrp`
zNQlJ*0OX_qVzD?+j8ZBhM+BkG&6o~WOcl2M>cnr03%2BnDH|#n*(HQ#+8vOuB8;3W
zvglMX!UB3iH#Ous{`EAom7uMkfm+%|2HmKysBhvw7XDY>O|JGoHRDJyoZlROG)vn=
zI?&&4v_3g(3=cHP#Mopsmbq)k$ynXWNXe47`f2rk*8;z5dwyW$ZRb__UTxcnK&|W9
zsRzY}rG2}57ay<n?LXA--eKR}SiVx6I3H-t<QAW$%kMu2)Qj%Uz?<^TrT$lIF9LlO
z_4Mq|h4t}o>pwosAMUwb|Csh|Zr9gsm;NSo@W6GdgIavqyZU`_KIfw{a!y(qJ$>#M
D{L)y~

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_10.png b/html/images/facegenerator/fg_eyes_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..1565b174e11c1098eb669a28e5bd0212cff8ff84
GIT binary patch
literal 1145
zcmbVLJxtV49It|MKu{J3986PIu6^&mU%dnG+MZnE0lB+GG$FCH4``0|mG<Esw@65c
zA#rdp4#v?%qbAP8FleGKz+ghcV2p!{inyET>v4w;$Y7Jc&)@I&|9JoZ+Qiu9zMk_v
z9LMz)M%5CVF9m<-G#j5-3m@1tK($F)CNs3Adzj0bWE%4YTc5=xteZ;<?{J#qI%cfO
zB%Lf?kqu&tdVmq@w#(QYmmaCRx>3cHpT@J6lM%kJZwS0)W`wKpA}G2Fp0h?99xgY=
zDn_GfAX69_=F@eV3D}tGeBGXRe7T+xnz}Mu2gj1YHzBl|5e}T1EKcwW@h~43LD&EZ
z$R}bVi~$rwLwp24Ai;<Pl3@tscv1$CZ+!x@=9x2cNzJ!xv0X-(qtulpsaC6rwWvtE
zSqUP9BoL7zkuXDq{UwL$^|0d)wiQ(D8=mD-i#U9ss85qcnh}_%2O-#Qv3Mx#_^m{-
zlu32nm7oYD+YaJtqJ3Jzf800{?N^puES0cN7CnQ#$IM`x%yM_Up#aFdk;grYJ&HcB
z5@XTE4lSq|f!&CvWy(pAioqzzCh{p&%R-n#Y80hlOv@&;d<w<e8b@(aE{bxoC_+g_
zgjzNg%`3T>qUMshNIsr`ZEnHwsqPrKZP#LUTin#KTv_q3PKj3`WWHSi6LW+Te~!4k
zQjUv|ziK%qsrkY497L;P&$@}tyhm)lnP1sD!oCI+4YHt79wmdgQ%RsARz*reO{h75
zgcjHQpPWg|87U}^zlx=O#40dY9+p1a95xSjSjTv*HQp?&46?R*Tu`%>`tH}=7u~Nw
z|EY<o{m=zX=}fOy&+3u2o&EmZ!q~t%T<JX7*tmGNlHRLKy}w@GT6(nE(QM0OhQ{0d
zZ(aUot+(sPwR@!pdmCG~&v4wwTfdgS+!@|^W_4Q+@0VY0eBM66aX*Lj@$Jw*#FiZ|
Y1h|pab5Copdp`xBf;Of;&)r!04XIFE>Hq)$

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_11.png b/html/images/facegenerator/fg_eyes_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..af48b5db1a03a9e36629ffb48103b18b6c3ae05d
GIT binary patch
literal 1135
zcmbVLO-K|`93KrMEFtQ$M$j~#f_CP;{g|B@+;p9p%>~z%b-^Vt8fV_>q%&`vdA6fa
zh<M0DL3F88N_6qiS?JKIgLEsx5b9V&f`<-XLVL68S_kvcz`W1j@Av<B|NnAn_<C38
zg-(WHx(b6@na=&uf9fP1*X)@ubm}I0m5ksTsT)3Gauyy(Y{4-mP#GE4+{^~*WtbB+
zyHX|9;*eruhc_Y&A37doGfZz^=o#h|BJ4Ptu-z=T^ZE_P+E$huO&3AYQ_-Y7IPas8
z`QeH=KV`}m*LRKW4HYWjAY!ngGwlXSnB^L}3SCFX0>?HWWGc%wovIc~tcrcarg;!I
zfe2YK#lsYkQ}R_d0U!`yLI9aK1WG!i0LUJE9JS_KHKnZO4{Xt0mYXERQv{)2uk-aJ
zkNpV&%Canggpf$YDIy-sxx@(LZqU<G&`@CdwnuF2vXP=Oj%P`hqn<WHaJ*viP}mI)
z5=B!cgoY<T9te&T#nnIuq>TQ!aU?pZ%y~#CqX5tPCVh`uPm4@*cf6qpNWD>R_%?kM
zV_L)Jtb<%q(6Su8;Vs)zGC)efB*=+*Nz-!>4#-+kmS9THiF#g=(=CmoxN=Gb8K?m{
zLy1t&<x&Yv6Ll#sshM;#DYdu-Hz0;<qLy8o+HG>x{IOg`^^rlaU%_~~RRN_*OmHxX
zJysn_^N=02T?^NP=y{saYRI?mA}jA>hi&9nv5&B?167AKXqkEt#VuukCetcXMNQNO
zfXp3mt^diHK%Ehy;`pmrT1T`3qvc`g)6HS?AeVNGPg`TzOK;G&dS1|Sm2hi&Yqe_u
zob4z*T8VXhejHm`jlEcW*m({tm2&TQ$DZ7J`)=%`e&ywqd~Y*s^y4u@|LN{KeNW5t
zH>C$ZFMs>BwzqysVVH&ey|&%%v9I3~AAX4U*EZW2rc(TLKGpsYrIlyf?PnOc9@`lj
Qy0{;K3i`12YT)+bZyirps{jB1

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_12.png b/html/images/facegenerator/fg_eyes_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..528be71ef853ed094fff2981f23bff30cf0a105d
GIT binary patch
literal 1152
zcmbVLO-K|`93PBABq2!X<50tRD%zPh<Ie8R<fgm(c5|~;Syx=>;yCkmchH$P&OF`K
zLy#UK61oUM7?jn;Lm6}kgggsD7#+exV3$6KLOcjX)SGqJI+%wB=6(KtzyHVk|8Mm5
zTx@PS*~BnRbGi#=>D=l6jfd#CXpX(3(+QHylYU$vWz9uQ%)rBlO<P(KWszn~j;*40
zhB;6$b9s`_Tvl~#@tTj}E0#mq4Ab6GaWs7d5q20AO*_hcTVCN<(};3|at36a1S*+b
zQ!eVC>dEO-Bf4U69T(X4ib@46L^QTyjoO}CiE>q4m9G6`fn%!>G7{x>oXThV*aUVF
zEAt?rgOJFEg1i_6N>Dk+N<ajHC<!1O5P>R(RUoppkE7OHqo8JCs%DGsqFjj(M-_x}
zxy+Z_c<dGhQBf2DNP;8<C?eoZ+C-}aY_GMh0FkG=rbA3@v%aD>jK@ioqn_@BU^$u0
zuCVRZ5=B!cR5V8rc_3JpA6FIaku3V-#-3;|H|ZcDi#$B;>hwJdt#vZZ-TsDrAoWJ=
zbxryx+9<^OxP@$zhEa~*@P=uqVGs$5Z6Fp(MPM=}ig5+DDG@Q4jD?b^h$7cD_Toko
zQe1){tb{31OvV%_g(6UqgL14524kSkP1_#PY#r6@n$&KM8`_tvCS0Tu?B*~Ytye%_
z2@~v<u)`+$WnN?lP20d_&wrksXd!aV31p;PY_Zk+s^%W{lOT~4Y0yea3HxzJ!T>6?
ziV`6hf^nd5HLmeLITNTef?phe6-)hyR-nJ!Eq%J#Z60LPj&W&g40SwuM%!vB4P&{=
z`j_>m%`@Q0!9IRrxMi{B)Ql)K&KR?^8`EbWJe23IHME@R>bkmeesyA#eE7UD_xjEJ
zmHx?UW9~C_Hk-eG4qf_G+F)PYoZsr*zP)w-0K+{0dV1;Z+UDAm!gqOmdHed0;=rv}
o<&RXTr~B>EV8cHY@7;OXaF~gAAA8?AcYMGHrIS7IaeQd{H>GZ3e*gdg

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_13.png b/html/images/facegenerator/fg_eyes_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..40c28717045b5faa535eff78d3c3667042eb8c98
GIT binary patch
literal 1130
zcmbVLO=#0l9M5oy8x9l{oFEGsD1uGi%hHd8*4ZYhtE^k?3hU7<d0oSnyexUMUHxEq
zP`v5EgW|=L;Ba`D2#TmjL2xI99TY`DL{QY5;C$)Y>0$0*An)_{`~5%O|9`14a;&F&
zUpK=rJ-H#RNav&BzkM4WZ`(7k>C{W~G8w}aQZszSq%Ayw*qmcbq9QV^xtV7u$uL_g
zcBxFt`C-Mx4sV1QzV3LG%`nNqx@VYEh_DlA(sonamxqrz*0xgIcr*|4o{FmWP{T)K
zjggYsm@;LH8$7}$>k1Wc5HZ-gGwlXSJ;gP36}k?O1&(b($W)43bE=##uqyTu8|6X7
z1To0QBpymYmgK{%2p|xkD1dkb0wo$(0AyPqN3Ho*MJa08mMywVaaBS*MG$JW8ebdW
zu|Fw5S(XJL3ZfXHh)6K!5~Ch*gZ{RHh62;KJz`^*4Hb<EJWEm>^>i%+$IIu}h25Z)
zD4H^%Zg>LZf#5h{TupR9is+9U8=`~KoQH%W3h=CN()XzJx5+ejn;Qy&)Ei~gx9Ou8
z(;7Bs9psXnmg49QZ`qa-2MGxdfOIUI(DXEf8Ce^U6HwCAF+H1*qiv0ixRNG|Q8lB=
z@w5n`p3X$Gx~geeJpuHrDoJf_&JBp+ny78prgmH0%%)sL^^rlaU&460T>*tECOD{K
zk5$K_JY>gh*TS_Re4e#vHRRi;kd^hZ!#4A)*c;f_p{hd~w49aWVcdy0&}3RgYD|l1
z86a~luJu1T6R0ynSR8*9OZ$jcV7Oc_eY#n19^}%F@o8)9x!<@++v<8wOPA^^pI4rC
z&4V3V3;pi9?)@*)H=fuJF5mieVzjt(*SBAh<sV;%P9I--dEt5Q#rGY}e%xf}6(5~7
z4t=oSvWxnidkd?{z5@(1-?!TF{oKMU^mFM=C&MgXy?gLu*FQw&CAo7igRbqqaz+^z
OLr_j1(H1i&&;JJ7QCC#}

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_2.png b/html/images/facegenerator/fg_eyes_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..5efbab8c36b77426a699e5a263f796142e5faa36
GIT binary patch
literal 1141
zcmbVLO=#0l9FI7M4u*p%IFS)D{5aSouT7gKu5M}5y6W1MuCOAAX36Usy5wcatIc|l
zA%h`^%&P~z=tW`ZNzucudK5gk9j0dyMA57Br61G7oM0gD^Y{DxKi>a;tB}9Y-*>!^
zqNx7tgjyu?c<>+WCF5grVT(*dI9<lmsDc}s3n|4wvyjeO+8iuG%~)J`14k)pf5j}7
zaXB|B>&RlY0K@v0L)a8GI_5i?UW1sPg>$BzV7|OsXK2$%Ff-8{pL0^MYECp=INi*b
z^kz+$3});+J?hIuz=Bw#eQVzKWIw^QbY-#*jyZ;IL2xa>w4EyF3Ums&kdCr^NatgK
zjtMLfcuA1X(qSI(90+r~7y`T;6=fdKosS{bT%#fv)lA10*(I1N#*WN!jYflQL|Ej`
zaX^wJjt_I;aEKs6-lB~)KV*9&T?G|-x@$VvL^d5LYO|=06AbaR9fIZLay!Dd*GUvf
z8Ru&b2Uwo7tRSuy+QUWo+l^h(UTM*RToHPx?&{<{DkEJo$=%+D0wD25o^nm{DB8S=
z^tuIYoK+JHxnT{{kVQT&fC#U|GI2Gn0Fac_h!h7xT8X7IaVgr>*o~Wv2q`54;*uyz
z0HhT~Op57vG#2GmA)JYTE;nm?ShIE5wQCZ)9j>@1S5CQ5!^kZmG~ca&LKR`;Rgpud
zrlTyNXH45b4KH|}cC;#V&Fj#}xX7Yg`IXIG?2E#`;%;+||H&CgoZ*7v_@h|5N2CIS
z<xc67%}(<`n{<pzTBCPx%OY*{D61+ZfAjO^vqMY#z=6WZosVaRl1^W3W#IHe|H|w9
z+oGiw2EN^BtX}&1;^E6xZ|!3K%F*FgPwp`klJ}l-x4~BE#Ik<3*nGGC;P5GmTH5}(
z&l<b`sXjdX<LdUZeR+~dd^q`j@O#f+w8p_k&oOFX<H(aK{oK<4luhT=wdA#%zW~F2
BRrde@

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_3.png b/html/images/facegenerator/fg_eyes_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..8802a246ae3f41d402c02c5e0ca5355cdf1757f1
GIT binary patch
literal 1141
zcmbVLO=#0l91j~49S#Q5gCbkV5Iw9(UYe#&Sgmc-x{9r(E36&_v*dM+ZSu0@)n+}Y
zh%f|^c@sfVbQgt!CqWP1MDgTJhEC5S2wp|>r61G7oM0gD^Y{DxKi>a;tynlQHhOTB
zqNuUloLVCD@!;RRi;R!V<xMgjz?ll3M^)U?Tu3Div<T^(r7gh{)Qpwo*Kn4ihO1_|
zf-Ct`ijFK+3oxv2IfPA7vkBkP^g6`!B3v@<IP>-S3x+n0II|GR^LZx?Yvx?rh4bw~
zS#Q^M*<cdK=viMO0v5y??OP4oQ~Ws7)m6wkIOZ6-3&Hg`({rklFVbn`LOR0oA)S{1
zEr~1;d0CWaXn_Yj2Lz6fh5)Zbq6!b_{>Kn&u2EG=YPN5S?BYxfV@Kh*R;$If!Yp!^
zI3UY1#|xYwga{(!t=L%eL$)_PP*9<#yQYIpWYdA7wuqWI&Ja&~Ay`g6za?yY{X~(J
zalYnofaN*M3gYUbJzRpn-PjiGl~)|dm7s^3u1?;gIz1qh-0f^A01|JM)2>M#MQf-?
zZ(7jCIW^9Z8`dxlCCbM{5ayFoHl}8h0HkC!EXRPDNlKY)OpXjRw&SMKf}E8lS&l|!
z05Zu~GApG;RgDSJNJ<Jz18&atux9IUVAmve``p-$TqW&74I{UVP-9R5#TvrMt09L@
z&qr85FPOH0T3+xxy=YbFnirsvb&*AP^Q)NK*pG_;io3@({wHS~afS<u<Bwt)9FYnP
zmRqGyHe1aDZPGC=X^od7_dBGm)^lpI>~DP8c(Ug*KR!~NzVYekfs`{^UmZWPJhu9(
z@U~>B#qn<!TWb&f_v_Eryw1tO+5MB<p4?$5rfxr-x(+r&hpy^3OKp59F@*{I=a1n|
y_(T59gYQ=2?&s!YaQ5-=y9sgVFIx9*HHP+5=g;hWd}m=|CIIC!1+|kpcjXssUR96)

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_4.png b/html/images/facegenerator/fg_eyes_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f010ceeae5c208f5a9de466282a269201ad9a89
GIT binary patch
literal 1134
zcmbVL&ui0A9FNFECKL6bn-@cd2f-$JUE4HabxWJn73?fsVP&8!OJ3KkOJ0_|+N_|C
zv4aW<yXj?gh!+p~2M7v+2N5rVC>!%OVIb@{Pn$3OF+I!)2J(J>KA-Q8_x;|_jb82P
zKHp7IR8M9^$&-0F_>UhW<8yQF8=3mBTEt_hgln1$DcL|%kj_}zG|WTIn4fzO2Px`k
z$t)CcF?&tYk;Q5OhV?CnuqkSA$agfo0x>-Wr%gM-Y`=QL(58`K#-mw2>!e`W9I3l-
ztUg-M>lIxzn4v55pf3>t3u2A-ty$ZX`~=g~mB>0c<`}vO!IcEla;lik(JACYI?D1P
zosR)J7GXhz7bD_jI?Mx}17VIALV%Z|g2V&5{V~LvYm}tCl5X1~y986l*pWD{R;#hK
z0T#K_91um3<HKAy93qI2H*aIj57}OSM?ry}?wSrZkxd7R+7znd1VcP+g<v_^?7pz=
zwG%~B#`&7V0hZ@1D~PL!_HZ8lcH=;_SD1Gomxmszx;lA}Qh$d`a(B3)07$%%uDd3A
z6m3>Pdewq9&L|0n+^~jeNCF>^fB{~PrQ?b!1CSJz0Wl6DsvJ|(aWUG_IEb5y2y!wB
z6j2aF0908{rsJuYoD|Y(G{#4j4mV?aShIE5v1<~$ZEosNu9R}2hLKx9Xtq-UxiZ4Y
zD<g+ajYU~NkDIoEYF_X>t!NeKnzx{lc9BIl^DCJL*cT%Iio3-%{wHS~afS<u<BwwL
z9FYnPmiwhoHv7#3ZPGC=X^qXz2kWG*Rx*lQ@YjB<t@bSNr@C^F8ogZ`%e_mhy-yb(
zcAw#wa`LC0jf>X14>vxmm!4I`+h6=<KOQm+pXi$zdYrFM#P4~_-ks`R{DMSL3wygq
xcAnh)zLkHu{&VZ~Ns4OByj^LW{+rN8<J=^*n>)Kb@wIU`0A<us<wbIG@fV^OT5bRU

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_5.png b/html/images/facegenerator/fg_eyes_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ff1574e76dc74bf83f2d7f9a732513d20cded64
GIT binary patch
literal 1113
zcmbVLO=#0l9FNYAF*cbOK~Z>Q7Y{bcYtyF5+HGl*x`N$GTUd`~$?F=|<YmdL&87_W
zwxd@CuY!u`QAFlphbf|0nXsd$f_R-5U-~gU%n1haK7YU8|Kt7tTjho86JwXg7>1cB
z&TADq&qe>}89F|-*Y@djk?3_&#SPLie8i|0UPhqk7%QlP3~PPuJ<2f5NW-qxNxgJK
zF|orL5rzvLkFpsiGaGt_xrzu_Mk}_PWxv1KW`S*G*`;JjD0z9*wC6W`RNYvpnH#I7
zY_YR5AQLK7z(K?Sq0@2$CCsutU4^crW1a;)2wBateW&WBGRR{efg~ryOd$n9O5~s@
z$fA4=#04nuFwP573<^q8QUnMFA4{$IRzs<1g@G-)%d$;EJcZ{woetMYaM)krp)AY1
z5a;9Z7)8W_b(a`n%nhc73K|Mb-}Z=&T@Wc6%eYOlEcLV>g5#A+hr(_!NEA&O9~vGH
zIe~YaD6SqlAQkl6jU&-PZQVnB1qHb6oAf;zQ$sS%-SLJZAoWIB^lkbmMoYtH+d(cV
zYFU=vaF%T;l8_c*LQqqMw5F>N=434)r=h5;DZP-ElS7T8xcQu($cg#9EJ-qix+<$s
z$|cjPp4Q^=LO~pIi*7&+*F;0RHnlt8=8okmc^?@B`!$SP!wM)jF~LC-dmvv;au6)p
zu7x{6^gR7&HRRj3kyY@q1A6&Y>?7<;;=khVbFKf$8Bd+zqvH6ZScXTm0;A<&>C??&
z^B|XYj89vmd*@1xw$)ZqQ)}T~ckk82J7M(H-1LX}?(B)_2d&B1FE4NXeEe;v3ZLB~
zpOO#H_S*26f$Y9jCeLqgUfum@k1))a&dC1V_VaU}zf#VHgYIJa^k2wxk1{968DnOA
T^U1xP9}%diFK91vH}C%f+7(Qp

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_6.png b/html/images/facegenerator/fg_eyes_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..126f6df285d7ebe0d1f6049d586aa68f5d6f51f0
GIT binary patch
literal 1150
zcmbVLO=#0l9FNGf4hNn@MO@50h^$FoztUvwX4kZ~Vz=29RuE)a^16jCd0Fzdrj?=W
zr08J>y?7D)fZ<`FARhb}>>%u-JMW-O4+9x^ad=RfFYP)#%n1haK7YU8|Kt7tHwOC7
zwY45=r6{T`o00QmKI{FyePn#BPrN77QJgB`K~%yO#fDTuLnDyR8p<flLq)4jEWsE>
z?JenrA};1GNGdW|#lx_!VG%Y(#d=&zQOgk1BXCqV<II;A3k<Dmab_r-<8xLLj_H}2
z4F_v|1+`XIMUCm{rem%|1Pq83+BL>aM{?s#T~{J&@0ergIs}*FOv9;SZh%fA8`5Ex
z_p5va(2)=eLcACfJLv!qcn$<OUho563JVes=&g?-)@-dL<>mC2EwYO<V;EZ!$5kp7
zwi0BKJ<0)56gfV?1p<D8@H<r#E3V&kI+_YHbW~fnu#QaHQ&dLKB#tx0(?$q}mCJ1l
zo6c6ENXj@@u{gl;oMCuz)zJ>l!{2V~h;|B93vzkrph;UL?@{V#l1c7%H{=0{H&VZ?
zlSfg;Wu#6T(8O6e&X5~c(=|!pqahIF6OnXOP9*^773H891))?Tl1fL#a8qL^t{g}P
z36vKFK?ER`NC-kymPHUCddWyYXmYcrgB4SSO}jd=+u#P%yK<$Z4Hb;+0z%`>3K$qe
z7&&9eqLYJR7SKbwsiBJFJx?QA8QS_3)Y3LG=z4x7eFytO=wER+xZ3~Zj3dr)UUB?U
zEX^ZQf!=bv^vPzsd7w!;#wM+?n4g#?Z8e{j69so=edS5pB7dl5`S|%e7w1mL(r<=m
z4=x_LwK{X=!SdbPpv8CK)Wa(aT}x{pm)1Vte-_c+Dwz}Y#@uC?J^AT5*ZJt>rReqP
zi{+nlSG(FT6Zq!${jqmn?e3|KjmWF@d;Q;DZ$7Q<p{O6M(!cEci{7<R)yGpt`{C6O
QH_eO(%BK3{`QG7~UyH_I;s5{u

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_7.png b/html/images/facegenerator/fg_eyes_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..95a18072e160053537dd5a995f51e2e9a1d50fec
GIT binary patch
literal 1140
zcmbVL&rj1(9B(8Vf^hK!UaTb?G_HMbzuPdeTRS$x1{n)1T(q=rtYPgd?Za(cOf<y6
z9XxR5U<mQY*@GPX5ieehi4wy<pb;+`BSCx}8+t$vHtGBM`Fy@V-uJsSmLKlvI^V@G
zOiwnW6zF`-|2xmnal@S3p;I4GOJp3ENlkMRBO7=cu~|!-K?S54jk(uokYPH?X0b#{
zxe-an7O(jjzHT{`%`k&Qbw|@@5n-p%jA<vh-KWnu)-)2_WF!Z2P6}1b%z}%?7xG1Y
zVOAFnZs;mISeK}Pg^0%1t*Y%w^#s?{mFU_(7C5#EA+rhY(5X^xj7?z|u@N2wbP$DX
zG|a;=5X0gXHV7aPU{C<D00dGbCIQH{K8{**jj~iw(k)wbm*6UdIFcaLYBjzV;;}m;
zKv5J05EO#J07V46hE243!1nsv3JUUc*K~-9ZPr)Rrtv&UaMaVo5G*H`I}*0NR-$Oi
zgu3PkkOzWg`EfPT9x0$dZXApDiVX(|1?1s*SEuh$?r)Q6?oKx31F1LCsB6+k(W(m8
z=PhKDtdij94R4r+6a(=v3;{Wsjw`ARVNz5=VjPB5IjW}PVx+Bc95)i9$qI`RF(yYL
zROO_cg7L7D7L!USlmw|ZH*0%Dvvt(AYf`%{Zums5lyZ?quv^5q+OB}H3MSaAV24eO
zM|j9inzn&!p8q_D(JII_Zy_V?VvB9&S2B;WufmiHY0zR?jQMfLV?gnPNkx^Yk^~~x
z;u`;xGl4oI_{H&8v9yn91^UaQ(x;oF=0P^?7?-xj*_F*Nw5`^&id?L3f8Ku5vk1CR
zZ}q|#H<kt-^e!(C{JOrWO=aYc&h?L<xL23*6PJg}tE+EUUUoDa@`Pb3bFj5`Z}INj
zk9XhRUsyeu+SqGMJle}q%KdY--A?s6`6(N3M!&Dolb!vJk$-A^{ZKvC%{<=kt6i+#
P#y%{o=9P!Zn|FQ#KyzFu

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_8.png b/html/images/facegenerator/fg_eyes_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..76a4203c82a042d81b80bb7004c8258df735b5fd
GIT binary patch
literal 1145
zcmbVLOKa3n7!7R|Emj1nk0K?cbt6u4Gw;NX(@c`FL!DY?MmiP*)8w{I+vKLnZ6_^V
zRCl5vh~PpOiYQc}AmYk}s35p<p{P`?{s5suH%dXgna)%fwF?8e&vVZAxZiiNzwbm#
zb6Yb-Q7yS1r9kHH;NP*GjQ7pSWilPaY8e;NFs^7Wq$C3kK{{t?Bd`E9V`lOd?4qc~
zVY5`m<@`xeM;5CE7}mEO!ltOMwC`y8IK=c295L+_v-0FALz_m58HnXU-jU&`*)!|H
z;%r|@pB>i)gGnE!yL^!dSP*NpZ%x>q=%<*fu1MCwF~`tV2p&%{>rR#P{j`i+NXJ+Z
z(m|Z3<58B60wF3KrNe*+93SRDBE$nRmJk6?*FJ_=bB$rKpk!;d$S%c<V(f?<SE*Fk
zN`yu32*(S8z=1Fq4u=RL<jvSv^Fy}RQCCo)r@N+uO=Q!7qBex4aEc+Gu7_Yb`TT~k
z?bQ-RQpWk3!|^QOEGvksiuP~;{&8bdv{#yOAXk7MnsRmW9>X1VGRfW6h5{h*Mm*)3
z<WaN<1?f{3v~f;JG316dOhZh7WR#BpDV|L#s>JgdL5T=SKB`J_HJcP-b&buqk|IZ>
zxS|RPLgZB`8Hs?bngBrNC6I}LIyYx~ShIClw`&r+HLkKHSCn0-VdRz&ny6Pm|0u%9
z8$}K+7h^0>516)rDqiqB>(MIEHK(DGb&*9^^DCO0*jIt9@+4>>D<p!rlL?>*q>ALY
z5?3-nU}{|Be{#kVXSkp^{wkLG5vjmnxl#ILv(Y@zCLQCF)_Bl3eulKwLQauN{?fOl
zhdW<@J=^-vem}C@{ix}a-*mmbv-d#PrRl51m-c1){QUCD?#|XL$4>8m{O+ySzOY*D
z$}NWZ_VC==vzx1*pG$N5?q0jMwz7J=k)nQlNq-gZy!kaYm}z_evxHtB#zZ9D`(bai
f;U8+ZZX9aZMGZE!eoQaM#sW}I?Nb&r=PvvP<pNwB

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_eyes_9.png b/html/images/facegenerator/fg_eyes_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e0686642b0de7b38fdedc033fc417509f40f106
GIT binary patch
literal 1142
zcmbVMPiWIn91asjhl7FaFcBA0L=QH3Y16a`t+Q#;tzv8G3hPBMOJ29oCNE1~*Q|#r
zA`D^3^d!6JL5GM8JPCU6B<N8^&>=(569n&~FI_u5%pDBm{mb`#zd!Hy%gu6WVrcOA
zAVpC_g-NwS=JVlu_z)Q%Tk~6F8pT=-PoX+)>mH=CCYphC!PaMC1?uMF{2Q32r~`GY
zTEn&CMcF_$tA`jiuwBBYsPuT?>P7=%dIru~PKNpZ;w3{{W`>zg6hYC=!8vQP<H4y;
zscLi@hGa71=je1G69F4yoeu1#<I6#Y>FUa49UgNG-G$&rhS_ndRxHyw<Uu;Yf~WyR
zo)!g`7l0&4XXzN=0msKUkc{#`P9$Z()4hiw);zN=SJZsZ7TIN(IgDMI<J#>u+m5ry
zo8@>(k~k3KVzDSeMEykv>p|4<BYg!G`i5t@*g_5+D(W++g)<ECbSDJcEf#l$9lw_-
zk}@vPU5;k~XWL<1U9^uY@Q)jNqW$Wk3%LsPQOh&Pebgg;GRfWkhC(3mM!w`(<Wlse
zij0;G9b8Z|4Ee&EmMJGeO5o!lE9O(GmgRXxQsYvJ7qqOX<x^6kudx?5n~3EUK@_AU
zA@W+5P!g(^RFs^QQj&SK&n-AU)*S=(?OMccj~m~YE9X3@W8_s4YW6FjJclsy=a5V1
zrV=bqPg{<O+J1OFJJG7pvlgJ4_mE9@^DA3>*w;W#<4Mp`UP^{>r;<RGNEPKoRa6xq
zF+HyNKRM%wGhA34e-%srh*V&>+%0{w*=-)^kdE<4YkZBoS|Dw;UQn~uVDsDN(<9fw
z@WFEA)|WG*iaXd?9zH!kwEVjCwqmR0;U7!w)d#`nhtF62jSHpABPY8(xzA8m)}D>6
z@LSOnH;mhr4!$}*h6()F&jXuF=?~lK^xCKGmG=8PEpmA8)W>7Oz(2(9-)#;YrPjrf
TCyyrHg?|>Rpq11O<;wNn0WMfY

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_0.png b/html/images/facegenerator/fg_hair_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..71b9a999a112faf12d15bd25912f67b1b4b43b78
GIT binary patch
literal 1226
zcmbVLU2GIZ9G{~BwY7;NYQTgHTcaW2_UmqMZ?`?$yW2Z^iC3EI1r8pR?e1J})9%i8
zciOuvio_Trje$ro#0N=zA;w1F4G1M9kU#)^FeWtepb}!}gNaf3N{!&`U9a-cK;k63
z^PidD@BjVZH#qQSXZwbB06=H1Un|hPFZiBbL;qh}<3G`DJ;{{F5H6Fd?jevg@i2lp
zTOUCMq?`5e%cuu{wz5?$ky8FG)xb8Z2N<?yyOa$;PjAiDjZsA4FdDI(1oQiua}2c1
z1hZYr^LaOoDpvoLhlZvGipJEap_okX8?dLQQUx|5I;`1aj<41dOhd0q<=~oQU;{!%
z6HL>oQhpGov4^0<@?nFI2{0CAg($B?l`T-@1)dW`j+es%uS&AY3vg*M)S73O)q<8?
zvPDk`rb39Ta$L1qWvdYudn25nC<@1moG6AVBJ9^4qSwNX-__EfA>Z&Umsr?=fku58
zPmlydJ#B_yyZQXGV#i-f6ipdd(_KzrdCs<jxEg4m6wrTetcdoDbr*33<l_m?p!Fzs
zwa7Ggk2e$msW<9Y&!R=q$24qA*vKI{Ey2(i*0fAj=HpQz!Y5<dxRyx@LQ2shN?eF$
zlCexSu1GB%D{-Z)B%~v8S&?PR%p_AXFDo%o5hIz1luc_bZqD(E?ii?L*P?cpxUt7_
z)wG9ng1sWfW33JttYCuu3U*<7NMZ%J-EvG^^@H*>qt%dSO(HYvVH-B`t6D4Am!nUL
zyU8{GPtG{%3>P%VBhAvfq8%8B%dJlj%fo{lIx!v{jl)9MCOTG&IW1YNUH|R+_nqhA
za~H=4UmtI~aC*8s{%QBA=~ta!UR(3tx{dJgwpC{zo|UXu7CY{JcJ%(CgFhVlc!6Db
z=fORAv6QIa`s8JBE%ff^q4}$uyZ6l9{qdPwH+L^QwYY!&#hc%WHzwZ~+W?q382WYh
zp4&&}%c;`?GpoUgBcV+n=I_kKUZ{i`6Aqr8|MJpK<HntR>*;w2?S1&yKWigY{OAh!
zx&G~Jc~!WH+xy2v-`%&ruzUMv@5}uiVCKO~UzJm{JOBRk8vFc?+ux)*z^=Ku$>V%L
eUTGaYb^x@2wfn{PlN%3A2Z&r|Ks%P&^})aAH;hLB

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_1.png b/html/images/facegenerator/fg_hair_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff9fdad91415b07bcb7ef5bade9704ae6cae5819
GIT binary patch
literal 1241
zcmbVMUuYaf7@sC4y+*4KEl34n*nom~JG+<L+uJppbnkYrIq=fsa*+7YlD*xzyX|HF
zba&(J#Z<6ROhHiJRQgaK6wQM#5kXr>D@~yoS}1LiiV>e0v2E0XN*h9FlU(#6L~vkt
zzM1`g-|zdor;Edf_Vzs20|3~YA5uzWKNvl+Zt|Wrk1vt!K%kBVBThAFY90o%;Z!ip
zTUrg5ux7N5U%~wVbXLvsSTI(2Rn#4e)*>A`v|NG)pnouQHNAlYSiv>ZmZ+6;^At1<
zi5le!Ou^0Kx;ZrE;gPA~vOd+&1%nzKfc>FJ3|KhOU}#O)z8Ff>x?PdT(KVvrx=PTH
zs12va3PqT8JPbLSiR(;?g{dUXCK(|qybKcz%OEy^7(UK2BFBpi3pW=<*gT^umXzEk
z7dc5(JqTP8p=Ps5H~VPEt07hp1jHmzA`vGVald5;S{S$e-nIn=`?_bkf$7*VvZz&@
z$v~orryC(yZlSPc*!DLQMN)=B%|$HDAj^v4TG#f268^`HZMFS!%f+aKeP`0sNj<8)
zZ7|8*&P0(S@kTuCnWQM%gyQIv7Pf=DB2nZEZJ370GwCGT$H=K%T2W<|%?L`LkY<yr
zoKkaXfot2?4x37G*`&a$0?!kqDyM~vAg9t?E}i4#OiFEI^R^#owvOApCgI)0Dm!Au
ztcSJ0@yd=f(e8j^-3c7O?zk{J!qF@oHEqLb`cZi{qE)bGzK)HY=U8w(zoNMfKcD=s
zxHquI|H&C5&Y-9{{?#n)E7F0HxYhdPur)l`CKKb4(fI29#RmZF+LKr0a(MghZMNrI
zX8+~il{04+<lj1mpB7GqPfA12TwluctKBamn4Xzy++F@|Ja*#qQ>$}bKXa?$N<*<?
z7jK-ee)>n(!F#~Jck=4j*FUbz^Gk1tWMaD)NA62!1#4k#`p8Vj+drOLe(TYl50_ii
zzK{OQ?Iyp6i%-q`^x%`)0Kd;$+4Bwn)6f3>Xz_<jcLuXB4IG|E`J1&T0PI}+zEAq{
z=-EyH#!Cmr4-L#6dx7Zy@9p~L*R}BUiDql|*5Lio%KU5S7sB~LvAce4diKrLSGt}j
n$JSrR)_O0+h_urxE<B7efP0tUzk1=b$a9cahm|if<0l^j1(1@Z

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_10.png b/html/images/facegenerator/fg_hair_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..fffa87703d64f51736aae5f9c9dfc5c034738495
GIT binary patch
literal 1078
zcmbVLy>HV%6nEOHDn*r8VL&H$ZR|UL#5t>`bz_G{BBe?K&4_DX605b(wXejjK&sf7
z`7aP+WMN=oVS<4HF(9!cb)aJAoW_Nr>QGDedw2f*-uHXCy>)+S@y?<k2urO^r^DrX
z@h;5s@9Xg32N$=Q+h<)mU}G;Of*sIZ0$PzbBpu=fM+cwCsvyh`!d{>C+Yd~iMv_-x
zq&!METM$;)^2GD^2m`xh7{-=(`u>9m!oU)D^fqiK4KfNhk5ke;-s<_sdp-`twR>PS
zH@Sg`Fc0L>ew>-PB~I*`TraL=5lkR#&l1mr>bJK+gQf)N60G{LhCoe|kOr}aSAYT$
zl#wDsql%!Z8zw|x`iR_H8Vt;i)13O^CrcbLmYA|U9*?E5D$#T(BaE>O6<JZL98t}V
zV&>)5I9o0)I3)AaFkvB$L1EF`rH9NCd8FqlL`l1SVK~mFh2kZXb1#vR1m!3y@|vJC
z)*=7GxD=iBjuIkwNJbA+pZ8<1T#|Y1u69%ac{Jw3G~`Y3_8saUMkHn}#}fG;DF_48
zfOQS2(5^M>j%y>dfgKgsk>=Vpw^_$}Y2z|(U2|2#wKZ(uCPJ=lH*30sR2|n8h0A)$
zZN(Y$VxN?LL+*FVRj=fljg)wdraemc%L&*XQAV>7O+cfoO9<?QaX`me(Vp{c9g>Dm
zNzhDb1Sa)0!%O_b4GdKb6~o0m1;pF#+I2-S8cLB0*2F0{xK7Pv9*kTJ$A808UhxSm
z)Qi#Qhl}MQG2fV!ug2NkpTGH94O))f%fJ8nQmF{S+$=mheP(?V-@N)d?0&v+3#^|A
km6^GP>nkTW9}AUv;nBO<=PNURJ{FtYa<`nf8&6*R1xcztwg3PC

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_11.png b/html/images/facegenerator/fg_hair_11.png
new file mode 100644
index 0000000000000000000000000000000000000000..796b54d77502878cae3bd2c0e28f1f452adb9660
GIT binary patch
literal 1182
zcmbVLU1-!;6pp&pt=Pq%mv*7+B}G`!Np3Q~H#F+ZB(oiGYMG9-=z~p@JDu1jH%)Gx
zv=9CieGryKP+#{&!BwQ_lZc?pf)9d<;DaEdg$h0>RS;BU1#hM^T_1|b26BJT_nq&Y
zd(NqW{@*&*|Gb{#xQ=3<R%Y|==>Kso8!y|F&)C#O^<g?ls<dwSn9EvZ6oaB;jNvji
ztm(<SxR>MBRPD+z9WL!rOyUSeWFv%*$Iu+tyDRhza~xAJipOkM<=@=A%>&y~`JrS9
zmb^T!*?luU9-Qf~m^0%hviMy)L2sxq0tZtAgwBK;D51(Xconvejzu0cOz61EFNqp1
z4S+oHF-Qt9X2O&NQVBsyK$Ji`fD9!lO0o#kF$pTkv;rm2{CMWgx2j56D>QwvoyylJ
z^%PO8*Xu$(E)aiAln_E9lto#NF^gC*?NTF*xj|2hLBoOR+a9%v3nE5iluS{TXG)hs
zaJ*7!nb-}QiDD@eL&Fm#0g8?j#nrG5Xc_+}V@2zrGVNipi~};|o9sQRJuNWH-M1Y@
zhD?pJ*SFcD7!w*XryT6kqNeifMzCy4NyAJ+io<NGkkRz4B;}A6M;R%hXH$A1gOV+d
zm9Uw7s*pn26iTClB<a}<(i8byIxeSmm`iH87PjaH)NoDQ@@q4{O>FX;SS9acgA%_&
z$V96G25N+ophi59A501o7_wc9)Pv}GmZH_LZy&~1!6y!A<X5p*@DFnc#t~#vQ96nn
zA*NrJ(|I`x1ts_<*7`p=6PXw>Dvqy;rFFzAFj_8`KHDre4|Z9{_^dU$why$kwt7(1
zvX$`3>&MqR{(&3Y9(G=9+q`D?tDWcJraWBTbD@5p>$_*v&deVB{T#Txy?fgqe=gp7
zeL7g&KUaDjuBvs99Qbs+bAetu^w)*6vp;d%$c+u*hKtwZ&$qtccl6^qbpG?)%Y|RJ
z9R94Y<G8oeC&`=DkGig??}FshMg8RuJ>1`D{=*IVUGLD5gUsUU#M-mf6A{my`l{|m
e=YQYuZ%J+I<Z3T|Y4_&A-Uw6F`?a~;$m|y|*KXPX

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_12.png b/html/images/facegenerator/fg_hair_12.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa30db66a001d50fdc0a702b1b780ff88f9fc67f
GIT binary patch
literal 1178
zcmbVMOK8+U7@k_6)v8Dj)q}?L;=xTa`%dgycQ;wP=&s9lv5O#XnoQf!CX*&pcUuv~
zi->qrkqV-s2qJ<P3yRMk#0Tm{3m&|Prz%BJ1VwbR+pQi-5eMd(|NH;%f8|&%yS=$-
zT@wJHIo&De>AuaIOBd7isxkDIZfl8BBwe_dlvM|TxQ=@elQz{plt-#QGV~a=1JKxO
z6pEyn*(qt*<Wx_FtC%)L1JK@4u~lsV5vB+A8CHy)zI~5n3_ZqnhcZIOPNIIJbJRgy
zquGKsI-rR<+p(2tuSisZiHOQn%t6bQDlxXISE6U{nP-`*2pNd6HB!Y)j!9w%F(FRy
zX+jt>;UEWtf*2GxGkyUIJoNKI#0Lc_6p;kT%nX)VbM#&*FQ;Z~(OZn|C&ZR`zFaPI
z<p77BJ|2pq$P0en@Apv&pF3g^wc@kfwz>uxxte3x#K0EgX;gdgFp060Y0U-G&SYj4
zTkcGtXvp}AYV(j2c+>R!s!F>gkN(h@Q`#+z*oe;~7Y{oc%|~xr9ZX|4zadYMvXOQ<
z22F}OC}VBdL>5WQF_wPebVHXSLNo{iLOh&`%1Ru<geV8ZC=4p`u#$?3p}LMau_360
zm4IK2#QhK|@n|9uNYPBB{7_B?!(ttqwp^lG8mikhJi9e4oEIx49i$TM6fhpFS3s^G
z6YTb5n@M(sILLGxmX6D=m!6upGIEUlNKZM~WUBF%j5+KpFsVT5w3rejp5M`kAd8fH
zGAxJXgh091u=@YRjHhIHuQ>iHmiiN|K<_wP`t&l}JjkLQ<IvXFk)QP1@=02b7b<T)
zOx|dID69teTW>5{)cEpNU(24;7p|a%sq^2~v|M|TJli5~I<x8XLF4I7^8L`AE}8hY
zF96{FrRC1^iOW|nUOxHd>5tue-!+^cKKylj$@=k$M`Im$YV7WT?DU-}V{&TQ*`Esi
z8{~#ow!SWX9NTdG-A~cT<`#fw4Zo(hwEfuF2tbjn>OA%0=n4Qzckfl3{vVeT{IsS7
WoPFm`jJ|rm!2_k0tb9FDI`SJ6HFCTF

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_13.png b/html/images/facegenerator/fg_hair_13.png
new file mode 100644
index 0000000000000000000000000000000000000000..cfeb350e3c6002463eae9588635d65bb69386d3a
GIT binary patch
literal 1178
zcmbVLU1-x#6pl{(8SF(wR1{+Npr}pmZPTB`R?V7pR_z>Z(J^0|CAVAXk{gpd+YSX4
zRKy1#eDGBfUsTljG!Xwl1qDG6WC#krxQSB{1yRI#v$fNQA?StV{(ay1&N=s-ligjN
zZLO<X8HQ=gZddbk-WGg|7t;SFYyT@ctt46xDc~}x>K<Yg6ZauDYwP_ek94!X{}D<u
zOiS4+_K=?3F4@2~uLl^uX1kQlFv+boS2rq%uzjfCa#GyKn|C<YGE>~%Xb$AuG#aqB
z4|}LE+*LG&D~4opTeq;unoJGYi0Ew19&~)Umg1)E%5)tZ3miKQA(a$2<5W+sn@wX6
zu~8m`3=o5COyr>mBvIPLh5-Zu3=1G0f<TVOWdPa6;Ha8smgT&fX=u@1iW?xrl?9<%
zt@70fkG*~YN|Gdiun-Q1C?e$79irDlj^Ez2pd#P!ESFf=VFQbLA08qpj(R#1g6-yV
zvxXhNktmunp{Bb6<bhz@L0r>lpXAYRH|9k9#kz}xJo537XVCX3w>QZ&cYhZOfYcj#
zw`b8u(Fav*4B5ybSvAGc8{V``ISvvci~uE;NvN6vVTYtfqy!W-C8lK(QnYDfE^Y=S
zG!;ToiYs9VHANDEqC_(psHR0IM&eCw*71q%7^tahQQZbN@>i~$_K;4nSHyU*SpnSx
zm|%YZyKK4;<srM*a!g$HgXfuvRz;q50GSyN+w63HWor(74W>0ngO)N<Jcv6H2dYG?
zC>>K{Y6p<G2G{(boC(w!At;VNiluo(D==8jmOkCgHV<-W$9S|g?r!eTXj?tbs!Fl;
zVsdO`$$Yqsd3tK}So_$*eVrq>(B!qD1)ZaNZXB<yu>E7)*}KXsq2=3=&Y$D!){ZB?
zte!{dmzUmOadu};E9^L5zWwrPotaoun)-Nr{NT6V&xOIt_qWo6`qy_O6H88fe$vJ;
z=U%VAe&yct=+wrCUwWhK*3V<!9R7aj;>5~l7e4GOB~hGV4!{4gDCqZp8KpCymY0~W
Vi7TfMj&9f#Ftb{hdbOi;^cOWbbQJ&q

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_14.png b/html/images/facegenerator/fg_hair_14.png
new file mode 100644
index 0000000000000000000000000000000000000000..77479294a72d7eac32f63d4f615efc63797eb32c
GIT binary patch
literal 1177
zcmbVLTWHfz7><ZjrW=Ba7Z76<QLxE5S#JreTbHC-XXogO_CaA;a@vM1IWal2-2}nm
zi{P8SDJY^a6hs(^Afou9gCT;VIK2Cy55gu+d~k>-T|0dkA_j7<-}n8O^Z%#1yLLA<
zZfIl}rYXHg&C<C&_?I=%@v3#?HJ#QIEl+xIfs}O*F-a5mAvSI6MU+LlIdo(kwKB}&
zf|bjYd}g0)V4K$i3}3Nb%4V3>wu-A8{fMxAsAxF}ZtC`3j<w7LcQBFx8CO9iYtOKU
zdWO4l#&EwOnOxg0wzVQt0UHsWt=I#OFIN&=Rad6#;8@_;DunbWxH+ftnQm6W9%3Ur
z2pJ#>*=U%DVIYO2ova8T5TGc4SO@|+5|aUBYad6gd1gV*s;QbSx=U~+LR?u8%H=X&
zZsD<46rdzY0uTjJ3{gbLA99FZ2|50jx`K*)!?RpsVTTPA^*%gE5*+n(E(F`nWafn(
zzm_PPGNGco0_1^U+d*7av`@0=w;Kzh{oIg?ge>y$pl8tcC~T>dY3}}RC;(D#<o%vS
zA4MNfu`y^Phosd6M{ju3GUXVEhhYmyMpJQBOG4NosV!0*hP7l=OU0!~U1K4xmK4R5
zA}UfWDMF|vB_#$VO@tsWwxl!-)VXQLC%R*xx?PLft#Ld4%9Rxl=>&T@j0fr!&|Sg=
z`z7qMN>7A`>_N*haoG=^XD(V5dDc;6raWx3)%?oVLiVAeK^nA_l43#J@fc7gT184!
zjjA0$;%Z#;e{v>JXM~_Q{wS9E5v{;rIbZs8Gv7SOp&jGV)_Ase?@roQ<7qXSt4w}=
zey8a^SlRG6e(7QJ*&WuaCxzwP`j(|Gc6Ls!+5Y0hqsQBpv^5?$IeVSF%kM8=;5UDK
z`Sg(8Gqh-QWAE6^$hr@+qovWyXGfYDruWW@TZfy4;_**Y+NRlw^W)ziJ$SWs)y*Gg
z=;hn5jc<M~pD5m#nYerH%VcPB)oF$~c5lkRGJS5WN=~#dtv39>57TSEt?Xsa<BjkA
R3u{&fytLM(Uhn7~`2`vzb9?{*

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_15.png b/html/images/facegenerator/fg_hair_15.png
new file mode 100644
index 0000000000000000000000000000000000000000..451a91f6d4991d800854db1a69dfd9d98ccf5bc2
GIT binary patch
literal 1170
zcmbVMOK8+U7>*R5SjB^auNqU)9^7PRceA?*jhaoey5iQdU2G3Rn<mpXw8_L|>ZU!2
zkBg!Q!GkD@2NA)8ico|KJ`d_qL`4x1K~yL{K)nd!q}{C^iiiWry#DX|-*cqBZENF#
z6$==KX)JEj%XHonfAi+h|0QS7D>^MFMi=S8eWYpzh*53ai`b%T_M<W~?U6kXQ7gkV
z^f{F-(pB0aTiE5zScZ>WpQ0J2b#vsK)*vEmFY0$Zh5K~l7RNfa!gY!zQ1Uf2;A|TW
zP{(Ln#Tp&7B%9m3iEWK!O5h@5vXMLFg>s~Dle{ur$HxN4PKuC0g_|;}tJKbFI6$n(
zgM<Y#kj<odm<Cc>+Q=pW1OiM7Ae(?d7PB&dY;AB<TVVIeWxY_-MRy7}K!`63LbY1u
zt0^7_{Q{IENdQS9nM_cLL^$FRGfH@2bDcp)p%pkjaj?h6jAkz$CJIL_opQnTOQmUI
zFRTTMhD?Y|Uw}LiTsQV>QaU7M^xKRXrNhdIkAyM`@o-?#eDpQf!8CS%R}>3UYvi4Q
zLz7|->DU@}kw=QU!qFSvc5FEda%q?XYNn9W4Hd$?q^G1DOdD#(DC8uu&M^~K%!>J3
zPS>TZnu5?!RWWO58JHK<6lK-4I=1MA#Plpw*XvNdHLUhmtgHpdBsi#GJXEiM_5n<A
zIDmat>kxU!b~>Jot6`j;DQ|TYID3&@2(Zge##eS`&~HG^fYfQJAZ25}b6KEEw2HKh
zp3(C_;%Zp?e_|$3V}!Uk{wS9E5v{;@IbHg6Gu=GMqa72_)_C%9{chS;cZ<4OiC#=R
zzcc?HSjgONAqOVjEWNgC&FV`X(aB@4_i0TqJy!hkp&#tcty_Dd<-!i7`9kFe_<r<E
z`1sSQi+37szh@qe&s{aRZzOT?$Mttl$2PRgVh-Iu|84fz>09I7^bPQ@G+n*<tb6gY
zw?q8#Sq$^iTXcAPW4E%C-hJMR4+x|A2h^5v<Lgg>ZHT-5-^PCL%aR`E+}V|Le%zaA
OiZMl_O~0J)Irs|&U2I|i

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_2.png b/html/images/facegenerator/fg_hair_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f59e6c4787d5dbfd1dd2fcf86b32c495072faa4
GIT binary patch
literal 1199
zcmbVLTWHi+7(U`EDp>SIQP(A=pa`AZ=8`#~qs>e*I^xtaoyB<(nkHx3&?YA)r#sVn
zS5SodB%=5rMIXF8Sn6w~b{7_r3Kok9BHMjY#0m;^cj=<wNjuZ^p@{5(<Ug1H`~Lg+
zw$?ps*KA$`09c#bs}-nh3BOe<>Hm&>_zx;J5xqp(ahX&M9|6_EoruXfMi(j|!|Ff$
z2sHz+ylfXsq?F&UnAqWrP=~8J9z_Gtyu0cdW)C7vC+f1@6#IVk0n6A{iai+53wbYt
zy6wFKK58FmEt&&8CbZbyyO`#xLJ1s145sSzx`9$nvGcqN-G|pa%gn2go)o*_R4L!a
zWU!BzI449*At5q}7$?RA7=ulWB!~hpO1vOPL_vwmiXbwz#Zqg&RaOdGwq}c-QfxON
zp2G8$N`<RLIqY}wB7~3^BwmstR3j4fyTqtQ+@P_}prOF@ZI9U4WkN=y6Zer6OFdl(
z!SV9>MPfIoC5onuuNodNasux-VO;at0V$yW+*ndODE51ZFQ5ST`6jJLxv>tWx%;-E
zP?3709Pn*g6r)$eW}kyxlG9Qwec>$IQe+_+6QhEf$R;&i6~#2vqA)4ObTy%8lQ3TA
zSPBbcvL@+z49YMoin^-Ga#~L$B`B&<n3ghiY|agc;hLy!*QR!B*yuO0O2$V9!G00r
z-g*bLbz_2qZtO9c_Bbap2W{8Fl^`t7LbMw4?O%|U^|8au=U1_purH*c5QTyy>rf8k
zhEP|Nk|bxOFccVLYgp_5<cz1z@L_X&)hzWZ+JWJAvGwU;ad?nRC&s6v0giv(PRD9G
zr>Vv2i+9hrHT>4HZp9?`>-F_7!MlOeuNyqJVVT@Aw0i977H0Ctj@yoYswqG9@j~xK
zXI7exZYk{h{Yp<^@IDya+Hv(r%ize|t*N%16Ve+>`|rfbht9MzJ2BTZbFTIB%+1HQ
zkG(%ydL|hoyWZ0GvEdIhhlb#pLr*@rqxP{AC&upm{X-)d|7p_sIeKk$bjMZz#)qUo
vhyVGje71N*eYy;QkCly+RDACm?|2&-2ODne_%v6!^eRN<^j7U|y5sa0#vXxp

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_3.png b/html/images/facegenerator/fg_hair_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..5acf3e09cc6360d18c8f1ea71471b8614c1d5ebd
GIT binary patch
literal 1222
zcmbVLTWB0r7(Q#FX+ziQgIF!%FhyHzcIM3NZDyJ^&d$uHE8Q423kf2nlbN%dA(=VT
znG<)iig&Ah^7bSaq)$p7L<I%0rRqy5Mx&IL*p?Qd)ZU~}Y(v3P&m_BPA3`5IFmrC-
z_x+di|9gjr29v#y_5uKs<?VWv&d<c(n)~Q~*4cfUPLB{{jEvwqX_^57s*T4HQ+CY;
zsv^^#*?k1{1JG4>YGY)qvO}@3%b78Ti(H?w0q7ryeAAjlgc(N-$1AW`zCXk=j$L3!
zvlUqJH8kODZv|+iHB_@&la_3=15Y#kkwOJrL`)`fr@T;!3ha`uLf7#z&oWC8GFf1k
zof@kQGa3#MljUH_f;oZ7WjG-N<&50Nh){sMAo4Ju5}=aJD^OtCgQeC2yRKCAQri~Y
z71#+ve1+$m%_i4Ob2w=5f-K8C6nRlhQA8@7@rW6vyl_)TK}Vq#I6iT($Ha=}IG!d2
zmU_Azg6mf*E5csbP83ZUADKQcaFBQ1IIbmhNUG?z8>^zj+Ki9*Dhly*VA1!eZ|aa~
z?(S|V22yX7=K_a5iaDiYYuZH~DeDE6-f*^KD|skogfvuhB}q3_K`6?4T9$;2q2`Q|
zBxgGst8vp(Ru_$YQO>J*K`>NVhfpfYnl4F(CaPkGTlPX?dKT)~b*SAoSG_A&(E?-=
z9MmwL>Qun+1SU9~z&@jmWI2Hubvzq4!}xiYqt#L1yol^lfL&%OzlyVpeM8U;fd(y?
z<a`{rl!v-Zt4Pb~IlTyFw#~KwPtJJi3?CQA9mUc)q7@h~S4y95R+<NSv||F=8iOZ$
z_tCbxUe?uGbmH=fACo`9b#MQ<;j83eWBnfU{ypY<FMND>pL*}l!LvutEgpR6=Gnz9
z502NLNPlzuRPw{4&wn&`?KANPfZKkMKe=)E=GPax`pEk)lkSaF^~~Ub#n*lpul#cD
zdfx{_%st?@#J88`8rxo91K>+NpI_WBKK^$%3&3BAON%?MwyZ7yc8xy9Y&|o-K-n8+
zyUxyk`rYK_2NIw@u>QRN<d%&CZyK-MdidAwy#Va&`FC!ixOv^N#LjbnP<S-|&TRcq
vQ@eHKLgDnQZ^a7l9_;xtLFZM5e|}~y1Pf28t$*se76Z!0kp4w+*Bk!<6jqFE

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_4.png b/html/images/facegenerator/fg_hair_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..651a18aaae8654404e32f4faac4d7fab33ae9b42
GIT binary patch
literal 1198
zcmbVMO=uKX9Dl8~O{~G7y;wX<M>GiT%zLw+Z^*dW-I>)bZW1;t21+55nU`cpX5KjS
z*4;!9^-x;yB7Q+AB_4txwNOt&i$*<^Vr@zfJw%8BC0>+3X%D4B`)0G7_K<q$gL$97
z-~anRpAGgO?%MYLHUL0Z>4;w8YhUzryv^qu&WUBd>}JL=8=_;ZZUzM8Y&uGWl538W
z3Nh{J6W^0w0Je-d)nPVVKB`*OmCOhuHC&&w0qD&(eAAjFOc*8Oj;D!h-`o`i$JWH-
z$ucba1v23rnF+|yOn=pynY6GiW)BIy4V4RU2{VO;JLQFHLlc{FRlbj|Wl?BC*rX<|
z8#P=W6bdvTLQ;Y;3#O2eN=PUHaRMI{6o{aV6d9&t2&&1n3X#wnBG(q!V`@b&wsi56
zCQdNstFm0L*QI(~qQSU~Fvc=eWJQT_L@b>4nAwPV;oi0corG54_{^c65J@ygX^m+j
zw{+bF*Dseh1bbmCP&{OE!}Mh&LD_X9znbWfRmeYPY>E!6(>{?aB&4;#;`tcc+a~ka
zy<SlS<kqMIfy0wxPU+ODxx`~7T@(3>WIMK+hM5G4!(6JE(TyBJd925A1|^JK$|z=V
zvMpmXZaiL$>xGn#)3}I`k;~+DC4=%PqvVZbK54YMB`;*AXOXsEhwE)|3$Nv>g@Blh
z231O@+7&Q3K^YAvs4o<Tk`fY*JDyGJVU(VAZ*>wlCy8AQs4Fz%t2&$Lhj|R+7%FK4
zrz5{H=JqQ}x}Zd^;Dp%X+W#kJGB-w!isN6!(!Syq7;QI7pC2}whj_eW0^S-oUoG9{
zZM9s|bJfPui>0r-?!)e_KkXTPw>Vc`>^Q&B{lmTP^9vonIlIr|?J)^nu=;-ele~w2
zxwsZw*m+?7+Vd|z`Eko!{Y>rUn@=;VS7%d~o!R@H0IbxtmDAd{H~)C(JZ29TzqpuP
zo9~%AIo<=nnZ;f6^z6^4?$jP#y_H?QvHI3Nu&`(FsQc)<&wqcu|H;6io=Y?5c7nNg
z4rV_}+{xlM0C;t5$EWfdzVf2;!{(2mIrUxd{Hx;tfBo<A@v{#W!0JfP-Ckif8^KCO
Kzy4Kz<lNsPUw&Qy

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_5.png b/html/images/facegenerator/fg_hair_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..18807bfab988ecee0d6db0574dcb179d679c6394
GIT binary patch
literal 1181
zcmbVLOK8+U7!LMfEff?ysCbC!MZrxb+2_PvHQglbid)NerHiOEO=h>DO(spI?sgGh
z2SM@XNyU2b)`KVrf+C7HL8YLe2<lA*D=H|0?@7B`JrofG$vpCX|Mx#n4D|PQb*}4V
z7^W-NrxxhCJ$yUb>37DScutqKL@SX&Tqae+M~q_O5ya*kqk;;^u%;&NqBO&_l<i`P
zl=3@e6Fa;SV)&ZlQ8vS*x79qu97BX1K^5E0aPMy1;#k|ta6|Dt$a`5dYWLNBG+6I1
zn)NXgTHLm+Y`P{>0}dhvTXV+UK(1xDdAl;*ht~qf&O^vphFfr|lpkQT*hg%f2N4q_
zL^cuQ#TbAwxS5rJ2n10QKr$i%Ii8e($Tl91s`*w~E~t7#i=HyvC?TFK2-RwpuSR+7
zR|FA4C;&;2qzFYsf+?36wTK&ZH!Y|rFn!x2Hg?(2qA`LeNrt1IE`;EC`TU|`H)te^
zrc9_Ao*?o-aGWr%d2~Pu=(ih7qJ!d;hlBzO@T70jdX&4HWSYCb3xz=Hjl9dZX;F-E
z6`PX|a!F3jaP$vv*_NCHshAiAN<vSmnj(rlP>sTr7}J!5rl(-MX=5pFOiV};&=r`3
zx+rRj5>r!JRMAvDuF--dn%tZl5W_W5Q`e@t4KDmESI+v#AlNTrJl^bpfl*9wFp51k
zI~eChcF1-uTn)nVEJUj!-#&mW-Nz0)pI_NtLLc-%5QRWWYA_kb4WXu_Bq^Dd!cbt0
zYjCaq$(cZ%5yIy9qgk3)v;)KKV(Zhx;_x7sPK-}SV`JyBqjaq9=TxOwdph^{O4l8*
zvTb(FmA3BL>y=i0xZ~w;hd$g|zjo^O`rbX<>Z6>g9U9V4o=!je{$vw(e0nTO_A~Y6
zPxyW8tMtucytrdiZaKru@-5S!AI{x-!GE0*(&Yyqr|_A}TlP*;u@^&MK5c$)w4Xb4
z`@^@=)m>m2GuQIt!j|CY+ldRSWQIAiyRv=e;NjO4`}BMpq07HMm(SK$0H!sy;my@Y
Qsf!^ir}e9sdWMhv0)XpoH2?qr

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_6.png b/html/images/facegenerator/fg_hair_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e2b168ff2b7a0dc97cd761043a5f1556205df37
GIT binary patch
literal 1183
zcmbVLPiPcZ7=IxeYcN*u(iX&Fa_!E0Z+3QP-<UP-?#$?FHx0W>4JgIQ%u6!O&b-OY
zi@V98Sm{OZ;K_rE2R(>VT8os@rnG7=3KA8eieRCCE`@?f3sz{UZ<1{E5Tx|M%=i9$
zzwh_`JvKVBd!YZVegMEgb&pvWa##Aj)+hd#{Fxtxc#~UWyul`T+leVCd2F0Y)xepg
zb?SI?GdJlF0KF4_bBvGG-Z5MjC{C)Qbb?5r0T>$YM2<U6xin5E{jexMUieOye6J|)
z&(%;Zs?aHa&wNZ9^CL}ne%d9TJiJpH>KMX6K)EAzf>xLqoua&C*AV;k8p_g=3ZE{@
z%TA5eMx_disgzSt#zlE7<uwIsh-l<(NkteztU{z`Ffwwwfv~i)WWg4D6Gq*%SGdHf
zC{J-784$MHZKa)6SUd?aAp{~7s%l1PWRkg%JDp6J40bJ;G;w1;;yw$d)S@%aW_eK-
zo-T(FM77$g;V@ZAlt>xuI1$7Of<chRwWOW!I(^~Bn%YToE~2nb6E+*Wq8<~2U9iaA
ztBF!Y;f?Wb?2Do}Et9#k0S$T8EXv|V@qEwFQ9;95RLa{0(<)(HCT5ltux6F=mR%sZ
zu8p;@S|M-e^B57G*ce--Lf$M}Wjj|UR#wa9^e(m<Cfo^K+U4~H?=lwIuf!Uam^z%r
zO~zW?4j7$coF!8%k}8dyf~Ea_=&^Q^mS;Iylg9pG>e(?1q^0~C{u=zKOi-2}Rkw(q
z#!ZOuUsd&rnubC&c?IkJpPWJA3{0EjrDo|~i4IJ+tF12%tHVP>F)^_ijg0>K6ERk|
zt7fU$dHDPN&j+rfE$i>Rakt*M+~YsW_HV`O22pwbe(S{1Q$3r4`j%1e+>OV3cON@{
zVFB*=^~~v0)AyS1gAX=5So~+#@tJR$TC={lv;lz22mAhf^z4^g+n+9+8~%Io%(V}{
z+_&S#$KU^UsTY91zP<ig`=ckDPM&>s@$2EUR~9$g;7D@y-(>RVxgUA}_{8Wf|Mc|A
mW&jR-wQxj;|GeI7z@9$v#lCHKVC#<qDXeOZn4gvp9eobnN_24m

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_7.png b/html/images/facegenerator/fg_hair_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..d4da8eeb2cdb5284a9d1736df3a7302670c9c20b
GIT binary patch
literal 1190
zcmbVLTWAzl7@l}35)GzkA2gOuMv73~nKQH3Gh~|1?#$MOZW?zNvXoSu%$&^*$;=sN
zPTWaqX)B_X3cj`a)Tch!LaQi!5lj?(5U+g^T&%_RAquv630hRdGn?JC4?#)?=3M^s
zfB*MizZ@QVzo&a^H^VSJh22_-?(aqay4UFXy}kb)-L??DO3JuK8itP;)xu+lEjY$F
zDj~y~-hTxRFwE+jU8$04@dMe!4sS#{eCT)-%`gLlp=X#Ah_GX5+;$ai;ruMe+LpqN
zB#WTv<xt(;J>#SD%uvOgnJ}Tn4Zh0`gfcbYAY!ngGwB9$sBkU2GCfCPfn!@LWJ2MV
zoT?Uw*&Ox}o8&>v1SyeCC3rCbU;^%9B_IMplmw8Di9k-KWgxQckE3k9Rg+6vzRg8%
z3Rfq@lLevCXz-0VkNt5$gb)fq5+o@`HDbZEON=n)2HQIpG!&S=?GYQhY-G_G!&5}z
zsHaOII9{>1Y}gIjiJ~bJLc<e89te&T#nsXdND2Mp#){fOW!ghR2?cn{H)%a;+dE*I
zyH^uMiqsqVL*J%FF(x%^PC3XW1x?}T3vbz$oCcYM7zb)9pV4$x6thr^!;F~F)s&vk
zz+}h9O4vj`sY@v}4%09%in^LrQyE>?levtl#`Ai*gDtoLF<cXMcx}qt#!9cm$~hky
z1p5_?Cp#T5T*m|lb?mXZa*`L>5!<zJBZ$hg6s?AQ`v9`?K6cnver0<FevpMA4uO=`
zVLFN%LS4;BQaUF^p}+*!##;X;X99Ibh??VH&C(Ik4vdb=txqq@!-HHpF+LrQ3ztSe
zqGNTtpsAIx`RLA>o=c#2?Qq{OrSj>nbAP>_T-!I-d+lQHvAK1N?v^iL)>+@*zhm>?
zAD{f)Qhxn(XJOls{>9O=x2C%uyt(gQll`tT_)hli`E7mAjyG?vVVGNAcinvU@Q)im
zee>0xjnyYV#P1)tv-#xd=H4P@-Bg>q|NI1*pS^zg=>R-hUlmO_!+ieR!Hr@0vU2e5
wLjKQ@*-uVTS@ZGL&$@QDp8wPG;^)1qHZZ~HTh7S0Z=8xC1${{SF}v^3OWJsLKmY&$

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_8.png b/html/images/facegenerator/fg_hair_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3010e73be6acda360632bf66309911119daa215
GIT binary patch
literal 1188
zcmbVLTWAzl7@iPa)S6()gVDZ>BM54D=A7Bf>>0C3Haoj@)s11ZkW^4JnK?;@Wadm}
zPTWcI&`^BoLqSZT#T)n_NYSE*4^l|g2f;!m4>sBhtstV5f}jXWv3h2+8+`~O9+-3a
z=l}ly`)^<Mbbr>gX5$);<C+RPwGul!!*5lD?cZDDf3af&&Gpk>GDIu7hq;VN1~Ff-
z^<iAXx;Z(16Sr|(<B(PEr~Sn}szGc~4|T-Ab{U%E+ByPPH%2k#2l24wq=m;n{v`00
znHKsIMNo9Jc*NQ{<>B6`?y@m8Y9LeSXy@Akl^L)x)%n04b9^;O3st)+yN6;);HxTh
zG%YNW>M!>2S>j<nA%ds@l8{fvMHmMtjy~mO0D%N$2`Etr)P$k}$k&#@ym{u3TGH}0
zU+k3@MksYvNvc#TVkIULZ&-o|AqmKmEJv9})Sq;y9z-2~bKQc5eZ#X{Y7vJIE$V}0
zf~Ez=bTI_mEf$vyJAN%uEM-!lyAl+EWZPj}Rc)V^@EaP-YWw9$7fU7VlL^mY^%&Y*
z2eaJ0+fk^<*r<Cwixov5(}*!)V}};Bw7~v|re&%MNX20cWRm%mmdilcg|rw-!FVo{
z%;i%kQMa)iHkr?Anxe@_L3s#snN%zZ@=6veAQ1!coKnXY9G~irf$M%P=C_80@5HKE
z59^e8WkSa49ndpEDDg*#%V&ENBINrl$0QX$EYD)J8uqM1*vxyx=BxQtt!4a!E(Br-
z$Vv_=VcZBY{<5rO<uDW!7iw7ZLvkiDGE&$aZ#7F@#5yp%F10>;EDaBK*u;2jG>%Ls
zj<B)1UC=V+;P-!jyV!IctXnzXx@lpcaa-THYmv1#BIhy>wtaFT^7ZKz>m%FOef;93
zSQ<ln=VoUQpLjZdwAJ`y=0(dXskH0Y<9*qO4f8uXgFB5sAN$)@zIfSr|JlOrmT$P3
zTbB+@{qpVBJO4deePw|Os>^MDzQ6n7?(gLPgS*2!IBw?i>CUq!&vXRJs)Gj%bnw)Z
u^wnmLyLY*L->Z-AHY|ePXTLh=tsmg>=eM-}`42Z2A_}=~?T4;`FJA){N^~Ls

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_hair_9.png b/html/images/facegenerator/fg_hair_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..69fbb166b7784e6144f50a31482ab5daf610c638
GIT binary patch
literal 1211
zcmbVMPi)gx7=I%x6a<4&p=s>mxg2&N_OlZwd0s=C#0gEelq!uzB&2Pw{hC;f{fzy(
zxII8Yl?FRZT$py4*sep<HpBr`{-X-PsTTxW4`|XR?XaT2Vd{#sY0pj54XNV5ll=aC
z@B96}Kkxf|dSv+Ej%|Cl0RVOs2emR=2g0v=Gn>y_M<21}O`5OLQ8G@Ox`#o=Bx9H>
z+IkI_v2IQsy@&e%h>Tm6Dy^2@R}EqddZ;4=w#(1}^z{d>ZcJdxjp3T*r1{pB8$4&3
zY5uTMf+aVH>(=13hexM}E5`JMflR*t0M{3&jKIcJ=K{Oo_-c^mS9w*o55*$St*X$8
zG~afrS{mVU#KW8-z^DNe5|@YzQXHZ<+Rw>Qf}$jgFd3Dgsw7n?achHT);x1uEo+4}
zTkMqP>y)~xC^nl-p&1j1R}&?KkO*Z_mZMA~>Q6aT52B9W+hNeKZ+MnVE#hz?qdrC^
zX_{xAwnMPpQfZyo@z)Z?QYHqvD@p<sZ99x>Roka!{GS^eYWtNb7mH==lS$8D?=jxn
z0khn_*ifj*yipH%7JC%Ep%G)!#ttoNX`bB(re&&0n2Jj=m`M~;T0SF5S)|2KN{Z(*
ziF_f2ln%#+SPe;ul#)bARFI^6CWYjf7E|PGDx+y~Jlnw*9iQrsfjf4s&~6)>cp+BJ
zd03~!s}R!YRKQ4`P~z8#%jHHDLE;Wuj!Bw+_&n`sHSAfRV6)&6n_JDVYHeU2W)X}b
zC@1qM8ODte^Iw*eIXMgk#rZX?`7${ZnKNQo9RDkpj)+xYxLq%Oc35v7?68jUSZmA{
zdNZu8{wQjhO0c-Jc<c4s+%9nQm+FbGzkb}@m>0ggD>UZspZT=wr%lh|SIymD!KJ^0
zSLJt`Zw&4(59Jmvyru30*CI;~&%ry@E8otxZlyk#0hsCfvog2y@`uA0pZ+@aWyw8o
z{rsaRwQFx5ArE?-<s$ndj9l3A+rrAC^3h_?(DK$HFmrL>i1PKpWBn`F_qDc$6mzY}
z7w1~XPwk5UP@mf}d-jJzp}4d>^JHP=y&FC6yaJ{Nd_`o};h1^66gjyafNy^8{%6kz
ho7%$X=DE)<fe48HzJI>^wc6hBs+b?vzR!Mq@?YJ3gJ%E$

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_0.png b/html/images/facegenerator/fg_head_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4ec985cc0266bb62c46c623e5ffae4c1e2d6988
GIT binary patch
literal 1176
zcmbVLTWHi+7|vq1+AbADL39@hDF}j-oHO@?j_oujqXV5<rUTXowP|vu4Q+B_a_UTH
zw`i3rf)5HRh&TEq_#nP0c-zHYAG|;<;*(<aL8wrnLiK4Mc2A}=-F+wu26C?7_x+di
z|0jF8ceXTdZss_yCA$md+1wHQYZ}>j-8wkSrcG4qqrId^OS*@-v`GdqpSATtoX5I3
zcJK*q<G58ttI$XLa$Sl+Y*7y|V%c^Xo8#Kr%dTz=W6BTULCZ-A3-|sIc*{%)dty0|
zb5%TK?W%aVx6)lOD#M0s3hg`iwz9$mY)o~&Y>zm;Qcej~U4^ZKV@cqv5IUR^mYnL#
z_3$e3Fdq{^$N+K3$D<;Q0y!#g=feO335F$*2tlC45(<EP?Gu<a&nzl=l&RTbyOc0Q
zsjEm*sZ<h65s`R<5|m|G0%0i}4lzW?A9JW)4mo~nT>)X=@GO^F#Nh))eSnP8l)yY)
z3c+@Bxn*I;uO*75Oe*WH1Vtd(b`Vz;?bAH|&y5w)eqqeTQXczc)HB$76kF?Lmb<ST
z3V_TTWw&RsN6|+RF-C3d&@4&`>_#*#Q%Qhi6h=Tgo=GAt4PmE@B61Q&wRBv|B;{CL
zV<m1T8IFb#(Bwoq0-=`fj71Sb2~~@MNK%Wdb#B)2sqPrKZr5UVYh3hIuA+Kar^G7|
zGE%RAo*_bsKSW$!?Tv|$-(xu@Dfz+kEJcg3XC1<3#v?Xg&97puU|)l(23gQ@Mot8A
zCldh4tcuh)ila^-3pK9!Jvoz@Gg43-|0|aI5v#ypxm@~ev)nw`VIAYK);RZ5^9j~g
zkFzLUD8Ksn`eDm4enVrw^~=e9cPIb4IeG8q`Y$gFYqvIZz5evz;zoF2_Mb-$>Nb4g
z&X#BIf2_7-@y6)q7UNWjZ2xmko8G&c<7UoWn<W#<;;*lq@pp6Qk54zO<N6!VUY-7J
zzAIVmnE9c~`{r<ee&Ko3?JG?$82-}rzYkBeE>1oDFms`2@b~?@nVC;-#yjSBOx>!y
fT~s*k$g@fl;4VLm{mh-7@&fU!){Sm-_8<KhAI@~3

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_1.png b/html/images/facegenerator/fg_head_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..d84610072fb8c16de0d0ad6aeb50a1db2db25dcb
GIT binary patch
literal 1183
zcmbVMO-K|`93K%Z1fj@7b{fWmmv%nZ{hG<u#+}_<Xie7z7lLw}d8@-Z^TwHHJ1!X}
zUZR5v6?Bp6kQ5OSMTelE4t*f$smv$>LyJlyii!$*v%1zn6dIWK-v7=2_xpd(iI(Pl
z73I6i34*AIH%Upn?{(j;Wq7@;^}fPe6^f=&8_b}bYym=4VJ9Hty4(elKvw&EAAvf8
zD9vc8G)gD-3kuX}+0~&P-Na~usB3UcS;+!Kc7iU=2vbY9?^2|uhN*Ucf=!qa(5*G)
zEzp*4PAU1U!mCt6Jz3`nm_P?eCLO)UumvYf6?g@FcCQ(VEU2Jtm|AfvooFE=&;q2N
zW<3fU;K+cF=6o#g<9Cx@mSY*t%dkNY#|r+Sz;fj3Lt$%{nh}yxY}FQ)!c;dxrob?{
zT#nAw($MN+IG*Pj*2{Rk9<1T9`wb*J9>cCKGDyHyEX_n3G)R|G?u30POkqz~LeR}b
zVvX3aR}+O(#yGOca5T&4x*JzP+eS(7*Nt_x?Nq-Bm?W@apQYe>WU7l`oV$$;xr*2u
z;ee&#qR2fGRQhyaptuyK@E2OuR3XTQd|WLn24W#8Dso&SFV*rP&KDH}(O8K07dh6$
zhS)&FFGd1<Fo=;+G34dEVyzgJ{Cq$Pa?v6-ZrDgR6i~FQVY{nX|Ats0VgVUJD+OUs
zu>)GVA%b={G|5PtpXSJR%}`;^cFVI8tpqIX2vB1d)X74A1#KPsLEmO^uVB^x$r*#4
zVch2Ur&)?uxC7neTI*wBZFqozC&t2~F;mlW43E`RToO~x?1x#d{2p6b_Bxi|o_pX_
z=0@fhTPNQxwsuZjs2U!vJbe_tPd<L|bNS-*s68GVf9d;Pn99MiuEl}-JLjHmIr%9+
zmb_j<5WY8;z8*X``Ril;`IqA(6ZW&_Z6$<2E~EME9{Js1M`;1L>5^VpTHbNxcg;im
z51GDI`g!h9=0>*W)Y-#}-_HEF)-Zz!?#z_jTo|6!2BuzMss2gZU<nZ%;j=@N=Vg~a
M9&MJcHg*jC0YXQ9BLDyZ

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_2.png b/html/images/facegenerator/fg_head_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa7ca1b862ca52a5d80de9a60d4aa53e957d3f5d
GIT binary patch
literal 1208
zcmbVLT}T{P6uu%zn_!F3(AW|fMreKL&d<)y?#{TI?YOgB7hPl51vgEa?l^PRQD^RC
z=IX9mXzPQvP^3tq4+&yk6G#e8NU0J{D1u1|wht}%&<6652)2D`O^7t@oz*pc5DOic
z`+L6cJLlYUKI!UwtNzd{hX4TenKm^?<~RNSxjHglG|&D_rbe79;BM51OPULTVxV3~
zWh|{9=AdSbon3`70BZZpd;u4-9kPxrM)Pf$vgHso0I@{b(expRsb1J`+Hv~#g(aFY
zjX2#SX1T1Bgac;VxC^_-JM;SZkS-Z?;y4v6%Y?v!Sfk3;u<gm^I9=hD$=W|=X{us^
zhvM{(Q-y37l|(M2M1~9KT$rcAA%+ieQb>A(3UWNh@<Eo11b9vsBQnQRyB|%|T%%9U
zsp(xUvWwFL7&|h{mP#e2BrwSBXL(7IST4v0g8^a@@WyPcl>@fdRAo@1r@N+uO=MF(
zqt=T?aGWNd?u1}D+3X&%?d>Ltq>L?V4$CtfYgv9=6>AUY;4?S&wf6F34rFuCLnE$E
z-lMOn3MRQbSjaad-pD6hlRSzxtRj8Hf;P^mahlvPhH1zVE*jzmP6?-@YD(exR!J44
zC?85G;Z!;*iB*pMuu)M;3rd)mA`ya2DN;mAr6Y<U1(PBl2}P^ejO}5~)?roGB)Yp;
z?m(=ZbfJckn@4E4S^-@H2qSL*IaIP+WO%B_v<+19{O8$;R)wxP3XQajEUJ=U+1y8;
zxc47%?_iDplQWh$!}`VXuVSelkqY#ed!<h{d(8uF(lIV+jbK;tGtyQMGpdp=uWzp3
zte@mwsw)oS7pL#dPeiBgN2ewpUPyj9J$?K8@Jib|w=Vp$&@kJ2WAX2|XQw{@Va@w>
z>h9r6XZ~?|`^UpG_rKm+q2E9A?a>i(cx3G2UoSTc@10vs%>9I4`xt=j55M^?@!R#y
zr$ghHpWK2gOPei|F91+n_~4^!m;U^;p{7E0z_6x>iPsBrjf3w#xFasi@O8%kSRNJT
zV_ymVS2sGEg~XLF;8Q2IK{&$aYuX<@-+pPU<w`98k58hSI#67Wo!VNw{;DsLNp-51
ITZ@zb0D|O&x&QzG

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_3.png b/html/images/facegenerator/fg_head_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..61a4987ceb713316aff3995061dcb4056012d471
GIT binary patch
literal 1188
zcmbVLTSyd97@lrcf)Es#mN1MJ1?^mRXLoi6w_JB-b)hv`w~|0`oH@FK&YWrH*p5pV
zDhVROmkI)jf`sfLf_e}v!rpp_j3O#3gdP(N#6Y{ASzYTv3>uho`Op7-|NTNsb7Mt$
zbvZ#06{#jUgZFy>-%y6vJI1k(c&kE68)}7JD6cwzi0iNukSSB`1{t90{l}hyI)Yf!
zWn|k>Tl#>cL6cT}9ojQ(j3$V>{hqCAJphrNpxdxw)b!Y6iZt{XbtIf-({=*njHZGE
zS_{ott<a;1I<<cvS?5WZzywGoJ+s$xB`-!5c_n=I#SBFjRZvfiT5zf@-9jdy1IRGV
z1~fLpkrAHecvj@ay=0K(ScVHStPtQ>DJ)1VM=pL8w&v(vQbtZL+QPROl|#su7$%?3
z)A<k$oo<E`MUi2HOfVS08UeT8LaG<A+}aX@3|!4IY-B)-^cmGo*oR^i_H-cx(@v+C
zh%I+9Q8;Ccr`ilhvy5r_aTT>)lmUO-SXSH3_S=BT02lT-8m>oIZ3&EXx3VE$5ql#Y
zbPQY+wO58(p9w6Kl4BHpp>;!-1UAZZAvPXKMr9?=aSfsz5~Cci#3M>FDuzoO%VDDp
z2{Fj?AyE)8Qi(Sx5m{v8NhKK)gs>o#uqn$$s-=OFT?5-)#0FQyN(l$32s&8^drKYA
zl7k4kIcSrK)-cVHM+{4cdDkz`LbNh)jN?F0I?yDG`IU@i><j$A;$Fb&|C2KYJHz<R
z@mI5yM7RU}<5KJ6%hK=w3r~!LN8`}I>RouOUZv!C)_XVg?#0F@?548G<n}$=MhDJC
z&z~C|m?WykcMg&Bxr<xEm1}2yz~PC@gJZR4ZXNy1JCT=@tBQkJ+r90__>en&NhzG#
zJ$xI>s^>>$_uiYDdwu<c_GseTjdjGE^$%vh&!M45kK38{)85-p%-5RKI)eBzcE5gF
ze!ewOWct@K`F!SC&CR#5haZ04D?nBnoIU)j5wlF3EIYw(mUfI_f+tR82hn+cXX^d8
Qt5<x&l+rBUZRj}r8?bJA(EtDd

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_4.png b/html/images/facegenerator/fg_head_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..12c4420db671b0f6c4a989cea21b2e1cea37bd06
GIT binary patch
literal 1185
zcmbVLTSyd97#<131WCvUC2N|BF0^ymoxRN9w(aih=0a<-E@%&d<IK?=bmojR$9CPI
ztezr}B8UnUN+O5~f-VnHK{x0j%a<M`(jX$pRtO@hhdQ$t>p>JcFz52m|9$`cWP97*
zy4t2%f*|S=tx^h~dz`OkCEl-TgYWRsh+<u+1NNe<Yyl#y!X7{-bh!_tfUFJ=z5p!*
zv7%Q?ccHH2K2d=>Ejv1NPB$@{AX-8>Q&#!`B6~oeW(2AE`;RD6Q-f5eH_0Z=D9C87
zc?)#p+tNzDUlCL)w3}?niI_kKNG5aofMJWdAXVfQ@!b(K6j@Y3{XweaR9CW{j6w^L
zUYd0&tdApoJk9Z}zze%bH_NdM=Vn;Hi(^HvUt~G5yeMqVQhUXe6ffJtuOO8{$P^hS
zo6XW$4-Kt8h7$yVVcm?|?ZO%^d)Pp7&Slt}D-05_6-zUb1`X0-lzZS13R2k9QV6=4
zOfC=`b~#ZvWlT;s8IEQdU3cOtYTGCU{<^WKww)d}0h0nY9I_N#kKWA{FwWi5h8#ug
zjkw>^a8cv|2`WQ6Fi=7YQuq(8YO3gG13c$p!@hVxiiJ5YB1j$~!11xLFBT67-U`QJ
zSb_IO!a__E{C<p#g#}iKMA)b==J5uwkgs49hK*!H0TsI%wp+$Vm&A%u3&;psX$S`@
z9nhYE2-+EFlF<$?&5@m&p~9@~l&2J}1T5_kP~#TV$zpy*Z4vu^ez~|ySoME$#$aa{
zr#b#<mWl{>pmSYlef(G$9$?^!vG8b&U3we9V>OkK!s*=f-1O9{$87z|+4%Y$h1vMz
zZ2V#1SmU$i)JFZx<&Vd^AO614aPjM4cFXB>|5$v|Xu{KqSNDgxiO_kw@ZeVKtJPN;
z*5a9uhVG14zX{GvpM}@giEC~X#IKRN<Btwbp8Edn$d{i_K5saBYrb_SL5$3dRp+<m
zpJ%FyRLgBg$6=wyRe0Y#diCYu6H~+2@BIilECtW(#D&+J64eAzf9}9Y74eDRsy?;0
Pk2-{jSetY+(tZ37KkIqg

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_5.png b/html/images/facegenerator/fg_head_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..3f95020741e2eaabbb2f3c6fd26e55cf6c801bcc
GIT binary patch
literal 1183
zcmbVMTWHfz7!K$}$A*F^-oOwqAlM|QOD~D7Gi_2W*g3kw#(Z#Da@vM1IWal4>4vBS
z5$A*GlPKzgh$!fbf-oNxK|~NX1bt8#f})~=f+B;7c+#!YhvC3L&h`Jk|9(z(cI<9#
zUe`=fRBLvRk|*=7;9t6gj5o}KlVn<p)gIi1inyw|kdh7559zF>m0%ufM(yAen4qXd
zMYGU@dvbdv9a*dv$gsZU5Hv+4+I>gU2Oy^VVac?U%$Ixj8QL_GOm`&5=bSVwn|p>_
z*frEq(1!+e(O}wl(g|N81Qx^^?OTJkC;3UH&MT31aLh4uT?7v#nHi&ca-DP<xsZ;q
zd`Rb`fQ||*5O`4#x6@%B@Eizpd@KZbDH4--K+k>*(dHUODX(N^b&*|?DP!zN99OMY
z*=ie$+!6;wQRMhA7Y>JrM98bzSo1@+x2eIPKu>o~2b;*I14gYMRdA9amd?0fIl0^%
zvF*(UiiC{wHHQN%&skRBS6$k}dHBbSd8NHV&4FAVdZ^;+Bp=014KRt_zZC_7#2RUz
zYm%gBg9_3s7PN6zNiyVyHB3W_@o@pP@p3d1S5z5*l&G|caUiI2RL#W2NP}ZOteBG9
z08m6R79&Vi78M|;qH#VgsDi)?nFcm%dswq|*wAYdy|dW(Ke1BUg&Ia~0inT01$34X
zMqU{?bh<0T0=nC@4OI1l^vrmxK-WA3jf{&dx*lK2oJW65Sjg`gtnoiF<A^a_P#k|1
zOXG-CV6dDkeX^Nr9%z$}aY<{SPY*=WR^wSkF8D7$zm%IF@++DqGKqX*bolhU$t&ls
z4xc_dc1ImO-!f7=(%qb^J#AUG`FZcPGq*1+SzhnSHRAN-#;4+LwEfw)^ftALq9!Kx
z-7FoejNkq7cKxTy#bv$J(Zjp;k00RPKbju8fBe_ivBw8K?>I|dir3ZBu@B!bf!;dP
zLc@d0?=S2~of`H}yfME`_I*jbc=dDRD)PikwM><_F5Y~d5RAdqebh%`i#@(!WicSk
LsvXL$RNu&Ntm1cC

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_6.png b/html/images/facegenerator/fg_head_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..46dd6ba992f8eab4dba78034cfd68bf2748e1489
GIT binary patch
literal 1184
zcmbVLTWAzl7#=kVUQnp!p$d}21blL5=4^I%_Kex4vopK8;Ks07n$UteJ99P}lbJJ_
zIorJ$L4`gP3)MFf@xiy2;_b;xXhR<arNpXeX-cIJg^Cv<2wD+o&un(14?#)?=3Kw;
z`!DDJzZ@Fexqj`IwH(K-&+XC+Z2ma>S9h`TTYKsOn>N$TC><tcS~YyksTL_=kaLVN
zT)>7^pSpqjIc`<iE{@XC{BFf0j$nisq2_pu&2jw$HP0|7Fa;$%X1ghV;o1*8u&oq7
z63<I{Ps8K(u7;0?8-qo&F<~N$ANUCL*Ayn;U}}JxGwB9OEyXu=6}AqKMIJOEbRxws
zIyIUf0vho#hznB0loAjmVgigwD2BF!s01YuMny@EKuL+qiUdLH<C!(zDk}v&+p@)W
zDSn(%PZ7mxwJKEm1mcg05FsQ=Q85~gFhnG%yVR&f+@QCupyR;wZI9Z-1)-u*A{CnA
znWu{(I9@)#B<u#QM6r~KHNz93Ac>9>#??dzw1D5bu`D_$);%m1a6l@)$=;*f+a|Nz
zz28s>WZo!ye49OrF{u-?;$WBN^c2r-1k1J*SxUxWpQI+TNj;-Nm_~XZO2Sx1O=Pl3
z6mM%R$4#oyXk63NNLKqG%&2J@saaWzC)2WwP&(G;=G=f9u8G@rZDzN{Ro}~1G#?w3
z_(eh{+Z8Z0PACb+i3hadxB$V3?OLQ7gwL}Wt&V;Bb8KaO;(%s;6?+-`8K`9-3mRpS
z9LAlLB^|LU(h_<?PfLhzajpN8Gm$wXhQ;wtv9ym^1%}I|(r25c=D{xO7(Z-{OD7Mp
zw)#1ztHs*<li%QmA3=B5AEm1Y*L*#@V&=%psY>Pf#=!@(zkadf_PxZ`1BYWL7M%R1
z`RV$=k&g6S{o$1j+FzZ`-fWz^_~J0Uet+GuXK#)d?yTUr?mxew;)S24?QQb(`A4V0
zO76Q=H>3Yt-dkQ6IRDw*p1tL1{QC!#v0p#!{B-0g%62rB{>w1i^UJN5ouAA-UTD1f
p`_0U)xvri)V_P|H_Qk1=54p2DdQ1Dh|LRPrl*<h2=hFL+{tE`{cX|K-

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_head_7.png b/html/images/facegenerator/fg_head_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c16de64626a9a0f4da761586bf0345563b9d852
GIT binary patch
literal 1180
zcmbVLO=#0l9FI<h4t5ZQ&7m$t6#QuNUe~Y0)-G*YSFv++6?<@Emb|uMOJ0_|*=+0}
ziU&`65JVBtiw6(Giw@jG5D`St-TVR_4B15(>cOMFbnEmmrWnZk{QZ9akN5vy?CU+;
z+S1X&FidN%M=8*`+y6H<)A6n`@{vy4NTx*kahcRq2Qjja2N9by)e0&gRUaF9j^Yf{
zR5pqwQpz8dG;H#!kKsMjrfi0ZCp}x$h7e%~QN^$l+~V|Ojy3cIcOskzc{`1&M$fo|
z`p0{V+W3$r>Rj>=8}}qCU?QTjo;hr}l9%A>x)NRc#{$RJA!I1QEjd-n_pxd0AU4c{
zfCeIvjf8j@0%Ax!zy<*X0t^Zu8h}6wM<oE+<&UG*9K9?Rl<cxCx=V0XLTpJ8YPA|)
z>*BFf5uhlF0tgDhV1Ob5?wCbXFJQU58VU+>HOH`tfi2coR0r`WNpRHDr4URzpI;HS
z+~q{klnI_{3y=qbY5H;1(Jm>V-)^jmc8g;+5(>!0qmD-3qr9s@rny_&kPoEZNXHz5
zK8iZ5U~SYy7Rf0Ij^6OPp-WK^3&AcRN3t;`BSV-Hl`b&`Lm4@e$;QNRLt{0r98+Q$
z7=mInN|_ls7S6y_N=~PgR4N97VuPErT%uYUYS=ZX-DNIVlPjeiq!R2DF&=JIKwlLT
z>{hYOru)M@WKS5Dj%%*}JWJ6k$T7|!J?mhTt>;%VR<R!q{Vnb#uKqtc6R0zSUmSlF
zOXG-Epub!xeY#m`9%RvuacFBy?z>*3ZS^vz$VKn{mk+Sz3E0{^myH)9i*siD!p^7f
z25vn3y#3Mn{*&g&<vq7&C-D9Y4<=@kGu<7|tMu#9c1fsr=B&G8C<&gu9ly8nQ`_F%
zJ80v}H;?>S|KjD<^0!Mrjt^{6n6u)o1K;Q8rRkqHPvw)|wXdD-;n{TzGd$H+9k~Cd
zeREyupN4~z;e`#A%E+;W7k84K$;GK#O$<{S=v>##G;QLJl$9${UniI8RVGuX&;0^F
C3v4|A

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_0.png b/html/images/facegenerator/fg_mouth_0.png
new file mode 100644
index 0000000000000000000000000000000000000000..114e20c3d5d1058f544e03b24b3d67b722df2875
GIT binary patch
literal 1120
zcmbVL&ui0A9FKH}%x&OqI)#v36m0TdoBl{_ooSQ0qOG&5tVgrtwGCbJvgFmKJB+!5
zpr;9fqW^)1!7e)};tqmr3f>j`3xwUgIeqDm>0wMXkoVsAz3=Dq{rzyRe0_ZM+$h5^
z<HcFELicOof9fP%Us}sw>2{WAH8PLuq@#O?QB1su*rKgBPzC8`cX=0O7$#D;sx?w8
z-INV%^LnVm2ewPm43n7&T-|6P!Y-nQ<z%`2*Kax2GPB%5q6A8A9yP7m6%Wm?l&i){
z%aBZN<|>;BWJ+KoqO*a$<oI%s<$Am_J%`r<$M#f6E6eqrs+H#0JoXTq;6c;?NysKe
z9*RH`rORv#Kp?=F08&v1<U~pakR5y+wdR?1xuO;Zwy2clnuNHrAapt%z7yxM*ASp2
zNdkxou~?L9ME$Nq^dRc^(?bRo`G#k?#KI06GU|)CO|l&Iv>$@)mP&`jjz35gO_>nr
zt^j!;*mf9KPunLI^xKUiwf$<>MM4Gnxa}FV9`)%VnC9+yL!lz|M!w})v?%(LijB67
z98y%X9DU(U%al_fEy6fZl7+OYDG=r)H7=#0s3}RUkd_idj-#-es7iSym6K8_2|`WD
z6$+w~2C;Nfg-J<OhuEUy6WuY;(5^-84zS9xSUK+@onWtu@zSsZ=9-vbzlmKoKcC<s
zyI?sc?)YJO`q8S$v+g0Y;9;BX<yW?ju%8nD7Iz<O{!h*X>WmOJ#~;lyyrLZ#9uHfe
z3Wvjk96B)`9gXeD^<_F%8%0&A2A{uu*&1I1V<S5wTN80Ox_9y8llx<d3y&&m`>h*~
z%Lioh%<Wj?(r%<Ti~qD7JZpcC{K!0*nB0DIXNqBVIzQL0e42Rwp&JVCR$on3PxJ^k
al24fk^WypG)jgt}53h<^S>4RtUH=7ut4-|y

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_1.png b/html/images/facegenerator/fg_mouth_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a4b0533e19685b4f10fd3ce58d14be2daecc7f0
GIT binary patch
literal 1120
zcmbVMziZS`91rz(X*)Tni;r}1@RIi~xgQBVujwUcPkQZfJ?MdpY4WZY+T^9ltCw~V
zaS+5o!9~Olf|FpOlY@f=UDW;oTB~%aAPBm5@#TJ0hf>i%-j8p-pU?Mq?o=i(5B8ty
z=QwV#G_F_KJ{rF#kF)iev-pK=XQ@%A)1*OLW`H@(CbJlnTyqXrv1u<azQrRPcckIe
z>a<>-P%YvLW~?JbuFudMH<FKh)0)Q=%;Gu6%ke*6zT$yn=lGda8J7J5ZaU*D0iIr&
ztXV7bmSXeyOJF2Y8G(zb2_kpF3)Lvcw|P}|j>RGm+A4HD$9J5nmn)z^0t`|DOjt0D
zKw1`%3>8_q2$B#%5hX>KNg$}EGAcx%`|!+KU^mpNUhLXpw;bQ3)K^8Z)oKYXNg%<T
zh!jN;VNy&c6HFr!E_>9B5?(mmW6*JE1&&W0;(?gaoFz*%$1_hmA-I0Iyie?f-9)jJ
ziIM4xNPwd2#&NZ^Lt4eZ-8fJ?tS$Rktm2R?1s1DEW4H%qxjWoYtjN4krvir+#az&d
zwd7)tmh>FYz6iEss~MP;kp#7LF{>LILSu?9DOn^NTG}XPl~j-8AgnQF=qZ$xluSlJ
z$k4O`O6js}Afy$u2*Mt=<b~AqEZno}FuPrB@=&Z=2(U>>P$Oia*8!C#p(Jb)9~7oj
z0s=FRXOmVKm!}i0jsxd9wu=FAK|8;ybAbJf{I|F}So?o+CNgKlxH<l4mY#@pV0_$f
zeRkO&9_+D+3D{_CS9kl^Slut_S}of8{%L*iCLB1rab|r;LjCV9Y`z)2{b=aP>7Bi;
z>eC1L)nV!C?!@z`J&OOdY@C<w-Prl?V&=rD_gk;o58>zM{LYnab#>~i%ZRMKZ(ikC
dn{o8x<GulIb93OX_;8KJqLMMGuZ>;1^$Yp;QLF#}

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_2.png b/html/images/facegenerator/fg_mouth_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..cfbfe3281acc4c802baed7152e99b5c20867e71a
GIT binary patch
literal 1103
zcmbVM%WKp?7!Opm6nat=ALx)?-DGBy-E6|fHr-@xz^!Gw&^<OyX1j5lOqxu)X+0D?
zh=PBDp7bOl2nvdb;za~KdQs`ggNLG?Ja@8>)<daiAoKY0{eIs&x94UrkB^-h<2Y{I
zo-ylepUU3RqilWXuWqyLG_{&^p0sG!i7{t*WC;U1aF%f$JKo0XdtBzYk(S?R(q`?7
z=8`~gG94ieB8KL;@?;u0ZU<AagqQtL=YPI@%>&=l`GrCa)}jh-`!ky{p5L5pxSJhU
z_4vt4pqy%qAi&fCX|NI|TB`FsUX7hIvB-m-3hn58->GJ84pc~tK|z2y7ZwpH$^w$1
zDytVk9wI2Bya<&Xf?7e*AOeGjXVzk`rPa;qz!tmde4Elp6UA<~D|97+#LFU5RaJy}
zF`v&dja;%3QYX!Y$;6Ps#EBdG5%oz3GDc^KtWlk3p7uisqFQZ_I7|kKVkr|-ClZkW
z#URMy>S-smj`!U-P&;XCL|CljgsjCbt4C{M2xhrE+)$>-ywR@4J}Zi|ViI>Pz#+9w
zoo8PJ&-XM1mSiMBqgXAOmVwZ;YD#Je$(B*HswK5B<Twahl}o0YFIuXis0dkxs!DKL
zkz@od3&}=th_%CnI-!e)c70}dfHe=rYLyr}l*A1}R)!rg*Cv!CZ4!aXd_h29!4Eys
zO|tUzqcw5tuVb$olK}MctN91mSLDCN-N$<WlQWSyBWBI<N3#q?tOK*-UhA{V-tgd%
zO-#&2qx!0IhmF;iZ5oaA^Ujwi<8R<7XSn#@hg;?Q$M~}ksPp60lxEnCPv5_u`#92@
z!hc$n-*?YHm$ojP*nakw{RyH+zoc(R_8Fe;9AD&KTpPRoZvEuVOl(`T=Huzb8@uR6
BMhpM|

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_3.png b/html/images/facegenerator/fg_mouth_3.png
new file mode 100644
index 0000000000000000000000000000000000000000..5088c7a7e815ee318cc11b5532ebb144601ce3bb
GIT binary patch
literal 1107
zcmbVLJ#W)M7&bycRjC7G8Q^dSghcGS#7<(XZtKJejUc6@5sjE|?Mq`d_PO?zxPhSp
zG4uy?E*pq}feEPtWh_E~1T3xK2LKX6{DGd6xMiq{z_Rb-_4_>U_xkM2)sf+I!yLzr
zRHls@+o$4h=rmiOIm=(!HcCqkI!BtcV+NShZL)wt#Wfdk4V(7r@(v#7xRXt%-k^=@
zb=4xSV8%K^<oXQFapRMbZ(2*3f(5+jcpCq6>lF_iTjS^DDy;fN+;XP70iNs5)UEE4
zrP%!B1Q?H0M&M#<g2-)qp&Ds?k5^^qSS<3Or$U!BzVB3{Itz*<z(5vY%7R%0vXX!#
zs7T5ckcJ3~C@sQV3PDxQsSts|!!v7v-BfEvd0>m(G`>ZtuZm))(-Arufdq>pQWQmm
zX)&EnF^yEX>QOUFdEr>XVBpXS9G^PG12LnyKvt;6Gf(>=xPG;IK<tHsM6r~Kk?D&_
zfTHWharLxATEmBK9H|}FSA8tja7b1Hi`An!mVjCAjyDu5GH=uyfy0VowhdyfxY(l=
zL*v;W!FFsl2lEojKs{T|8zmi~f?{NpJd#R!wp7k5a>8*Gwp@UDxsb~#>_w=g=aEuU
z%21NaIh2uMA;DI>keZ%_6T1$xJHTd-#j3>so0J4~LfT0O%(e(6VT<^nI427T%sZY<
zI$>O%ezXP-oV(aA2gC)v{Ho3o_H)wT;_hSZ|H+xioDt*Z_@h}85$nMCc+mRnaxgsD
zV-pjw(bzpddW((K!-}ETqun2SH%GSN(A4V}pWaE;H?_;3CB1HZ++2Ro?VOref7{;J
zy8Wv+hyS!}U-<sy%>CbAy3;Q=&t^Gp&3d$X@zNp1WBc0L32yJ(@VyUDH<VajDa{zq
I3wIvu12mdR{Qv*}

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_4.png b/html/images/facegenerator/fg_mouth_4.png
new file mode 100644
index 0000000000000000000000000000000000000000..b7ea6f7bc15eea1de58e3558040e1e8123649a7c
GIT binary patch
literal 1107
zcmbVL&ui0A9FGbz#)>Bo$_|eV528(8+O%oH;+8h4tC%^u;tF2OlGinC$;*;An^o}O
zPRc<2HztS*9z@0ANks%<UR2aSK-tmD1Yg=_dKeRZkoSG><@@=3f8UsyKARanKFlyo
zrZ%P5shmu{p~H0FaF;(*af}#EGK*WJV}*#(96XOe&9fFz9a+xm@+&mXFo#-hqe+_P
zdBw&aXC*pZ>;)9fFyj+(VA+d^fO)jw`YOBq<T(pmM`h;<CNzTzYP(b25Y2X{8+Lcm
zmK}ED3>c3UO5h=4f!JH}BPCYZ9<M^r$urM_o(fr1*}hXva|Tp!h(LjZSsNAwP!u^q
zgt91~2017|UdZuK$_h{^ND36dV6oI%=(Lo&ULDw?H<fJ@5-2?1>2$bGp2Oh+FUYdY
z!yKQ>WvNCsTJ?z)XZ>g_WzbP%hi*Vz?1O~Sn#U_dWvQqA5WK)NcZvOIkSLlmKDGj0
z;2`gLNnAbch}6+<H}=$y8mj@~>nOr2p-t=28cV@6cl#Sk6sb4Lh0vu%v6ggfuXxBO
zHC<)tAI@<dMS>+!$V07IE$N0P2xVE%%OycHw4zZh$%T|-FD!)Bs-cxdS&}Hy&}31R
zD`i+R@;MC}u#{qJenc$aMyXww+8to?`(l+!h%AD`2F6Qi2h6lF!BHCrpfX$F1Tg3N
z4(>!rdHT`nD0HtNry61p^zy5?d)Sx6zs23hI{%Y1o;t%P&GARGq))U1ljCmd)64Gg
zAfHZ5NJqmMRnF0|TC3?=BmVI1qn6o(LzC|wZoL)F*Y%U{MQuyFrLO<T+<v-w=jEG=
zkMABm(i_Bo+IAjX>wcBKd|!L<bN&7Sh8aDzGa^%&t`nCIjxf(QhOa)7Kiy0oYsR#G
IuYCFXFVx*i8UO$Q

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_5.png b/html/images/facegenerator/fg_mouth_5.png
new file mode 100644
index 0000000000000000000000000000000000000000..08e2546bbacd258cbea468afd558adcd36346353
GIT binary patch
literal 1130
zcmbVLPiWIn7!M3(42BLos36AdYLoZUKj{mrTiT?qV7Jm0)}vYS)`l*5S@O1~g~8ZO
z4}y3QJt=|*8N$4%DClhy#Dhmgy?GLL@iO$_OV@55#t;K}?|tumzu))&MrG#e=*amI
zj^jp4(|VQdQ}I81lC4ji<*#fzM~yn2Ba5_c2AI=qvVi%LYc_Bdn|5dU9iHI0p+%=w
zr}gqR)grEF#yVo;`V7r+6O)l|S}jcZ1>A7FoUr@qjles0PMA-ZLD?_hrZe3Q@LYGM
zW_4Q@vW3Yj{6wTO0vA)0kK83MRHK~G<5k%?zLo^Or$SpfVc)5GxxyDnfcdlt5*Eln
zK9dq*3ZN9a%*y}*3Ca>s5)i0qMFo)We*&`>*o$gaFZOLQDJL{3^;Jn~x7%VnDUzTe
zL4=S5WJ#72Od}C?JZeS>FB~5*=s2_j$EObQ_?XdLAS*N{Fi-bGaQ$-mfY=NBiDD^}
zBGZ?k2qf2y<LYULw2BYiI8r;Tb$l#UaY$AIi`8Rsd;n&-JKj*N$h=W!1BVsGT+)fP
z;$n}M^qjz6MBA}d1!Pk&3A9Wxs~Z}Gd88*%7N!g>V-&L}J>WPB3o{DTjBE-is0g8<
z<?}GDDfwioSkRJby*R*@ypWong$H&WX19+`9*b2A0X8WKYJ@BeI-t@dl!Q&<^M$#z
z2>E%(vq?LQ%d;P?jss^E+r@ymd@sMMbA)}6M<9uStQbg%<3`BPva+lc<Tw<R68c#C
ze{v=<XQa3}{%V%N73;wGc+mPxI2a!6v55)TXq5JL%51FemvpTbefsfvYjmAIeWLQ=
z#jPZ|xqPM(Jh=0*(lj2v{x&9F>b!ikvGZOI9?Ma082@?soep=0K3J`b<J)Uno4>5J
zFQ+bW+}rl<`s(-AvwM5byG)$g-uv0u89pREE8pdYIIugmyl{JSHoh+zGy2o~^^HFu
CG*?al

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_6.png b/html/images/facegenerator/fg_mouth_6.png
new file mode 100644
index 0000000000000000000000000000000000000000..263a9168bfaaed936d7391031d74f7446a2b33d4
GIT binary patch
literal 1103
zcmbVLJ#W)M7&byG2wK5XBpA@iT^NXcm&8uaO4>THLnD#4q>-8t*S<8SvCp+H#LWU?
z>p&+MKtgOC7?4;&KnGL_sceXWfnR{cRDs08IZaxIsuEc8eZ2QR&-=Z(IDcc}+?8{J
zAWT%}j5^<ElmF}(UthTE-}rW!nN7AtTdZe=M9>|&LO|8CR!N;$&c^yjQV@jGEw|BR
z&Du@Prk-RaI#TQf94!cinK-cQHNwCOS#|xQ_~Xrc5x7oKTvlqZ7L-Zbo$H5WsXyPa
z`)f9K#F=SOh&4{&5oUqd>-dot7sUau#?OgZ7QsM;trf)sr<%1zP^KXPiUd<OR1r|K
z63RlH#n(X^A}FJ@409<2H6^D(1csl;t%XiYs~eS}Eq*JCZN>skmV3RP)XPXTT$K^V
zScYjiolbF$RJ7qUD^B^*)QG_#ksZ1LbEyv!Mr(z3SyAMk9)#cpwb~)E9}N@5Qzpk&
zAR`INo|nWm(2iK09Jz6<cGTDih+HQT?S?k5M{8;X=D9oBP@>4a(H26N7scur)b4u3
zXH}yp@)yZ*9W4j*S(JggTFD!xj!+338JtI1Q&-JO9xEe`<FL@oDabU-IHz-@sh2Vw
zn^n|&Ma2qAXGhqoA2G|f$;htD?GCY}6R}!3Bo?D#gVN5Z0~Xtq(Wp%WP+n3b1eRUj
zp}i<6&q1^X3EjKIsf5%6gZyglG4@SVHW3dRS8y(gJD-CF=3P`)4b><?EDo{G|Kv>O
z&d5n~{M9TY5%0j{c-Z><ayUH1=Mxk1(dc~mw9UurUe(YW@z?L4Urp?QaZ}%$ezJK>
ztXSLQ&Yk|F-Jh3!eVN?a>pVU`7{Y&CcJ|-xUp-T>cc1@$J9%NYD=b_*Vz~d*J2fUe
V+j{-*8YP>FylT!HFH5%{`~fUIM^yj-

literal 0
HcmV?d00001

diff --git a/html/images/facegenerator/fg_mouth_7.png b/html/images/facegenerator/fg_mouth_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..d070f187d7f5aac7f6a1596d7cf1463c2fa6ee9a
GIT binary patch
literal 1104
zcmbVL&ui2`6b=-m6pH718q<RaZZfl*O?E=pHoM8%g>G$kSGpI)G@0#&HkmY;y6Jim
zL7{(xhbkU~9t4k~VD+YW@}j8JyNce$gOmNydME`AWPZNy``&x=-p<nErOAmi6M`U2
zR_Dz+pXbtl{1hMeyv+kXO);y*8nn&2c0>fjrK<!~eS3}6iS2H0z9ut*FxK{(E!L_n
z=nnNIJGGG#KjdgZn3+vN+gT?Jtdcb^D2hLyy%2%t7R8l(4c5Xk>3H+Kh%|bOO{cf+
zU{{>I2xbzU6ZnMLAn`YXSWk*#pI7JW^jH=_--N9f#eq|;+7c+!h=9BVGY(V{P!$O&
z5G(is$U+2Vl$D{DK~T?YIz(XjiCism+j`xs47K>KD0UbNby@CqyHYnN(P&LZ7-Jb`
z<!m;?Ei&<T!0aRw#M2`Nlf+Ksh0LP?NEz)_y2Xkj_jC|~AJ%Gz#6dhv6i=C)*rALh
zDEodISKm5jb#mm!vDR^OJ0x<Q#B?ii_<OXcM_``2lZ8@4?u~vq^7y0J8zyzOd=jv#
zSrqw=<a(~I!GeNv&`>J{(=re$VKavdNU;pnsuXa3#Bm(9f-R`#5X73nk(Oa7xvZ&b
z1x3LqubIjSTMc4n2M!tOdR%vag_RSrdO0FCqfwL6jZp<Gbtt28hlZfs$V&*Uc!5j1
zar!)iXiXA%H;7w_s1N%2)xBf%EmXD;4;ph1(zpv6G%>HDvTCYk31V@Gb^j-4GIvH!
zi{r0i86EKoOqYkH&o_t7LjvA05pNCg&DGz$t!`CKqnUjC{%Lt~ACAwxe7ErS`GZFX
zU+?a;el>nffv5ZDmajaFW94+e3;${O{2}h`U;FmH{OaD6%B7q;yJycGG2AD+!kF-7
VZ{lX@y!IqLuUd=d<I?rpe*gnUNoD{5

literal 0
HcmV?d00001

-- 
GitLab