S{o}cial
Gizmeo.eu RSS-Feed c1 auf LinkedIn c1 auf Google+ c1 bei YouTube Gizmeo.eu als Android-App
Komm{e}ntare
    • c1ph4 on R.I.P. GameRankings!: “Hija, Neil! Thanks for getting back at this and sharing alternatives with us! 🙂 To me „OpenCritic“ sounds very promising…Jan 14, 19:36
    • Neil on R.I.P. GameRankings!: “There are new aggregators that one can use in place of GameRankings.com. There’s https://opencritic.com, not as extensive but offers a…Jan 14, 14:32
    • Borno on siliziumbasiertes leben: “interessant! dankeDez 13, 22:10
    • Abbey on mit androiden ab ins darknet: “Vielen Dank Probiere es jetzt mal aus war früher mal im darknet aber hatte absolut keine Ahnung mehr wie es…Aug 14, 21:41
    • c1ph4 on mit androiden ab ins darknet: “@Unknownuser: Wo? Ist deine Version die neueste aus dem FDroid-Repository? Sehe hier keine. Versuch‘ mal den Firefox in den Einstellungen…Aug 4, 23:15
{A}rchiv

Sie sind momentan im Archiv der Kategorie Gizm{e}os.

Lef{t}overs
GET FIREFOX!
GET THUNDERBIRD!
www . cipha . net

www . cipha . net
Please use an AMD CPU!
cell processor rox, fuck INTEL
KDE - the Ueber-Desktop-Environment!
STOP FACEBOOK!
msn user die!
aol sucks cock!
FUCK MYSPACE!
explicit content
NEIN zu Softwarepatenten
save the net! net-neutrality is important!
Aktion UBERWACH!
Cred{i}ts
Created, Made & Maintained by AETHYX.EU

Archiv für die Kategorie „Gizm{e}os“

mein amd vs. apple m1

Apple hat dieser Tage neue „Macbooks“ präsentiert. Äußerlich hat sich nicht viel getan, außer einer neuen Taste für Emojis (oh, yeah!11). Aber wie immer zählen ja innere Werte: und da werkelt nun der hauseigene(!) M1, Apples allererster in 5nm gefertigter ARM-SoC. Eat this, Intel!11

Así es el Apple M1, el nuevo procesador propio para Mac de Apple que quiere revolucionar la informática

Ich wollte nun wissen, wie meine AMD-Laptop-CPU (Ryzen 7 4800HS, Weltpremiere 16. März 2020) im Vergleich zum M1 (Weltpremiere 17. November 2020) abschneidet. Da bot sich geekbench5 an, weil: keine Ahnung!? o.O Doch immerhin hatte ich hier bereits Ergebnisse vom Juli vorliegen. Und das „Tryout“-Programm gibt es für Linux auch kostenlos.

Meine besten Ergebnisse damals:
Single-Core: 1269
Multi-Core: 8030

Die Ergebnisse des M1 aktuell:
Single-Core: 1718
Multi-Core: 7534

Gar nicht mal so schlecht für eine Handy-CPU, ihr Eierköpfe aus Cupertino!

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

deine gpu, sonst nix

*…klaut die Stimme von Marsimoto, der sie von Quasimoto geklaut hat, am Ende ist es auch einfach nur eingeatmetes Helium, weil den Schallwellen gefällt das, und legt dann mal los…*

Keiner kümmert sich um GPUs/
Wie geht es deiner GPU/
Frag‘ dich: was macht Klicki-Bunti-Grafik/
Es ist deine GPU, sonst nix/

STRG+Escape, die GPU taucht da nicht auf/
wieso denkt der doofe Coder, dass ich GPU nicht brauch/
CPU, RAM, mein Benutzername, Tabellenansicht/
wieso sehe ich die Prozentzahl meiner GPU nicht/
meine GPU macht mir Grafik, das ist wichtig/
meinem Pinguin fehlt ohne GPU sein Gesicht/
CPU ist das Gehirn, GPU schiebt die Optik/
Pink und Rosa – GPU, sonst nix/

Keiner kümmert sich um GPUs/
Wie geht es deiner GPU/
Frag‘ dich: was macht Klicki-Bunti-Grafik/
Es ist deine GPU, sonst nix/

Windows, Linux, Unix – alles braucht hier Grafik/
wieso sehe ich nach Reboot GPU-Temperatur nicht/
Was heißt „off“, wieso hier Reload mit rechter Maustaste/
ohne GPU nützt mir Temperatur-Widget nix/
Treiber-Treiber, immer Treiber, offen oder proprietär/
Hauptsache „Diablo“ läuft, denn was nützt hier „Solitär“/
Laptop, PC, Smartphone oder Tablet/
ohne GPU kein einziger Pixel hier, nix fett/

Keiner kümmert sich um GPUs/
Wie geht es deiner GPU/
Frag‘ dich: was macht Klicki-Bunti-Grafik/
Es ist deine GPU, sonst nix/

Helfer-Tool hier, Helfer-Tool da/
der Aufwand für jede GPU – immerda/
das Erste, was ich an neuer Hardware einrichte/
ist GPU, weil der Rest läuft bereits aus der Kiste/
„out of the box“, IT, wie sie immer sein soll/
wieso funktioniert GPU nicht, was hat sie euch getan/
liegt es vielleicht an AMD oder NVIDIA/
oder Apple, oder ARM, vielleicht auch C&A/

Keiner kümmert sich um GPUs/
Wie geht es deiner GPU/
Frag‘ dich: was macht Klicki-Bunti-Grafik/
Es ist deine GPU, sonst nix/

Meinen Stromanbieter, den freut’s/
denn heute mine ich auf GPU die Kryptocoins/
Warnschild rot, die GPU schon über 90 Grad/
warum ist Geld verdienen hier so hart/
die GPU, ja sie macht die Träume wahr/
Traumfabrik in Plastik, wir sind so smart/
und jetzt auch die KI für ein paar Hunderter/
übermorgen fliegt mich GPU zum Mars, sonnenklar/

Keiner kümmert sich um GPUs/
Wie geht es deiner GPU/
Frag‘ dich: was macht Klicki-Bunti-Grafik/
Es ist deine GPU, sonst nix/

ich schalte das Teil ab, GPU muss sich schlafen legen/
sie lief zwei Wochen durch und muss nun Updates regeln/
hoffentlich ist nach Reboot meine GPU noch da/
bei shutdown -r now denke ich über Heirat nach/
doch was ist das, ist es ein Fussel oder doch ein Haar/
wie Schuppen von den Augen wird mir dann plötzlich klar/
Mist, schon wieder zwei Zentimeter Schicht drauf/
ich muss das Ding erstmal jetzt abstauben/

Keiner kümmert sich um GPUs/
Wie geht es deiner GPU/
Frag‘ dich: was macht Klicki-Bunti-Grafik/
Es ist deine GPU, sonst nix/

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

exit

2047. Eine App namens Infinitalk ermöglicht die Kommunikation mit Verstorbenen. Realisiert wird das durch ein KI-System in einer Cloud, das zuvor über ein Implantat hinter dem Ohr das gesamte restliche Leben der Teilnehmer aufgezeichnet hat. Die verstorbenen Menschen existieren weiter als digitale Entität, mit all ihren Fehlern und Vorzügen, Umgebungen, etwaigem Mobiliar und Gerätschaften.

CEO Linus (gespielt von Friedrich Mücke) sitzt gerade zusammen mit seinen drei weiteren Gründern des Startups, CTO und Hacker Bahl (Aram Tafreshian), Marketingleiter Malik (Jan Krauter) und seiner Ex-Verlobten Luca (Laura de Boer) in einem Hotel in Tokio, um den Verkaufs-Deal der App an den japanischen Investor Linden Li (David Tse) durchzuziehen. Li will die Applikation mit seinem Hologramm-Imperium verknüpfen. So soll die Kommunikation mit den Verstorbenen in Zukunft der Realität so nah wie möglich sein. Selbstredend würde der Deal alle vier zu Multimilliardären machen, was sich v.a. Malik bereits sehr gut vorstellen kann. Luca allerdings hat etwas dagegen. Sie vertraut Li und seinem Imperium nicht, sondern lieber auf ihre Intuition, die nichts Gutes verheißt. Als sich alle aus ihrem virtuellen Meeting wütend und ohne finale Unterzeichnung des Vertrags verabschiedet haben, verschwindet am nächsten Morgen Luca plötzlich spurlos.

Was wie ein Wirtschaftsthriller beginnt entwickelt sich im Laufe von nur 90 Sendeminuten („Exit“, ARD, Erstausstrahlung war am Mittwoch, 28.10.20, 20:15) zu einer dystopisch erzählten Geschichte der Wahren Liebe auf engstem Raum: das Hotel selbst wird in den seltensten Fällen verlassen, alternative Schauplätze sind entweder Rückblenden oder spielen sich in einem weißen, endlos wirkenden virtuellen Raum ab. Anleihen an „The Matrix“ aus 1999 sind durchaus gewollt und wirken überzeugend, sofern man von den Hacking-Tools symbolisiert durch Baumarktwerkzeuge einmal absieht. Auch sonst ist das dystopische Jahr 2047 in Tokio, das uns die ARD mit unseren hart verdienten GEZ-Gebühren auf die Flimmerkisten unserer Wohnzimmer zaubert, durchaus auf Niveau eines Hollywood-Cyberpunk-Blockbusters wie „Blade Runner“ (1982). Entsprechende Hausaufgaben wurden also gemacht, angefangen vom Interieur des Hauptschauplatzes, über die Hightech-Utensilien, die die Protagonistinnen und Protagonisten bei sich tragen, bis zur düsteren minimalistischen Musik und allen verwendeten Grafiken. Das muss und sollte man hier hoch anrechnen.

Nicht so gut bei mir kam hingegen die Überladung der Themen, sowie die zu großen Gemeinsamkeiten und das Mindfuck-Moment des Films zu „Welt am Draht“ an – hier hätte ich mir mehr Diversifikation gewünscht. Man merkt dem Stoff an, dass er hoffnungslos verkopft ist. Das mag zum einen an unserer deutschen Mentalität, zum anderen am derzeitigen Hype um Netflix liegen – denn hier hätte man ohne Probleme eine sechsteilige Miniserie daraus bauen können. Vielleicht war es auch so gedacht, man wollte es den betagten Standardzuschauern der ARD aber am Ende ersparen; der ich sicher keiner bin, schon aus Altersgründen. Es wären auch noch andere Themen als die Lovestory als Handlung und eine Wendung zum Ende in Frage gekommen, die eben nicht an Fassbinders Standardwerk aus 1973 erinnern. Wobei: wer erinnert sich aus meiner Generation wohl an „Welt am Draht“? Oder kennt es überhaupt? Eben. Niedriges Risiko.

Wer sich als Cyberpunk bezeichnet, der sollte diesen Film mögen und wird ihn sich ansehen müssen. Zumal man hier nebenbei ganz starke Schauspielerinnen- und Schauspieler-Leistungen zu sehen bekommt – kein Wunder, die Besetzung hat tiefe Wurzeln in der wertvollen Kulturleistung Theater. Schön, dass die deutschen Rundfunkanstalten (zumal aus meiner Gegend, sogar der SWR) auch mal eines meiner liebsten Genren abdecken! Ich selbst konnte mich jedenfalls nicht erinnern, wann ich mir das letzte Mal einen Kalendereintrag für eine Fernsehübertragung gesetzt hatte, die auch noch nicht live ist. Großes Kino, hat sich gelohnt! Aber auch zeitweise ganz schwere Kost für gute Nerven.
8/10

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

this. is. sparta! oder: wider dem cpu-capping

Aus einem mir unerfindlichen Grund war ich bis heute geplagt mit AMD-CPU-Capping. Unter Vollast und/oder bei CPU-Temperaturen von 70C+ ging die Frequenz unter Linux einfach runter auf 399MHz. Und blieb dort. Bis zu einem Reboot.

Serious!?

Ja, ernsthaft. Und das Problem hat mich nun 80+ Tage beschäftigt. Oder eben zu selten gekümmert.

AMD@7nm(12nmIOD)@Zen2@Rome@EPYC_7702_ES@2S1404E2VJUG5_BB_ES___DSCx18_CCD_polysilicon@20xNIC
Oben: AMD Zen2 CPU: Epyc 7702 – 64-Kerne, 128 Threads, 200W

Stellt sich heraus, ich konnte wohl ein wichtiges Modul bzw. einen ASUS-Kernel-Patch nicht nutzen:

modprobe -v asus-nb-wmi
insmod /lib/modules/5.8.11-1-linux/kernel/drivers/input/serio/i8042.ko.xz
modprobe: ERROR: could not insert ‘asus_nb_wmi’: No such device

Bei mir gab es unter /sys/devices/platform/ einfach keinen Ordner asus-nb-wmi. Und der hätte ab Kernel 5.6.x wohl genau dort sein sollen. Da kann ich modproben, bis ich schwarz werde.

Was tun? Wir sind mit Internet nie alleine, zum Glück auch nicht mit Problemen, so fand ich die selbe Issue vom selben Hardware-Hersteller für ein anderes Modell, https://lab.retarded.farm/zappel/asus-rog-zephyrus-g14/-/issues/9. Man solle einfach i8042.nopnp als Kernelparameter dem GRUB hinzufügen und rebooten. Was ich tat.

Das erste Erfolgsgefühl hatte ich dann beim erneuten Modproben: keinerlei Fehlermeldung. Okay, sehr cool! Natürlich wollte ich danach wissen, ob der Ordner nun da ist: und auch der asus-nb-wmi war nun vorhanden (logisch, aber egal), inklusive Inhalte. Nice!

Wirklich etwas von der Kiste gefordert hatte ich da noch nicht, also wieder den BOINC-Client gestartet – meines Wissens „der ultimative Stresstest“ für jede CPU/GPU. Hier hatte ich auch immer wieder die Erfahrung gemacht, dass die CPU einknickt. Und tatsächlich: jetzt ist 18:00 und seit dem Mittag läuft meine CPU, eine AMD Ryzen 7 4800HS, unter Vollast mit erwartbarer dynamischer Frequenz und auch mit Temperaturen Ü70C (aktuell locker 90C, offiziell verträgt er wohl 105C).

W00t!

Nun, egal. Selbst Schuld, bleeding edge hardware gekauft zu haben… ¯\_(ツ)_/¯

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

die secure-boot-seuche III

2012/2013 war Secure Boot ein megaheißes Thema. So dermaßen heiß, dass ich sogar in meinem Feedreader zweistellig zählen konnte, siehe hier.

2020 ist dieses Rotzthema immer noch nicht tot.

Wie ist das möglich?

Gestern ein Update für das mitgelieferte Windows 10 auf einem Laptop gemacht, das berüchtigte Update 2004 vom Mai. Ich weiß nicht wieso, wohl aus Laune heraus oder weil ich einfach ein System wollte, wo ich nicht dauernd darauf hingewiesen werden möchte, dass es nicht 100% aktuell ist. Ich hätte es lassen sollen, denn ich verlor meinen GRUB.

Bootet anschließend Linux, bekam ich das hier heraus:

Welcome to Grub!
error: unknown filesystem.
Entering rescue mode…
grub rescue>

Jop, das war’s dann. Kein Linux will mehr booten. Und das mit ausgeschaltetem Secure Boot, ausgeschaltetem Fastboot _und_ dem manuell ausgewählten EFI-Eintrag im mitgelieferten BIOS-Interface.

Mit ls geht dann das Debugging los. Irgendwas mit (hd1,gptX) spuckt das System dann aus. Bei mir waren das 10+ Einträge. Jeden durchgehen, mit englischsprachigem Tastaturlayout, kurz vor Mitternacht, wo hängt mein verschollenes root herum?

Als es dann gefunden war, erst einmal /home gefunden, geil! Nix bootet. Glücklich war ich dann dennoch, denn irgendwie ist mein Linux ja noch da.

Da es auf einem Haussystem eigentlich nur zwei ext-Systeme geben kann wegen / und /home (oder welches Linux-Dateisystem auch immer man verwendet, z.B. reiser, etc.), hatte ich mit dem zweiten dann Glück. Mit folgenden Codezeilen brachte ich das System wieder in einen grafischen Bootzustand:

grub rescue > root=(hd1,gpt2)
grub rescue > prefix=(hd1,gpt2)/boot/grub
grub rescue > insmod normal
grub rescue > normal

Der soll dann zwar nur temporär sein, aber mir reicht das. Windows nutze ich vielleicht einmal im Schaltjahr. Dann kracht es aber richtig.

Ahhhh! Ahahahaha! Ihr Redmonder Zoophilie-Junkies mal wieder! Hatte euch schon fast komplett vergessen!

[Update I, 16.10.20]

Das mit der temporären Lösung ist einem ja irgendwann doch zu blöde, weshalb ich mir kürzlich wieder die permanente zurückerobert habe. Hier hilft es, wenn man sich zuerst mal ausgeben lässt, welche Partitionen man benutzt und wie diese heißen: lsblk -o PATH,PTTYPE,PARTTYPE,FSTYPE,PARTTYPENAME. Heutzutage wird das eher in Richtung nvmeXYZ gehen, bei älteren PCs ohne SSDs dann wahrscheinlich sda. Dann noch ein sudo update-grub, was bekannt sein sollte, sowie ein sudo grub-install /dev/sda bzw. ein sudo grub-install /dev/nvmeXYZ danach und dann „Macht’s gut, Redmond!“.

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

unser strom? ihr strom!

Jedes Gadget braucht Strom, in irgendeiner Art und Weise. Manche permanent, andere temporär. Die meisten viel bis sehr viel, zu wenige wenig. Es ist wichtiger denn je, sorgfältig auszuwählen, aus welcher Quelle dieser Strom stammt.

Stichwort Atomstrom.

Als das erste Kernkraftwerk der Welt, das Atomstrom in ein öffentliches Stromnetz eingespeist haben soll, gilt Obninsk im Jahr 1954, südwestlich von Moskau. Legen wir zugrunde, dass technisch und von Alterswegen her man um die 50 gewesen sein muss, um dieses „Kunststück“ zu realisieren, ist das die Menschen-Generation ab 1904 gewesen, heute bekannt als „Greatest Generation“.

Mir ist nicht bekannt, warum man diese Vollpfosten marketingtechnisch genau so bezeichnet, haben wir ihnen nicht nur Atomkraft zu „verdanken“, sondern auch die zweite Komplettzerstörung der gesamten Welt, sowie die Zündung der Atombombe zu Lande – Letzteres so ziemlich DAS Dümmste, das du als Lebewesen machen kannst auf einem Planeten, den du selbst bewohnst. Und ohne der Möglichkeit diesen vorher verlassen zu können.

Zeitlich nun einfach visualisiert, wie viele Generationen von diesem Atomstrom bis heute, 2020, maximal „profitieren“ konnten:

II

Und nun, wie viele Generationen dafür bezahlen dürfen:

IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

In Worten: Zwei. Versus. Vierzigtausend.

Vierzigtausend Generationen, das sind schlappe 1.000.000 Jahre.

Och bitte, nehmen wir Rücksicht: Hauptsache Oma und Opa hatten es warm!

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

ps4-controller mit ps3

Diese Woche erst irgendwo online gelesen, dass man den PS4-Controller auch mit der PS3 verwenden kann.

Meine PS3 ist 12 Jahre alt.

Die PS-Taste funktioniert leider nicht. By design.

Hat leider deshalb etwas Fötales:

Mein PS4-Controller an meiner PS3

Konsole ein- und ausschalten ist mit dem nicht. Und auch in die PS3-Menüs kommt man nicht rein. Bummer.

Da ich das dennoch eine sehr coole Idee fand und auch ein Workaround für langwierige Retro-Gaming-Sessions, teile ich hier die Einrichtung:

1. PS3-Konsole sollte ausgeschaltet sein
2. PS4-Controller über USB-Kabel mit der Konsole verbinden
3. Konsole einschalten
4. in „Einstellungen“ wechseln, hier Menüpunkt „Zubehör“
5. „Bluetooth-Einstellungen“ öffnen
6. Scan-Vorgang starten
7. PS4-Controller vom Kabel trennen
8. PS-Taste und „Share“-Taste am PS4-Controller gleichzeitig drücken (wichtig)
9. der PS4-Controller sollte nun mehrfach hektisch blinken (wichtig)
10. erneut den PS4-Controller mit Kabel wieder anschließen (wichtig)
11. hier dann „Wireless-Controller“ auswählen (wichtig)
12. PS4-Controller vom USB-Kabel trennen und verwenden
Hinweis: Controller ist nun an der PS3 angemeldet. Wollt ihr diesen erneut an der PS4 verwenden, müsst ihr ihn neu einrichten, mit USB-Kabel

Junger Jedi, egal wie sinnlos dual oder triple use von Gadgets auch auf den ersten Blick erscheinen möge, huldige das Gadget, denn dem Gadget gehört das gesamte Universum!11

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

tesla-aktien kaufen jetze!

Man kann von Tesla halten was man will: US-amerikanische Marke; Verarbeitung nicht so gut wie bei deutschen oder japanischen Modellen; Akku brennt; der Gründer ist ein (Cov-)Idiot; Markennamen von einem bedeutenden europäischen Erfinder geklaut; etc. pp. You name it.

Aber eines kann man ihnen nicht vorwerfen: der Wille zur Innovation.

Bei Tesla träumt man Innovationen nicht nur oder zeichnet diese. Sie werden in Realität gesetzt. Und dabei haben sie anderen Firmen auf dem Planeten manches voraus. So z.B. ein fahrbares und nutzbares E-Automobil. Und ein zukunftsfähiges Konzept insgesamt. Ja, wahrscheinlich DAS Zukunftskonzept der Mobilität überhaupt für die nächsten Jahrhunderte. Und das „schon jetzt“.

Tesla model 3 già andata a ruba

Deshalb lohnt es sich genau jetzt in Tesla-Aktien zu investieren: durch den Split ging der Preis pro Aktie nämlich fast über Nacht von über 2.200$ runter auf aktuell 360€. Wer also ein paar Hunderter übrig hat, das sollten einige Menschen sein seit März, auch unter meinen Leserinnen und Lesern, der sollte sich (ein Depot eröffnen und) Aktien dieser Firma kaufen. Es ist sehr wahrscheinlich, dass die 1.000€ wieder schnell geknackt sein werden. Dann hätte man alleine durch eine Beteiligung fast das Dreifache wieder drin. Ende ist hier übrigens nach oben offen.

Man kann das Geld schnell mitnehmen oder halten. Ich würde halten. Einfach aus „Prinzip Zukunft“. Und es gibt da noch etwas, was ich bemerkenswert fand, die Meldung ist aber schon ein paar Monate her.

Wie wir alle wissen sind oder waren die Japaner mal das technologisch am weitesten fortgeschrittene Völkchen der Erde. So stark und so mächtig und sehr weit fortgeschritten, sie galten als „Schwan“ und flogen in Gesamtasien voraus, während andere Länder wie Südkorea, sogar Taiwan und China, hinterher wackeln mussten. Irgendwann in den 80ern war das so. Es mag sich mittlerweile gewandelt haben, ich bin auch der Meinung, insgesamt haben wir „alles schon erfunden“, also da wird kaum noch was Neues kommen für die Menschheit. Und das wechselt sich da unten nun munter ab, wer in der Parabel voraus fliegt. Ich tippe ja aktuell auf Südkorea, China braucht noch ein paar Jahre, vielleicht Jahrzehnte. Wobei man Taiwan mit dem Chipfertiger TSMC hier auch nicht vergessen darf.

Ich schweife ein bisschen ab, denn was ich eigentlich erzählen will kann man auch ohne dieses Wissen und die Vogelzug-Parabel faszinierend finden.

Die Japaner haben nämlich vor wenigen Monaten den Tesla Model 3 komplett zerlegt, die Ergebnisse wurden im Februar der Weltöffentlichkeit präsentiert. Denn was machst du als Hacker erst einmal, wenn du neue Technik verstehen willst oder schauen möchtest, ob die Technik wirklich neu ist? Na klar, du baust sie auseinander!

Das Wichtigste und das Unbekannteste, das sie fanden, waren zwei individuell designte KI-Chips, von Tesla komplett selbst entwickelt(!), mit entsprechend inhouse-entwickelter Software:

der KI-Chip und das Mainboard des Tesla Model 3
Oben: der Computer des „Model 3“ – ein KI-Chip regelt das autonome Fahren, der andere das gesamte Infotainment-System

Im Kern fanden die Japaner heraus, „ja gut, das Hardware-Ensemble ist eben dafür gut, dass dieses Auto sich selbst steuern kann und die massive Infotainment-Anlage“. Und das stimmte dann auch. Doch was noch viel bedrückender war aus der Sicht der japanischen Ingenieure:

Die Hardware, die oben zu sehen ist, ist 6 Jahre ihrer Zeit voraus!

Tesla ist damit nicht nur Konkurrenten zeitlich enteilt, Tesla ist mit dieser Hardware einer kompletten Industrie enteilt.

„But technological hurdles are not the reason for the delay, according to the Japanese engineer who said „we cannot do it.““

Einer Industrie, die in Europa alleine 3,65 Millionen Menschen beschäftigt – bei Tesla arbeiten aktuell nur 48.000 (Stand 2019)…

Das ist „Alien-Sh*t“, was wir hier sehen. Solche Technik dürfte es aktuell gar nicht geben.

2019 nicht.
Dieses Jahr nicht.
Nächstes Jahr nicht.
2022 nicht.
2023 nicht.
2024 leider auch nicht.
Maximal „irgendwann 2025“, sagen Industrie-Insider. Denn auch wenn der Bericht Ende Februar publik wurde, auseinandergenommen wurde der Tesla wohl irgendwann Ende 2019.

Ganz ehrlich: WAS haben die da gebaut!? und WIE!? Ich bin kein reiner Ingenieur, aber ein kleiner CPU-Head. Vor solch einer Leistung habe ich irre Respekt. Und leider auch Angst.

Und sehen wir es realistisch, selbst wenn sie mit Autos als Konzept komplett sich zerlegen würden, sie hätten immer noch diese Chips, also konkrete Hardware, sowie maßgeschneiderte Software dazu im Angebot. Mir würden spontan mindestens ein Dutzend Anwendungsfälle dazu einfallen, „I, Robot“ wäre Kindergeburtstag dagegen.

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (Rate me? // Beitrag bewerten?)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

2020: alles wird kurzweil

Keine Panik! Sieht alles schlimmer aus, als es ist! Ende 2020 wird für uns alle doch noch alles gut!

Ray Kurzweil
Turntable-Rocker mit Grüßen aus 2006: US-Futurist Ray Kurzweil

Aus Langeweile seit Ewigkeiten mal wieder in einem meiner eigenen Ebooks geschmöckert. Dort habe ich mit Datum 23.11.06 einen interessanten Text entdeckt, betitelt sick shit II. Er dreht sich um Blicke in die Gegenwart einer noch 14 Menschenjahre entfernten Welt.

Spätestens Ende 2020 wird alles gut für die Menschen sein, aus medizinischer Sicht. Denn dann „flitzen Nanobots umher in unserer Blutbahn und werden uns gesund und jung halten“. Sind doch nur noch wenige Monate! Wird schon schiefgehen!

Natürlich gibt es die Onlinequelle dieser kurzweiligen, optimistischen Vorhersagen heute nicht mehr. Ich fand jedoch im Internet Archive noch einen Schnappschuss der Website, wo diese und mehr Prognosen online publiziert wurden. Und dann war da noch…

…“2020 werde die Lebensdauer eines Menschen wesentlich größer als heute sein“. Gut, das war jetzt nicht ganz so schwer, trifft seit 2014 allerdings auf die USA nicht mehr zu.

Oder „2020 werden wir uns komplett in virtuellen Umgebungen bewegen. Anstatt jemanden anzurufen werden wir unser Gegenüber irgendwo virtuell treffen, können virtuelle Strandspaziergänge machen und uns dort unterhalten. Meetings werden in beruhigenden Örtlichkeiten nur noch virtuell stattfinden.“ Möp! Meetings finden im Jahr 2020 wie Ende der 90er-Jahre weiterhin in ranzigen Chat-Applikationen statt und kommen öfter mal direkt aus dem Big-Brother-Ministerium Chinas. Gut, statt nur zu schreiben kann man sein Gegenüber mittlerweile auch direkt anrufen (will niemand wirklich) und man kann es auch in Echtzeit sehen, wenngleich in mieser Handykameraqualität (wenn deutsches Internet einen guten Tag hat). „Virtuelle Strandspaziergänge“ hätten uns in Lockdownzeiten sicherlich mental ein bisschen geholfen, doch in der Realität sehen wir nur wechselnde Standbilder als auswählbare Hintergründe in „Microsoft Teams“. Tja, so unterscheiden sich Begrifflichkeiten früher und heute in Bezug auf „virtuelle Welten“. Hätte man extra dazusagen müssen, klar.

„Innerhalb der nächsten zehn Jahre“, also aus Sicht des Textes um 2016 herum, „müsse sich kein Mensch mehr mit Erkältungen rumschlagen.“ Allerweltskrankheiten wie die Influenza, die aktuell weltweit Zehntausende Tote fordert pro Jahr, ließen sich durch „die Nanotechnologie komplett ausrotten“. Nanotechnologie versus COVID-19 FTW! Läuft doch!

Zu seiner Verteidigung will ich am Ende anmerken, bei manchen Prognosen aus dem Text hat man ihn auch gnadenlos geschnitten.

Augmentierte Realität durch Brillen zum Beispiel – Google Glass wurde 2014 für den Massenmarkt aus moralischen und ethischen Bedenken von Google selbst aus dem Verkehr gezogen. Oder der Verbreitung von Viren durch Terroristen – offenbar nichts im Vergleich zu Zoonosen. Anderes Zeug, Themen wie „Züchten von Organen“ und „Metamorphosen von Hautzellen“, erspare ich uns jetzt, es ist kurz vor halb Acht und draußen hat es 30+°C. Seit Freitag.

Ja. Wahrsagerei ist auch kein Zuckerschlecken mehr. 2020 – wir packen das!

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

luckysheet

In einer digitalen Welt voll mit kostenlos erhältlichen Datenbanksystemen setzen nur noch IT-Steinzeitmenschen auf reine Tabellenkalkulationen.

Sei’s drum, denn: wer braucht heute noch ein Gehirn!? Richtig!?

Luckysheet möchte selbst kommerziellen Tabellenkalkulationsprogrammen Konkurrenz machen und man muss zugeben, zumindest geschwindigkeitstechnisch und optisch macht es absolut etwas her:

Luckysheet GitHub-Demo

Für eilige Ex-Excel-Junkies lässt sich die Demo auch gleich direkt ausprobieren: https://mengshukeji.github.io/LuckysheetDemo/.

Wer etwas mehr Zeit erübrigen kann, der braucht nur Node.js in Version 6 oder höher und kann das Programm lokal auf dem PC mit nur wenigen Zeilen installieren:

npm install
npm install gulp -g

Luckysheet wird von einer kleinen chinesischen Community entwickelt und basiert auf einer MIT-OpenSource-Lizenz. Vielleicht der einzige Wermutstropfen, doch was ist heutzutage nicht aus China? Richtig!?

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

shenzhen

Shenzhen liegt irgendwo in China/
Shenzhen hat VR, die brauchen dort kein Fielmann/
Shenzhen kennt man seit Ming-Dynastien/
Shenzhen bedeutet so viel wie „die Gräben sind tief“/
Shenzhen ist Cyberpunk-Hauptstadt/
Shenzhen steht für Neonsonnen in der Nacht/
Shenzhen ist technologisch Weltmacht/
Shenzhen hat selbst im Winter 20 Grad/
Shenzhen Shen-Chuen Shum-Chun Neunzehnelf/
Shenzhen wächst so schnell wie keine Stadt der Welt/
Shenzhen und du verstehst nur Bahnhof/
Shenzhen vertickt dir Bitcoin auf dem Pausenhof/
Shenzhen glitzert im Delta des Perlfluss/
Shenzhen rollt durch diesen Text wie Linienbus/
Shenzhen raucht keine Zigaretten/
Shenzhen dampft OLED-Devices. Auf USB. In Ketten:

Mein iStick Pico von Eleaf - Made in Shenzhen

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (2 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

sexy: kde slimbook

Whoa! KDE macht offenbar in Ultrabooks:

KDE Slimbook 2020
Direkt der Slimbook-Website entnommen

Und die Dinger sehen auch noch hardwaretechnisch supersexy aus! Passend zur Desktopumgebung! 🙂

Mit 899€ auch zu einem sehr humanen Preis, wie ich finde: dafür erhält man ein 14“-HD-IPS-LED-Display mit leistungsstarkem AMD Ryzen 4800H-Prozessor (8 Kerne, 16 Threads, integrierte Radeon-Grafikkarte mit 1,43 T(!)FLOPS), der erst im Januar auf der CES öffentlich vorgestellt wurde (hier nochmal der Bericht). Eine bisschen mickrige 250GB-SSD, sowie 8GB RAM ebenso.

Wer will, kann über den Onlineshop das Setup jedoch noch nach Belieben (oder was der eigene Geldbeutel hergibt) aufstocken. Im Kurzbesuch konnte ich bis zu 64GB RAM und eine 2TB Samsung-SSD ohne Probleme finden, siehe: https://slimbook.es/en/store/slimbook-kde/kde-slimbook-14-comprar.

Das Geilste aber ist natürlich: KDE Neon vorinstalliert!

Die auf Debian bzw. Ubuntu LTS basierende Linux-Distribution gilt als bleeding edge und liefert immer das Neueste und Feinste von KDE frei Haus. Und das noch gar nicht lange: sie ist erst vier Jahre alt, wurde 2016 ins Leben gerufen. Aktuell ist sie mit Platz 11 locker in den TOP20 von distrowatch.com zu finden. Sehr populär also.

Wem 14“ zu klein sind, kein Problem: für nur 30€ mehr erhält man das 15“-Modell.

Fazit: hardwaretechnisch und von Betriebssystemseite erste Sahne und wenn die Verarbeitung nur halb so geil ist, wie sie aussieht, für mich ein Anwärter auf das Gadget des Jahres!

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

edex-ui: ein deluxe scifi-terminal-emulator

Schon extremst geil und wirklich heftigst eye candy plus cyberpunk:

eDEX-UI: ein Scifi-Terminal-Emulator

eDEX-UI ist ein Terminalemulator, wie man ihn von PC-Interfaces aus Scifi-Filmen wie „Tron“ und „Alien“ kennt. Er läuft auf allen gängigen Plattformen, Linux bevorzugt, aber auch Mac oder sogar Windows mit wenigen Einschränkungen.

Das Programm aus der Zukunft ist frei hier erhältlich: https://github.com/GitSquared/edex-ui.

Nach der Installation erwartet einen ein Echtzeitmonitor für CPU, RAM, Swap und laufende Prozesse, sowie das Netzwerk. Für Touchscreens liefert er eine entsprechende Tastatur mit, die sich bei Nichtbedarf auch ausblenden lässt. In jedem Interface ist ein Verzeichnis-Browser eingebaut. Und: natürlich enthält er immer auch die entsprechende Konsole zum Arbeiten oder Experimentieren.

Das Customising kann man selbst übernehmen, braucht dafür allerdings das Wiki. Das sind schon erweiterte Konfigurationen, die man hier durchführen muss, nicht jeder kennt sich beispielsweise mit CSS-Injections aus.

Wer möchte, kann sich auch zum Konsolen-Skin entsprechende Sounds einblenden lassen.

Oben zu sehen ist der Skin neofetch mit eDEX-UI 2.2 und dem Standard-„Tron“-Thema. Ein Stückchen weiter unten das Thema „interstellar“ mit den geöffneten Grafikeinstellungen der Applikation.

Fettestes Projekt, absolute Empfehlung! Viel Spaß beim Ausprobieren!

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

amd ryzen 7 4800hs x hpl 2.2: 248,6 gflops!

Erst im Januar hatte AMD auf der CES in Las Vegas der Welt die neue 4000er-Serie seiner leistungsstarken Ryzen-Prozessoren vorgestellt. Unter anderem auch den 4800H(S), der in einem 14-Zoll-Exzellenz-Gaming-Notebook von ASUS präsentiert wurde, die sechs Monate das Exklusivrecht für die Veröffentlichung dieser CPUs halten sollten.

Das passte ganz gut in meine eigenen Hardwareplanungen, hatte ich mir doch seit 2011 keinen Rechner mehr gegönnt. Und die Thematik mit Meltdown und Spectre machte ab 2018 ja alles nur noch viel schlimmer und ätzender. Es war mal wieder allerhöchste Zeit, Intel so richtig in den A**** zu treten!

Die Notebook-Prozessoren von AMD spielen mittlerweile in einer eigenen Liga. Kein Vergleich mehr zu meiner letzten AMD-Hardware aus 2005, damals war der Turion64 „ultramodern“ und 64bit war d-e-r heiße Scheiß, die CPUs aber wie immer von AMD im Notebook viel zu laut und viel zu warm.

Die Hardware, die ich seit letzter Woche nun mein Eigen nennen darf, gilt aktuell als beste Laptop-CPU der Welt, neben dem 4900er-Modell, der Ryzen 7 4800HS.

AMD Ryzen 4000er H-Serie, via notebookcheck.com

Wie es der Zufall so wollte bin ich seit 2018 im CPU-Benchmarking-Territorium unterwegs, zumindest in meiner Freizeit. Was lag da also näher, als sich den Prozessor mal mit dem Tool HPL (High Performance Linpack) vorzunehmen, der Benchmark-Suite, mit der auch die TOP500-Liste der Supercomputer seit Jahren gebenchmarkt wird? Eben!

Gesagt, getan, Freitag Abend drei Stunden Arbeit investiert und das Ergebnis meiner Maschine kann sich doch durchaus sehen lassen, wie ich finde:

================================================================================
HPLinpack 2.2 — High-Performance Linpack benchmark — February 24, 2016
Written by A. Petitet and R. Clint Whaley, Innovative Computing Laboratory, UTK
Modified by Piotr Luszczek, Innovative Computing Laboratory, UTK
Modified by Julien Langou, University of Colorado Denver
================================================================================

An explanation of the input/output parameters follows:
T/V : Wall time / encoded variant.
N : The order of the coefficient matrix A.
NB : The partitioning blocking factor.
P : The number of process rows.
Q : The number of process columns.
Time : Time in seconds to solve the linear system.
Gflops : Rate of execution for solving the linear system.

The following parameter values will be used:

N : 13920
NB : 240
PMAP : Row-major process mapping
P : 1
Q : 2
PFACT : Right
NBMIN : 4
NDIV : 2
RFACT : Right
BCAST : 2ring
DEPTH : 1
SWAP : Spread-roll (long)
L1 : transposed form
U : transposed form
EQUIL : yes
ALIGN : 8 double precision words

——————————————————————————–

– The matrix A is randomly generated for each test.
– The following scaled residual check will be computed:
||Ax-b||_oo / ( eps * ( || x ||_oo * || A ||_oo + || b ||_oo ) * N )
– The relative machine precision (eps) is taken to be 1.110223e-16
– Computational tests pass if scaled residuals are less than 16.0

================================================================================
T/V N NB P Q Time Gflops
——————————————————————————–
WR12R2R4 13920 240 1 2 7.23 2.486e+02
HPL_pdgesv() start time Fri Jul 10 23:17:19 2020

HPL_pdgesv() end time Fri Jul 10 23:17:26 2020

——————————————————————————–
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 0.0046572 …… PASSED
================================================================================

Finished 1 tests with the following results:
1 tests completed and passed residual checks,
0 tests completed and failed residual checks,
0 tests skipped because of illegal input values.
——————————————————————————–

End of Tests.
================================================================================

Wie zu erwarten war schneidet das 8-Kerne-AMD-Biest formidabel ab, das Endergebnis des etwas über 7 Sekunden dauernden und alle acht Kerne ausnutzenden Tests ging voll auf den L3-Cache, der hier zwei Mal vorhanden ist und je 4MB beträgt: 248,6 GFLOPS!

I <3 it! Selbst nur im Akkumodus und vom Stromnetz getrennt kam der Prozessor noch auf 210,4 GFLOPS.

Ich kann mir nicht helfen, aber ich habe selten so eine krasse, alleinige CPU-Leistung von einem meiner Heimgeräte gesehen. Gut, die PS3 war auch noch gut dabei, bis heute übrigens, obwohl die Hardware aus 2007/2008 stammt. Der Ryzen 7 4800HS ist also die zweite CPU in meinem Haushalt, die über 200 GFLOPS mit HPL erreicht. Hut ab, AMD, gerne mehr davon!

Solche Benchmarks selbst durchzuführen, v.a. unter Linux, ist eine Kunst, die selbst mich als Berufsinformatiker immer wieder vor Herausforderungen stellt. Man merkt das schon sehr gut bei der Recherche zu dem Thema, wo nie Tools gelistet sind, die außerhalb der Intel-Welt ein Ergbnis in (G)FLOPS liefern. Wie kompliziert das hier war und wie man den Test erfolgreich durchführt, bei noch viel komplizierterer Vorkonfiguration, erläutere ich gerne mal in einem anderen Beitrag. Stay tuned! 😉

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (1 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^

canon tr 8550 – arch-basiert

Was Unterstützung für Linux betrifft, so ist Canon aus Japan beileibe kein A****loch-Hersteller: für meinen Drucker TR 8550 aus 2017/2018 gibt es wenigstens Treiber für Debian Linux und RPM-basierte wie z.B. Fedora. Wenngleich die seit Ende 2017 auch nie mehr einem Update unterzogen wurden…

AKIRA A.D.2019 TOKYO
Wie Canon in den 80ern Populärkultur wurde: dank „Akira“!

Nur was mit Arch oder auf Arch basierenden Derivaten? Viel Spaß mit der Installation über den Sourcecode!

Nee, das funktioniert nicht. Ehrlich jetzt.

Ich hatte noch ein funktionierendes Setup auf einem anderen Linux-Rechner, aber selbst meine manuell kopierten Dateien (cmdtocanonij2, cmdtocanonij3, rastertocanonij) nach /usr/lib/cups/filter/ brachten das Mistding nicht ans Laufen. Ich bekam beim Druckversuch einer Testseite nur immer wieder die Meldung „Filter failed“.

In einer Onlinerecherche kam irgendwo (ich spare mir Links, keine Zeit, hier auch unnötig), das bedeute „eine Vielzahl von Fehlern“, ich solle debuggen.

Nee, das funktioniert heute nicht. Nicht heute. Und morgen auch nicht. Und auch nicht irgendwann nächstes Jahr.

Phew, was tun?

Wir werden pervers! Aber so richtig! Wir konvertieren das erhältliche *.deb-Paket in eine Arch-Installationsdatei, die pacman dann essen muss! Völlig egal, ob es funktioniert oder nicht danach! Muhahahaha!

Das Tool, das dies erledigt, nennt sich debtap und ist über offizielle Quellen nicht erhältlich, man muss das inoffizielle AUR anzapfen. Doch selbst dann läuft es nicht einfach von selbst, man muss indizieren lassen, aber wie das alles genau geht steht hier, denn den Link share ich gerne weiter: https://ostechnix.com/convert-deb-packages-arch-linux-packages/.

Der Befehl, der die Konvertierung durchführt, lautet schließlich so:

debtap cnijfilter2_5.50-1_amd64.deb

Der hat wahrscheinlich eine halbe Ewigkeit Gültigkeit, denn der Treiber wird von Canon für Pinguinnutzer ja eh nie geupdatet.

Man kann übrigens die Fragen, die sich hier stellen, nach Belieben ausfüllen, das ist nicht wichtig. Heraus kommt eine cnijfilter2-5.50-1-x86_64.pkg.tar.zst, die man nur noch mit sudo pacman -U installieren muss. DONE!

Gestern, nach 22:00, end-lich funktioniert’s!

Gut, bei mir schlug die Installation erst einmal fehl, denn meine manuell kopierten Dateien waren ja noch da, worüber sich pacman beschwert hat. Doch nach dem Löschen dieser war dann eine Installation ohne Fehlermeldung möglich. Danke debtap, danke pacman, danke TCP/IP!

Mit diesem Tutorial wollte ich mehrere Dinge auf einmal zeigen:

1) die erfolgreiche Installation des Druckers TR 8550 von Canon unter Arch Linux bzw. einem der vielen Derivate
2) dass eine manuelle Installation fehl schlägt (verschwendete Lebenszeit!)
3) was das Tool debtap ist und warum wir hier pervers werden müssen
4) warum Versuch manchmal kluch macht
5) get it running or die tryin‘!

Wenn diese Exkursion in die Tiefen der Linux-Druckertreiber-Höllen bei euch auch zum Erfolg geführt hat, klickt doch auf einen der Buttons und spendet bitte! KTHXBYE! <3

1 Star - nope!2 Stars - meh!3 Stars - good!4 Stars - excellent!5 Stars - supercalifragilisticexpialidocious! (2 votes, average: 5,00 out of 5)
Loading...

Flattr this!
Ether spenden // Donate Ether
Bitcoin-Spenden hier akzeptiert ^^