diff --git a/.firebaserc b/.firebaserc
deleted file mode 100644
index f57b714..0000000
--- a/.firebaserc
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "projects": {
- "default": "sandbox-devfesttoulouse",
- "prod": "devfesttoulouse-1f1dc"
- }
-}
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
deleted file mode 100644
index dcaab09..0000000
--- a/.gitlab-ci.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-image: ilaborie/hugonode
-
-variables:
- GIT_SUBMODULE_STRATEGY: recursive
-
-before_script:
- - hugo version
- - echo node `node --version`
- - echo yarn `yarn --version`
- - yarn
-
-sandbox:
- script:
- - hugo -F
- - node tools/pdf.js
- - node tools/minify.js
- - firebase use default
- - firebase deploy --token "$FIREBASE_SANDBOX_TOKEN"
- artifacts:
- paths:
- - public
- only:
- - develop
-
-prod:
- variables:
- HUGO_ENV: production
- script:
- - hugo --baseURL https://2019.devfesttoulouse.fr/
- - node tools/pdf.js
- - node tools/minify.js
- - firebase use prod
- - firebase deploy --token "$FIREBASE_PROD_TOKEN"
- artifacts:
- paths:
- - public
- only:
- - master
diff --git a/content/speakers/ugur.md b/content/speakers/ugur.md
deleted file mode 100644
index 65a082a..0000000
--- a/content/speakers/ugur.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-key: ugur
-name: Uğur Arıcı
-id: D1UJEdrxhHQowlM2LoIusKF26ir2
-feature: true
-company: 'Made by Sense'
-city: 'İstanbul, Turkey'
-photoURL: /images/speakers/ugur.jpg
-socials:
- - icon: twitter
- link: 'https://twitter.com/ugursus'
- name: ugursus
----
-Merhaba, adım Uğur Arıcı. Doğduğumdan beri İstanbul‘da yaşıyorum. Dijital Ürün Yöneticiliği diye bahsettiğim; yazılım üzerine analiz, planlama, geliştirme ve danışmanlık hizmetleri verdiğim bir firmam var.
-
-10 yılı aşan web geliştirme tecrübemi isteyen herkes için faydalı kılmaya çalışıyorum.
-
-Çocuk yaşta oyun olarak görüp ilgilenmeye başladığım web geliştirme teknolojileri yıllar içinde günlük uğraşım haline geldi. Yerel ve küresel birçok firmanın işlerini yaptığım ajanslardan sonra, son 4 yıldır kendi dijital dönüşüm firmamı işletiyorum.
-
-2015 yılından beri özgür yazılım etkinliklerinde kurslar açıyor, davet edildiğim üniversite etkinliklerinde web teknolojileri üzerine sunumlar yapıyorum. Katıldığım etkinliklerin bir listesini buradan görebilirsiniz. İnsanların bir araya gelerek birbirilerinden daha fazla öğrenebildiğine inandığımdan Laravel İstanbul ve Write the Docs İstanbul buluşmalarını düzenliyorum.
-
-Şimdiye değin yüzlerce katılımcıyla, yüz yüze verdiğim kurslarda bir araya geldim ve bazı dersleri YouTube canlı yayınlarıyla tekrar ettim. Bazı öğrencilerimin başarı hikayeleri YouTube kanalımda mevcut.
diff --git a/content/team/cfp/euzebe.md b/content/team/cfp/euzebe.md
deleted file mode 100644
index 9e2df16..0000000
--- a/content/team/cfp/euzebe.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Jean Martineau-Figuette
-type: cfp
-subtitle: React Meetup
-photo: euzebe.jpg
-socials:
- - link: 'https://www.twitter.com/jeanMartiF'
- name: Twitter
- - link: 'https://www.linkedin.com/in/jean-martineau-figuette/'
- name: LinkedIn
-
----
diff --git a/content/team/cfp/simon_chemouil.md b/content/team/cfp/simon_chemouil.md
deleted file mode 100644
index 629d72f..0000000
--- a/content/team/cfp/simon_chemouil.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Simon Chemouil
-type: cfp
-subtitle: Toulouse Rust Meetup
-photo: simon_chemouil.png
-socials:
- - link: 'https://www.twitter.com/simach'
- name: Twitter
- - link: 'https://github.com/magnet'
- name: Github
-
----
diff --git a/content/team/cfp/thibault_ducret.md b/content/team/cfp/thibault_ducret.md
deleted file mode 100644
index 670879e..0000000
--- a/content/team/cfp/thibault_ducret.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Thibault Ducret
-type: cfp
-subtitle: Python Toulouse
-photo: thibault_ducret.jpeg
-socials:
- - link: 'https://www.tducret.com'
- name: Site
- - link: 'https://www.linkedin.com/in/thibaultducret'
- name: LinkedIn
- - link: 'https://github.com/tducret'
- name: Github
-
----
diff --git a/firebase.json b/firebase.json
deleted file mode 100644
index 93fb369..0000000
--- a/firebase.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "hosting": {
- "public": "public",
- "ignore": [
- "firebase.json",
- "**/.*",
- "**/node_modules/**"
- ],
- "rewrites": [
- {
- "source": "**",
- "destination": "/index.html"
- }
- ]
- }
-}
diff --git a/static/Flat-Mountains.svg b/static/Flat-Mountains.svg
deleted file mode 100644
index ba77543..0000000
--- a/static/Flat-Mountains.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/static/api.json b/static/api.json
deleted file mode 100644
index 7723b24..0000000
--- a/static/api.json
+++ /dev/null
@@ -1,255 +0,0 @@
-[
- {
- "id": "opening",
- "speaker": [ "Aral Balkan" ],
- "title": "Small Tech Foundation",
- "talk": "Freedom in a time of pandemics",
- "day": 0,
- "start": "11:00",
- "end": "11:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d0s1",
- "speaker": [ "Eylül Doğruel" ],
- "title": "Independent Artist",
- "talk": "At the crossroads of practice, education and advocacy: art with free software",
- "day": 0,
- "start": "12:00",
- "end": "12:50",
- "lang": "und",
- "room": 0
- },
- {
- "id": "d0s2",
- "speaker": ["Pınar Yolum"],
- "title": "Utrecht University",
- "talk": "AI for preserving privacy",
- "day": 0,
- "start": "13:00",
- "end": "13:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d0s3",
- "speaker": ["John Lubbock"],
- "title": "Wikimedia UK",
- "talk": "Surveillance regimes in the UK and Turkey, and how they are responding to the coronavirus",
- "day": 0,
- "start": "14:00",
- "end": "14:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d0s4",
- "speaker": ["Alexander Sander"],
- "title": "FSFE",
- "talk": "Public Money Public Code – Global problems need global solutions!",
- "day": 0,
- "start": "15:00",
- "end": "15:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d0s5t0",
- "speaker": ["Tan Siret Akıncı", "Maciaj Krüger"],
- "title": "Mercode",
- "talk": "The Absolute State of Decentralized Web compatibility in 2020: The good The Bad and The Ugly",
- "day": 0,
- "start": "16:00",
- "end": "16:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d0s5t1",
- "speaker": ["Ayşe Bilge Gündüz"],
- "title": "Computer Scientist",
- "talk": "Unexpected Adventure of a Blog Post",
- "day": 0,
- "start": "16:00",
- "end": "16:25",
- "lang": "eng",
- "room": 1
- },
- {
- "id": "d0s5t1v2",
- "speaker": ["Ayşe Bilge Gündüz", "Gülçin Yıldırım Jelinek"],
- "title": "Kadın Yazılımcı",
- "talk": "Kadın Yazılımcı nedir?",
- "day": 0,
- "start": "16:30",
- "end": "17:55",
- "lang": "eng",
- "room": 1
- },
- {
- "id": "d0s6",
- "speaker": ["Karen Sandler"],
- "title": "Software Freedom Conservancy",
- "talk": "Societal inequities during COVID-19: Can free software help?",
- "day": 0,
- "start": "17:00",
- "end": "17:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d0s7",
- "speaker": ["Rosie Stephenson-Goodknight"],
- "title": "Wikimedia",
- "talk": "Wikipedia's gender gaps",
- "day": 0,
- "start": "18:00",
- "end": "18:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d1s0",
- "speaker": ["Chris Stephenson"],
- "title": "Bilgi University",
- "talk": "COVID-19, Özgür Yazılım, ama kimin özgürlüğü?",
- "day": 1,
- "start": "11:00",
- "end": "11:50",
- "lang": "tur",
- "room": 0
- },
- {
- "id": "d1s1t0",
- "speaker": ["Gülçin Yıldırım Jelinek"],
- "title": "DB and Software Automation Engineer",
- "talk": "Should I stay or should I go?",
- "day": 1,
- "start": "12:00",
- "end": "12:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d1s1t1",
- "speaker": ["Pınar Dağ"],
- "title": "Kadir Has University",
- "talk": "Open/Data in the time of COVID-19",
- "day": 1,
- "start": "12:00",
- "end": "12:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d1s2",
- "speaker": ["Bager Akbay"],
- "title": "Artist, Educator",
- "talk": "Healthy Food vs Healthy Software & Hardware",
- "day": 1,
- "start": "13:00",
- "end": "13:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d1s3t0",
- "speaker": ["Fatih Kadir Akın", "Uğur Arıcı", "Özcan Oğuz"],
- "title": "Developer",
- "talk": "Özgürlük Çelişkisi: Özgür Yazılım Kullanmamak, Özgür Yazılım Üretmekle Çelişir mi?",
- "day": 1,
- "start": "14:00",
- "end": "14:50",
- "lang": "tur",
- "room": 0
- },
- {
- "id": "d1s3t1",
- "speaker": ["Derya Sezen"],
- "title": "Kloia",
- "talk": "Open Source Event Sourcing Framework",
- "day": 1,
- "start": "14:00",
- "end": "14:50",
- "lang": "eng",
- "room": 1
- },
- {
- "id": "d1s4t0",
- "speaker": ["Bilge Narin"],
- "title": "Hacı Bayram Veli University",
- "talk": "Dijital eşitsizlikler",
- "day": 1,
- "start": "15:00",
- "end": "15:50",
- "lang": "tur",
- "room": 0
- },
- {
- "id": "d1s4t1",
- "speaker": ["Nevit Dilmen"],
- "title": "M.D",
- "talk": "Let there be copies",
- "day": 1,
- "start": "15:00",
- "end": "15:50",
- "lang": "eng",
- "room": 1
- },
- {
- "id": "d1s5t0",
- "speaker": ["Robert Call"],
- "title": "LibreCMC",
- "talk": "The network and things you don't control: The little black boxen at the edge of the galaxy",
- "day": 1,
- "start": "16:00",
- "end": "16:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d1s5t1",
- "speaker": ["Dilan Çelik", "Orkut Murat Yılmaz"],
- "title": "Yer Çizenler",
- "talk": "Mapping for Everyone: Yer Çizenler",
- "day": 1,
- "start": "16:00",
- "end": "16:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d1s6t0",
- "speaker": ["Netha Hussain"],
- "title": "Wikimedia",
- "talk": "How is the Wikipedia responding to COVID-19 crisis?",
- "day": 1,
- "start": "17:00",
- "end": "17:50",
- "lang": "eng",
- "room": 0
- },
- {
- "id": "d1s6t1",
- "speaker": ["Behlül Çalışkan"],
- "title": "New media researcher",
- "talk": "What Is a Leak, Who Is a Whistleblower?",
- "day": 1,
- "start": "17:00",
- "end": "17:50",
- "lang": "eng",
- "room": 1
- },
- {
- "id": "closing",
- "speaker": ["Gregory Engels"],
- "title": "Pirate Parties International",
- "talk": "Privacy issues in the aftermath of COVID-19",
- "day": 1,
- "start": "18:00",
- "end": "19:00",
- "lang": "eng",
- "room": 0
- }
-]
diff --git a/static/api/site.json b/static/api/site.json
deleted file mode 100644
index 897e80c..0000000
--- a/static/api/site.json
+++ /dev/null
@@ -1 +0,0 @@
-{"info":{"id":"HJRThubF4uYPkb7jSUxi","name":"DevFest Toulouse 2019","address":{"formattedAddress":"11 Espl. Compans Caffarelli, 31000 Toulouse, France","locality":{"short_name":"Toulouse","long_name":"Toulouse"},"country":{"short_name":"FR","long_name":"France"},"latLng":{"lat":43.6115538,"lng":1.4345827}},"dates":{"start":"2019-10-03T10:00:00.000Z","end":"2019-10-03T10:00:00.000Z"}},"sessions":[{"key":"10_est_une_puissance_de_2","title":"10 est une puissance de 2","id":"jABRUDzqext8Rx8CmA4j","language":"Français approximatif","format":"quickie","tags":["_wtf"],"level":"beginner","speakers":["gilles_debunne"],"videoId":null,"presentation":null,"draft":false,"description":"Le code barre est une invention qui a radicalement modifié nos sociétés. Sans elle, pas d'inventaire efficace, de supermarchés ou de vente en ligne.\n\nMais comment coder les chiffres de façon fiable avec des petites barres noires et blanches ? Quand les contraintes matérielles empêchent d'utiliser le binaire, l'ingéniosité et un peu de chance ont permis de créer ce produit, maintenant présent partout.\n\n\nNous découvrirons les détails de ce codage, et comment il pourrait même contenir davantage d'informations."},{"key":"3_techniques_faciles_de_manipulation","title":"3 techniques faciles de manipulation","id":"zVUXQkHQtSiGJeIwVd05","format":"quickie","tags":["_wtf"],"level":"beginner","speakers":["marie_viley"],"videoId":null,"presentation":null,"draft":false,"description":"Qui ne s’est jamais fait manipuler ? Évidemment, on est tous allé à une soirée alors qu’on en avait pas envie, on a tous acheté un truc sans en avoir besoin et on a tous été influencé par nos proches. \n\nL’idée de cette présentation est de vous ouvrir les yeux sur les relations et les influences entre les gens. Je vous exposerai les mécanismes de prise de décision au travers de 3 techniques simples de manipulation.\n\nA la sortie de ce talk, vous devriez être moins influençable et maître de vos décisions (voire même manipuler les autres)."},{"key":"_47_ans___ils_nont_toujours_pas_remarque__","title":"« 47 ans : ils n’ont toujours pas remarqué … »","id":"pY6MCQBMfIYlIKfHdhL4","language":"French","format":"quickie","tags":["_wtf"],"level":"beginner","speakers":["qj7nbl6wiyug1rhqtxf818a46po1"],"videoId":null,"presentation":null,"draft":false,"description":"L’âgisme dans les fonctions IT, et en particulier dans le Développement Soft, est incontournable.\n\nLes « vieux » n’ont décidément pas la cote, le marché de l'emploi des softeux cinquantenaires en est la preuve !\nPourtant, codage et sénioritude semblent loin d'être incompatibles.\n\n- Alors quels préjugés peuvent en être la cause ?\n- L’avance rapide de la technologie numérique est-elle incompatible avec le ralentissement biologique ?\n- Les cheveux gris sont-ils un Handicap pour la Sécurité de l’Info ?\n- Le Cloud doit-il être « Arthrose-free » ?\n\nEt surtout, comment se fait-il qu’à 47 ans je vienne d’intégrer l’équipe Devops & Tools de Continental Digital Services et que personne ne m’ait encore rien dit ?"},{"key":"__lunch","title":"Déjeuner","format":"lunch","tags":["lunch"],"speakers":[],"draft":false,"description":"Bon appétit"},{"key":"__open","title":"Accueil, Thé, Café et Chocolatines","format":"open","tags":["open"],"speakers":[],"draft":false,"description":"Accueil, Thé, Café et Chocolatines"},{"key":"__party","title":"Party time...","format":"party","tags":["party"],"speakers":[],"draft":false,"description":"🎉 Party time"},{"key":"__pause","title":"Pause","format":"pause","tags":["pause"],"speakers":[],"draft":false,"description":"Pause"},{"key":"_numerique_et_environnement__ou__on_aurait_pu_sauver_les_abeilles__on_a_prefere_sortir_un_nouvel_iphone_","title":"\"Numérique et environnement\" ou \"On aurait pu sauver les abeilles, on a préféré sortir un nouvel iPhone\"","id":"zDbtrtvdLPG1okj07wyI","format":"conference","tags":["_wtf"],"level":"beginner","speakers":["sebastien_brault"],"videoId":null,"presentation":null,"draft":false,"description":"Le numérique fait-il partie du problème ou de la solution quand on parle de réchauffement climatique ?\n\n5 milliards de smartphones en circulation en 2020, ça représente quoi en consommation énergétique, en gaz à effet de serre, en pollution chimique ?\n\nLe streaming illimité à 10 euros par mois c'est le pied mais aujourd'hui Netflix a à peu près l'empreinte carbone du plus gros cimentier mondial, qui va payer la facture environnementale ?\n\nTous les mails de votre vie (que vous ne lirez plus jamais) disponibles sur Gmail, très utile, mais après 2020 on ne saura peut-être plus produire industriellement les équipements nécessaires à leur stockage.\n\nOn arrive dans \"l'âge des limites\", pour le numérique comme pour le reste. Quels sont les leviers pour basculer vers un numérique durable ?\n\nEt si malgré tout on décidait de s'en foutre ? 2 degrés en plus, c'est juste un pull en moins non ? Non. Par contre c'est 30% en moins sur les rendements agricoles pour ... 30 % de population en plus en 2050. En 1970, Dennis Meadows modélisait sur les ordinateurs du MIT un crash du système planétaire pour les décennies 2020-2030. Pour l'instant, c'est cette trajectoire que notre monde suit."},{"key":"_votre_api_web_passe_t_elle_le_controle_technique__","title":"⛳️ Votre API web passe-t-elle le contrôle technique ? ","id":"Gxr3XZR1HEu14tbneJLb","format":"conference","tags":["_method___tools"],"level":"intermediate","speakers":["francois_guillaume_ribreau"],"videoId":null,"presentation":null,"draft":false,"description":"Nous savons tous développer une API mais avons-nous tous bien intégré les problématiques d'environnements et de cycles logiciels multiples ? L'opérabilité, la gouvernance, le versioning, la traçabilité, la sécurité — et bien plus encore — de ces API web une fois en production ?\n\nDurant ce talk, c'est plusieurs dizaines de points d'attention rarement évoqués que je vous propose d'aborder, à la lumière de retours d'expériences provenant de chez Uber, Stripe, Facebook, ..."},{"key":"a_kotlin_multiplatform_evolution","title":"A Kotlin multiplatform evolution","language":"English","format":"conference","tags":["_languages"],"level":"advanced","speakers":["liliia_abdulina"],"draft":false,"description":"Have you heard of the code-sharing feature in Kotlin, accompanied with \"Write once, run everywhere\" slogan? Among its users not only libraries and frameworks authors; there are some projects which have already adopted multiplatform for production. Their applications, written in Kotlin for *both* iOS and Android, are published in stores. \nWith this talk, you'll get a brief overview of the evolution of multiplatform technology in Kotlin, concerning the tasks it's evolved to solve. How it was and how it is expected to be; what has changed and which tasks can be already solved with it. What are the facilities right now and which real projects already use multiplatform?"},{"key":"a_la_decouverte_de_la_realite_augmentee_avec_arcore","title":"A la découverte de la réalité augmentée avec ARCore","id":"qXAvodXoMK3db8ZLcVwb","language":"France","format":"conference","tags":["_native_mobile_apps"],"level":"beginner","speakers":["christophe_jollivet","jeremy_voisin"],"videoId":null,"presentation":null,"draft":false,"description":"Avec les annonces de l'arrivée de la réalité augmentée (ou RA) dans Google Maps et Google Search sur Android lors de Google IO 2019, nous constatons que la RA va prendre une place de plus en plus importante dans notre quotidien. La sortie d'ARCore en mars 2018 sur Android a simplifié le développement d’application en RA sur Android.\n\nAu cours de cette session, nous vous proposons de découvrir ARCore, via l’utilisation dans un navigateur, des applications natives ou des moteurs 3D comme Unity ainsi que les CloudAnchors qui permettent la persistance et le partage de positions d’objets dans les scènes de réalité augmentée, y compris avec des utilisateurs d’iOS.\n\nAprès une initiation aux concepts liés à la RA (meshes, 6 DoF,...), nous présenterons les différentes fonctionnalités d’ARCore. Nous discuterons aussi des différentes approches d’utilisation, de leurs limitations et avantages au travers d'une application de cartographie 3D en réalité augmentée."},{"key":"allo_paris__ici_san_francisco__et_si_on_codait_ensemble_avec_vs_code_","title":"Allo Paris, ici San Francisco. Et si on codait ensemble avec VS Code?","id":"Cej88MtlRVZrJRK0FJ2p","format":"conference","tags":["_method___tools"],"level":"beginner","speakers":["olivier_leplus","tiffany_souterre"],"videoId":null,"presentation":null,"draft":false,"description":"Vous aimez VS Code car il est simple, intuitif et qu'il fait ce que vous lui demandez. \nMais saviez-vous que vous pouviez coder à plusieurs dans VS Code? et même permettre à une personne tierce de jouer avec votre débugger depuis l'autre bout du monde? Saviez-vous que vous pouviez avoir un client slack dans VS Code, et même un chat audio? \nEt avez-vous exploré toutes les possibilités que VS Code offre quand vous utilisez GitHub?\nNous verrons dans ce talk tout ce qui fait de VS Code l'éditeur de code parfait pour faire du code collaboratif."},{"key":"applications_de_brainfuck__langage_minimaliste_mais_turing_complet","title":"Applications de Brainfuck, langage minimaliste mais Turing-complet","id":"oiZTE4THbAJeaNVlLc03","language":"Français","format":"quickie","tags":["_wtf"],"level":"beginner","speakers":["theophile_wallez"],"videoId":null,"presentation":null,"draft":false,"description":"Brainfuck est probablement le plus connu des langages de programmation ésotériques. Ses 8 instructions en font un langage Turing-complet avec lequel il est théoriquement possible d’écrire n’importe quel programme.\n\nEt en pratique ? Après une explication du langage (avec 8 instructions c’est rapide !) on verra comment j’ai utilisé Brainfuck pour les qualifications au concours d’informatique Prologin, sur un problème de parcours de graphes !"},{"key":"authentication_authorization_starters_battle","title":"Authentication/Authorization Starters Battle","id":"6E03tbU6L5w0IyjMi7yF","language":"français","format":"conference","tags":["_method___tools"],"level":"beginner","speakers":["valeriane_venance"],"videoId":null,"presentation":null,"draft":false,"description":"When you start a brand new app or service, you need to think about how you will manage authentication and permissions. But if you are like everyone else, you genuinely do not want to actually think about this. If someone else could do that for you, life would be great. And this has actually happened, you have the choice between several boilerplate projects or authentication/authorization libraries. In fact, you have a lot of options. Which one to choose? Let's have a closer look to them!\n\nAt the end of this talk, you will have a good overview of the common existing solutions and their benefits."},{"key":"brace_yourself__vanilla_is_coming__back__","title":"Brace yourself, 🍦Vanilla is coming … back 🕶!","id":"rJDTMZMYX57DCKYhW09c","language":"français","format":"conference","tags":["_web"],"level":"intermediate","speakers":["noel_mace"],"videoId":null,"presentation":null,"draft":false,"description":"Dans un monde de saveurs complexes et sophistiquées, la guerre du toping fait rage chez les crèmes glacées du Web ! Face au champs de bétail, les pronostiques vont bon train pour savoir qui l’emportera entre le crunchy Angulaire, le fondant Reactif et le décoratif Vue.\n\nDurant ce temps, loin de ces vicissitudes, la petite saveur basique vanille fait son bonhomme de chemin. S’agirait-il du héros de la légende, susceptible de renverser le destin de ce monde sans heurt ?\n\nSache, voyageur, qu’elle est déjà passée par nos contrées. Laisse moi te raconter comment elle nous a permis de renverser notre vieux roi, et tu sauras enfin ce qui se prépare pour ton royaume."},{"key":"comprendre_le_role_du_noyau_d_un_systeme_d_exploitation_en_creant_un_from_scratch","title":"Comprendre le rôle du noyau d'un système d'exploitation en en créant un from scratch","id":"tOexEcqeKEztPbNmR4JT","format":"conference","tags":["_cloud___infra"],"level":"beginner","speakers":["alessio_coltellacci"],"videoId":null,"presentation":null,"draft":false,"description":"Programmer le noyau d'un système d'exploitation est un très bon moyen pour en comprendre le fonctionnement et le scope de son travail (IO, gestion de la mémoire, etc).\nCette présentation a pour but de présenter et de développer les composants élémentaires d'un micro noyau UNIX.\n\nDans ce talk je présenterai:\n- L'émulateur QEMU\n- La réalisation d'un secteur de boot avec une micro console\n- Comment gérer les interruptions hardware (clavier) et software\n- La gestion des appels systèmes\n- Un système multi-process simple qui va permettre de découvrir le surcoût des changements de contexte liés à la programmation concurrentielle"},{"key":"de_java_a_un_executable_natif___graalvm_et_quarkus_changent_la_donne","title":"De Java à un exécutable natif : GraalVM et Quarkus changent la donne","id":"Qy836EfpA0wC4M6jYcTk","language":"French","format":"conference","tags":["_method___tools"],"level":"beginner","speakers":["guillaume_smet"],"videoId":null,"presentation":null,"draft":false,"description":"Les microservices, la scalabilité instantanée et les plates-formes à haute densité comme Kubernetes nécessitent des applications à faible empreinte mémoire et démarrage rapide. Java n'était pas bien positionné car il favorise les temps de traitement aux dépens du CPU et de la RAM.\n\nPlus maintenant.\n\nEntre en scène Quarkus, une stack Java orientée microservices qui supporte vos composants favoris (Hibernate, Vert.x, Camel, RESTEasy ...) sur GraalVM et HotSpot avec une faible empreinte mémoire et un démarrage rapide. Tout ce qu'il faut pour tirer pleinement parti des containers.\n\nLa gestion de la donnée est souvent l'aspect le plus complexe : découvrons comment Quarkus gère la persistance avec Hibernate ORM. Venez explorer le live reload, notre vision de la persistance avec Hibernate Panache, l'indexation full text avec Hibernate Search, l'environnement de test, la compilation native GraalVM et bien plus. Quarkus se vit plus qu'il ne se verbalise, attendez-vous à une démo détaillée."},{"key":"developpeurs_en_reconversion__developpeurs_quand_meme__","title":"Développeurs en reconversion, développeurs quand même !","id":"adcMAUSbsAK27dQJA4Iw","language":"Français","format":"quickie","tags":["_wtf"],"level":"beginner","speakers":["juliane_blier"],"videoId":null,"presentation":null,"draft":false,"description":"Ces dernières années, les \"fabriques de dev\" et autres formations courtes explosent. C'est un fait, tout dev a été ou sera amené à travailler avec l'un de ces jeunes développeurs.euses. Mais qui sont-ils ? Pourquoi une reconversion dans ce genre d'organisation ? Qu'ont-ils appris lors de leur formation express ? C'est fiable ce genre de dev ? Comment puis-je les intégrer au mieux dans ma structure ?\n\nAutant de questions que vous vous êtes sans doute déjà posées. Pendant ces 15 minutes, je vous présenterai mon retour d'expérience en tant que développeuse provenant de l'une de ces écoles de dev et maintenant développeuse Javascript depuis 2 ans au sein d'une startup Toulousaine."},{"key":"devops_at_scale","title":"DevOps at scale","id":"aOHds477R7FiM3cnWAXp","format":"conference","tags":["_method___tools"],"level":"beginner","speakers":["adrien_anceau"],"videoId":null,"presentation":null,"draft":false,"description":"DevOps is everywhere, and every new or existing project is at least considering to follow its principles. While implementing DevOps for single projects become more and more straightforward, it's still a challenge to have a coherent DevOps approach at Enterprise level.\n\nLet's dig in what it takes to achieve DevOps in large companies, with Airbus as an example."},{"key":"four_diseases","title":"Four Diseases","id":"PmoMEVHO3imfUIMXsPai","language":"English","format":"conference","tags":["_wtf"],"level":"beginner","speakers":["piotr_przybyl"],"videoId":null,"presentation":null,"draft":false,"description":"How a developer can tell if the system is sick just by taking a look at the input and the output? If you'd like to know that (plus you like standup comedy), come an see! The treatment is safe ;-)\n\nOne approach to get familiar with a system is a long and intense reading the manual (and to run an eye over the source code sometimes). Another approach is to take a deep dive into the data model (often in the DB) and to surf the user interface. Both are natural ends of the system, the legendary Input and Output. By examining these ends one can check if there's good digestion or if guts are rotten. Careful examination can confirm \"common DDDosis\", \"malignant stringosis\", \"regex diarrhoea\" or \"not-made-here syndrome\".\nUnfortunately, sometimes developers get infected in their prenatal life (meaning: at their university). Let me invite you to treatment. A laxative one. (That is: a sequel of \"Passwords. Do you keep them safe?\")"},{"key":"introduction_a_la_programmation_par_contraintes","title":"Introduction à la programmation par contraintes","id":"iU4EzEThVDvpaHDsGjOO","language":"Français","format":"conference","tags":["_big_data___ml___ai"],"level":"beginner","speakers":["cyril_delmas"],"videoId":null,"presentation":null,"draft":false,"description":"Quel est le point commun entre un jeu de sudoku, la planification d'une conférence et les déplacements d'un commercial ?\n\nQuand on souhaite les traiter automatiquement, tous ces problèmes peuvent être résolus par un solveur de contraintes. Dans ce talk, je vais essayer de vous faire une introduction pratique à la programmation par contraintes, en présentant les concepts de base, puis en les mettant en application avec plusieurs exemples de problèmes connus de tout le monde (ou presque), pour finir par un cas plus complexe sur lequel je travaille actuellement."},{"key":"keynote_close","title":"Une analyse critique des \"Tech Trends\"","format":"keynote","tags":["keynote"],"speakers":["christian_faure"],"draft":false,"description":" Notre secteur d'activité est régulièrement abreuvé de prévisions et de tendances : quel sera le prochain langage, le prochain framework, la nouvelle architecture, les nouveaux \"use cases\", les prochaines technologies disruptives ? Etc.\n\nDe nombreuses sociétés publient des \"tech trends\" et certaines ont même fait de cette publication un coeur de métier (notamment les grands cabinets d'analystes). En marge du discours très \"marketing oriented\" des entreprises, il y a également l'omni-présence de nombreux gourous, futurologues ou prospectivistes qui jouent aux oracles. Mais il y a aussi de nombreuses personnalités indépendantes qui ont un discours sur l'innovation technologique plus libre, comme par exemple Kevin Kelly ou Simon Wardley.\n\nJe vous propose non pas une vision du futur de plus, mais de vous faire part des résultats d'une étude, que j'ai mené avec d'autres, qui analyse et compare les différentes méthodes et approches utilisées pour prédire l'avenir des technologies informatiques."},{"key":"keynote_close_overflow","title":"Keynote de fermeture (overflow)","format":"keynote","tags":["keynote"],"speakers":[],"draft":false,"description":"[Keynote de fermeture](../keynote_close)"},{"key":"keynote_open","title":"Une histoire de l'informatique, du métier à tisser à la machine de Babbage...","format":"keynote","tags":["keynote"],"speakers":["fabien_tregan"],"draft":false,"description":"...où l'on parle aussi de la Pascaline, de table de logarithmes et d'éviter les erreurs. Et d'en faire.\n"},{"key":"keynote_open_overflow","title":"Keynote d'ouverture (overflow)","format":"keynote","tags":["keynote"],"speakers":[],"draft":false,"description":"[Keynote d'ouverture](../keynote_open)"},{"key":"l_histoire_de_la_decouverte_d_une_backdoor_signe_oneplus","title":"L'histoire de la découverte d'une backdoor signée OnePlus","id":"Kwery1cbJrx3ZFj6x1JU","format":"conference","tags":["_native_mobile_apps"],"level":"intermediate","speakers":["fs0c131y"],"videoId":null,"presentation":null,"draft":false,"description":"## Résumé\nEn Novembre 2017, j'ai découvert \"une backdoor\" dans tous les téléphones de la marque OnePlus. À l'aide d'une simple ligne de commande, un attaquant ayant un accès physique au téléphone, pouvait devenir root et ainsi obtenir un contrôle total du téléphone de la victime.\n\n## Détails\nDans ce talk, j'expliquerai le processus qui m'a permis de faire cette découverte :\n1. Extraction du build\n2. Récupération des applications dites \"système\"\n3. Détection de la vulnérabilité dans l'application Android \"EngineeringMode\"\n4. Exploitation de la vulnérabilité\n\n## Sujet abordés\nLors de la détection et l'analyse de cette faille, nous aborderons la philosophie du **hacking**, comment faire du **reverse engineering** sur des applications **Android** et une **librairie native**. Nous analyserons du **Java** ainsi que du **C**.\n\n## Categorie\nNative mobile apps\n\n## Format\nUne conférence de 40 min"},{"key":"le_burn_out_agile","title":"Le burn-out agile","id":"KAH9Lyx0b2TKNSQVZNw2","language":"Français","format":"conference","tags":["_method___tools"],"level":"intermediate","speakers":["cedric_moulard"],"videoId":null,"presentation":null,"draft":false,"description":"En 2019, le monde de l’informatique n’a que l’agilité à la bouche. Ca groome à tous les coins de rue, ça s’excite en daily, ça colle des post-it et ça empile les serious game en rétro. Bien sûr, ça gère la transformation numérique (désolé, même au second degré, je ne peux pas employer “digitale”) et au final plus personne ne comprend rien. \n\nDes chefs de projet subitement propulsés ScrumMaster qui ne savent pas ce qu’ils doivent faire. Des PO qui découvrent la priorisation. Des développeurs qui doivent composer avec des specs floues et changeantes sans vision globale du projet. Pour compléter le tableau, la subite apparition de coachs agile à peine sortis de l’école qui n’ont jamais vu un projet de leur vie et qui viennent expliquer des concepts qu’ils ne maîtrisent qu’à moitié.\n\nEn 2019 le monde de l’informatique rêve secrètement de cycles en V, de stabilité, de spécifications générales et de dossier d’architecture.\n\nEn 2019 le monde de l’informatique est au bord du burn-out agile.\n\n## Plan du talk \n\n- Petit historique : l’évolution des pratiques sur les 20 dernières années \n- Pourquoi ce bordel agile ? \n- Finalement l’agilité c’est quoi ? \n- Est-ce qu’il faut revenir au cycle en V ?"},{"key":"le_design_de_l_erreur","title":"Le design de l'erreur","id":"pAMZmFT2wrfqPr9IdeXv","language":"French","format":"conference","tags":["_method___tools"],"level":"beginner","speakers":["francois_teychene"],"videoId":null,"presentation":null,"draft":false,"description":"Nos systèmes sont designés de manière optimiste, de la gestion technique des erreurs à la modélisation de nos interfaces. \nQue ce soient les codes d'erreurs, les exceptions ou les modélisations plus avancées, elles servent pour arrêter un traitement et _potentiellement_ afficher un message d'information à un utilisateur.\n\nMais avec les architectures microservices, la distribution des traitements ou une simple volonté de résilience, la gestion des erreurs est devenue un enjeu important de tous les systèmes afin qu’ils restent accessibles de tous, tout le temps tout en maintenant le système dans un état cohérent.\n\nQue fait-on lorsqu’une erreur intervient ? Peut-on compenser voire gérer l’erreur depuis le système pour l’utilisateur ?\n\nLa réponse à ces questions se trouve autant dans la définition du produit que dans le choix technique.\nUn outil bien conçu est un outil intelligent qui peut faire les bons choix au bon moment pour l'utilisateur. Et si on apprenait ensemble à concevoir nos erreurs ?"},{"key":"le_jaillissement_de_l_esprit","title":"Le jaillissement de l'esprit","format":"conference","tags":["_method___tools"],"level":"beginner","speakers":["lois_blanc","saskia_blanc","sebastien_blanc"],"draft":false,"description":"Les enfants sont eux-mêmes les bâtisseurs actifs de leurs propres structures intellectuelles et l'informatique y joue un rôle déterminant, disait Piaget, un célèbre biologiste, psychologue et logicien. Son collaborateur, Seymour Papert, inventera le langage Logo, langage qui fait qu'aujourd’hui je suis un développeur épanoui.\nQu'en est-il aujourd'hui ? Comment donner le goût du code à nos enfants et surtout pourquoi est-ce important ?\nAvec Saskia, Loïs et leur père nous voyagerons à travers le temps, en partant de la tortue sur ce bon vieux M05 en passant par Scratch, le Logo hipster de nos jours, jusqu’à Groovy et Python."},{"key":"le_troll_dans_ta_machine_____une_courte_introduction_a_la_pensee_de_jean_yves_girard","title":"Le troll dans ta machine --- Une courte introduction à la pensée de Jean-Yves Girard","id":"hoiS7Cs5sWwXb632pLh2","format":"quickie","tags":["_wtf"],"level":"intermediate","speakers":["guillaume_andrieu"],"videoId":null,"presentation":null,"draft":false,"description":"Jean-Yves Girard, le génial inventeur des indispensables [montres à moutarde](http://girard.perso.math.cnrs.fr/moutarde.pdf) (1990), est certes un joyeux trublion.\n\nMais avant d'en arriver à ce sommet indépassable, il a tout de même publié deux-trois petites choses en chemin:\n\n- Rust, vous connaissez? L'idée première du système de typage de Rust est la logique dite \"[linéaire](http://girard.perso.math.cnrs.fr/linear.pdf)\", due à Jean-Yves Girard (1987).\n- Haskell, ça vous dit quelque chose? Les systèmes de typage de Haskell mais aussi Scala (et d'une certaine manière Java) sont basés sur le \"[système F](https://en.wikipedia.org/wiki/System_F)\" (ou lambda-calcul de second ordre), dû à... Jean-Yves Girard (1972).\n- Idris, vous avez entendu parler? Le système de typage d'Idris est basé sur la théorie des types de Per Martin-Löf, dont la première version a été prouvée incorrecte par... Jean-Yves Girard, qui depuis possède un [paradoxe](https://en.wikipedia.org/wiki/System_U#Girard's_paradox) à son nom. (Girard et Martin-Löf sont par ailleurs de très bons potes et ont ferraillé sec contre les logiciens classiques dans leur prime jeunesse.)\n\nTrès méconnu mais probalement l'un des penseurs les plus influents pour l'informatique de ce début de XXIe siècle, Girard est tout aussi sérieux que fantasque. Son style toujours acéré et polémique s'appuie sur une vision très claire de ce que devrait être la logique: vivante, joyeuse, fertile.\n\nDans cette courte présentation, on s'attachera à comprendre pourquoi Girard est aussi virulent dans son discours, quels sont les objectifs de sa pensée, et pourquoi elle a déjà porté tant de fruits dans le monde de l'informatique."},{"key":"live_coding_musical___vous_savez_coder___devenez_compositeur_avec_webaudio_et_webmidi__","title":"Live coding musical : vous savez coder ? Devenez compositeur avec WebAudio et WebMIDI !","id":"WwHpapkCgEg5IMW5vTId","language":"Français","format":"conference","tags":["_web"],"level":"intermediate","speakers":["sylvain_wallez"],"videoId":null,"presentation":null,"draft":false,"description":"Sans nécessiter de formation musicale pointue, tout développeur peut créer des morceaux qui sonnent bien et faire du \"live coding\" pour improviser en direct.\n\nAprès un rapide tour d'horizon des environnements de codage musical comme Sonic-Pi en Ruby ou FoxDot en Python, on codera/composera en live un morceau de musique électro avec comme seul outil un navigateur web, les API WebAudio et WebMIDI et la librairie Tone.js.\n\nQuelques samples bien choisis, une pincée de séquences harmonieuses, une bonne dose d'aléatoire encadré, et hop, tout le monde se mettra à danser ! Et puisque la musique c'est aussi des maths, on parlera de musique générative avec des chaînes de Markov et des L-Systems.\n\nDavid Guetta n'a qu'à bien se tenir !"},{"key":"machine_learning_avec_des_allumettes_et_des_cotillons","title":"Machine learning avec des allumettes et des cotillons","id":"cnRUAtQNZybQsQa03lAx","language":"Français","format":"quickie","tags":["_big_data___ml___ai"],"level":"beginner","speakers":["nicolas_decoster"],"videoId":null,"presentation":null,"draft":false,"description":"Dans ce talk je vous montrerai comment expliquer simplement le fonctionnement de l'apprentissage par renforcement. Pour cela pas besoin d'ordinateur : quelques allumettes, des sacs de cotillons et un peu de pédagogie sont suffisants pour mettre en évidence les mécanismes intrinsèques de cette technique et pour aborder les enjeux et les limites des algorithmes d'\"intelligence artificielle\" basés sur l'apprentissage."},{"key":"modern_forms_in_react","title":"Modern Forms in React","id":"McfMVcKDdZv68NSo2JIJ","language":"English","format":"conference","tags":["_web"],"level":"intermediate","speakers":["erik_rasmussen"],"videoId":null,"presentation":null,"draft":false,"description":"If the new React Context API and Suspense killed Redux (they didn't), surely Hooks kill the need for a form library, right? Well, not exactly. Managing form state is more than just holding your current values in state; it's about sync and async validition errors, and much more! But that doesn't mean that Hooks are irrelevant to the situation. Hooks make building forms in React easier than ever before."},{"key":"mon_p____de_voyant_moteur_est_encore_allume___comment_debugger_mon_moteur___plongeon_dans_les_entrailles_des_calculateurs_moteur","title":"Mon p*** de voyant moteur est encore allumé ! Comment debugger mon moteur ? Plongeon dans les entrailles des calculateurs moteur","id":"fW4yvmVxjXb57vQJhIXu","format":"conference","tags":["_wtf"],"level":"beginner","speakers":["mathieu_passenaud"],"videoId":null,"presentation":null,"draft":false,"description":"Depuis les années 70 tous les constructeurs autos intégrent des calculateurs électroniques.\nLes moteurs des voitures modernes sont des systèmes informatiques complexes qui s'appuient sur des dizaines de capteurs... et du code. \nComment ça fonctionne ? A quoi ressemble ce code et que fait-il ?\nQu'est-ce qu'il se passe lorsqu'on fait une \"reprog\" ? \nQue signifie le voyant moteur allumé ? Comment débugger tout ça ?\nSoulevons le capot (électronique), analysons le matériel mis en oeuvre mais surtout le logiciel grâce aux sources des calculateurs \"Megasquirt\" et allons explorer la face cachée numérique de nos voitures."},{"key":"monitoring_ovh__300k_serveurs__27_dcs_une_plateforme_de_metriques","title":"Monitoring OVH: 300k serveurs, 27 DCs une plateforme de métriques ","id":"xwAvvIJJfDdBD7N4oGa5","format":"conference","tags":["_big_data___ml___ai"],"level":"beginner","speakers":["horacio_gonzalez__lostinbrittany_"],"videoId":null,"presentation":null,"draft":false,"description":"Comment faire quand on doit faire le suivi de toute l'infrastructure du plus grand fournisseur de cloud Européen ? Comment choisir un outil quand les plus populaires ne tient pas la marée à cette échelle ? Comment construire une plateforme Metrics pour unifier, concilier et remplacer des années de legacy fragmenté et des solutions partielles ?\n\nDans ce talk nous racontons notre expérience sur la construction et la maintenance d'OVH Metrics, la plateforme utilisée pour monitorer toute l'infrastructure OVH. Nous avions besoin d'aller à des endroits où la plupart des solutions de monitoring ne sont jamais allées, opérer à l'échelle du plus grand fournisseur Européen de cloud et hosting : 27 data centers, plus de 300k serveurs (physiques !) et des centaines de produits pour accomplir notre mission avec nos 1,3 millions de clients.\n\nVenez pour entendre cette histoire de séries temporelles, de solutions open-sources poussées à l'extrême, de clusters HBase opérés en limite de capacité, et de comment une petite équipe s'est appuyée sur une poignée de solutions open-source et une bonne dose de code maison pour construire une des solutions de monitoring parmi les plus performantes au monde."},{"key":"office-hour-00","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["fabien_tregan"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [Une histoire de l'informatique, du métier à tisser à la machine de Babbage...](../keynote_open)\n* [Keynote d'ouverture (overflow)](../keynote_open_overflow)","officeHours":["keynote_open","keynote_open_overflow"]},{"key":"office-hour-01","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["sebastien_brault","liliia_abdulina","christophe_jollivet","jeremy_voisin","loic_ortola"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [\"Numérique et environnement\" ou \"On aurait pu sauver les abeilles, on a préféré sortir un nouvel iPhone\"](../_numerique_et_environnement__ou__on_aurait_pu_sauver_les_abeilles__on_a_prefere_sortir_un_nouvel_iphone_)\n* [A Kotlin multiplatform evolution](../a_kotlin_multiplatform_evolution)\n* [A la découverte de la réalité augmentée avec ARCore](../a_la_decouverte_de_la_realite_augmentee_avec_arcore)\n* [The rise of the web](../the_rise_of_the_web)","officeHours":["the_rise_of_the_web","a_kotlin_multiplatform_evolution","_numerique_et_environnement__ou__on_aurait_pu_sauver_les_abeilles__on_a_prefere_sortir_un_nouvel_iphone_","a_la_decouverte_de_la_realite_augmentee_avec_arcore"]},{"key":"office-hour-02","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["fs0c131y","cedric_moulard","vincent_ogloblinsky","wassim_chegham","aleksey_kladov"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [L'histoire de la découverte d'une backdoor signée OnePlus](../l_histoire_de_la_decouverte_d_une_backdoor_signe_oneplus)\n* [Le burn-out agile](../le_burn_out_agile)\n* [Rockin’ in the Angular World](../rockin_in_the_angular_world)\n* [Rust as a High-Level Langage](../rust_as_a_high_level_langage)","officeHours":["l_histoire_de_la_decouverte_d_une_backdoor_signe_oneplus","le_burn_out_agile","rust_as_a_high_level_langage","rockin_in_the_angular_world"]},{"key":"office-hour-03","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["olivier_leplus","tiffany_souterre","gautier_mechling","clement_duffau","melanie_ducoffe","corentin_wallez"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [Allo Paris, ici San Francisco. Et si on codait ensemble avec VS Code?](../allo_paris__ici_san_francisco__et_si_on_codait_ensemble_avec_vs_code_)\n* [Premiers pas avec un microcontrôleur et Google Cloud IoT Core](../premiers_pas_avec_un_microcontroleur_et_google_cloud_iot_core)\n* [Quand les ratés des IAs nous renvoient à nos propres biais sociétaux](../quand_les_rates_des_ias_nous_renvoient_a_nos_propres_biais_societaux)\n* [WebGPU: Next-generation 3D Graphics on the Web](../webgpu__next_generation_3d_graphics_on_the_web)","officeHours":["webgpu__next_generation_3d_graphics_on_the_web","quand_les_rates_des_ias_nous_renvoient_a_nos_propres_biais_societaux","allo_paris__ici_san_francisco__et_si_on_codait_ensemble_avec_vs_code_","premiers_pas_avec_un_microcontroleur_et_google_cloud_iot_core"]},{"key":"office-hour-04","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["guillaume_smet","lois_blanc","saskia_blanc","sebastien_blanc","sylvain_wallez","steve_klabnik"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [De Java à un exécutable natif : GraalVM et Quarkus changent la donne](../de_java_a_un_executable_natif___graalvm_et_quarkus_changent_la_donne)\n* [Le jaillissement de l'esprit](../le_jaillissement_de_l_esprit)\n* [Live coding musical : vous savez coder ? Devenez compositeur avec WebAudio et WebMIDI !](../live_coding_musical___vous_savez_coder___devenez_compositeur_avec_webaudio_et_webmidi__)\n* [Rust, WebAssembly, and the future of Serverless](../rust__webassembly__and_the_future_of_serverless)","officeHours":["rust__webassembly__and_the_future_of_serverless","live_coding_musical___vous_savez_coder___devenez_compositeur_avec_webaudio_et_webmidi__","le_jaillissement_de_l_esprit","de_java_a_un_executable_natif___graalvm_et_quarkus_changent_la_donne"]},{"key":"office-hour-05","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["noel_mace","alessio_coltellacci","francois_teychene","andrew_radev"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [Brace yourself, 🍦Vanilla is coming … back 🕶!](../brace_yourself__vanilla_is_coming__back__)\n* [Comprendre le rôle du noyau d'un système d'exploitation en en créant un from scratch](../comprendre_le_role_du_noyau_d_un_systeme_d_exploitation_en_creant_un_from_scratch)\n* [Le design de l'erreur](../le_design_de_l_erreur)\n* [The Freedom of Static Typing](../the_freedom_of_static_typing)","officeHours":["le_design_de_l_erreur","the_freedom_of_static_typing","comprendre_le_role_du_noyau_d_un_systeme_d_exploitation_en_creant_un_from_scratch","brace_yourself__vanilla_is_coming__back__"]},{"key":"office-hour-06","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["valeriane_venance","adrien_anceau","piotr_przybyl","horacio_gonzalez__lostinbrittany_"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [Authentication/Authorization Starters Battle](../authentication_authorization_starters_battle)\n* [DevOps at scale](../devops_at_scale)\n* [Four Diseases](../four_diseases)\n* [Monitoring OVH: 300k serveurs, 27 DCs une plateforme de métriques ](../monitoring_ovh__300k_serveurs__27_dcs_une_plateforme_de_metriques)","officeHours":["monitoring_ovh__300k_serveurs__27_dcs_une_plateforme_de_metriques","authentication_authorization_starters_battle","devops_at_scale","four_diseases"]},{"key":"office-hour-11","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["marie_viley","juliane_blier","guillaume_andrieu","nicolas_decoster"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [3 techniques faciles de manipulation](../3_techniques_faciles_de_manipulation)\n* [Développeurs en reconversion, développeurs quand même !](../developpeurs_en_reconversion__developpeurs_quand_meme__)\n* [Le troll dans ta machine --- Une courte introduction à la pensée de Jean-Yves Girard](../le_troll_dans_ta_machine_____une_courte_introduction_a_la_pensee_de_jean_yves_girard)\n* [Machine learning avec des allumettes et des cotillons](../machine_learning_avec_des_allumettes_et_des_cotillons)","officeHours":["3_techniques_faciles_de_manipulation","machine_learning_avec_des_allumettes_et_des_cotillons","le_troll_dans_ta_machine_____une_courte_introduction_a_la_pensee_de_jean_yves_girard","developpeurs_en_reconversion__developpeurs_quand_meme__"]},{"key":"office-hour-12","title":"Office Hours","format":"office-hours","tags":["office-hours"],"speakers":["gilles_debunne","qj7nbl6wiyug1rhqtxf818a46po1","theophile_wallez","richard_fagot"],"draft":false,"description":"Venez poser vos questions aux speakers de manière plus calme et détendue.\n\n* [10 est une puissance de 2](../10_est_une_puissance_de_2)\n* [« 47 ans : ils n’ont toujours pas remarqué … »](../_47_ans___ils_nont_toujours_pas_remarque__)\n* [Applications de Brainfuck, langage minimaliste mais Turing-complet](../applications_de_brainfuck__langage_minimaliste_mais_turing_complet)\n* [Un distributeur automatique d'argent de poche pour les enfants](../un_distributeur_automatique_d_argent_de_poche_pour_les_enfants)","officeHours":["_47_ans___ils_nont_toujours_pas_remarque__","applications_de_brainfuck__langage_minimaliste_mais_turing_complet","un_distributeur_automatique_d_argent_de_poche_pour_les_enfants","10_est_une_puissance_de_2"]},{"key":"premiers_pas_avec_un_microcontroleur_et_google_cloud_iot_core","title":"Premiers pas avec un microcontrôleur et Google Cloud IoT Core","id":"R9O1S7M9oRMmwd0cNBaz","format":"conference","tags":["_iot"],"level":"beginner","speakers":["gautier_mechling"],"videoId":null,"presentation":null,"draft":false,"description":"De nombreux services en ligne existent pour gérer en toute sécurité des appareils IoT à grande échelle : \"Azure IoT\" de Microsoft et \"AWS IoT\" d'Amazon sont parmi les plus connus.\n\nGoogle propose également sa solution : \"Cloud IoT\" basée sur la plate-forme Google Cloud (GCP).\nDans ce talk, nous partirons d'un microcontrôleur neuf ultra connu et abordable, et notre but sera tout d'abord de découvrir comment écrire du code pour ce composant nous permettant de récupérer des informations sur notre environnement.\nEnsuite, nous ferons en sorte que ce composant envoie ses données vers un service Cloud, pour enfin découvrir ce que permettent ces solutions en ligne dédiées à l'IoT.\n\nPour l'exemple, et parce qu'il faut bien choisir une solution, nous utiliserons Google Cloud IoT Core, les concepts restant similaires sur les autres plates-formes."},{"key":"quand_les_rates_des_ias_nous_renvoient_a_nos_propres_biais_societaux","title":"Quand les ratés des IAs nous renvoient à nos propres biais sociétaux","id":"ZsAGxn6UZi1hfzz2bwR7","format":"conference","tags":["_big_data___ml___ai"],"level":"beginner","speakers":["clement_duffau","melanie_ducoffe"],"videoId":null,"presentation":null,"draft":false,"description":"Un chatbot créé par Microsoft qui dérive avec des propos antisémites, Amazon qui scanne des CVs et finit par ne recruter que des hommes blancs, des algorithmes de reconnaissance faciale qui ont du mal avec les personnes de couleur noire, ... Que d'exemples où l'IA a intégré nos propres biais sociétaux. Il est urgent que nous, développeurs, prenions nos responsabilités et mesurions les enjeux éthiques de l'IA pour éviter que les stéréotypes, les inégalités et les préjugés se retrouvent au cœur de nos futurs systèmes.\n\nCette présentation propose des root cause analysis sur des exemples concrets de ces biais et présente des alternatives qui auraient permis d'éviter ces biais en \"production\" autant d'un point de vue humain que technique.\n\nNous verrons notamment que l’éthique peut directement être abordée au niveau des données et de leur préparation à l’apprentissage. Nous nous concentrerons principalement sur l’impact des statistiques des données d’entraînement et les transformations à appliquer en pré-processing (métriques de fairness, améliorer la fairness sur des données annotées), et nous montrerons comment des benchmarks permettent d'appréhender l’impact des méthodes de fairness sur la précision des modèles entraînés.\n\nLa confiance et l’équité passe avant tout par une compréhension de la prise de décision par l’utilisateur. Par conséquent, nous présenterons diverses méthodes pour expliquer la prise de décision d’un modèle boîte noire (principalement des algorithmes de deep learning) et mettons en garde contre une mauvaise interprétation de ces explications."},{"key":"rockin_in_the_angular_world","title":"Rockin’ in the Angular World","id":"niiUNFAFhYnPBiOrcDVf","language":"Français","format":"conference","tags":["_web"],"level":"intermediate","speakers":["vincent_ogloblinsky","wassim_chegham"],"videoId":null,"presentation":null,"draft":false,"description":"_« Make it work, make it right, make it fast »_ - Kent Beck\n\nNous connaissons tous cette citation. Pourtant nous sommes trop souvent restés bloqué à l’étape 1 par manque de temps ou de priorisation.\n\nL’accueil d’un nouveau développeur·euse dans une équipe est un des meilleurs moments pour vérifier qu’une base de code est « saine et scalable ».\n\nNous vous proposons dans ce talk un retour d’expérience sur quelques années de consulting sur des projets Angular au travers de cas concrets :\n- quelles sont les mauvaises pratiques à éviter ?\n- quels sont les choix orientés et assumés d’Angular pour vous éviter tout ça ?\n- quelle que soit la taille de votre équipe ou l’expérience de vos collègues, quels sont les principes d’architecture à adopter pour améliorer tout ça ?"},{"key":"rust__webassembly__and_the_future_of_serverless","title":"Rust, WebAssembly, and the future of Serverless","id":"2S9XtGGq3ouHnkivEDKC","language":"English","format":"conference","tags":["_cloud___infra"],"level":"intermediate","speakers":["steve_klabnik"],"videoId":null,"presentation":null,"draft":false,"description":"A lot of things have been said about WebAssembly inside of the\nbrowser; after all, that's why it was originally created. But a new\ncase is emerging as well, and that's WebAssembly on the server. More\nspecifically, we're seeing a rise of support for WebAssembly in\nserverless application platforms, combining two brand-new technologies\ntogether. We're also seeing a lot of growth of the Rust programming\nlanguage, and its close alignment with WebAssembly. In this talk,\nSteve will talk about Rust, WebAssembly, serverless technologies, and\nhow it all fits together."},{"key":"rust_as_a_high_level_langage","title":"Rust as a High-Level Langage","id":"PjQDGsFIQoo1By4Ogv3q","language":"English","format":"conference","tags":["_languages"],"level":"beginner","speakers":["aleksey_kladov"],"videoId":null,"presentation":null,"draft":false,"description":"The singe most important feature of Rust is memory safety. Writing code with performance of C++, at a typical development cost, and with guaranteed absence of certain classes of memory safety related vulnerabilities is something that was not possible before. \n\nHowever, all popular managed languages with garbage collection take memory safety for granted, so this aspect of Rust doesn't bring anything new to the table, if you already use Java or Go. Nevertheless, Rust can be an interesting choice as a high-level language, and this talks explains way. \n\nThe focus of the talk is fearless concurrency. Data races are a pervasive and unsolved problem in languages like Java and Rust's guaranteed thread safety is a liberating experience for application development. We also touch on some other benefits of the language for high-level tasks:\n\n* predictable performance due to absence of garbage collection\n* control over the memory layout of objects, which gives you extra performance if you need it\n* module (crate) system that, at the language level, prevents dependency hell\n* additional correctness guarantees, like the absence of iterator validation or strict control of error conditions"},{"key":"the_freedom_of_static_typing","title":"The Freedom of Static Typing","id":"RhWn82dKmICiQulwcVJF","language":"English","format":"conference","tags":["_languages"],"level":"intermediate","speakers":["andrew_radev"],"videoId":null,"presentation":null,"draft":false,"description":"It's a common idea: Dynamic typing gives you freedom to do whatever you want, but then you suffer mistakes and runtime errors. Static typing limits your freedom, but it leads to fewer bugs, even if it's harder to actually write code.\n\nThis isn't entirely false. Yes, it can be quite hard to write a Rust or Haskell program that compiles, enough that it's a running gag in their communities. \"But once you get it to compile, it's probably correct!\", the joke goes. On the other hand, when writing Ruby or Javascript, you're free to call functions with all sorts of things, and then runtime errors can easily slip into production. That said, it's not as simple as a sliding scale between \"freedom\" and \"safety\". Neither of these terms is one-dimensional -- a language feature that restricts your freedom in one way can actually free you in different ways.\n\nI'd like to demonstrate some interesting language features in Rust that make it easier to write code and to express concepts compared to dynamic languages. Features that don't just protect you from shooting your foot, but give you power that's only available within the rules and \"limitations\" of a statically typed language. Even if you're not familiar with Rust, I hope to focus the examples on the features themselves rather than on the specifics of the language, so come by and let's talk about being (type-safely) free."},{"key":"the_rise_of_the_web","title":"The rise of the web","id":"0MXH99V8NY9xyeurYCmA","format":"conference","tags":["_web"],"level":"beginner","speakers":["loic_ortola"],"videoId":null,"presentation":null,"draft":false,"description":"Il y a 20 ans, personne de **sobre** n’aurait utilisé Javascript pour autre chose que des étoiles filantes qui sortent de ta souris. Non, à l'époque, on préférait les serveurs d'application en Java! \nAujourd’hui, non seulement on a des frameworks front, mais il y a même des hipsters qui font du backend avec... Et depuis, on fait des APIs. \n**Comment en est-on arrivé là?** \nC’est ça inspecteur. C’est ça la bonne question.\n\nSi tu ne les as pas vécus, viens découvrir l'arrivée du Web, l'histoire de Netscape, la browser-war, la naissance du serveur d'application, les débuts du web dynamique et la prise d'assaut du JS.\n\nSit back, relax, and Enjoy!"},{"key":"un_distributeur_automatique_d_argent_de_poche_pour_les_enfants","title":"Un distributeur automatique d'argent de poche pour les enfants","id":"ZmSIPnuidcxjKLVfEKM8","language":"Français","format":"quickie","tags":["_wtf"],"level":"beginner","speakers":["richard_fagot"],"videoId":null,"presentation":null,"draft":false,"description":"Avec mon épouse nous avons commencé à donner de l'argent de poche à nos enfants.\n\n![Calvin et l'argent de poche](https://i.pinimg.com/originals/ad/47/94/ad47940ca35ce4bd5122a916abf9f589.png)\n\nPour qu'ils puissent faire comme les grands (et parce que c'est fun aussi :D) j'ai conçu un DAAP (**D**istributeur **A**utomatique d'**A**rgent de **P**oche) qui leur permet, le jour de la distribution de l'argent de poche, d'insérer leur \"carte bleue\", saisir leur code et de voir la machine s'ébranler pour distribuer les pièces.\n\nDans ce talk on parlera d'Arduino, d'impression 3D, de cartes à puce, d'électronique et des problèmes que j'ai rencontrés et comment j'ai pu les résoudre."},{"key":"webgpu__next_generation_3d_graphics_on_the_web","title":"WebGPU: Next-generation 3D Graphics on the Web","id":"5qTyscBWtXLRb04TXEdB","language":"English","format":"conference","tags":["_web"],"level":"intermediate","speakers":["corentin_wallez"],"videoId":null,"presentation":null,"draft":false,"description":"This talk will give an overview of the WebGPU API that will provide modern features such as “GPU compute” on the Web as well as lower overhead access to GPU hardware and better, more predictable performance. This will allow for much more graphically intensive games on the Web and boost performance of frameworks like Tensorflow.js up to 10x."}],"speakers":[{"key":"adrien_anceau","name":"ADRIEN ANCEAU","id":"y0wL4Q9ZnxdOvpCvlaejITZcPBq2","feature":false,"company":"Airbus","city":"Toulouse, France","photoURL":"/2021/images/speakers/adrien_anceau.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/aaadrieeen","name":"aaadrieeen"},{"icon":"github","link":"https://github.com/aanc","name":"aanc"}],"description":""},{"key":"aleksey_kladov","name":"Aleksey Kladov","id":"PZ3g6x42k9cu5e9siNoFQV8Z6jy2","feature":false,"company":"Ferrous Systems","city":"St Petersburg, Russia","photoURL":"/2021/images/speakers/aleksey_kladov.jpg","socials":[{"icon":"github","link":"https://github.com/matklad","name":"matklad"}],"description":"@matklad is a Rust developer, who specializes in dev tools and IDEs. He spearheaded [IntelliJ Rust](https://intellij-rust.github.io/) and currently leads the development of [rust-analyzer](https://github.com/rust-analyzer/rust-analyzer)."},{"key":"alessio_coltellacci","name":"Alessio Coltellacci","id":"EP7LDG2i6YgiNs027aplFVhEbv12","feature":false,"company":"Clever Cloud","city":"Toulouse, France","photoURL":"/2021/images/speakers/alessio_coltellacci.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/lightplay8","name":"lightplay8"},{"icon":"github","link":"https://github.com/NotBad4U","name":"NotBad4U"}],"description":"Développeur à Clever Cloud."},{"key":"andrew_radev","name":"Andrew Radev","id":"e5GCt0Q7jSSgVtPTzfUFplteFMm1","feature":false,"city":"Sofia, Bulgaria","photoURL":"/2021/images/speakers/andrew_radev.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/AndrewRadev","name":"AndrewRadev"},{"icon":"github","link":"https://github.com/AndrewRadev","name":"AndrewRadev"}],"description":"Professional Rails developer with an excessive amount of Vimscript in his Github profile. Teaches a Rust course in Sofia University."},{"key":"cedric_moulard","name":"Cédric Moulard","id":"KFNUe96DM9g1zobCtf4GVzdoLRp2","feature":false,"photoURL":"/2021/images/speakers/cedric_moulard.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/cedric_moulard","name":"cedric_moulard"},{"icon":"github","link":"https://github.com/cedricmoulard","name":"cedricmoulard"}],"description":"Diplômé de Arts & Métiers ParisTech et pas vraiment destiné à faire de l'informatique. \nDéveloppeur autodidacte. \n\n20 ans d'expérience, dont :\n- Architecte Java\n- Développeur Angular\n- Chef de projet\n- ScrumMaster\n- Evaluateur CMMi\n- Responsable Méthodes & Outils"},{"key":"christian_faure","name":"Christian Fauré","feature":true,"city":"Paris, France","photoURL":"/2021/images/speakers/christian_faure.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/ChristianFaure"}],"description":"IT & Philosophy - [http://www.christian-faure.net/](http://www.christian-faure.net/)"},{"key":"christophe_jollivet","name":"Christophe Jollivet","id":"CQO7iVm9GWb4jFPi3xmIUnsyY5r2","feature":false,"company":"Apside","city":"Tours, France","photoURL":"/2021/images/speakers/christophe_jollivet.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/jollivetc","name":"jollivetc"},{"icon":"github","link":"https://github.com/jollivetc","name":"jollivetc"}],"description":"Agitateur technique chez Apside, Christophe prêche les bonnes pratiques sur divers projets informatiques et universités en région tourangelle. Reconverti à l’informatique il y a 15 ans suite à un doctorat de neurobiologie, il contribue activement dans les communautés Java en ayant été co-responsable de la rubrique Java du site developpez.com mais aussi en participant à des conférences et en ayant fondé le Tours JUG en 2008 et co-fondé TouraineTech en 2017"},{"key":"clement_duffau","name":"Clément Duffau","id":"XDO4bqPAuJRWnEAJtNW9bCg09Of2","feature":false,"company":"Stack Labs","city":"Toulouse, France","photoURL":"/2021/images/speakers/clement_duffau.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/clement0210","name":"clement0210"},{"icon":"github","link":"https://github.com/clement0210","name":"clement0210"}],"description":"Suite à un diplôme d'ingénieur en informatique spécialisé en Architecture Logicielle, j'ai effectué un doctorat en Génie Logiciel appliqué aux domaines critiques afin d'aborder les problèmes liant les méthodologies de développement logiciel, la sûreté de fonctionnement et la certification. \n\nJ'utilise actuellement ma double compétence de chercheur en Génie Logiciel et lead DevOps pour l'entreprise Stack Labs. \nMon poste consiste à intervenir chez des clients dans les domaines critiques (aérospatial notamment) afin de les aider à mettre en place et structurer leur approche DevOps mais également à être pro-actif sur les sujets R&D portés en interne par Stack Labs."},{"key":"corentin_wallez","name":"Corentin Wallez","id":"KkCVbJvhE1OL1Dd51U4t9H54iFT2","feature":true,"company":"Google","city":"Paris, France","photoURL":"/2021/images/speakers/corentin_wallez.png","socials":[{"icon":"twitter","link":"https://twitter.com/DaKangz","name":"DaKangz"},{"icon":"github","link":"https://github.com/Kangz","name":"Kangz"}],"description":"Graphics plumber @google\n\nCorentin is an engineer working on Chrome's GPU team in Google Paris. \nHe leads development of the WebGPU API and chairs the \"GPU for the Web\" W3C group."},{"key":"cyril_delmas","name":"Cyril Delmas","id":"1A7LmMXk8EdzhOdUpo6TUAXgBrV2","feature":false,"company":"Lectra","city":"Mérignac, France","photoURL":"/2021/images/speakers/cyril_delmas.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/cyril_delmas","name":"cyril_delmas"},{"icon":"github","link":"https://github.com/cdelmas","name":"cdelmas"}],"description":"Développeur depuis une douzaine d'années, je m'intéresse à plein de choses, notamment : la programmation fonctionnelle, le cloud, et tout ce qui n'est pas frontend en fait (bon surtout le CSS)... J'aime partager mes expérimentations et découvertes, échanger autour d'une bière, ..."},{"key":"erik_rasmussen","name":"Erik Rasmussen","id":"0JlQCEoQQcPx7v0mk1OCQMMKqNz2","feature":true,"city":"Cantabria, Spain","photoURL":"/2021/images/speakers/erik_rasmussen.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/erikras","name":"erikras"},{"icon":"github","link":"https://github.com/erikras","name":"erikras"}],"description":"American expat living in Spain, making awesome Javascript open source."},{"key":"fabien_tregan","name":"Fabien Trégan","id":"ZzM9y7R7msb0LDFW8fdwRBYthlJ2","feature":false,"city":"Toulouse, France","photoURL":"/2021/images/speakers/fabien_tregan.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/ftregan","name":"ftregan"},{"icon":"github","link":"https://github.com/fabientregan","name":"fabientregan"}],"draft":false,"description":"After spending 10+ years of my life coding, I started to feel that the problems in software development were not in the code and tryed finding solutions elsewhere. Since I started doing that, I started to love coding again :)"},{"key":"francois_guillaume_ribreau","name":"Francois-Guillaume Ribreau","id":"HaMEPZSMBscJU4Adj9VF8brrL5h1","feature":false,"company":"Ouest-France/Image-Charts","city":"Rennes, France","photoURL":"/2021/images/speakers/francois_guillaume_ribreau.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/fgribreau","name":"fgribreau"},{"icon":"github","link":"https://github.com/fgribreau","name":"fgribreau"}],"description":"Architect & Head of Digital Development @OuestFrance 🌟#FullStack CTO @imagecharts @Redsmin @killbugapp @motiondynamic_ @mailpopin founder"},{"key":"francois_teychene","name":"François Teychene","id":"EZdFes7RoSTGQJO5uOBCqSeyGvv2","feature":false,"company":"Saagie","city":"Montpellier, France","photoURL":"/2021/images/speakers/francois_teychene.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/fteychene","name":"fteychene"},{"icon":"github","link":"https://github.com/fteychene","name":"fteychene"}],"description":"Cloud Developer @ Saagie , meetup addict & organizer @ Montpellier, SunnyTech team. \nDéveloppeur couteau suisse pouvant intervenir du Javascript à la table de routage. Mes passions actuelles sont le Rust, le DevOps et le Scala en plus de vouloir mettre des conteneurs partout."},{"key":"fs0c131y","name":"fs0c131y","id":"e4GVXSs1fWTLOuXVs7H4l7ZE4gB3","feature":true,"city":"Toulouse, France","photoURL":"/2021/images/speakers/fs0c131y.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/fs0c131y","name":"fs0c131y"}],"description":"- French security researcher.\n- Worst nightmare of Oneplus, Wiko, UIDAI, Kimbho, Donald Daters and others.\n- Not completely schizophrenic.\n- Not related to USANetwork.\n\n"},{"key":"gautier_mechling","name":"Gautier Mechling","id":"11mlK9RAq6f3pU5MCJ95B13oMmr1","feature":false,"company":"Nilhcem","city":"Paris, France","photoURL":"/2021/images/speakers/gautier_mechling.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/Nilhcem","name":"Nilhcem"},{"icon":"github","link":"https://github.com/Nilhcem","name":"Nilhcem"}],"description":"Android Crafter && Google Developer Expert IoT"},{"key":"gilles_debunne","name":"Gilles Debunne","id":"iEtQubdXhDY3HBP9y3XqKbr9tFo1","feature":false,"company":"Freelance","city":"Toulouse, France","photoURL":"/2021/images/speakers/gilles_debunne.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/gdebunne","name":"gdebunne"},{"icon":"github","link":"https://github.com/GillesDebunne","name":"GillesDebunne"}],"description":"Développeur Freelance sur Toulouse depuis 4 ans, je me spécialise dans l'UX, front ou mobile. Éclectique, chercheur au CNRS, en SSII ou dans l'équipe Android chez Google, j'ai toujours travaillé près et pour l'utilisateur."},{"key":"guillaume_andrieu","name":"Guillaume Andrieu","id":"NMwgV3lXIOdtAaM8cgu7pIdFECO2","feature":false,"company":"MonkeyPatch","city":"Toulouse, France","photoURL":"/2021/images/speakers/guillaume_andrieu.png","socials":[{"icon":"twitter","link":"https://twitter.com/glmxndr","name":"glmxndr"},{"icon":"github","link":"https://github.com/glmxndr","name":"glmxndr"}],"description":"Matheux converti de force à l'informatique.\nDéveloppeur back end depuis plus de 10 ans.\nProgrammation fonctionnelle, théorie des types, systèmes distribués.\nAu delà: changement climatique, droits humains, philosophie."},{"key":"guillaume_smet","name":"Guillaume Smet","id":"HahzK1wXnxSyzyhcphrn5DBgBct2","feature":false,"company":"Red Hat","city":"Lyon, France","photoURL":"/2021/images/speakers/guillaume_smet.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/gsmet_","name":"gsmet_"},{"icon":"github","link":"https://github.com/gsmet","name":"gsmet"}],"description":"Après 13 années dans une SSLL, d'abord comme chef de projet puis directeur technique et responsable du pôle développement spécifique Java (avec beaucoup de contributions Open Source notamment à PostgreSQL), Guillaume est, depuis 3 ans, Senior Software Engineer chez Red Hat. Il est le project lead d'Hibernate Validator et travaille sur toutes les bibliothèques Hibernate (ORM, Search et Validator).\n\nEmbarqué dans l'aventure Quarkus pour y intégrer les technologies Hibernate, il est désormais l'un des principaux contributeurs au projet."},{"key":"horacio_gonzalez__lostinbrittany_","name":"Horacio Gonzalez (LostInBrittany)","id":"pYuiGicpt0MenD8NEMhZXtk6VSr1","feature":false,"company":"OVH","city":"Brest, France","photoURL":"/2021/images/speakers/horacio_gonzalez__lostinbrittany_.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/LostInBrittany","name":"LostInBrittany"},{"icon":"github","link":"https://github.com/LostInBrittany","name":"LostInBrittany"}],"description":"Malgré ce que son accent espagnol bien prononcé peut suggérer, Horacio est arrivé en France il y a plus d'une quinzaine d'années. Passionné d'informatique, dans laquelle il est tombé depuis tout petit, il a découvert le développement web en 1997 et depuis il n'a pas arrêté de bosser autour.\n\nAprès quelques années comme tech leader de la partie frontend de [@warp10io](https://twitter.com/warp10io/) chez [Cityzen Data](https://twitter.com/cityendata/), Horacio a rejoint [OVH](](https://twitter.com/ovh/) en janvier 2018 en tant que Developer Advocate. Il est cofondateur du [FinistDevs](https://twitter.com/finistdevs/), le JUG/GDG français le plus proche de la Silicon Valley.\n\nPassionné par le développement web et tout ce qui gravite autour des composants web, Horacio est [Google Developer Expert (GDE)](https://developers.google.com/experts/people/horacio-gonzalez) en Web Technologies et Flutter.\n\nVous pouvez voir mes derniers talks sur [mon profil Notist](https://noti.st/lostinbrittany)"},{"key":"jeremy_voisin","name":"Jérémy Voisin","id":"umDrfx7WeEQRicrwBAbLUu6B5By1","feature":false,"company":"Apside","city":"Le Mans, France","photoURL":"/2021/images/speakers/jeremy_voisin.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/_JeremyVoisin_","name":"_JeremyVoisin_"},{"icon":"github","link":"https://github.com/JeremyVoisin","name":"JeremyVoisin"}],"description":"Tech lead chez Apside, Jérémy est un explorateur des technologies modernes et passées qui apporte ses découvertes dans le cadre de formations ou d'interventions d'expertises.\nIssu d'un parcours universitaire en intelligence artificielle, il mène des travaux en IA sémantique et ses domaines d'expertises, outre l'IA, sont le développement mobile et les trois réalités (AR, VR, MR)."},{"key":"juliane_blier","name":"Juliane Blier","id":"FYLUEJTslJOXNAWDOykmi4Cz74s2","feature":false,"company":"SchoolMouv","city":"Toulouse, France","photoURL":"/2021/images/speakers/juliane_blier.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/tactless7","name":"tactless7"},{"icon":"github","link":"https://github.com/Tactless7","name":"Tactless7"}],"description":"Développeuse Web depuis presque 3 ans, je pratique Vue.js et Koa.js au quotidien chez SchoolMouv à Toulouse. \nCela fait maintenant trois conférences que je coprésente aux DevFest de Toulouse, de Brest puis à MiXiT 2019. Et je m'épanouis totalement dans cette nouvelle activité !"},{"key":"liliia_abdulina","name":"Liliia Abdulina","feature":false,"company":"JetBrains","city":"Munich, Germany","photoURL":"/2021/images/speakers/liliia_abdulina.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/var_lynx","name":"@var_lynx"}],"description":"Kotlin QA since 2017. Writing Kotlin code on a daily basis to be one of the first persons who try the things around Kotlin, mostly tooling; multiplatform is the biggest and a favorite part — made 200+ posts answering the users when we've announced Kotlin Multiplatform 1.3 for the first time. I have a rich mobile apps QA background, used to be a Java developer for a little while at the very beginning of the carrier."},{"key":"loic_ortola","name":"Loïc Ortola","id":"8nSCFV8Ne4WLjfP2IBNdoLVMtNV2","feature":false,"company":"Takima","city":"Paris, France","photoURL":"/2021/images/speakers/loic_ortola.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/LoicOrtola","name":"LoicOrtola"},{"icon":"github","link":"https://github.com/loicortola","name":"loicortola"}],"description":"Loïc is the senior advocate of Takima, and CTO of Jawg Maps. \nJVM-based languages, Application performance, DevOps & Automation, Dev Discipline and Tech for Good are his primary targets!\n\nSince last year, Loïc has been orchestrating R&D in the taskforce named Hackers Against Natural Disasters, an organization that creates and deviates technologies to help raise awareness around the risks of Natural Disasters."},{"key":"lois_blanc","name":"Loïs Blanc","feature":false,"city":"Vallauris, France","photoURL":"/2021/images/speakers/lois_blanc.jpg","socials":[],"description":"Loïs est en sixième et a eu son jaillissement de l’esprit en découvrant qu’il pouvait coder un Mario Bros avec Scratch."},{"key":"marie_viley","name":"Marie Viley","id":"hPV9avMI5RW70VtkyjGLO1c1MRO2","feature":true,"company":"Zenika","city":"Nantes, France","photoURL":"/2021/images/speakers/marie_viley.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/marie_viley","name":"marie_viley"}],"description":"Recruteuse chez Zenika, je me suis toujours intéressée à la communication non verbale et aux mécanismes d’influence et de prise de décision. \nCe qui me motive, c’est de comprendre au mieux les gens et de pouvoir échanger avec eux. \nFan des conférences TED et [#TRU] (https://www.linkhumans.fr/tru/) je suis constamment en veille sur le recrutement, le RGPD et les nouveautés tech.\nJ’aime également le métal, la bière et Dikkenek ^^"},{"key":"mathieu_passenaud","name":"Mathieu Passenaud","id":"JLEDSTiwyJX5AxGAw1GZjv7X23a2","feature":false,"company":"please-open.it","city":"Toulouse, France","photoURL":"/2021/images/speakers/mathieu_passenaud.jpg","socials":[],"description":"DevOps (Teevity, Berger Levrault, OVH, Connit, Ubleam) depuis 8 ans maintenant sur Toulouse. Issu du milieu de l'embarqué (calculateurs ferroviaires/militaires), je me suis retrouvé parachuté dans l'univers du cloud pendant quelques années jusqu'à revenir au croisement de ces deux mondes : l'IOT. Touche à tout, j'aime beaucoup prototyper et répondre à la question 'est-ce que c'est possible ?'"},{"key":"melanie_ducoffe","name":"Mélanie Ducoffe","id":"ZnEio3GkUXNUuJjcbDvftFawfvu1","feature":false,"company":"Airbus","city":"Toulouse, France","photoURL":"/2021/images/speakers/melanie_ducoffe.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/mducoffe","name":"mducoffe"},{"icon":"github","link":"https://github.com/mducoffe","name":"mducoffe"}],"description":""},{"key":"nicolas_decoster","name":"Nicolas Decoster","id":"kM7lbPEBt1XvvaYomE9Gz5wj8UT2","feature":false,"company":"Magellium","city":"Toulouse, France","photoURL":"/2021/images/speakers/nicolas_decoster.png","socials":[{"icon":"twitter","link":"https://twitter.com/ogadaki","name":"ogadaki"}],"description":"Informaticien curieux depuis 35 ans, de métier depuis 20 ans (principalement dans le spatial). Non spécialiste touche à tout : du développement logiciel à l'étude scientifique, du développement d'algorithmes de traitement à la mise en œuvre de systèmes, de la programmation en C++ ou Python à l'utilisation des technos Web, de la petite appli en ligne de commande aux IHM ou aux systèmes distribués. Ingénieur chez Magellium et co-fondateur et animateur à la Compagnie du Code."},{"key":"noel_mace","name":"Noël Macé","id":"0alFaI2imGdQVSjuaMLFFfwqoL62","feature":false,"company":"BonitaSoft","city":"Toulouse, France","photoURL":"/2021/images/speakers/noel_mace.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/noel_mace","name":"noel_mace"},{"icon":"github","link":"https://github.com/noelmace","name":"noelmace"}],"description":"Developer Advocate chez BonitaSoft, Noël est un passionné de DevRel, d'enseignement, et de transmission de compétences en général. Tour à tour ingénieur pédagogique, formateur, architecte et développeur web depuis plus de 10 ans, il consacre aujourd'hui l’essentiel de son temps à accompagner la communauté vers une meilleure maîtrise et adoption des capacités modernes du Web."},{"key":"olivier_leplus","name":"Olivier Leplus","id":"DNlgKL7C5DNK0y48Lf7ylPB4bmk2","feature":false,"company":"Microsoft","city":"Paris, France","photoURL":"/2021/images/speakers/olivier_leplus.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/olivierleplus","name":"olivierleplus"},{"icon":"github","link":"https://github.com/tagazok","name":"tagazok"}],"description":"Developer Relation Manager at Microsoft and Google Developer Expert in Web Technologies. I love to share knowledge (and love) among developers and people in general."},{"key":"piotr_przybyl","name":"Piotr Przybyl","id":"D1UJEdrxhHQowlM2LoIusKF26ir2","feature":false,"company":"@piotrprz","city":"Wroclaw, Poland","photoURL":"/2021/images/speakers/piotr_przybyl.png","socials":[{"icon":"twitter","link":"https://twitter.com/piotrprz","name":"piotrprz"},{"icon":"github","link":"https://github.com/pioorg","name":"pioorg"}],"description":"Notorious engineer at work and after hours, tracing meanders of the art of software engineering. Software Gardener, mostly working in web-oriented Java gardens. Fan of agility, seen mostly as choosing the right tools and approaches. Lead developer, trainer and conference speaker."},{"key":"qj7nbl6wiyug1rhqtxf818a46po1","name":"Yves Boyez","id":"qJ7nBL6wIyUg1RHqtxF818a46po1","feature":false,"company":"Continental Digital Service France","city":"Toulouse, France","photoURL":"/2021/images/speakers/qj7nbl6wiyug1rhqtxf818a46po1.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/none","name":"none"},{"icon":"github","link":"https://github.com/Zorkbomb","name":"Zorkbomb"}],"description":"Yves BOYEZ \nIngénieur de 47 ans, marié, 4 enfants (eeeeeeeet ouais !) \n\nActuellement administrateur des Outils ATLASSIAN chez CONTINENTAL DIGITAL SERVICES FRANCE au sein de l'équipe Devops \nAnciennement Gestionnaire et Développeur du Systèmes d’Information RH chez CONTINENTAL AUTOMOTIVE \nPlus anciennement encore Chef de Projet Groupware chez SIEMENS VDO AUTOMOTIVE \nEt vraiment il y a fort fort longtemps : Ingénieur Système Informatique & CAO chez PROMECA mais comme on était encore en Francs je sais pas si ça compte ... \n\nJ'aime les jeux vidéos, chanter avec mon groupe de Blues-Rock, nager et les pâtisseries (même si elles ne font que détruire mon organisme sans me demander mon avis).\n\nEt participer au Devfest ce serait cool ! (Du moins pour un vieux :-D)"},{"key":"richard_fagot","name":"Richard Fagot","id":"bkL5Pq4gnZMLVm7nwWNW3FU3c8n1","feature":false,"city":"Toulouse, France","photoURL":"/2021/images/speakers/richard_fagot.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/richardfagot","name":"richardfagot"},{"icon":"github","link":"https://github.com/richard-fagot","name":"richard-fagot"}],"description":"Tombé dans l'informatique vers l'âge de 8 ans, j'en ai fait mon métier et si, après plusieurs années à faire du développement, je suis aujourd'hui chef de projet je reste un curieux inlassable, autant intéressé par les technologies, l'artisanat que l'humain."},{"key":"saskia_blanc","name":"Saskia Blanc","feature":false,"city":"Vallauris, France","photoURL":"/2021/images/speakers/saskia_blanc.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/SaskiaLois"}],"description":"Saskia est en troisième et est passionnée par la programmation. \nElle a déjà 3 keynotes à son actif ainsi qu’un talk à DevoxxFR."},{"key":"sebastien_blanc","name":"Sébastien Blanc","feature":false,"company":"Red Hat","city":"Vallauris, France","photoURL":"/2021/images/speakers/sebastien_blanc.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/sebi2706"}],"description":"Sébastien travaille actuellement pour Red Hat, il fait partie de l’équipe KeyCloak qui délivre un serveur Open Source d'authentification et de gestion d'identité. Il aime également partager sa passion du code et notamment sur la façon de transmettre cette passion aux générations futures."},{"key":"sebastien_brault","name":"Sébastien Brault","id":"GMZkedB6bYXQ2J5rJ9aIodIyXV92","feature":false,"company":"Orange","city":"Trégastel, France","photoURL":"/2021/images/speakers/sebastien_brault.png","socials":[{"icon":"twitter","link":"https://twitter.com/sebastienbrault","name":"sebastienbrault"}],"description":"Développeur mobile sur iOS depuis 2010, je suis le principal développeur du composant d'authentification de l'ensemble des applications Orange France iOS. Depuis plusieurs mois maintenant je me suis penché sur les impacts environnementaux du numérique, les identifier, en mesurer les ordres de grandeur, identifier les leviers d'actions efficaces."},{"key":"steve_klabnik","name":"Steve Klabnik","id":"IVSIqKtM09Zue39kzfFz7b7qPd93","feature":true,"company":"Cloudflare","city":"Austin, TX, USA","photoURL":"/2021/images/speakers/steve_klabnik.jpg","socials":[],"description":"Steve is on the core team of Rust, leads the documentation team, and is an author of The Rust Programming Language. Klabnik is a frequent speaker at conferences and is a prolific open source contributor, previously working on projects such as Ruby and Ruby on Rails."},{"key":"sylvain_wallez","name":"Sylvain Wallez","id":"J2kgJ25uKngYv9G4PSWj0Cw9fcA3","feature":false,"company":"Elastic","city":"Toulouse, France","photoURL":"/2021/images/speakers/sylvain_wallez.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/bluxte","name":"bluxte"},{"icon":"github","link":"https://github.com/swallez","name":"swallez"}],"description":"Architecte et développeur passionné, tech lead dans l'équipe Cloud chez Elastic. A travaillé comme architecte, CTO et leader technique dans plusieurs startups. Expert technique multi-compétences : systèmes scalables, NoSQL, moteurs de recherche, mais aussi front-end, devops et Iot. Bref, full-stack. Membre de la fondation Apache."},{"key":"theophile_wallez","name":"Theophile Wallez","id":"LuqEI6DZnoeJYQdQ1KHsKrj57Pm1","feature":false,"company":"ENS Ulm","city":"Paris, France","photoURL":"/2021/images/speakers/theophile_wallez.png","socials":[{"icon":"twitter","link":"https://twitter.com/twallez","name":"twallez"},{"icon":"github","link":"https://github.com/TWal","name":"TWal"}],"description":"Théophile Wallez est étudiant en informatique à l’ENS Paris. Passionné - entre autres - par la programmation, du Brainfuck aux preuves formelles, et aussi de régie son & lumière et DJ’ing. Il est aussi contributeur sur le compilateur vérifié [CakeML].\n\n[CakeML]: https://cakeml.org"},{"key":"tiffany_souterre","name":"Tiffany Souterre","id":"fEGtvUISb6VrUv4hpaHxRnw8hFZ2","feature":false,"company":"JEMS Datafactory","city":"Paris, France","photoURL":"/2021/images/speakers/tiffany_souterre.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/tiffanysouterre","name":"tiffanysouterre"},{"icon":"github","link":"https://github.com/amagash","name":"amagash"}],"description":"I love science and I love data! After finishing a PhD in genetic engineering, I continued my quest for discovering new patterns through data science and machine learning. I currently work as a Data Scientist and I play with machine learning algorithms on my free time. Someday, I wish to leverage artificial intelligence and genetics to improve people's life."},{"key":"valeriane_venance","name":"Valeriane Venance","id":"05FXSY1pHlaP7wK14yGKBaxom6n1","feature":false,"company":"Clever Cloud","city":"Paris, France","photoURL":"/2021/images/speakers/valeriane_venance.png","socials":[{"icon":"twitter","link":"https://twitter.com/valeriane_IT","name":"valeriane_IT"},{"icon":"github","link":"https://github.com/vvenance","name":"vvenance"}],"description":"Valériane had nothing to do with coding or anything related in her previous life, and she basically fell into computer science, internet, communities, philosophies and ethics at école 42.\nShe has learned web basics with Le wagon and started as freelancer in Paris right after.\nPassionate about the startup ecosystem she has been a backend developer, consultant and deputy CTO for many and started talking in local meetups by the time.\nNowadays she writes about the techs she loves as a developer advocate for Clever Cloud and organizes the DevRelSalon meetup in Paris."},{"key":"vincent_ogloblinsky","name":"Vincent Ogloblinsky","id":"jMUwWI44kuTXsgUt8vLFp3vAe1j1","feature":false,"company":"SII Ouest","city":"Rennes, France","photoURL":"/2021/images/speakers/vincent_ogloblinsky.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/vogloblinsky","name":"vogloblinsky"},{"icon":"github","link":"https://github.com/vogloblinsky","name":"vogloblinsky"}],"description":"Brestois du bout du monde émigré à Rennes, je suis architecte logiciel dans une ESN française et passionné par les technologies du web, et la plupart du temps je les utilise en codant en (Type||Java)script. . Je suis également Google Developer Expert sur les technologies web.\nLe partage de la connaissance est pour moi une chose importante : au sein de ma société au travers de déjeuners techniques ou de sessions de mobprogramming; durant des formations HTML5, Angular 1 & 2 ou autres; en présentant des sujets lors de conférences; et enfin en contribuant et en maintenant des projets open-source.\n\"Let's browsers rock\""},{"key":"wassim_chegham","name":"Wassim Chegham","id":"0yzdv6FVFYZWXmWird77HqsY49c2","feature":false,"company":"Microsoft","city":"Paris, France","photoURL":"/2021/images/speakers/wassim_chegham.jpg","socials":[{"icon":"twitter","link":"https://twitter.com/manekinekko","name":"manekinekko"},{"icon":"github","link":"https://github.com/manekinekko","name":"manekinekko"}],"description":"Wassim is a member of the Angular team and a Senior Developer Advocate at Microsoft. He is the author of many open source projects such as xlayers.dev and ngx.tools. He is also a GDE for the Angular team, the Google Assistant and the GCP teams at Google. He is a member of the Node.js Foundation. A former member of the Angular Universal core team and part of the current Angular Console core team. He is currently learning about music composition. You can reach out to him on Twitter @manekinekko"}],"categories":[{"key":"_big_data___ml___ai","name":"🤖 Big Data / ML / AI","id":"3c7ab24d-59c1-5118-b6fa-ef679a376100"},{"key":"_cloud___infra","name":"🌩 Cloud / Infra","id":"e3fdfb05-1630-5c56-bc5d-501217ad62e3"},{"key":"_iot","name":"📟 IOT","id":"a31d8be2-8f03-553d-b07b-ee30e2d13a6e"},{"key":"_languages","name":"📝 Languages","id":"b425f929-b026-52e9-87f4-89b30ec542d1"},{"key":"_method___tools","name":"🛠 Method & Tools","id":"bb5eeaca-3d8d-5858-b4a9-63d90a11a792"},{"key":"_native_mobile_apps","name":"📱 Native mobile apps","id":"9edfb0de-db78-5e18-831d-d0c56d751515"},{"key":"_web","name":"🌍 Web","id":"cff3cdbc-52e9-5d5a-8f98-927ee005f59b"},{"key":"_wtf","name":"🎁 WTF","id":"8ab523e2-022d-5d16-924c-da4477ddb881"},{"key":"keynote","name":"Keynote"},{"key":"lunch","name":"Lunch"},{"key":"office-hours","name":"Office Hours"},{"key":"open","name":"Ouverture"},{"key":"party","name":"Party"},{"key":"pause","name":"Pause"}],"formats":[{"key":"conference","name":"Conference ","id":"4c0d8a93-a0fb-5fe4-ab31-7cc56e05e942"},{"key":"keynote","name":"Keynote"},{"key":"lunch","name":"Lunch"},{"key":"office-hours","name":"Office Hours"},{"key":"open","name":"Ouverture"},{"key":"party","name":"Party"},{"key":"pause","name":"Pause"},{"key":"quickie","name":"Quickie","id":"f1f4eb00-ff40-57ea-805a-b3aa3ce5f6e6"}],"rooms":[{"key":"lunchroom","label":"Cenareo","description":"Hall sponsors / Salle déjeuner","skip":true},{"key":"halls","label":"Halls","description":"Halls","skip":true},{"key":"office-hours","label":"Cenareo","description":"Office-hours"},{"key":"room1","label":"Stack Labs","description":"St-Exupéry"},{"key":"room2","label":"Airbus","description":"Cassiopée"},{"key":"room3","label":"SII","description":"Ariane"},{"key":"room4","label":"Capgemini","description":"Guillaumet"}],"slots":[{"key":"open","start":"08:00","duration":60,"row":{"start":1,"end":3}},{"key":"keynote-open","start":"09:00","duration":40,"row":{"start":3,"end":6}},{"key":"office-hours-0","start":"09:40","duration":30,"row":{"start":6,"end":8}},{"key":"pause-1","start":"09:40","duration":20,"row":{"start":6,"end":7}},{"key":"slot-1","start":"10:00","duration":40,"row":{"start":7,"end":10}},{"key":"office-hours-1","start":"10:40","duration":30,"row":{"start":10,"end":12}},{"key":"pause-2","start":"10:40","duration":20,"row":{"start":10,"end":11}},{"key":"slot-2","start":"11:00","duration":40,"row":{"start":11,"end":14}},{"key":"office-hours-2","start":"11:40","duration":30,"row":{"start":14,"end":16}},{"key":"pause-3","start":"11:40","duration":20,"row":{"start":14,"end":15}},{"key":"slot-3","start":"12:00","duration":40,"row":{"start":15,"end":18}},{"key":"office-hours-3","start":"12:40","duration":30,"row":{"start":18,"end":20}},{"key":"slot-lt-1","start":"12:50","duration":15,"row":{"start":19,"end":21}},{"key":"office-hours-lt-1","start":"13:05","duration":30,"row":{"start":21,"end":22}},{"key":"lunch","start":"13:05","duration":60,"row":{"start":21,"end":23}},{"key":"slot-lt-2","start":"14:05","duration":15,"row":{"start":23,"end":25}},{"key":"office-hours-lt-2","start":"14:20","duration":30,"row":{"start":25,"end":27}},{"key":"slot-4","start":"14:30","duration":40,"row":{"start":26,"end":29}},{"key":"office-hours-4","start":"15:10","duration":30,"row":{"start":29,"end":31}},{"key":"pause-4","start":"15:10","duration":20,"row":{"start":29,"end":30}},{"key":"slot-5","start":"15:30","duration":40,"row":{"start":30,"end":33}},{"key":"office-hours-5","start":"16:10","duration":30,"row":{"start":33,"end":35}},{"key":"pause-5","start":"16:10","duration":20,"row":{"start":33,"end":34}},{"key":"slot-6","start":"16:30","duration":40,"row":{"start":34,"end":37}},{"key":"office-hours-6","start":"17:10","duration":30,"row":{"start":37,"end":39}},{"key":"pause-6","start":"17:10","duration":20,"row":{"start":37,"end":38}},{"key":"slot-7","start":"17:30","duration":40,"row":{"start":38,"end":41}},{"key":"office-hours-7","start":"18:10","duration":30,"row":{"start":41,"end":43}},{"key":"keynote-close","start":"18:20","duration":40,"row":{"start":42,"end":45}},{"key":"party","start":"19:30","duration":240,"row":{"start":46,"end":48}}],"schedule":[{"day":"2019-10-03","start":"08:00","rooms":[{"room":"room1","slots":[{"slot":"open","talk":"__open"},{"slot":"keynote-open","talk":"keynote_open"},{"slot":"pause-1","talk":"__pause"},{"slot":"slot-1","talk":"the_rise_of_the_web"},{"slot":"pause-2","talk":"__pause"},{"slot":"slot-2","talk":"l_histoire_de_la_decouverte_d_une_backdoor_signe_oneplus"},{"slot":"pause-3","talk":"__pause"},{"slot":"slot-3","talk":"webgpu__next_generation_3d_graphics_on_the_web"},{"slot":"slot-lt-1","talk":"3_techniques_faciles_de_manipulation"},{"slot":"lunch","talk":"__lunch"},{"slot":"slot-lt-2","talk":"_47_ans___ils_nont_toujours_pas_remarque__"},{"slot":"slot-4","talk":"rust__webassembly__and_the_future_of_serverless"},{"slot":"pause-4","talk":"__pause"},{"slot":"slot-5","talk":"le_design_de_l_erreur"},{"slot":"pause-5","talk":"__pause"},{"slot":"slot-6","talk":"monitoring_ovh__300k_serveurs__27_dcs_une_plateforme_de_metriques"},{"slot":"pause-6","talk":"__pause"},{"slot":"slot-7","talk":"_votre_api_web_passe_t_elle_le_controle_technique__"},{"slot":"keynote-close","talk":"keynote_close"},{"slot":"party","talk":"__party"}]},{"room":"room2","slots":[{"slot":"keynote-open","talk":"keynote_open_overflow"},{"slot":"slot-1","talk":"a_kotlin_multiplatform_evolution"},{"slot":"pause-2","talk":"__pause"},{"slot":"slot-2","talk":"le_burn_out_agile"},{"slot":"pause-3","talk":"__pause"},{"slot":"slot-3","talk":"quand_les_rates_des_ias_nous_renvoient_a_nos_propres_biais_societaux"},{"slot":"slot-lt-1","talk":"machine_learning_avec_des_allumettes_et_des_cotillons"},{"slot":"lunch","talk":"__lunch"},{"slot":"slot-lt-2","talk":"applications_de_brainfuck__langage_minimaliste_mais_turing_complet"},{"slot":"slot-4","talk":"live_coding_musical___vous_savez_coder___devenez_compositeur_avec_webaudio_et_webmidi__"},{"slot":"pause-4","talk":"__pause"},{"slot":"slot-5","talk":"the_freedom_of_static_typing"},{"slot":"pause-5","talk":"__pause"},{"slot":"slot-6","talk":"authentication_authorization_starters_battle"},{"slot":"pause-6","talk":"__pause"},{"slot":"slot-7","talk":"mon_p____de_voyant_moteur_est_encore_allume___comment_debugger_mon_moteur___plongeon_dans_les_entrailles_des_calculateurs_moteur"},{"slot":"keynote-close","talk":"keynote_close_overflow"}]},{"room":"room3","slots":[{"slot":"slot-1","talk":"_numerique_et_environnement__ou__on_aurait_pu_sauver_les_abeilles__on_a_prefere_sortir_un_nouvel_iphone_"},{"slot":"pause-2","talk":"__pause"},{"slot":"slot-2","talk":"rust_as_a_high_level_langage"},{"slot":"pause-3","talk":"__pause"},{"slot":"slot-3","talk":"allo_paris__ici_san_francisco__et_si_on_codait_ensemble_avec_vs_code_"},{"slot":"slot-lt-1","talk":"le_troll_dans_ta_machine_____une_courte_introduction_a_la_pensee_de_jean_yves_girard"},{"slot":"lunch","talk":"__lunch"},{"slot":"slot-lt-2","talk":"un_distributeur_automatique_d_argent_de_poche_pour_les_enfants"},{"slot":"slot-4","talk":"le_jaillissement_de_l_esprit"},{"slot":"pause-4","talk":"__pause"},{"slot":"slot-5","talk":"comprendre_le_role_du_noyau_d_un_systeme_d_exploitation_en_creant_un_from_scratch"},{"slot":"pause-5","talk":"__pause"},{"slot":"slot-6","talk":"devops_at_scale"},{"slot":"pause-6","talk":"__pause"},{"slot":"slot-7","talk":"modern_forms_in_react"}]},{"room":"room4","slots":[{"slot":"slot-1","talk":"a_la_decouverte_de_la_realite_augmentee_avec_arcore"},{"slot":"pause-2","talk":"__pause"},{"slot":"slot-2","talk":"rockin_in_the_angular_world"},{"slot":"pause-3","talk":"__pause"},{"slot":"slot-3","talk":"premiers_pas_avec_un_microcontroleur_et_google_cloud_iot_core"},{"slot":"slot-lt-1","talk":"developpeurs_en_reconversion__developpeurs_quand_meme__"},{"slot":"lunch","talk":"__lunch"},{"slot":"slot-lt-2","talk":"10_est_une_puissance_de_2"},{"slot":"slot-4","talk":"de_java_a_un_executable_natif___graalvm_et_quarkus_changent_la_donne"},{"slot":"pause-4","talk":"__pause"},{"slot":"slot-5","talk":"brace_yourself__vanilla_is_coming__back__"},{"slot":"pause-5","talk":"__pause"},{"slot":"slot-6","talk":"four_diseases"},{"slot":"pause-6","talk":"__pause"},{"slot":"slot-7","talk":"introduction_a_la_programmation_par_contraintes"}]},{"room":"office-hours","slots":[{"slot":"office-hours-0","talk":"office-hour-00"},{"slot":"office-hours-1","talk":"office-hour-01"},{"slot":"office-hours-2","talk":"office-hour-02"},{"slot":"office-hours-3","talk":"office-hour-03"},{"slot":"office-hours-lt-1","talk":"office-hour-11"},{"slot":"office-hours-lt-2","talk":"office-hour-12"},{"slot":"office-hours-4","talk":"office-hour-04"},{"slot":"office-hours-5","talk":"office-hour-05"},{"slot":"office-hours-6","talk":"office-hour-06"}]}]}],"sponsors":[{"key":"airbus","title":"Airbus","category":"platinium","order":21,"logo":"/2021/images/partners/logo-airbus.png","website":"https://www.airbus.com/","lang":"en","why":"Airbus wishes to renew its participation because the DEV FEST is an essential event through which it can meet developers and speak/present internal projects related to this field of activity.","socials":[{"icon":"facebook","link":"http://www.facebook.com/AirbusCareers%20","name":"Airbus careers"},{"icon":"twitter","link":"https://twitter.com/AirbusCareers?lang=fr","name":"airbuscareers"},{"icon":"linkedin","link":"https://www.linkedin.com/company/airbusgroup","name":"Airbus"}],"description":"Airbus is an international pioneer in the aerospace industry and a leader in designing, manufacturing and delivering aerospace products, services and solutions to customers on a global scale. We believe that it’s not just what we make, but how we make it that counts; promoting responsible, sustainable and inclusive business practices and acting with integrity. Our people work with passion and determination to make the world a more connected, safer and smarter place, on the ground, in the sky and in space.\n"},{"key":"altran","title":"Altran","category":"soutien","order":37,"logo":"/2021/images/partners/logo-altran.svg","website":"https://www.altran.com/fr/fr/","lang":"fr","socials":[]},{"key":"apside","title":"APSIDE","category":"gold","order":20,"logo":"/2021/images/partners/logo-apside.png","website":"http://www.apside.com","lang":"fr","why":"What else ?","socials":[{"icon":"facebook","link":"https://facebook.com/ApsideGroupe","name":"ApsideGroupe"},{"icon":"twitter","link":"https://twitter.com/ApsideGroupe","name":"ApsideGroupe"}],"description":"APSIDE est une société de conseil en ingénierie qui accompagne tous les acteurs de l'écosystème IT sur leurs projets innovants.\nTous nos ingénieurs ont leur spécialité : JAVA, JS, BDD, C#, PHP, C++ ... \nNous sélectionnons rigoureusement les projets sur lesquels peuvent intervenir nos ingénieurs : caractère innovant, phase d'architecture, produits complets, sujets porteurs et utiles...\nC'est ce qui rend totalement satisfaits de leur mission plus de 96% de nos ingénieurs.\nAlors, prêt à tenter l'aventure ?\n\nAPSIDE, c'est un groupe de plus de 2600 collaborateurs à travers la France... tous répartis en équipes d'experts localisées.\n\n"},{"key":"axileo","title":"AXILEO","category":"gold","order":22,"logo":"/2021/images/partners/logo-axileo.png","website":"http://www.axileo.com","lang":"fr","why":"C'est la conférence des développeurs fait par des développeurs. Pour rien au monde nous ne manquerons cet événement exceptionnel. C'est une occasion unique pour nous de partager et d’échanger autour des nouvelles technologies.","socials":[{"icon":"facebook","link":"https://www.facebook.com/Axileo75","name":"AXILEO"},{"icon":"twitter","link":"https://twitter.com/AXILEO1","name":"AXILEO1"},{"icon":"linkedin","link":"https://www.linkedin.com/company/axileo","name":"AXILEO"}],"description":"AXILEO est spécialisée dans l'innovation et la transformation digitale des entreprises. La société se distingue par un management innovant, sur le modèle de l'entreprise libérée, où les salariés participent et définissent la stratégie de l'entreprise. \n"},{"key":"berger_levrault","title":"Berger Levrault","category":"gold","order":14,"logo":"/2021/images/partners/logo-berger_levrault.png","website":"https://www.berger-levrault.com","lang":"fr","why":"Berger-Levrault, en pleine expansion nationale et internationale, se distingue par sa pérennité exceptionnelle grâce à sa capacité d'anticipation des innovations. Le développement étant notre cœur de métier, c'est tout naturellement que nous souhaitons participer au \"Developers Festival\" et rencontrer des talents pour vivre une aventure humaine et technologique au sein de Berger-Levrault.","socials":[{"icon":"twitter","link":"https://twitter.com/bergerlevrault","name":"bergerlevrault"},{"icon":"linkedin","link":"https://linkedin.com/company/berger-levrault","name":"berger-levrault"}],"description":"Berger-Levrault, éditeur de logiciel international et multisectoriel, accompagne les professionnels privés et publics à répondre aux exigences croissantes de performance dans leurs métiers et les citoyens dans leur vie quotidienne.\n\nLe Groupe adresse les secteurs suivants : Secteur public local; Social et médico-social; Sanitaire; Entreprises et industrie; Éducation.\n\nPour l’ensemble de ses secteurs d’activité, Berger-Levrault a développé une gamme de logiciels et de services adaptée aux besoins spécifiques de chaque métier. \n\n"},{"key":"capgemini","title":"Capgemini","category":"platinium","order":33,"logo":"/2021/images/partners/logo-capgemini.png","website":"https://www.capgemini.com/fr-fr/","lang":"fr","why":"Leader mondial du conseil, des services informatiques et de la transformation numérique, le groupe Capgemini est heureux d'accompagner cet évènement local qui rassemble les plus grandes communautés de développeurs toulousaines.\n","socials":[{"icon":"twitter","link":"https://twitter.com/capgeminifrance "},{"icon":"linkedin","link":"https://www.linkedin.com/company/capgemini/ "},{"icon":"facebook","link":"https://www.facebook.com/capgeminifrance"}],"description":"Capgemini est un leader mondial du conseil, des services informatiques et de la transformation numérique. A la pointe de l’innovation, le Groupe aide ses clients à saisir l’ensemble des opportunités que présentent le cloud, le digital et les plateformes. Fort de 50 ans d’expérience et d’une grande expertise des différents secteurs d’activité, il accompagne les entreprises et organisations dans la réalisation de leurs ambitions, de la définition de leur stratégie à la mise en œuvre de leurs opérations. Pour Capgemini, ce sont les hommes et les femmes qui donnent toute sa valeur à la technologie. \n"},{"key":"cenareo","title":"Cenareo","category":"platinium","order":7,"logo":"/2021/images/partners/logo-cenareo.png","website":"https://cenareo.com/fr/","lang":"fr","why":"Dev Fest is the best place to meet future “tech heroes” that share our values and will help us to shape the future of our ‘state-of-the-art’ technology. #ProductExcellence #CustomerSatisfaction #TeamSpirits #Inventiveness #Daring & #Ambition","socials":[{"icon":"twitter","link":"https://twitter.com/Cenareo","name":"https://twitter.com/Cenareo"}],"description":"Cenareo, previously CityMeo, is a real “French Tech” success story. Located in Labège within the IoT Valley, we develop a best-in-class digital signage CMS (SaaS mode) to create, manage and broadcast content on remote displays in real-time, from any PC, tablet or smartphone.\nCreated by 4 engineers, Cenareo has experienced exponential growth and rapid development since its inception in 2012, posting triple-digit growth and now counting upwards of 30 employees.\nThe company has ambitious targets and a Global outlook. We promote diversity and welcome multi-cultural and foreign applicants.\n"},{"key":"cirruseo_part_of_accenture","title":"Cirruseo part of Accenture","category":"gold","order":19,"logo":"/2021/images/partners/logo-cirruseo_part_of_accenture.png","website":"http://www.cirruseo.com","lang":"fr","why":"Récemment acquis par Accenture, Cirruseo part of Accenture participe depuis 4 années consécutives au DevFest dans les villes de Paris et Toulouse où nos locaux sont implantés. En tant que pure player et premier partenaire Google Cloud, cet événement constitue une vitrine incontournable pour nous faire connaître de la communauté spécifique que constitue les développeurs et faire la promotion de nos expertises et savoirs faire.","socials":[{"icon":"facebook","link":"https://www.facebook.com/Cirruseo-362946873789545/","name":"Cirruseo"},{"icon":"twitter","link":"https://twitter.com/cirruseo","name":"Cirruseo"},{"icon":"linkedin","link":"https://www.linkedin.com/company/cirruseo/","name":"Cirruseo"}],"description":"Créé en 2011, Cirruseo est l’un des principaux partenaires de Google Cloud en France et l’un des plus importants acteurs français spécialisés exclusivement dans les services Google Cloud. Cirruseo accompagne ses clients dans leur transformation numérique, de l’expérience collaborateur autour des solutions Chrome et G Suite, à celle des métiers avec les services de Google Cloud Platform. Les solutions digitales de Cirruseo sont mobiles, intègrent la Data et l’Analytics by design, et sont conçues pour et par le Cloud. En 2019, Cirruseo a été classé parmi les 1 000 entreprises les plus dynamiques en Europe par le Financial Times. Depuis sa création, Cirruseo a réalisé 48% de croissance moyenne par an. Elle compte aujourd’hui plus de 600 clients, plus de 100 collaborateurs et deux bureaux à Paris et Toulouse. \n"},{"key":"cnes","title":"CNES","category":"soutien","order":5,"logo":"/2021/images/partners/logo-cnes.svg","website":"https://cnes.fr","lang":"fr","why":"Les métiers du CNES reposent de plus en plus sur l'informatique et le développement logiciel, que ce soit pour les logiciels bord ou les traitements au sol. Ces derniers utilisent de plus en plus les technologies issues du Big Data et du Machine Learning.","socials":[{"icon":"twitter","link":"https://twitter.com/CNES","name":"CNES"}],"description":"Le CNES propose aux pouvoirs publics la politique spatiale de la France et la met en oeuvre dans 5 grands domaines stratégiques : Ariane, les Sciences, l’Observation, les Télécommunications et la Défense.\n"},{"key":"commit42","title":"commit42","category":"soutien","order":29,"logo":"/2021/images/partners/logo-commit42.png","website":"https://www.commit42.com/","lang":"fr","why":"C'est notre manière de vous remercier pour ce que vous faites.","socials":[{"icon":"facebook","link":"https://facebook.com/commit42","name":"commit42"},{"icon":"twitter","link":"https://twitter.com/commit42","name":"commit42"},{"icon":"linkedin","link":"https://linkedin.com/company/commit42","name":"commit42"}],"description":"Studio d'innovation web\ncommit42 est spécialisé dans les technologies React, PHP, NodeJS, Magento et PWA.\n\nNos projets peuvent varier de la maintenance d’une boutique en ligne à la réalisation d’applications métiers spécifiques dont des Web App PWA.\n"},{"key":"continental","title":"Continental","category":"gold","order":10,"logo":"/2021/images/partners/logo-continental.png","website":"https://www.continental-corporation.com","lang":"en","why":"At Continental Digital Services France (CDSF), we are convinced that our success depends on the members of our teams and our \"startup\" culture backed by a larger group. Being a Devfest's sponsor is a great opportunity to share with & meet passionate people, guided by curiosity and innovation, eager to make a real impact on the mobility services of the future !","socials":[{"icon":"facebook","link":"https://facebook.com/Continental","name":"Continental France"},{"icon":"twitter","link":"https://twitter.com/continental_fr","name":"Continental France"},{"icon":"linkedin","link":"https://linkedin.com/company/continental","name":"Continental"}],"description":"Continental develops pioneering technologies and services for sustainable and connected mobility of people and their goods. \nFounded in 1871, the technology company offers safe, efficient, intelligent, and affordable solutions for vehicles, machines, traffic and transportation. \nIn 2018, Continental generated sales of €44.4 billion and currently employs around 245,000 people in 60 countries and markets.\n"},{"key":"decasoft","title":"DECASOFT","category":"soutien","order":8,"logo":"/2021/images/partners/logo-decasoft.png","website":"http://www.decasoft.fr/","lang":"fr","why":"Pour rencontrer les acteurs du marché et s'investir sur l'avenir du numérique","socials":[{"icon":"facebook","link":"https://facebook.com/decasoft","name":"decasoft"},{"icon":"twitter","link":"https://twitter.com/Decasoft_SSII","name":"Decasoft_SSII"},{"icon":"linkedin","link":"https://linkedin.com/company/decasoft","name":"decasoft"}],"description":"Une société à taille humaine spécialisée en développement web et mobile implantée sur la ville lumière et la ville rose – Paris et Toulouse.\nNous assurons l’évolution professionnelle de nos collaborateurs vers de nouvelles technologies afin de calibrer nos postes selon leurs envies.\nPour casser la routine, retrouvez-nous au baby-foot et aux soirées afterwork. Nous pouvons par ailleurs vous garantir une ambiance dynamique et 100% conviviale. \n"},{"key":"duchess-fr","title":"Duchess FR","category":"communautes","logo":"/2021/images/partners/community/duchess_fr.svg","website":"https://www.duchess-france.org/","socials":[],"description":"\nFind Duchess FR on [https://www.duchess-france.org/](https://www.duchess-france.org/)\n\n![Duchess FR](/2021/images/partners/community/duchess_fr.svg)\n"},{"key":"elastic","title":"Elastic","category":"gold","order":11,"logo":"/2021/images/partners/logo-elastic.png","website":"https://www.elastic.co/","lang":"fr","why":"DevFest Toulouse est l'événement incontournable de la région pour les développeurs. C'est une opportunité unique pour nous d'échanger avec nos clients et utilisateurs.","socials":[{"icon":"twitter","link":"https://twitter.com/elastic","name":"Elastic"}],"description":"Nous sommes les créateurs de la suite Elastic: Elasticsearch, Kibana, Beats et Logstash. Recherchez, analysez et visualisez vos données da façon sécurisée et fiable.\n"},{"key":"epitech","title":"Epitech","category":"soutien","order":36,"logo":"/2021/images/partners/logo-epitech.png","website":"https://www.epitech.eu/fr/","lang":"fr","socials":[]},{"key":"etincelle_coworking","title":"Étincelle Coworking","category":"soutien","order":38,"logo":"/2021/images/partners/logo-etincelle_coworking.png","website":"https://www.coworking-toulouse.com/","lang":"fr","socials":[]},{"key":"gdg-toulouse","title":"GDG Toulouse","category":"communautes","logo":"/2021/images/partners/community/gdgtoulouse.svg","website":"https://www.gdgtoulouse.fr/","socials":[],"description":"\nFind GDG Toulouse on [https://www.gdgtoulouse.fr/](https://www.gdgtoulouse.fr/)\n\n![GDG Toulouse](/2021/images/partners/community/gdgtoulouse.svg)\n"},{"key":"github","title":"GitHub","category":"gold","order":27,"logo":"/2021/images/partners/logo-github.png","website":"https://github.com/","lang":"en","why":"GitHub is focused on developers, the people who code and create software. For this reason, we decided to sponsor DevFest Toulouse. We want to be part of this collaborative community that can come together —as individuals and in teams— to create the future of software and make a difference in the world. ","socials":[{"icon":"twitter","link":"https://twitter.com/github","name":"github"}],"description":"GitHub is the developer company. We make it easier for developers to be developers: to work together, to solve challenging problems, and to create the world’s most important technologies.\n\n"},{"key":"google","title":"Google","category":"soutien","order":39,"logo":"/2021/images/partners/logo-google.svg","website":"https://www.google.com/","lang":"en","socials":[]},{"key":"groupe_pierre_fabre","title":"Groupe Pierre Fabre","category":"gold","order":24,"logo":"/2021/images/partners/logo-groupe_pierre_fabre.png","website":"https://www.pierre-fabre.com/fr","lang":"fr","why":"Simples partenaires l’an dernier, nous avons été séduits par la dynamique de cet évènement, et nous avons décidé cette année d’aller plus loin. Venez nous rencontrer sur notre stand et découvrir nos projets ! Nous serons présents et en forme pour partager ce moment convivial et vous faire découvrir les initiatives digitales menées par le Groupe Pierre Fabre. Nous avons hâte de participer à ce rassemblement qui allie nouvelles technologies, rencontres inoubliables et une grande dose de bonne humeur !","socials":[{"icon":"twitter","link":"https://twitter.com/PierreFabre","name":"PierreFabre"},{"icon":"facebook","link":"https://www.facebook.com/laboratoirespierrefabre/","name":"Laboratoires Pierre Fabre"},{"icon":"linedin","link":"https://www.linkedin.com/company/pierre-fabre/","name":"Pierre Fabre"}],"description":"Créé en 1962 par Pierre Fabre, pharmacien d’officine à Castres (Tarn), le Groupe Pierre Fabre est présent depuis plus de 50 ans sur un continuum d’activités allant des médicaments de prescription aux soins dermo-cosmétiques en passant par la santé grand public.\n2ème laboratoire dermo-cosmétique mondial et 2ème groupe pharmaceutique privé français, Pierre Fabre emploie près de 11 000 collaborateurs, détient des filiales dans 47 pays et distribue ses produits dans plus de 130 pays.\nEn 2019, Ecocert Environnement a évalué la démarche de responsabilité sociétale et environnementale du Groupe selon la norme ISO 26000 et lui a attribué le niveau « Excellence ».\n"},{"key":"informatique_banque_populaire","title":"Informatique Banque Populaire","category":"gold","order":3,"logo":"/2021/images/partners/logo-informatique_banque_populaire.png","website":"https://informatique.banquepopulaire.fr/","lang":"fr","why":"Le DevFest Toulouse est un événement incontournable pour tout acteur IT en Occitanie. C'est une évidence pour Informatique Banque Populaire de s'associer à cette manifestation faite pour et par des développeurs et qui chaque année rassemble à fois : le meilleur des connaissances, des speakers de qualité, une organisation au top et une ambiance de dingue !","socials":[{"icon":"twitter","link":"https://twitter.com/InformatiqueBP","name":"InformatiqueBP"},{"icon":"linkedin","link":"https://linkedin.com/company/informatique-banque-populaire","name":"Informatique Banque Populaire"}],"description":"Informatique Banque Populaire, filiale du groupe bancaire BPCE, assure le développement informatique du système d’information des Banques Populaires.\n"},{"key":"infotel","title":"Infotel","category":"gold","order":26,"logo":"/2021/images/partners/logo-infotel.png","website":"https://www.infotel.com/","lang":"fr","why":"Notre passion pour l'innovation ainsi que notre cœur de métier en lien direct avec le DevFest nous pousse à devenir une nouvelle fois sponsor. Le DevFest est un événement incontournable sur l'IT et une opportunité de rencontrer et d'échanger avec des talents autours des nouvelles technologies. Mais également, d'assister à des conférences de qualités. ","socials":[{"icon":"facebook","link":"https://facebook.com/groupeInfotel","name":"Groupe Infotel"},{"icon":"twitter","link":"https://twitter.com/Infotel_","name":"Infotel"},{"icon":"linkedin","link":"https://linkedin.com/company/Infotel","name":"Infotel"}],"description":"Acteur européen de la transformation numérique des entreprises, le groupe Infotel est l’interlocuteur privilégié des directions Informatiques et Métiers de Grands Comptes depuis près de 40 ans.\nInfotel leur apporte son expertise reconnue dans la gestion et l’évolution de leur patrimoine informatique mais aussi le conseil auprès des métiers et services innovants intégrant les technologies digitales ainsi qu’une expertise Big Data et mobile.\nInfotel développe son savoir-faire dans les secteurs de la Banque, de l’Assurance, de la Retraite, de l’Industrie et des Transports en s’appuyant sur l’innovation et la R&D.\n\nEditeur de logiciels, Infotel déploie par ailleurs toute une gamme de produits pour les grands serveurs, que ce soit en Europe, aux USA ou dans le reste du Monde.\nEmployant plus de 2 500 personnes, le Groupe, coté sur Euronext Paris, a réalisé en 2018 un chiffre d’affaires de 231 M€ et est en croissance constante.\n\nPour plus d’informations, rendez-vous sur : http://www.infotel.com\nLe groupe est resté fidèle aux valeurs humaines qui ont fait sa réussite : \n\tun recrutement sélectif basé sur les compétences ;\n\tun suivi rigoureux des collaborateurs par des commerciaux-managers ;\n\tune gestion dynamique de la progression de carrière grâce à des missions valorisantes ;\n\n"},{"key":"intuiface","title":"Intuiface","category":"startup","order":18,"logo":"/2021/images/partners/logo-intuiface.png","website":"https://www.intuiface.com","lang":"en","why":"In 2011, we started as a small team of developers from Toulouse that is dedicated to the creation of technology that would make interactivity accessible to the masses, releasing a software platform infused with its DNA. Ever since, we have been aspiring to deliver a solution that gives everyone the power to create interactive experiences. With our Dev team in the heart of our evolution, we are excited to support this event organized for like-minded people who are also our inspiration.","socials":[{"icon":"facebook","link":"https://facebook.com/Intuiface","name":"Intuiface"},{"icon":"twitter","link":"https://twitter.com/Intuiface","name":"Intuiface"},{"icon":"linkedin","link":"https://linkedin.com/company/Intuiface","name":"Intuiface"}],"description":"Intuiface is the world’s premier platform for creating, deploying, measuring and managing deeply interactive digital experiences without writing code. Over 1500 companies across 70+ countries are connecting people to place using interactive options such as touch, RFID/NFC, beacons, Web APIs, Internet of Things, and much more. For any industry – including retail, hospitality, real estate, tourism, education – and for any intent – from digital signs to self-service kiosks and assisted selling.\n"},{"key":"ippon","title":"Ippon","category":"gold","order":25,"logo":"/2021/images/partners/logo-ippon.png","lang":"fr","why":"Ippon a toujours été au coeur des communautés tech. En s'implantant à Toulouse en 2018, nous avons décider de nous associer avec l'événement de référence : le DevFest Toulouse. ","socials":[{"icon":"twitter","link":"https://twitter.com/ippontech","name":"ippontech"},{"icon":"linkedin","link":"https://linkedin.com/company/20908","name":"Ippon Technologies"}],"description":"Ippon est un cabinet de conseil qui accélère les projets innovants de ses clients de la page blanche au Cloud. Nos équipes dans le monde accompagnent les organisations dans la transformation d'idées innovantes en solutions logicielles de haute qualité avec un focus particulier sur le Time To Market.\n"},{"key":"jfrog","title":"JFrog","category":"gold","order":23,"logo":"/2021/images/partners/logo-jfrog.png","website":"https://jfrog.com","lang":"fr","why":"En tant qu’éditeur de logiciels local, nous sommes content de faire partie du DevFest Toulouse de nouveau. C’est un endroit idéal pour rencontrer nos utilisateurs, rencontrer de nouveaux contacts et rappeler à la communauté des développeurs Toulousains que nous avons des emplois géniaux à offrir ;-). De plus, notre propre équipe apprend dans les sessions également et nous pouvons créer des réseaux et échanger avec les autres entreprises partenaires.","socials":[{"icon":"facebook","link":"https://facebook.com/artifrog","name":"artifrog"},{"icon":"twitter","link":"https://twitter.com/jfrog","name":"jfrog"},{"icon":"linkedin","link":"https://linkedin.com/company/455737","name":"jfrog"}],"description":"JFrog - The Liquid Software Company\n"},{"key":"liberty_rider","title":"Liberty Rider","category":"soutien","order":17,"logo":"/2021/images/partners/logo-liberty_rider.svg","website":"https://liberty-rider.com","lang":"fr","why":"Les membres de la team Liberty sont à Toulouse, donc le DevFest on le connait bien. Entre les différentes conférences auquelles on va, c'est celle où l'on croise le plus de copains. Nos sujets de talk préférés ? Développement mobile natif, cloud, devops, et Node.js, GraphQL ou React quand il y en a ! Le DevFest Toulouse c'est une super occasion pour élargir son champ de connaissance et discuter avec des passionnés.","socials":[{"icon":"facebook","link":"https://facebook.com/LibertyRiderApp","name":"LibertyRiderApp"},{"icon":"twitter","link":"https://twitter.com/_LibertyRider_","name":"_LibertyRider_"},{"icon":"linkedin","link":"https://linkedin.com/company/liberty-rider","name":"liberty-rider"}],"description":"Sauver des vies !\nL'application Liberty Rider est pensée comme un guide sherpa, un carnet de route, un passeport. Elle permet au motard de gagner sa liberté en toute sérénité. Préparation, accompagnement, suivi, et plus que tout, protection. \nNous mettons l’intelligence artificielle au service de l’utilisateur. Grâce à des algorithmes inédits, nous sommes capable d’appeler les secours en cas d’accident et d'émettre une alerte à l’approche d’un virage dangereux pour signaler un danger.\nNotre centre d'assistance couvre 10 pays européens et est ouvert 24/7.\nEn interne nous encourageons une ambiance de travail bienveillante, collaborative, et transparente. Nous progressons ensemble car nous nous faisons confiance. Nous sommes une vingtaine de passionnés, et nous t'attendons.\n"},{"key":"lyra_network","title":"Lyra Network","category":"gold","order":16,"logo":"/2021/images/partners/logo-lyra_network.png","website":"https://lyra.com/fr/","lang":"fr","why":"Le DevFest est LE rendez-vous annuel incontournable pour tout passionné de développement qui se respecte ! Partenaire du DevFest depuis sa première édition, nous sommes fiers de partager les mêmes valeurs et d'encourager l'échange et le partage autour des nouvelles technologies. C'était donc une évidence de sponsoriser un tel événement qui associe aussi bien des conférences de qualité et un cadre propice à l'échange où l'ambiance est chaque année au rendez-vous !","socials":[{"icon":"twitter","link":"https://twitter.com/LyraNetwork","name":"LyraNetwork"},{"icon":"linkedin","link":"https://www.linkedin.com/company/lyra-network_2","name":"Lyra Network"}],"description":"LYRA NETWORK est née en 2001 de la rencontre entre des savoir-faire, la technologie et l’esprit visionnaire de ses fondateurs. Leader en France dans la sécurisation des paiements, Lyra Network offre des services à valeurs ajoutées pour le commerce de proximité et le paiement en ligne (PayZen®).\n\nSa présence internationale, fait de cette société 100% Française, un acteur incontournable du marché de la monétique. Nos clients tels que les banques, les collectivités, les e-commerçants et le commerce de détail s’appuient sur nos outils pour connecter, sécuriser et gérer leurs données sensibles.\n\nInnovation, anticipation et évolution des habitudes de paiement nous mènent à développer de nouveaux services toujours plus novateurs sur des technologies de pointe telles que le Mpos (mobile payment), les offres SEPA et e-facture via SEPAmail.\n\nForte de sa succès story depuis ses premières heures, LYRA NETWORK renforce continuellement ses équipes en maîtrisant sa croissance afin de préserver l’environnement de travail.\n"},{"key":"monkeypatch","title":"MonkeyPatch","category":"gold","order":15,"logo":"/2021/images/partners/logo-monkeypatch.png","website":"http://www.monkeypatch.io/","lang":"fr","why":"Ancrée dans nos valeurs, la passion de la tech. nous motive à soutenir les initiatives qui permettent de promouvoir, d’échanger ou de partager autour des nouvelles technos et des architectures modernes. C’est donc naturellement que l’on a décidé de soutenir les conférences en Occitanie (DevFest Toulouse, SunnyTech) et les meetups (GDG Toulouse, JUG Toulouse). Une conférence comme le Devfest permet à un grand nombre de développeurs d’avoir accès à des conférences de qualité. C’est également une belle occasion pour que certains Monkeys pitchent des talks reprenant leur veille ou leurs retours d’expérience.","socials":[{"icon":"twitter","link":"https://twitter.com/monkeypatch_io","name":"monkeypatch_io"},{"icon":"linkedin","link":"https://linkedin.com/company/monkeypatch-io","name":"MonkeyPatch.io"}],"description":"MonkeyPatch est avant tout une équipe constituée de développeurs ayant de solides bagages techniques et des références significatives dans les nouvelles technos et les architectures modernes.\n\nAvec au moins 5 ans d’expérience, chacun de nous souhaite rester au plus près du code et partager sa passion de l'informatique avec la communauté de développeurs et les équipes de nos clients.\nExperts en Web, Mobile, Cloud, DevOps et/ou BigData, nous intervenons en tant qu’architecte et développeur senior sur des stacks modernes pour aider nos clients à relever leurs challenges technologiques.\n\nCultivant l’esprit d’équipe et privilégiant l’humain, nous ambitionnons, à terme, d’être une trentaine de Monkeys sur Toulouse.\n\n"},{"key":"morning","title":"Morning","category":"soutien","order":2,"logo":"/2021/images/partners/logo-morning.svg","website":"https://morning.com/fr/","lang":"fr","why":"Morning est fier d'être un soutien du DevFest 2019 à Toulouse car c'est un évènement incontournable pour les développeurs ! En d'autres mots DevFest is the place to be !","socials":[{"icon":"facebook","link":"https://facebook.com/morning","name":"morning"},{"icon":"twitter","link":"https://twitter.com/morning_com","name":"morning_com"},{"icon":"linkedin","link":"https://linkedin.com/company/morning","name":"morning"}],"description":"Au pied des Pyrénées, Morning et son équipe (ré)inventent les usages financiers. Dans un cadre authentique, l’équipe imagine et développe des solutions innovantes pour gérer son argent, disposer de moyens de paiement innovants et bénéficier de services sur-mesure.\n \nAujourd’hui Morning c’est :\nPlus 150.000 comptes de paiement Morning\nPlus de 50 millions d’euros collectés sur les cagnottes\nPlus d’un million de transactions traitées avec succès !\n"},{"key":"neo_soft_groupe","title":"NEO-SOFT Groupe","category":"gold","order":12,"logo":"/2021/images/partners/logo-neo_soft_groupe.png","website":"https://www.neo-soft.fr/","lang":"fr","why":"Parce nous sommes passionnés et toulousains et que le DevFest c'est LE regroupement des passionnées de la Ville Rose et d'ailleurs ! Parce que notre job ne s'arrête pas à satisfaire un client mais à apprendre et partager nos connaissances .","socials":[{"icon":"facebook","link":"https://facebook.com/neo.soft.groupe","name":"Néo-Soft Groupe"},{"icon":"twitter","link":"https://twitter.com/neosoft_","name":"NeoSoft"},{"icon":"linkedin","link":"http://www.linkedin.com/company/neo-soft-services","name":"Néo-Soft Groupe"}],"description":"Créé en 2005 à Rennes par son PDG actuel Soïg, le Groupe Néo-Soft est aujourd’hui reconnu pour l’expertise de ses 1 300 consultants et ses 16 implantations.\nNéo-Soft est une société de Conseil en Informatique et Technologies spécialisée dans 5 domaines : \n- Conseil & Gestion de projet \n- Domaine applicatif\n- Infrastructures & Réseaux \n- Cybersécurité grâce notre filiale dédiée Cogital \n- Data\nIntégrer Néo-Soft c'est la possibilité de développer son expertise dans une entreprise innovante et responsable où la proximité est une réalité.\nNous recrutons sur toute la France et dans divers secteurs d'activités (Banques & Assurances, Aéronautique, Domotique, Télécoms & Médias etc.). \nClient grands comptes, PME ou start-up innovantes, évoluez dans l'environnement de votre choix.\n\n"},{"key":"onestock","title":"OneStock","category":"startup","order":9,"logo":"/2021/images/partners/logo-onestock.png","website":"https://www.onestock-retail.com/fr/","lang":"fr","why":"Nous sommes une Start up Toulousaine et nous travaillons dans un secteur innovant nécessitant une mise à jour constante de nos connaissances techniques. Nous travaillons avec des technologies encore assez peu utilisées comme le langage de programmation Go. DevFest étant l'événement phare des Développeurs, pour nous, passionnés de Développement IT, il était impensable de ne pas faire partie de l'espace Start Up de l'événement DevFest 2019 ! ","socials":[{"icon":"twitter","link":"https://twitter.com/_OneStock_FR","name":"_OneStock_FR"},{"icon":"linkedin","link":"https://linkedin.com/company/onestock-frances","name":"OneStock France"}],"description":"Basée en France et au Royaume-Uni, OneStock propose une suite logicielle omnicanale d’Order Management à destination des retailers souhaitant rendre agile la gestion de leurs commandes, offrir la meilleure expérience client et booster leurs ventes.\n"},{"key":"openairlines","title":"OpenAirlines","category":"startup","order":6,"logo":"/2021/images/partners/logo-openairlines.png","website":"https://openairlines.com/","lang":"fr","why":"OpenAirlines est fier de soutenir cet événement incontournable pour les développeurs ! On espère y rencontrer des développeurs curieux et innovants, motivés par les enjeux du réchauffement climatique et les défis technologiques qui permettront de sauver notre planète.","socials":[{"icon":"facebook","link":"https://facebook.com/openairlines","name":"openairlines"},{"icon":"twitter","link":"https://twitter.com/OpenAirlines","name":"OpenAirlines"},{"icon":"linkedin","link":"https://linkedin.com/company/openairlines","name":"openairlines"}],"description":"Partant du constat que chaque année près de 660 millions de tonnes de CO2 sont émises par les avions, soit plus de 20 000 kilos de CO2 par seconde, cette clean-tech a décidé d’agir en développant des solutions innovantes pour aider les compagnies aériennes à réduire leurs coûts et leur impact environnemental.\n\nFruit de 7 ans de R&D, le logiciel d’éco-pilotage SkyBreathe® Fuel Efficiency sort sur le marché en 2013. S’appuyant sur des algorithmes de Big Data, d’Intelligence Artificielle et de Machine Learning, le logiciel analyse automatiquement les très nombreuses données disponibles dans les boites noires des avions afin d’évaluer l’efficacité énergétique des vols et émettre des recommandations permettant de réduire la consommation de carburant et les émissions de CO2 des avions. \n\nOpenAirlines est aujourd’hui leader sur son marché et emploie actuellement une quarantaine de collaborateurs à Toulouse et dans ses filiales à Hong Kong et à Miami.\n"},{"key":"programmez","title":"Programmez","category":"media","logo":"/2021/images/partners/media/logo_programmez.svg","website":"https://www.programmez.com/","socials":[],"description":"\nFind Programmez on [https://www.programmez.com/](https://www.programmez.com/)\n\n![Programmez](/2021/images/partners/media/logo_programmez.svg)\n"},{"key":"python-toulouse","title":"Python Toulouse","category":"communautes","logo":"/2021/images/partners/community/python_toulouse.png","website":"https://www.meetup.com/Python-Toulouse/","socials":[],"description":"\nFind Python Toulouse on [https://www.meetup.com/Python-Toulouse/](https://www.meetup.com/Python-Toulouse/)\n\n![Python Toulouse](/2021/images/partners/community/python_toulouse.png)"},{"key":"rust-toulouse","title":"Rust Toulouse","category":"communautes","logo":"/2021/images/partners/community/rust.png","website":"https://www.gdgtoulouse.fr/","socials":[],"description":"\nFind Rust Toulouse on [meetup](https://www.meetup.com/Toulouse-Rust-Meetup/)\n\n![GDG Toulouse](/2021/images/partners/community/rust.png)\n"},{"key":"sii","title":"SII","category":"platinium","order":1,"logo":"/2021/images/partners/logo-sii.png","website":"http://toulouse.groupe-sii.com/fr","lang":"fr","why":"It appeared essential to us to bring our support to this « don’t miss » event. We are quite pleased and proud to be able to play a concrete part in its success. ","socials":[{"icon":"facebook","link":"https://facebook.com/GroupeSII","name":"Groupe SII"},{"icon":"twitter","link":"https://twitter.com/SIISudOuest","name":"SIISudOuest"},{"icon":"linkedin","link":"https://linkedin.com/company/sii","name":"Groupe SII"}],"description":"After 40 years of partnering with corporations for their engineering needs, the SII Group finds itself at the forefront of innovation and digital transformation. It relies on teams of expert engineers and on methods at the cutting-edge of quality standards for its business centered on engineering consulting (information technology, electronics and telecommunications) and digital services (engineering and network information technology).\nWith nine field offices in France, the Group has built close relationships with local firms and offers a wide spectrum of career opportunities. Its presence in 18 countries and four continents also gives SII the ability to provide support for the international operations of major corporations.\n\n"},{"key":"smile","title":"SMILE","category":"gold","order":13,"logo":"/2021/images/partners/logo-smile.png","website":"https://www.smile.eu/","lang":"fr","why":"Nous avons toujours été proche des développeurs, puisque ce sont 4 d'entre eux qui nous ont fondés. Notre ADN repose donc sur la technique, et la passion pour la contribution, le collectif. Il est donc dans notre culture d'être partie prenante sur les événements auxquels nous croyons. Implanté en Occitanie depuis quelques temps, SMILE a pour souhait de se développer, et pour cela, nous souhaitons renforcer notre proximité avec les acteurs de l'écosystème IT Toulousain.","socials":[{"icon":"facebook","link":"https://facebook.com/smileopensource","name":"Smile - Open Source Solutions"},{"icon":"twitter","link":"https://twitter.com/GroupeSmile","name":"GroupeSmile"}],"description":"Avec de l’audace et des beaux projets, ajoutez une pincée de culture visionnaire, une bonne dose d’innovation, saupoudrez le tout d’une expertise technique pluridisciplinaire et vous obtenez Smile, le leader européen de l’intégration et de l’infogérance de solutions open source.\n\nAgiles, open et engagés, chez Smile, nous adorons avoir un coup d’avance pour garder notre place sur le podium des acteurs majeurs du digital. Pour cela, nous avons développé 4 offres pour vous accompagner dans votre transformation numérique : Digital, Business App, Embedded & IoT et Infra.\n\nPour finir cette première présentation, une question primordiale… « Que serions-nous sans les femmes et les hommes qui font tourner la jolie machinerie Smile ? ». Au quotidien, ce sont 1700 smiliens présents dans 7 pays qui s’agitent et cogitent pour mener à bien les projets stratégiques de nombreux grands comptes français et européens.\n"},{"key":"squoring_technologies","title":"Squoring Technologies","category":"soutien","order":4,"logo":"/2021/images/partners/logo-squoring_technologies.png","website":"www.squoring.com / www.vector.com/","lang":"fr","why":"En tant qu'éditeur de logiciel à la pointe de l'innovation, notre participation au DevFest nous permet d'échanger avec tous les acteurs de notre écosystème sur les dernières avancées technologiques. A ce titre, tous les ingénieurs de notre équipe R&D sont invités à participer à l'événement pour partager et rester connectés avec la grande communauté des développeurs !","socials":[{"icon":"twitter","link":"https://twitter.com/squoring","name":"squoring"},{"icon":"linkedin","link":"https://linkedin.com/company/squoring-technologies","name":"squoring-technologies"}],"description":"Créé à Toulouse en 2010, Squoring Technologies s’est imposé comme le spécialiste des solutions de pilotage de la qualité et de la performance des développements logiciels. Son tableau de bord d’analyse décisionnelle « Squore for Software Analytics », collecte, analyse et agrège en indicateurs pertinents et exploitables l’ensemble des données produites pendant le cycle de vie de production des logiciels pour évaluer et optimiser la performance des projets, le respect des processus et la qualité des livrables. Les solutions de Squoring Technologies sont utilisées par de nombreux grands groupes industriels en France et dans le monde. Depuis juin 2018, Squoring Technologies fait partie du groupe Vector Informatik, qui regroupe plus de 2, 500 employés dans le monde.\n"},{"key":"stack_labs","title":"STACK LABS","category":"platinium","order":0,"logo":"/2021/images/partners/logo-stack_labs.svg","website":"https://stack-labs.com","lang":"fr","why":"We want to share and meet cool & passionated developers during this incredible event !","socials":[{"icon":"twitter","link":"https://twitter.com/stack_labs","name":"stack_labs"},{"icon":"linkedin","link":"https://linkedin.com/company/stacklabs","name":"stacklabs"}],"description":"The new generation tech company. We ❤️ code, and building powerful & secured cloud architectures. We invest in tech watch & work with companies like Google & Amazon as partners.\n"},{"key":"sycomore-technologie","title":"Sycomore Technologies","category":"gold","order":32,"logo":"/2021/images/partners/logo-sycomore-technologie.png","website":"https://sycomore-tech.com","lang":"fr","why":"This an opportunity to contribute to a very exciting and friendly event to meet new talents and share our enthusiasm on the development of innovative technologies.","socials":[{"icon":"linkedin","link":"https://www.linkedin.com/company/sycomore-technologies/","name":" Sycomore-Technologies "}],"description":"Sycomore-Technologies offers proprietary and custom software solutions.\n\nOur seasoned team is experienced in new generation technologies as cloud, microservices architectures as well as big data technologies to transform yours data into smart data."},{"key":"toulouse-data-science","title":"Toulouse Data Science","category":"communautes","logo":"/2021/images/partners/community/tds.png","website":"http://www.tlse-data-science.fr/","socials":[],"description":"\nFind Toulouse Data Science on [http://www.tlse-data-science.fr/](http://www.tlse-data-science.fr/)\n\n![Toulouse Data Science](/2021/images/partners/community/tds.png)\n"},{"key":"toulouse-devops","title":"Toulouse Devops","category":"communautes","logo":"/2021/images/partners/community/toulousedevops.png","website":"http://toulousedevops.org/","socials":[],"description":"\nFind Toulouse Devops on [http://toulousedevops.org/](http://toulousedevops.org/)\n\n![Toulouse Devops](/2021/images/partners/community/toulousedevops.png)\n"},{"key":"toulouse-jug","title":"Toulouse JUG","category":"communautes","logo":"/2021/images/partners/community/toulouse_jug.png","website":"https://www.toulousejug.org/","socials":[],"description":"\nFind Toulouse JUG on [https://www.toulousejug.org/](https://www.toulousejug.org/)\n\n![Toulouse JUG](/2021/images/partners/community/toulouse_jug.png)\n"},{"key":"toulouse_metropole","title":"Toulouse Métropole","category":"platinium","order":35,"logo":"/2021/images/partners/logo-toulouse_metropole.png","website":"https://www.toulouse-metropole.fr/","lang":"fr","socials":[]},{"key":"toulousejs","title":"ToulouseJS","category":"communautes","logo":"/2021/images/partners/community/toulousejs.png","website":"https://twitter.com/ToulouseJS","socials":[],"description":"\nFind ToulouseJS on [https://twitter.com/ToulouseJS](https://twitter.com/ToulouseJS)\n\n![ToulouseJS](/2021/images/partners/community/toulousejs.png)\n"},{"key":"welovedevs_com","title":"WeLoveDevs.com","category":"soutien","order":34,"logo":"/2021/images/partners/logo-welovedevs_com.png","website":"https://welovedevs.com/","lang":"fr","why":"Pour supporter la communauté de développeur Toulousaine, leurs partages de connaissance, pour rencontrer plus de personnes fantastiques encore !\n","socials":[{"icon":"twitter","link":"https://welovedevs.com/"},{"icon":"linkedin","link":"https://www.linkedin.com/company/welovedevs/"},{"icon":"facebook","link":"https://www.facebook.com/welovedevs/"}],"description":"WeLoveDevs.com aide les développeurs à définir quelle entreprise leur permettra de s'épanouir.\nNous pensons qu'un développeur devrait pouvoir trouver par lui-même une entreprise où il sera heureux.\nAussi WeLoveDevs.com permet aux entreprises de proposer une vitrine sur la vie de leurs collaborateurs. Nos équipes les accompagnent dans le fait de produire du contenu authentique et transparent, qui donne envie d'être candidat.\n"}],"team":[{"title":"Alexia Audevart","type":"volunteers","subtitle":"Toulouse Data Science","photo":"alexia_audevart.jpeg","socials":[{"link":"https://www.twitter.com/aaudevart","name":"Twitter"},{"link":"https://github.com/aaudevart","name":"Github"},{"link":"https://www.linkedin.com/in/alexia-audevart-450b8a1/","name":"Linkedin"}],"key":"alexia_audevart"},{"title":"Aurélie Vache","type":"core","subtitle":"Duchess France / Toulouse Data Science","photo":"aurelie_vache.png","socials":[{"link":"https://www.twitter.com/aurelievache","name":"Twitter"},{"link":"http://scraly.com/","name":"Site"},{"link":"https://www.linkedin.com/in/aurelievache","name":"LinkedIn"},{"link":"https://github.com/scraly","name":"Github"}],"key":"aurelie_vache"},{"title":"Didier Plaindoux","type":"volunteers","subtitle":"Toulouse JUG","photo":"didier_plaindoux.jpeg","socials":[{"link":"https://twitter.com/dplaindoux","name":"Twitter"}],"key":"didier_plaindoux"},{"title":"Elodie Lerare","type":"core","subtitle":"","photo":"elodie_lerare.jpg","socials":[{"link":"https://twitter.com/EloBlou","name":"Twitter"},{"link":"https://www.linkedin.com/in/elodie-lerare-223a6b41/","name":"LinkedIn"}],"key":"elodie_lerare"},{"title":"Emmanuel Vinas","type":"core","subtitle":"GDG Toulouse","photo":"emmanuel_vinas.jpeg","socials":[{"link":"https://twitter.com/EmmanuelVinas","name":"Twitter"}],"key":"emmanuel_vinas"},{"title":"Jean Martineau-Figuette","type":"cfp","subtitle":"React Meetup","photo":"euzebe.jpg","socials":[{"link":"https://www.twitter.com/jeanMartiF","name":"Twitter"},{"link":"https://www.linkedin.com/in/jean-martineau-figuette/","name":"LinkedIn"}],"key":"euzebe"},{"title":"Hadrien Toma","type":"core","subtitle":"","photo":"hadrien_toma.jpg","socials":[{"link":"https://twitter.com/HadrienToma","name":"Twitter"},{"link":"https://www.linkedin.com/in/hadrien-toma/","name":"LinkedIn"}],"key":"hadrien_thomas"},{"title":"Igor Laborie","type":"core","subtitle":"Choloepusophile","photo":"igor_laborie.jpg","socials":[{"link":"https://twitter.com/ilaborie","name":"Twitter"},{"link":"https://github.com/ilaborie","name":"Github"}],"key":"igor_laborie"},{"title":"Julien Del Rio","type":"core","subtitle":"GDG Toulouse","photo":"julien_delrio.jpg","socials":[{"link":"https://twitter.com/JulienDelRio","name":"Twitter"}],"key":"julien_del_rio"},{"title":"Julien Renaux","type":"core","subtitle":"Président GDG Toulouse","photo":"julien_renaux.jpg","socials":[{"link":"https://twitter.com/julienrenaux","name":"Twitter"},{"link":"https://github.com/shprink","name":"Github"}],"key":"julien_renaux"},{"title":"Kevin Davin","type":"core","subtitle":"GDG Toulouse & Toulouse JUG","photo":"kevin_davin.png","socials":[{"link":"https://twitter.com/davinkevin","name":"Twitter"},{"link":"https://github.com/davinkevin/","name":"Github"},{"link":"www.linkedin.com/in/davinkevin","name":"LinkedIn"}],"key":"kevin_davin"},{"title":"Lionel Porcheron","type":"volunteers","subtitle":"Toulouse DevOps","photo":"lionel_porcheron.jpg","socials":[{"link":"https://twitter.com/lporcheron","name":"Twitter"}],"key":"lionel_porcheron"},{"title":"Maxime Pawlak","type":"core","subtitle":"GDG Toulouse","photo":"maxime_pawlak.jpg","socials":[{"link":"https://twitter.com/Maxime_Pawlak","name":"Twitter"}],"key":"maxime_pawlak"},{"title":"Michaël Pailloncy","type":"core","subtitle":"Toulouse JAM / JUG","photo":"michael_pailloncy.jpg","socials":[{"link":"https://twitter.com/mpailloncy","name":"Twitter"},{"link":"https://github.com/mpailloncy","name":"Github"},{"link":"https://www.linkedin.com/in/michael-pailloncy-21119827/","name":"LinkedIn"}],"key":"michael_pailloncy"},{"title":"Serge Boucher","type":"core","subtitle":"","photo":"serge_boucher.png","socials":[{"link":"https://twitter.com/sboucher","name":"Twitter"}],"key":"serge_boucher"},{"title":"Simon Chemouil","type":"cfp","subtitle":"Toulouse Rust Meetup","photo":"simon_chemouil.png","socials":[{"link":"https://www.twitter.com/simach","name":"Twitter"},{"link":"https://github.com/magnet","name":"Github"}],"key":"simon_chemouil"},{"title":"Thibault Ducret","type":"cfp","subtitle":"Python Toulouse","photo":"thibault_ducret.jpeg","socials":[{"link":"https://www.tducret.com","name":"Site"},{"link":"https://www.linkedin.com/in/thibaultducret","name":"LinkedIn"},{"link":"https://github.com/tducret","name":"Github"}],"key":"thibault_ducret"},{"title":"Vincent Ferries","type":"core","subtitle":"Toulouse JUG","photo":"vincent_ferries.jpg","socials":[{"link":"https://twitter.com/VincentFERRIES","name":"Twitter"}],"key":"vincent_ferries"}]}
\ No newline at end of file
diff --git a/static/en.svg b/static/en.svg
deleted file mode 100644
index 9131483..0000000
--- a/static/en.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
\ No newline at end of file
diff --git a/static/favicon-16.png b/static/favicon-16.png
deleted file mode 100644
index f14cd10..0000000
Binary files a/static/favicon-16.png and /dev/null differ
diff --git a/static/favicon-32.png b/static/favicon-32.png
deleted file mode 100644
index 3eedc2b..0000000
Binary files a/static/favicon-32.png and /dev/null differ
diff --git a/static/images/logos/devfest_gray_text.png b/static/images/logos/devfest_gray_text.png
deleted file mode 100644
index 1bb6f3b..0000000
Binary files a/static/images/logos/devfest_gray_text.png and /dev/null differ
diff --git a/static/images/logos/devfest_gray_text.svg b/static/images/logos/devfest_gray_text.svg
deleted file mode 100644
index 2090d29..0000000
--- a/static/images/logos/devfest_gray_text.svg
+++ /dev/null
@@ -1,173 +0,0 @@
-
-
diff --git a/static/images/logos/favicon-144.png b/static/images/logos/favicon-144.png
deleted file mode 100644
index 7381d23..0000000
Binary files a/static/images/logos/favicon-144.png and /dev/null differ
diff --git a/static/images/logos/favicon-192.png b/static/images/logos/favicon-192.png
deleted file mode 100644
index 1394869..0000000
Binary files a/static/images/logos/favicon-192.png and /dev/null differ
diff --git a/static/images/logos/favicon-48.png b/static/images/logos/favicon-48.png
deleted file mode 100644
index f573c00..0000000
Binary files a/static/images/logos/favicon-48.png and /dev/null differ
diff --git a/static/images/logos/favicon-512.png b/static/images/logos/favicon-512.png
deleted file mode 100644
index c94caf9..0000000
Binary files a/static/images/logos/favicon-512.png and /dev/null differ
diff --git a/static/images/logos/favicon-72.png b/static/images/logos/favicon-72.png
deleted file mode 100644
index 4a6c9b7..0000000
Binary files a/static/images/logos/favicon-72.png and /dev/null differ
diff --git a/static/images/logos/favicon-96.png b/static/images/logos/favicon-96.png
deleted file mode 100644
index 6c6c897..0000000
Binary files a/static/images/logos/favicon-96.png and /dev/null differ
diff --git a/static/images/organization/oyd.png b/static/images/organization/oyd.png
deleted file mode 100644
index 1bb6f3b..0000000
Binary files a/static/images/organization/oyd.png and /dev/null differ
diff --git a/static/images/partners/.png b/static/images/partners/.png
deleted file mode 100644
index 6fd0751..0000000
Binary files a/static/images/partners/.png and /dev/null differ
diff --git a/static/images/partners/antandros.svg b/static/images/partners/antandros.svg
deleted file mode 100644
index 34e0904..0000000
--- a/static/images/partners/antandros.svg
+++ /dev/null
@@ -1,149 +0,0 @@
-
-
-
-
diff --git a/static/images/partners/arkakapi.png b/static/images/partners/arkakapi.png
deleted file mode 100755
index 59fa815..0000000
Binary files a/static/images/partners/arkakapi.png and /dev/null differ
diff --git a/static/images/partners/fsf.png~ b/static/images/partners/fsf.png~
deleted file mode 100644
index 8d7aacf..0000000
Binary files a/static/images/partners/fsf.png~ and /dev/null differ
diff --git a/static/images/partners/gandi-1.svg b/static/images/partners/gandi-1.svg
deleted file mode 100644
index 701943c..0000000
--- a/static/images/partners/gandi-1.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/static/images/partners/madebysense.jpg b/static/images/partners/madebysense.jpg
deleted file mode 100644
index 48073eb..0000000
Binary files a/static/images/partners/madebysense.jpg and /dev/null differ
diff --git a/static/images/partners/mercode.png b/static/images/partners/mercode.png
deleted file mode 100644
index 01fbc8b..0000000
Binary files a/static/images/partners/mercode.png and /dev/null differ
diff --git a/static/images/partners/mono.png b/static/images/partners/mono.png
deleted file mode 100644
index 6fd0751..0000000
Binary files a/static/images/partners/mono.png and /dev/null differ
diff --git a/static/images/partners/omega.png b/static/images/partners/omega.png
deleted file mode 100644
index 4d1f7c2..0000000
Binary files a/static/images/partners/omega.png and /dev/null differ
diff --git a/static/images/partners/omega.png~ b/static/images/partners/omega.png~
deleted file mode 100644
index a421d58..0000000
Binary files a/static/images/partners/omega.png~ and /dev/null differ
diff --git a/static/images/partners/stf.png b/static/images/partners/stf.png
deleted file mode 100644
index 81138c6..0000000
Binary files a/static/images/partners/stf.png and /dev/null differ
diff --git a/static/images/partners/stickker.png b/static/images/partners/stickker.png
deleted file mode 100644
index e972d97..0000000
Binary files a/static/images/partners/stickker.png and /dev/null differ
diff --git a/static/images/partners/tutanota.svg b/static/images/partners/tutanota.svg
deleted file mode 100644
index 814c270..0000000
--- a/static/images/partners/tutanota.svg
+++ /dev/null
@@ -1,97 +0,0 @@
-
-
diff --git a/static/images/partners/you.png b/static/images/partners/you.png
deleted file mode 100644
index af0a28c..0000000
Binary files a/static/images/partners/you.png and /dev/null differ
diff --git a/static/images/partners/you.svg b/static/images/partners/you.svg
deleted file mode 100644
index 8aea792..0000000
--- a/static/images/partners/you.svg
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
diff --git a/static/images/speakers/aral.jpeg b/static/images/speakers/aral.jpeg
deleted file mode 100644
index f9975ef..0000000
Binary files a/static/images/speakers/aral.jpeg and /dev/null differ
diff --git a/static/images/speakers/aysebilge.jpeg b/static/images/speakers/aysebilge.jpeg
deleted file mode 100644
index 8827a39..0000000
Binary files a/static/images/speakers/aysebilge.jpeg and /dev/null differ
diff --git a/static/images/speakers/bager.jpg b/static/images/speakers/bager.jpg
deleted file mode 100644
index a2fe2d8..0000000
Binary files a/static/images/speakers/bager.jpg and /dev/null differ
diff --git a/static/images/speakers/behlul.jpg b/static/images/speakers/behlul.jpg
deleted file mode 100644
index 9edb6ae..0000000
Binary files a/static/images/speakers/behlul.jpg and /dev/null differ
diff --git a/static/images/speakers/bilgenarin.jpeg b/static/images/speakers/bilgenarin.jpeg
deleted file mode 100644
index e944e88..0000000
Binary files a/static/images/speakers/bilgenarin.jpeg and /dev/null differ
diff --git a/static/images/speakers/chris.jpg b/static/images/speakers/chris.jpg
deleted file mode 100644
index cd5f1c0..0000000
Binary files a/static/images/speakers/chris.jpg and /dev/null differ
diff --git a/static/images/speakers/cs.jpeg b/static/images/speakers/cs.jpeg
deleted file mode 100644
index bf5fabb..0000000
Binary files a/static/images/speakers/cs.jpeg and /dev/null differ
diff --git a/static/images/speakers/derya.jpg b/static/images/speakers/derya.jpg
deleted file mode 100644
index 644db70..0000000
Binary files a/static/images/speakers/derya.jpg and /dev/null differ
diff --git a/static/images/speakers/dilan.jpeg b/static/images/speakers/dilan.jpeg
deleted file mode 100644
index 8c7a86d..0000000
Binary files a/static/images/speakers/dilan.jpeg and /dev/null differ
diff --git a/static/images/speakers/engels.jpg b/static/images/speakers/engels.jpg
deleted file mode 100644
index 79dfcc8..0000000
Binary files a/static/images/speakers/engels.jpg and /dev/null differ
diff --git a/static/images/speakers/eylyl.jpg b/static/images/speakers/eylyl.jpg
deleted file mode 100644
index 6133696..0000000
Binary files a/static/images/speakers/eylyl.jpg and /dev/null differ
diff --git a/static/images/speakers/fatih.jpg b/static/images/speakers/fatih.jpg
deleted file mode 100644
index 7d3d4d4..0000000
Binary files a/static/images/speakers/fatih.jpg and /dev/null differ
diff --git a/static/images/speakers/gulcin.jpeg b/static/images/speakers/gulcin.jpeg
deleted file mode 100644
index 299dac0..0000000
Binary files a/static/images/speakers/gulcin.jpeg and /dev/null differ
diff --git a/static/images/speakers/john.jpg b/static/images/speakers/john.jpg
deleted file mode 100644
index 536e2cd..0000000
Binary files a/static/images/speakers/john.jpg and /dev/null differ
diff --git a/static/images/speakers/karen.jpg b/static/images/speakers/karen.jpg
deleted file mode 100644
index 09f1813..0000000
Binary files a/static/images/speakers/karen.jpg and /dev/null differ
diff --git a/static/images/speakers/maciej.jpg b/static/images/speakers/maciej.jpg
deleted file mode 100644
index ad52d67..0000000
Binary files a/static/images/speakers/maciej.jpg and /dev/null differ
diff --git a/static/images/speakers/mustafa_yontar.jpg b/static/images/speakers/mustafa_yontar.jpg
deleted file mode 100644
index ee3f3cc..0000000
Binary files a/static/images/speakers/mustafa_yontar.jpg and /dev/null differ
diff --git a/static/images/speakers/neslihan_turan.png b/static/images/speakers/neslihan_turan.png
deleted file mode 100644
index 617cb52..0000000
Binary files a/static/images/speakers/neslihan_turan.png and /dev/null differ
diff --git a/static/images/speakers/netha.jpg b/static/images/speakers/netha.jpg
deleted file mode 100644
index c52e9ca..0000000
Binary files a/static/images/speakers/netha.jpg and /dev/null differ
diff --git a/static/images/speakers/nevit.jpg b/static/images/speakers/nevit.jpg
deleted file mode 100644
index 85c4d70..0000000
Binary files a/static/images/speakers/nevit.jpg and /dev/null differ
diff --git a/static/images/speakers/onur_celik.jpg b/static/images/speakers/onur_celik.jpg
deleted file mode 100644
index c9a3998..0000000
Binary files a/static/images/speakers/onur_celik.jpg and /dev/null differ
diff --git a/static/images/speakers/orkut.jpeg b/static/images/speakers/orkut.jpeg
deleted file mode 100644
index b127bb7..0000000
Binary files a/static/images/speakers/orkut.jpeg and /dev/null differ
diff --git a/static/images/speakers/pinar.jpg b/static/images/speakers/pinar.jpg
deleted file mode 100644
index fbddb01..0000000
Binary files a/static/images/speakers/pinar.jpg and /dev/null differ
diff --git a/static/images/speakers/pinar_dag.jpg b/static/images/speakers/pinar_dag.jpg
deleted file mode 100644
index f913448..0000000
Binary files a/static/images/speakers/pinar_dag.jpg and /dev/null differ
diff --git a/static/images/speakers/rms.jpg b/static/images/speakers/rms.jpg
deleted file mode 100644
index 803d07e..0000000
Binary files a/static/images/speakers/rms.jpg and /dev/null differ
diff --git a/static/images/speakers/robert.png b/static/images/speakers/robert.png
deleted file mode 100644
index b6ab5cf..0000000
Binary files a/static/images/speakers/robert.png and /dev/null differ
diff --git a/static/images/speakers/rosie.jpg b/static/images/speakers/rosie.jpg
deleted file mode 100644
index c19f07a..0000000
Binary files a/static/images/speakers/rosie.jpg and /dev/null differ
diff --git a/static/images/speakers/sander.jpg b/static/images/speakers/sander.jpg
deleted file mode 100644
index 587986b..0000000
Binary files a/static/images/speakers/sander.jpg and /dev/null differ
diff --git a/static/images/speakers/yutyo.jpg b/static/images/speakers/yutyo.jpg
deleted file mode 100644
index 17ded7a..0000000
Binary files a/static/images/speakers/yutyo.jpg and /dev/null differ
diff --git a/static/images/team/nesli.png b/static/images/team/nesli.png
deleted file mode 100644
index 617cb52..0000000
Binary files a/static/images/team/nesli.png and /dev/null differ
diff --git a/static/images/team/neslihan_turan.png b/static/images/team/neslihan_turan.png
deleted file mode 100644
index 617cb52..0000000
Binary files a/static/images/team/neslihan_turan.png and /dev/null differ
diff --git a/static/images/team/tugrul.jpg b/static/images/team/tugrul.jpg
deleted file mode 100644
index ab81f5b..0000000
Binary files a/static/images/team/tugrul.jpg and /dev/null differ
diff --git a/static/images/team/you.jpg b/static/images/team/you.jpg
deleted file mode 100644
index 437b4a1..0000000
Binary files a/static/images/team/you.jpg and /dev/null differ
diff --git a/static/kit/DevFest Toulouse 2019 - Media Kit - Sponsors.zip b/static/kit/DevFest Toulouse 2019 - Media Kit - Sponsors.zip
deleted file mode 100644
index 348aae0..0000000
Binary files a/static/kit/DevFest Toulouse 2019 - Media Kit - Sponsors.zip and /dev/null differ
diff --git a/static/kit/MediaKit.zip b/static/kit/MediaKit.zip
deleted file mode 100644
index 4ed0c4b..0000000
Binary files a/static/kit/MediaKit.zip and /dev/null differ
diff --git a/static/ozgurkon-sponsor-tr.pdf b/static/ozgurkon-sponsor-tr.pdf
deleted file mode 100644
index 33f9be1..0000000
Binary files a/static/ozgurkon-sponsor-tr.pdf and /dev/null differ
diff --git a/static/ozgurkon-sponsor.pdf b/static/ozgurkon-sponsor.pdf
deleted file mode 100644
index d483a55..0000000
Binary files a/static/ozgurkon-sponsor.pdf and /dev/null differ
diff --git a/static/ozgurkon_2021_logo.svg b/static/ozgurkon_2021_logo.svg
deleted file mode 100644
index 88d6214..0000000
--- a/static/ozgurkon_2021_logo.svg
+++ /dev/null
@@ -1,139 +0,0 @@
-
-
diff --git a/static/ozgurkon_kapak.svg b/static/ozgurkon_kapak.svg
deleted file mode 100644
index f6651cf..0000000
--- a/static/ozgurkon_kapak.svg
+++ /dev/null
@@ -1,226 +0,0 @@
-
-
-
-
diff --git a/static/ozgurkon_logo.svg b/static/ozgurkon_logo.svg
deleted file mode 100644
index 49c8f76..0000000
--- a/static/ozgurkon_logo.svg
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
diff --git a/static/ozgurkon_logo.svg.png b/static/ozgurkon_logo.svg.png
deleted file mode 100644
index c05385a..0000000
Binary files a/static/ozgurkon_logo.svg.png and /dev/null differ
diff --git a/static/ozgurkon_logo_only_rev.pdf b/static/ozgurkon_logo_only_rev.pdf
deleted file mode 100644
index 8a178ab..0000000
Binary files a/static/ozgurkon_logo_only_rev.pdf and /dev/null differ
diff --git a/static/ozgurkon_logo_only_rev.svg b/static/ozgurkon_logo_only_rev.svg
deleted file mode 100644
index 6fedc36..0000000
--- a/static/ozgurkon_logo_only_rev.svg
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
diff --git a/static/ozgurkon_logo_rev.pdf b/static/ozgurkon_logo_rev.pdf
deleted file mode 100644
index 337bc9c..0000000
Binary files a/static/ozgurkon_logo_rev.pdf and /dev/null differ
diff --git a/static/ozgurkon_logo_rev.svg b/static/ozgurkon_logo_rev.svg
deleted file mode 100644
index b9b8425..0000000
--- a/static/ozgurkon_logo_rev.svg
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
diff --git a/static/tn.png b/static/tn.png
deleted file mode 100644
index 23e67e4..0000000
Binary files a/static/tn.png and /dev/null differ
diff --git a/static/tn.svg b/static/tn.svg
deleted file mode 100644
index 99d82d1..0000000
--- a/static/tn.svg
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
diff --git a/static/tr.svg b/static/tr.svg
deleted file mode 100644
index 19b9bec..0000000
--- a/static/tr.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
\ No newline at end of file
diff --git a/static/videojs-contrib-hls.min.js b/static/videojs-contrib-hls.min.js
deleted file mode 100644
index fb94cc3..0000000
--- a/static/videojs-contrib-hls.min.js
+++ /dev/null
@@ -1,8 +0,0 @@
-!function e(t,i,n){function r(s,o){if(!i[s]){if(!t[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(a)return a(s,!0);var d=new Error("Cannot find module '"+s+"'");throw d.code="MODULE_NOT_FOUND",d}var l=i[s]={exports:{}};t[s][0].call(l.exports,function(e){var i=t[s][1][e];return r(i||e)},l,l.exports,e,t,i,n)}return i[s].exports}for(var a="function"==typeof require&&require,s=0;s=r.adStartTime&&t<=r.adEndTime)return r}return null},o=function(e,t){var i=arguments.length<=2||arguments[2]===undefined?0:arguments[2];if(e.segments)for(var r=i,o=undefined,u=0;u=32&&e<126?String.fromCharCode(e):"."},s=function(e){var t={};return Object.keys(e).forEach(function(i){var n=e[i];ArrayBuffer.isView(n)?t[i]={bytes:n.buffer,byteOffset:n.byteOffset,byteLength:n.byteLength}:t[i]=n}),t},o=function(e){var t=e.byterange||{length:Infinity,offset:0};return[t.length,t.offset,e.resolvedUri].join(",")},u={hexDump:function(e){for(var t=Array.prototype.slice.call(e),i="",n=undefined,s=undefined,o=0;o1&&this.tech_.trigger({type:"usage",name:"hls-alternate-audio"}),this.useCueTags_&&this.tech_.trigger({type:"usage",name:"hls-playlist-cue-tags"})}},{key:"setupSegmentLoaderListeners_",value:function(){var e=this;this.mainSegmentLoader_.on("bandwidthupdate",function(){var t=e.selectPlaylist(),i=e.masterPlaylistLoader_.media(),n=e.tech_.buffered(),r=n.length?n.end(n.length-1)-e.tech_.currentTime():0,a=e.bufferLowWaterLine();(!i.endList||e.duration()
=a)&&e.masterPlaylistLoader_.media(t),e.tech_.trigger("bandwidthupdate")}),this.mainSegmentLoader_.on("progress",function(){e.trigger("progress")}),this.mainSegmentLoader_.on("error",function(){e.blacklistCurrentPlaylist(e.mainSegmentLoader_.error())}),this.mainSegmentLoader_.on("syncinfoupdate",function(){e.onSyncInfoUpdate_()}),this.mainSegmentLoader_.on("timestampoffset",function(){e.tech_.trigger({type:"usage",name:"hls-timestamp-offset"})}),this.audioSegmentLoader_.on("syncinfoupdate",function(){e.onSyncInfoUpdate_()}),this.mainSegmentLoader_.on("ended",function(){e.onEndOfStream()}),this.mainSegmentLoader_.on("earlyabort",function(){e.blacklistCurrentPlaylist({message:"Aborted early because there isn't enough bandwidth to complete the request without rebuffering."},120)}),this.mainSegmentLoader_.on("reseteverything",function(){e.tech_.trigger("hls-reset")}),this.mainSegmentLoader_.on("segmenttimemapping",function(t){e.tech_.trigger({type:"hls-segment-time-mapping",mapping:t.mapping})}),this.audioSegmentLoader_.on("ended",function(){e.onEndOfStream()})}},{key:"mediaSecondsLoaded_",value:function(){return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded+this.mainSegmentLoader_.mediaSecondsLoaded)}},{key:"load",value:function(){this.mainSegmentLoader_.load(),this.mediaTypes_.AUDIO.activePlaylistLoader&&this.audioSegmentLoader_.load(),this.mediaTypes_.SUBTITLES.activePlaylistLoader&&this.subtitleSegmentLoader_.load()}},{key:"fastQualityChange_",value:function(){var e=this.selectPlaylist();e!==this.masterPlaylistLoader_.media()&&(this.masterPlaylistLoader_.media(e),this.mainSegmentLoader_.resetLoader())}},{key:"play",value:function(){if(!this.setupFirstPlay()){this.tech_.ended()&&this.tech_.setCurrentTime(0),this.hasPlayed_()&&this.load();var e=this.tech_.seekable();return this.tech_.duration()===Infinity&&this.tech_.currentTime()e.end(0)||e.start(0)>t.end(0)?this.seekable_=e:this.seekable_=_["default"].createTimeRanges([[t.start(0)>e.start(0)?t.start(0):e.start(0),t.end(0)0&&(i=Math.max(i,n.end(n.length-1))),t!==i&&("open"!==this.mediaSource.readyState?this.mediaSource.addEventListener("sourceopen",r):r())}},{key:"dispose",value:function(){var e=this;this.decrypter_.terminate(),this.masterPlaylistLoader_.dispose(),this.mainSegmentLoader_.dispose(),["AUDIO","SUBTITLES"].forEach(function(t){var i=e.mediaTypes_[t].groups;for(var n in i)i[n].forEach(function(e){e.playlistLoader&&e.playlistLoader.dispose()})}),this.audioSegmentLoader_.dispose(),this.subtitleSegmentLoader_.dispose()}},{key:"master",value:function(){return this.masterPlaylistLoader_.master}},{key:"media",value:function(){return this.masterPlaylistLoader_.media()||this.initialMedia_}},{key:"setupSourceBuffers_",value:function(){var e=this.masterPlaylistLoader_.media(),t=undefined;if(e&&"open"===this.mediaSource.readyState){if(t=q(this.masterPlaylistLoader_.master,e),t.length<1)return this.error="No compatible SourceBuffer configuration for the variant stream:"+e.resolvedUri,this.mediaSource.endOfStream("decode");this.mainSegmentLoader_.mimeType(t[0]),t[1]&&this.audioSegmentLoader_.mimeType(t[1]),this.excludeIncompatibleVariants_(e)}}},{key:"excludeIncompatibleVariants_",value:function(e){var t=this.masterPlaylistLoader_.master,i=2,n=null,r=undefined;e.attributes.CODECS&&(r=(0,I.parseCodecs)(e.attributes.CODECS),n=r.videoCodec,i=r.codecCount),t.playlists.forEach(function(e){var t={codecCount:2,videoCodec:null};if(e.attributes.CODECS){var r=e.attributes.CODECS;t=(0,I.parseCodecs)(r),window.MediaSource&&window.MediaSource.isTypeSupported&&!window.MediaSource.isTypeSupported('video/mp4; codecs="'+B(r)+'"')&&(e.excludeUntil=Infinity)}t.codecCount!==i&&(e.excludeUntil=Infinity),t.videoCodec!==n&&(e.excludeUntil=Infinity)})}},{key:"updateAdCues_",value:function(e){var t=0,i=this.seekable();i.length&&(t=i.start(0)),b["default"].updateAdCues(e,this.cueTagsTrack_,t)}},{key:"goalBufferLength",value:function(){var e=this.tech_.currentTime(),t=P["default"].GOAL_BUFFER_LENGTH,i=P["default"].GOAL_BUFFER_LENGTH_RATE,n=Math.max(t,P["default"].MAX_GOAL_BUFFER_LENGTH);return Math.min(t+e*i,n)}},{key:"bufferLowWaterLine",value:function(){var e=this.tech_.currentTime(),t=P["default"].BUFFER_LOW_WATER_LINE,i=P["default"].BUFFER_LOW_WATER_LINE_RATE,n=Math.max(t,P["default"].MAX_BUFFER_LOW_WATER_LINE);return Math.min(t+e*i,n)}}]),t}(_["default"].EventTarget);i.MasterPlaylistController=G}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],6:[function(e,t,i){(function(t){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0});var r="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,a=n(r),s=e(9),o=n(s),u=function(){},d=function(e){var t=e["default"]?"main":"alternative";return e.characteristics&&e.characteristics.indexOf("public.accessibility.describes-video")>=0&&(t="main-desc"),t},l=function(e,t){e.abort(),e.pause(),t&&t.activePlaylistLoader&&(t.activePlaylistLoader.pause(),t.activePlaylistLoader=null)};i.stopLoaders=l;var f=function(e,t){t.activePlaylistLoader=e,e.load()};i.startLoaders=f;var c=function(e,t){return function(){var i=t.segmentLoaders,n=i[e],r=i.main,a=t.mediaTypes[e],s=a.activeTrack(),o=a.activeGroup(s),u=a.activePlaylistLoader;if(l(n,a),o){if(!o.playlistLoader)return void(u&&r.resetEverything());n.resyncLoader(),f(o.playlistLoader,a)}}};i.onGroupChanged=c;var h=function(e,t){return function(){var i=t.segmentLoaders,n=i[e],r=i.main,a=t.mediaTypes[e],s=a.activeTrack(),o=a.activeGroup(s),u=a.activePlaylistLoader;if(l(n,a),o){if(!o.playlistLoader)return void r.resetEverything();if(u===o.playlistLoader)return void f(o.playlistLoader,a);n.track&&n.track(s),n.resetEverything(),f(o.playlistLoader,a)}}};i.onTrackChanged=h;var p={AUDIO:function(e,t){return function(){var i=t.segmentLoaders[e],n=t.mediaTypes[e],r=t.blacklistCurrentPlaylist;l(i,n);var s=n.activeTrack(),o=n.activeGroup(),u=(o.filter(function(e){return e["default"]})[0]||o[0]).id,d=n.tracks[u];if(s===d)return void r({message:"Problem encountered loading the default audio track."});a["default"].log.warn("Problem encountered loading the alternate audio track.Switching back to default.");for(var f in n.tracks)n.tracks[f].enabled=n.tracks[f]===d;n.onTrackChanged()}},SUBTITLES:function(e,t){return function(){var i=t.segmentLoaders[e],n=t.mediaTypes[e];a["default"].log.warn("Problem encountered loading the subtitle track.Disabling subtitle track."),l(i,n);var r=n.activeTrack();r&&(r.mode="disabled"),n.onTrackChanged()}}};i.onError=p;var m={AUDIO:function(e,t,i){if(t){var n=i.tech,r=i.requestOptions,a=i.segmentLoaders[e];t.on("loadedmetadata",function(){var e=t.media();a.playlist(e,r),(!n.paused()||e.endList&&"none"!==n.preload())&&a.load()}),t.on("loadedplaylist",function(){a.playlist(t.media(),r),n.paused()||a.load()}),t.on("error",p[e](e,i))}},SUBTITLES:function(e,t,i){var n=i.tech,r=i.requestOptions,a=i.segmentLoaders[e],s=i.mediaTypes[e];t.on("loadedmetadata",function(){var e=t.media();a.playlist(e,r),a.track(s.activeTrack()),(!n.paused()||e.endList&&"none"!==n.preload())&&a.load()}),t.on("loadedplaylist",function(){a.playlist(t.media(),r),n.paused()||a.load()}),t.on("error",p[e](e,i))}};i.setupListeners=m;var g={AUDIO:function(e,t){var i=t.mode,n=t.hls,r=t.segmentLoaders[e],s=t.requestOptions,u=t.master.mediaGroups,l=t.mediaTypes[e],f=l.groups,c=l.tracks;u[e]&&0!==Object.keys(u[e]).length&&"html5"===i||(u[e]={main:{"default":{"default":!0}}});for(var h in u[e]){f[h]||(f[h]=[]);for(var g in u[e][h]){var y=u[e][h][g],_=undefined;if(_=y.resolvedUri?new o["default"](y.resolvedUri,n,s):null,y=a["default"].mergeOptions({id:g,playlistLoader:_},y),m[e](e,y.playlistLoader,t),f[h].push(y),"undefined"==typeof c[g]){var v=new a["default"].AudioTrack({id:g,kind:d(y),enabled:!1,language:y.language,"default":y["default"],label:g});c[g]=v}}}r.on("error",p[e](e,t))},SUBTITLES:function(e,t){var i=t.tech,n=t.hls,r=t.segmentLoaders[e],s=t.requestOptions,u=t.master.mediaGroups,d=t.mediaTypes[e],l=d.groups,f=d.tracks;for(var c in u[e]){l[c]||(l[c]=[]);for(var h in u[e][c])if(!u[e][c][h].forced){var g=u[e][c][h];if(g=a["default"].mergeOptions({id:h,playlistLoader:new o["default"](g.resolvedUri,n,s)},g),m[e](e,g.playlistLoader,t),l[c].push(g),"undefined"==typeof f[h]){var y=i.addRemoteTextTrack({id:h,kind:"subtitles",enabled:!1,language:g.language,label:h},!1).track;f[h]=y}}}r.on("error",p[e](e,t))},"CLOSED-CAPTIONS":function(e,t){var i=t.tech,n=t.master.mediaGroups,r=t.mediaTypes[e],s=r.groups,o=r.tracks;for(var u in n[e]){s[u]||(s[u]=[]);for(var d in n[e][u]){var l=n[e][u][d];if(l.instreamId.match(/CC\d/)&&(s[u].push(a["default"].mergeOptions({id:d},l)),"undefined"==typeof o[d])){var f=i.addRemoteTextTrack({id:l.instreamId,kind:"captions",enabled:!1,language:l.language,label:d},!1).track;o[d]=f}}}}};i.initialize=g;var y=function(e,t){return function(i){var n=t.masterPlaylistLoader,r=t.mediaTypes[e].groups,a=n.media();if(!a)return null;var s=null;return a.attributes[e]&&(s=r[a.attributes[e]]),s=s||r.main,void 0===i?s:null===i?null:s.filter(function(e){return e.id===i.id})[0]||null}};i.activeGroup=y;var _={AUDIO:function(e,t){return function(){var i=t.mediaTypes[e].tracks;for(var n in i)if(i[n].enabled)return i[n];return null}},SUBTITLES:function(e,t){return function(){var i=t.mediaTypes[e].tracks;for(var n in i)if("showing"===i[n].mode)return i[n];return null}}};i.activeTrack=_;var v=function(e){["AUDIO","SUBTITLES","CLOSED-CAPTIONS"].forEach(function(t){g[t](t,e)});var t=e.mediaTypes,i=e.masterPlaylistLoader,n=e.tech,r=e.hls;["AUDIO","SUBTITLES"].forEach(function(i){t[i].activeGroup=y(i,e),t[i].activeTrack=_[i](i,e),t[i].onGroupChanged=c(i,e),t[i].onTrackChanged=h(i,e)});var a=t.AUDIO.activeGroup(),s=(a.filter(function(e){return e["default"]})[0]||a[0]).id;t.AUDIO.tracks[s].enabled=!0,t.AUDIO.onTrackChanged(),i.on("mediachange",function(){["AUDIO","SUBTITLES"].forEach(function(e){return t[e].onGroupChanged()})});var o=function(){t.AUDIO.onTrackChanged(),n.trigger({type:"usage",name:"hls-audio-change"})};n.audioTracks().addEventListener("change",o),n.remoteTextTracks().addEventListener("change",t.SUBTITLES.onTrackChanged),r.on("dispose",function(){n.audioTracks().removeEventListener("change",o),n.remoteTextTracks().removeEventListener("change",t.SUBTITLES.onTrackChanged)}),n.clearTracks("audio");for(var u in t.AUDIO.tracks)n.audioTracks().addTrack(t.AUDIO.tracks[u])};i.setupMediaGroups=v;var b=function(){var e={};return["AUDIO","SUBTITLES","CLOSED-CAPTIONS"].forEach(function(t){e[t]={groups:{},tracks:{},activePlaylistLoader:null,activeGroup:u,activeTrack:u,onGroupChanged:u,onTrackChanged:u}}),e};i.createMediaTypes=b}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(e,t,i){(function(t){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,r=function(e){return e&&e.__esModule?e:{"default":e}}(n),a=e(2),s={FAILURE:2,TIMEOUT:-101,ABORTED:-102};i.REQUEST_ERRORS=s;var o=function(e){var t=(undefined,undefined);return t=e.offset+e.length-1,"bytes="+e.offset+"-"+t},u=function(e){var t={};return e.byterange&&(t.Range=o(e.byterange)),t},d=function(e){e.forEach(function(e){e.abort()})},l=function(e){return{bandwidth:e.bandwidth,bytesReceived:e.bytesReceived||0,roundTripTime:e.roundTripTime||0}},f=function(e){var t=e.target,i=Date.now()-t.requestTime,n={bandwidth:Infinity,bytesReceived:0,roundTripTime:i||0};return n.bytesReceived=e.loaded,n.bandwidth=Math.floor(n.bytesReceived/n.roundTripTime*8*1e3),n},c=function(e,t){return t.timedout?{status:t.status,message:"HLS request timed-out at URL: "+t.uri,code:s.TIMEOUT,xhr:t}:t.aborted?{status:t.status,message:"HLS request aborted at URL: "+t.uri,code:s.ABORTED,xhr:t}:e?{status:t.status,message:"HLS request errored at URL: "+t.uri,code:s.FAILURE,xhr:t}:null},h=function(e,t){return function(i,n){var r=n.response,a=c(i,n);if(a)return t(a,e);if(16!==r.byteLength)return t({status:n.status,message:"Invalid HLS key at URL: "+n.uri,code:s.FAILURE,xhr:n},e);var o=new DataView(r);return e.key.bytes=new Uint32Array([o.getUint32(0),o.getUint32(4),o.getUint32(8),o.getUint32(12)]),t(null,e)}},p=function(e,t){return function(i,n){var r=n.response,a=c(i,n);return a?t(a,e):0===r.byteLength?t({status:n.status,message:"Empty HLS segment content at URL: "+n.uri,code:s.FAILURE,xhr:n},e):(e.map.bytes=new Uint8Array(n.response),t(null,e))}},m=function(e,t){return function(i,n){var r=n.response,a=c(i,n);return a?t(a,e):0===r.byteLength?t({status:n.status,message:"Empty HLS segment content at URL: "+n.uri,code:s.FAILURE,xhr:n},e):(e.stats=l(n),e.key?e.encryptedBytes=new Uint8Array(n.response):e.bytes=new Uint8Array(n.response),t(null,e))}},g=function(e,t,i){var n=function r(n){if(n.data.source===t.requestId){e.removeEventListener("message",r);var a=n.data.decrypted;return t.bytes=new Uint8Array(a.bytes,a.byteOffset,a.byteLength),i(null,t)}};e.addEventListener("message",n),e.postMessage((0,a.createTransferableMessage)({source:t.requestId,encrypted:t.encryptedBytes,key:t.key.bytes,iv:t.key.iv}),[t.encryptedBytes.buffer,t.key.bytes.buffer])},y=function(e){return e.reduce(function(e,t){return t.code>e.code?t:e})},_=function(e,t,i){var n=[],r=0;return function(a,s){if(a&&(d(e),n.push(a)),(r+=1)===e.length){if(s.endOfAllRequests=Date.now(),n.length>0){var o=y(n);return i(o,s)}return s.encryptedBytes?g(t,s,i):i(null,s)}}},v=function(e,t){return function(i){return e.stats=r["default"].mergeOptions(e.stats,f(i)),!e.stats.firstBytesReceivedAt&&e.stats.bytesReceived&&(e.stats.firstBytesReceivedAt=Date.now()),t(i,e)}},b=function(e,t,i,n,a,s){var o=[],l=_(o,i,s);if(n.key){var f=r["default"].mergeOptions(t,{uri:n.key.resolvedUri,responseType:"arraybuffer"}),c=h(n,l),g=e(f,c);o.push(g)}if(n.map&&!n.map.bytes){var y=r["default"].mergeOptions(t,{uri:n.map.resolvedUri,responseType:"arraybuffer",headers:u(n.map)}),b=p(n,l),T=e(y,b);o.push(T)}var S=r["default"].mergeOptions(t,{uri:n.resolvedUri,responseType:"arraybuffer",headers:u(n)}),w=m(n,l),k=e(S,w);return k.addEventListener("progress",v(n,a)),o.push(k),function(){return d(o)}};i.mediaSegmentRequest=b}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],8:[function(e,t,i){(function(n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}
-Object.defineProperty(i,"__esModule",{value:!0});var s=function(){function e(e,t){for(var i=0;i")),this.logger_("initialize");var n=function(){return i.monitorCurrentTime_()},r=function(){return i.techWaiting_()},s=function(){return i.cancelTimer_()},o=function(){return i.fixesBadSeeks_()};this.tech_.on("seekablechanged",o),this.tech_.on("waiting",r),this.tech_.on(h,s),this.tech_.on("canplay",n),this.dispose=function(){i.logger_("dispose"),i.tech_.off("seekablechanged",o),i.tech_.off("waiting",r),i.tech_.off(h,s),i.tech_.off("canplay",n),i.checkCurrentTimeTimeout_&&u["default"].clearTimeout(i.checkCurrentTimeTimeout_),i.cancelTimer_()}}return s(e,[{key:"monitorCurrentTime_",value:function(){this.checkCurrentTime_(),this.checkCurrentTimeTimeout_&&u["default"].clearTimeout(this.checkCurrentTimeTimeout_),this.checkCurrentTimeTimeout_=u["default"].setTimeout(this.monitorCurrentTime_.bind(this),250)}},{key:"checkCurrentTime_",value:function(){if(this.tech_.seeking()&&this.fixesBadSeeks_())return this.consecutiveUpdates=0,void(this.lastRecordedTime=this.tech_.currentTime());if(!this.tech_.paused()&&!this.tech_.seeking()){var e=this.tech_.currentTime(),t=this.tech_.buffered();if(this.lastRecordedTime===e&&(!t.length||e+l["default"].SAFE_TIME_DELTA>=t.end(t.length-1)))return this.techWaiting_();this.consecutiveUpdates>=5&&e===this.lastRecordedTime?(this.consecutiveUpdates++,this.waiting_()):e===this.lastRecordedTime?this.consecutiveUpdates++:(this.consecutiveUpdates=0,this.lastRecordedTime=e)}}},{key:"cancelTimer_",value:function(){this.consecutiveUpdates=0,this.timer_&&(this.logger_("cancelTimer_"),clearTimeout(this.timer_)),this.timer_=null}},{key:"fixesBadSeeks_",value:function(){var e=this.tech_.seeking(),t=this.seekable(),i=this.tech_.currentTime(),n=undefined;if(e&&this.afterSeekableWindow_(t,i)){n=t.end(t.length-1)}if(e&&this.beforeSeekableWindow_(t,i)){n=t.start(0)+l["default"].SAFE_TIME_DELTA}return void 0!==n&&(this.logger_("Trying to seek outside of seekable at time "+i+" with seekable range "+l["default"].printableRange(t)+". Seeking to "+n+"."),this.tech_.setCurrentTime(n),!0)}},{key:"waiting_",value:function(){if(!this.techWaiting_()){var e=this.tech_.currentTime(),t=this.tech_.buffered(),i=l["default"].findRange(t,e);return i.length&&e+3<=i.end(0)?(this.cancelTimer_(),this.tech_.setCurrentTime(e),this.logger_("Stopped at "+e+" while inside a buffered region ["+i.start(0)+" -> "+i.end(0)+"]. Attempting to resume playback by seeking to the current time."),void this.tech_.trigger({type:"usage",name:"hls-unknown-waiting"})):void 0}}},{key:"techWaiting_",value:function(){var e=this.seekable(),t=this.tech_.currentTime();if(this.tech_.seeking()&&this.fixesBadSeeks_())return!0;if(this.tech_.seeking()||null!==this.timer_)return!0;if(this.beforeSeekableWindow_(e,t)){var i=e.end(e.length-1);return this.logger_("Fell out of live window at time "+t+". Seeking to live point (seekable end) "+i),this.cancelTimer_(),this.tech_.setCurrentTime(i),this.tech_.trigger({type:"usage",name:"hls-live-resync"}),!0}var n=this.tech_.buffered(),r=l["default"].findNextRange(n,t);if(this.videoUnderflow_(r,n,t))return this.cancelTimer_(),this.tech_.setCurrentTime(t),this.tech_.trigger({type:"usage",name:"hls-video-underflow"}),!0;if(r.length>0){var a=r.start(0)-t;return this.logger_("Stopped at "+t+", setting timer for "+a+", seeking to "+r.start(0)),this.timer_=setTimeout(this.skipTheGap_.bind(this),1e3*a,t),!0}return!1}},{key:"afterSeekableWindow_",value:function(e,t){return!!e.length&&t>e.end(e.length-1)+l["default"].SAFE_TIME_DELTA}},{key:"beforeSeekableWindow_",value:function(e,t){return!!(e.length&&e.start(0)>0&&t2)return{start:r,end:a}}return null}},{key:"logger_",value:function(){}}]),e}();i["default"]=p,t.exports=i["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],9:[function(e,t,i){(function(t){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(i,"__esModule",{value:!0});var s=function(){function e(e,t){for(var i=0;i=500?4:2},this.trigger("error")}},{key:"haveMetadata",value:function(e,t){var i=this;this.request=null,this.state="HAVE_METADATA";var n=new c["default"].Parser;n.push(e.responseText),n.end(),n.manifest.uri=t,n.manifest.attributes=n.manifest.attributes||{};var r=y(this.master,n.manifest);this.targetDuration=n.manifest.targetDuration,r?(this.master=r,this.media_=this.master.playlists[n.manifest.uri]):this.trigger("playlistunchanged"),this.media().endList||(p["default"].clearTimeout(this.mediaUpdateTimeout),this.mediaUpdateTimeout=p["default"].setTimeout(function(){i.trigger("mediaupdatetimeout")},b(this.media(),!!r))),this.trigger("loadedplaylist")}},{key:"dispose",value:function(){this.stopRequest(),p["default"].clearTimeout(this.mediaUpdateTimeout)}},{key:"stopRequest",value:function(){if(this.request){var e=this.request;this.request=null,e.onreadystatechange=null,e.abort()}}},{key:"media",value:function(e){var t=this;if(!e)return this.media_;if("HAVE_NOTHING"===this.state)throw new Error("Cannot switch media playlist from "+this.state);var i=this.state;if("string"==typeof e){if(!this.master.playlists[e])throw new Error("Unknown playlist URI: "+e);e=this.master.playlists[e]}var n=!this.media_||e.uri!==this.media_.uri;if(this.master.playlists[e.uri].endList)return this.request&&(this.request.onreadystatechange=null,this.request.abort(),this.request=null),this.state="HAVE_METADATA",this.media_=e,void(n&&(this.trigger("mediachanging"),this.trigger("mediachange")));if(n){if(this.state="SWITCHING_MEDIA",this.request){if(e.resolvedUri===this.request.url)return;this.request.onreadystatechange=null,this.request.abort(),this.request=null}this.media_&&this.trigger("mediachanging"),this.request=this.hls_.xhr({uri:e.resolvedUri,withCredentials:this.withCredentials},function(n,r){if(t.request){if(e.resolvedUri=t.resolveManifestRedirect(e.resolvedUri,r),n)return t.playlistRequestError(t.request,e.uri,i);t.haveMetadata(r,e.uri),"HAVE_MASTER"===i?t.trigger("loadedmetadata"):t.trigger("mediachange")}})}}},{key:"resolveManifestRedirect",value:function(e,t){return this.handleManifestRedirects&&t.responseURL&&e!==t.responseURL?t.responseURL:e}},{key:"pause",value:function(){this.stopRequest(),p["default"].clearTimeout(this.mediaUpdateTimeout),"HAVE_NOTHING"===this.state&&(this.started=!1),"SWITCHING_MEDIA"===this.state?this.media_?this.state="HAVE_METADATA":this.state="HAVE_MASTER":"HAVE_CURRENT_METADATA"===this.state&&(this.state="HAVE_METADATA")}},{key:"load",value:function(e){var t=this;p["default"].clearTimeout(this.mediaUpdateTimeout);var i=this.media();if(e){var n=i?i.targetDuration/2*1e3:5e3;return void(this.mediaUpdateTimeout=p["default"].setTimeout(function(){return t.load()},n))}if(!this.started)return void this.start();i&&!i.endList?this.trigger("mediaupdatetimeout"):this.trigger("loadedplaylist")}},{key:"start",value:function(){var e=this;this.started=!0,this.request=this.hls_.xhr({uri:this.srcUrl,withCredentials:this.withCredentials},function(t,i){if(e.request){if(e.request=null,t)return e.error={status:i.status,message:"HLS playlist request error at URL: "+e.srcUrl,responseText:i.responseText,code:2},"HAVE_NOTHING"===e.state&&(e.started=!1),e.trigger("error");var n=new c["default"].Parser;return n.push(i.responseText),(n.end(),e.state="HAVE_MASTER",e.srcUrl=e.resolveManifestRedirect(e.srcUrl,i),n.manifest.uri=e.srcUrl,n.manifest.playlists)?(e.master=n.manifest,_(e.master),v(e.master),e.trigger("loadedplaylist"),void(e.request||e.media(n.manifest.playlists[0]))):(e.master={mediaGroups:{AUDIO:{},VIDEO:{},"CLOSED-CAPTIONS":{},SUBTITLES:{}},uri:p["default"].location.href,playlists:[{uri:e.srcUrl,resolvedUri:e.srcUrl,attributes:{}}]},e.master.playlists[e.srcUrl]=e.master.playlists[0],e.haveMetadata(i,e.srcUrl),e.trigger("loadedmetadata"))}})}}]),t}(l.EventTarget);i["default"]=T}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],10:[function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0});var r=e(3),a=n(r),s=e(11),o=n(s),u=e(19),d=function(e,t){var i=undefined;return e?(i=window.getComputedStyle(e),i?i[t]:""):""},l=function(e,t){var i=e.slice();e.sort(function(e,n){var r=t(e,n);return 0===r?i.indexOf(e)-i.indexOf(n):r})},f=function(e,t){var i=undefined,n=undefined;return e.attributes.BANDWIDTH&&(i=e.attributes.BANDWIDTH),i=i||window.Number.MAX_VALUE,t.attributes.BANDWIDTH&&(n=t.attributes.BANDWIDTH),n=n||window.Number.MAX_VALUE,i-n};i.comparePlaylistBandwidth=f;var c=function(e,t){var i=undefined,n=undefined;return e.attributes.RESOLUTION&&e.attributes.RESOLUTION.width&&(i=e.attributes.RESOLUTION.width),i=i||window.Number.MAX_VALUE,t.attributes.RESOLUTION&&t.attributes.RESOLUTION.width&&(n=t.attributes.RESOLUTION.width),n=n||window.Number.MAX_VALUE,i===n&&e.attributes.BANDWIDTH&&t.attributes.BANDWIDTH?e.attributes.BANDWIDTH-t.attributes.BANDWIDTH:i-n};i.comparePlaylistResolution=c;var h=function(e,t,i,n){var r=e.playlists.map(function(e){var t=undefined,i=undefined,n=undefined;return t=e.attributes.RESOLUTION&&e.attributes.RESOLUTION.width,i=e.attributes.RESOLUTION&&e.attributes.RESOLUTION.height,n=e.attributes.BANDWIDTH,n=n||window.Number.MAX_VALUE,{bandwidth:n,width:t,height:i,playlist:e}});l(r,function(e,t){return e.bandwidth-t.bandwidth}),r=r.filter(function(e){return!o["default"].isIncompatible(e.playlist)});var s=r.filter(function(e){return o["default"].isEnabled(e.playlist)});s.length||(s=r.filter(function(e){return!o["default"].isDisabled(e.playlist)}));var u=s.filter(function(e){return e.bandwidth*a["default"].BANDWIDTH_VARIANCEi||e.height>n}),g=m.filter(function(e){return e.width===m[0].width&&e.height===m[0].height}),d=g[g.length-1],y=g.filter(function(e){return e.bandwidth===d.bandwidth})[0]);var _=y||p||f||s[0]||r[0];return _?_.playlist:null};i.simpleSelector=h;var p=function(){return h(this.playlists.master,this.systemBandwidth,parseInt(d(this.tech_.el(),"width"),10),parseInt(d(this.tech_.el(),"height"),10))};i.lastBandwidthSelector=p;var m=function(e){var t=-1;if(e<0||e>1)throw new Error("Moving average bandwidth decay must be between 0 and 1.");return function(){return t<0&&(t=this.systemBandwidth),t=e*this.systemBandwidth+(1-e)*t,h(this.playlists.master,t,parseInt(d(this.tech_.el(),"width"),10),parseInt(d(this.tech_.el(),"height"),10))}};i.movingAverageBandwidthSelector=m;var g=function(e){var t=e.master,i=e.currentTime,n=e.bandwidth,r=e.duration,a=e.segmentDuration,s=e.timeUntilRebuffer,u=e.currentTimeline,d=e.syncController,c=t.playlists.filter(function(e){return!o["default"].isIncompatible(e)}),h=c.filter(o["default"].isEnabled);h.length||(h=c.filter(function(e){return!o["default"].isDisabled(e)}));var p=h.filter(o["default"].hasAttribute.bind(null,"BANDWIDTH")),m=p.map(function(e){var t=d.getSyncPoint(e,r,u,i),l=t?1:2;return{playlist:e,rebufferingImpact:o["default"].estimateSegmentRequestTime(a,n,e)*l-s}}),g=m.filter(function(e){return e.rebufferingImpact<=0});return l(g,function(e,t){return f(t.playlist,e.playlist)}),g.length?g[0]:(l(m,function(e,t){return e.rebufferingImpact-t.rebufferingImpact}),m[0]||null)};i.minRebufferMaxBandwidthSelector=g;var y=function(){var e=this.playlists.master.playlists.filter(o["default"].isEnabled);return l(e,function(e,t){return f(e,t)}),e.filter(function(e){return(0,u.parseCodecs)(e.attributes.CODECS).videoCodec})[0]||null};i.lowestBitrateCompatibleVariantSelector=y},{}],11:[function(e,t,i){(function(t){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n="undefined"!=typeof window?window.videojs:void 0!==t?t.videojs:null,r=e(32),a=function(e){return e&&e.__esModule?e:{"default":e}}(r),s=function(e,t){var i=0,n=t-e.mediaSequence,r=e.segments[n];if(r){if("undefined"!=typeof r.start)return{result:r.start,precise:!0};if("undefined"!=typeof r.end)return{result:r.end-r.duration,precise:!0}}for(;n--;){if(r=e.segments[n],"undefined"!=typeof r.end)return{result:i+r.end,precise:!0};if(i+=r.duration,"undefined"!=typeof r.start)return{result:i+r.start,precise:!0}}return{result:i,precise:!1}},o=function(e,t){for(var i=0,n=undefined,r=t-e.mediaSequence;ri){var r=[i,t];t=r[0],i=r[1]}if(t<0){for(var a=t;a=n););return Math.max(0,t)};i.safeLiveIndex=f;var c=function(e,t,i){if(!e||!e.segments)return null;if(e.endList)return d(e);if(null===t)return null;t=t||0;var n=i?f(e):e.segments.length;return u(e,e.mediaSequence+n,t)};i.playlistEnd=c;var h=function(e,t){var i=t||0,r=c(e,t,!0);return null===r?(0,n.createTimeRange)():(0,n.createTimeRange)(i,r)};i.seekable=h;var p=function(e){return e-Math.floor(e)==0},m=function(e,t){if(p(t))return t+.1*e;for(var i=t.toString().split(".")[1].length,n=1;n<=i;n++){var r=Math.pow(10,n),a=t*r;if(p(a)||n===i)return(a+e)/r}},g=m.bind(null,1),y=m.bind(null,-1),_=function(e,t,i,n){var r=undefined,a=undefined,s=e.segments.length,o=t-n;if(o<0){if(i>0)for(r=i-1;r>=0;r--)if(a=e.segments[r],(o+=y(a.duration))>0)return{mediaIndex:r,startTime:n-l(e,i,r)};return{mediaIndex:0,startTime:t}}if(i<0){for(r=i;r<0;r++)if((o-=e.targetDuration)<0)return{mediaIndex:0,startTime:t};i=0}for(r=i;rDate.now()};i.isBlacklisted=v;var b=function(e){return e.excludeUntil&&e.excludeUntil===Infinity};i.isIncompatible=b;var T=function(e){var t=v(e);return!e.disabled&&!t};i.isEnabled=T;var S=function(e){return e.disabled};i.isDisabled=S;var w=function(e){for(var t=0;t=t})},d=function(e,t){return o(e,function(e){return e-1/30>=t})},l=function(e){if(e.length<2)return a["default"].createTimeRanges();for(var t=[],i=1;i=r};if(e)for(i=0;i "+e.end(i));return t.join(", ")},g=function(e,t){var i=arguments.length<=2||arguments[2]===undefined?1:arguments[2];return((e.length?e.end(e.length-1):0)-t)/i};i["default"]={findRange:u,findNextRange:d,findGaps:l,findSoleUncommonTimeRangesEnd:f,getSegmentBufferedPercent:p,TIME_FUDGE_FACTOR:1/30,SAFE_TIME_DELTA:.1,printableRange:m,timeUntilRebuffer:g},t.exports=i["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],13:[function(e,t,i){(function(e){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n="undefined"!=typeof window?window.videojs:void 0!==e?e.videojs:null,r=function(e){return e&&e.__esModule?e:{"default":e}}(n),a={errorInterval:30,getSource:function(e){return e(this.tech({IWillNotUseThisInPlugins:!0}).currentSource_)}},s=function u(e,t){var i=0,n=0,s=r["default"].mergeOptions(a,t);e.ready(function(){e.trigger({type:"usage",name:"hls-error-reload-initialized"})});var o=function(){n&&e.currentTime(n)},d=function(t){null!==t&&t!==undefined&&(n=e.duration()!==Infinity&&e.currentTime()||0,e.one("loadedmetadata",o),e.src(t),e.trigger({type:"usage",name:"hls-error-reload"}),e.play())},l=function(){return Date.now()-i<1e3*s.errorInterval?void e.trigger({type:"usage",name:"hls-error-reload-canceled"}):s.getSource&&"function"==typeof s.getSource?(i=Date.now(),s.getSource.call(e,d)):void r["default"].log.error("ERROR: reloadSourceOnError - The option getSource must be a function!")},f=function h(){e.off("loadedmetadata",o),e.off("error",l),e.off("dispose",h)},c=function(t){f(),u(e,t)};e.on("error",l),e.on("dispose",f),e.reloadSourceOnError=c},o=function(e){s(this,e)};i["default"]=o,t.exports=i["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],14:[function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var r=e(11),a=function(e,t,i){return function(n){var a=e.master.playlists[t],s=(0,r.isIncompatible)(a),o=(0,r.isEnabled)(a);return void 0===n?o:(n?delete a.disabled:a.disabled=!0,n===o||s||(i(),n?e.trigger("renditionenabled"):e.trigger("renditiondisabled")),n)}},s=function u(e,t,i){n(this,u);var r=e.masterPlaylistController_.fastQualityChange_.bind(e.masterPlaylistController_);if(t.attributes.RESOLUTION){var s=t.attributes.RESOLUTION;this.width=s.width,this.height=s.height}this.bandwidth=t.attributes.BANDWIDTH,this.id=i,this.enabled=a(e.playlists,t.uri,r)},o=function(e){var t=e.playlists;e.representations=function(){return t.master.playlists.filter(function(e){return!(0,r.isIncompatible)(e)}).map(function(t,i){return new s(e,t,t.uri)})}};i["default"]=o,t.exports=i["default"]},{}],15:[function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(i,"__esModule",{value:!0});var r=e(63),a=n(r),s=e(32),o=n(s),u=function(e,t){return/^[a-z]+:/i.test(t)?t:(/\/\//i.test(e)||(e=a["default"].buildAbsoluteURL(o["default"].location.href,e)),a["default"].buildAbsoluteURL(e,t))};i["default"]=u,t.exports=i["default"]},{}],16:[function(e,t,i){(function(t){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(i,"__esModule",{value:!0});var s=function(){function e(e,t){for(var i=0;i0&&e.start(0)"))}return a(t,e),s(t,[{key:"resetStats_",value:function(){this.mediaBytesTransferred=0,this.mediaRequests=0,this.mediaRequestsAborted=0,this.mediaRequestsTimedout=0,this.mediaRequestsErrored=0,this.mediaTransferDuration=0,this.mediaSecondsLoaded=0}},{key:"dispose",value:function(){this.state="DISPOSED",this.pause(),this.abort_(),this.sourceUpdater_&&this.sourceUpdater_.dispose(),this.resetStats_()}},{key:"abort",value:function(){if("WAITING"!==this.state)return void(this.pendingSegment_&&(this.pendingSegment_=null));this.abort_(),this.state="READY",this.paused()||this.monitorBuffer_()}},{key:"abort_",value:function(){this.pendingSegment_&&this.pendingSegment_.abortRequests(),this.pendingSegment_=null}},{key:"error",value:function(e){return void 0!==e&&(this.error_=e),this.pendingSegment_=null,this.error_}},{key:"endOfStream",value:function(){this.ended_=!0,this.pause(),this.trigger("ended")}},{key:"buffered_",value:function(){return this.sourceUpdater_?this.sourceUpdater_.buffered():f["default"].createTimeRanges()}},{key:"initSegment",value:function(e){var t=!(arguments.length<=1||arguments[1]===undefined)&&arguments[1];if(!e)return null;var i=(0,b.initSegmentId)(e),n=this.initSegments_[i];return t&&!n&&e.bytes&&(this.initSegments_[i]=n={resolvedUri:e.resolvedUri,byterange:e.byterange,bytes:e.bytes}),n||e}},{
-key:"couldBeginLoading_",value:function(){return this.playlist_&&(this.sourceUpdater_||this.mimeType_&&"INIT"===this.state)&&!this.paused()}},{key:"load",value:function(){if(this.monitorBuffer_(),this.playlist_){if(this.syncController_.setDateTimeMapping(this.playlist_),"INIT"===this.state&&this.couldBeginLoading_())return this.init_();!this.couldBeginLoading_()||"READY"!==this.state&&"INIT"!==this.state||(this.state="READY")}}},{key:"init_",value:function(){return this.state="READY",this.sourceUpdater_=new h["default"](this.mediaSource_,this.mimeType_),this.resetEverything(),this.monitorBuffer_()}},{key:"playlist",value:function(e){var t=arguments.length<=1||arguments[1]===undefined?{}:arguments[1];if(e){var i=this.playlist_,n=this.pendingSegment_;if(this.playlist_=e,this.xhrOptions_=t,this.hasPlayed_()||(e.syncInfo={mediaSequence:e.mediaSequence,time:0}),this.trigger("syncinfoupdate"),"INIT"===this.state&&this.couldBeginLoading_())return this.init_();if(!i||i.uri!==e.uri)return void(null!==this.mediaIndex&&this.resyncLoader());var r=e.mediaSequence-i.mediaSequence;this.logger_("mediaSequenceDiff",r),null!==this.mediaIndex&&(this.mediaIndex-=r),n&&(n.mediaIndex-=r,n.mediaIndex>=0&&(n.segment=e.segments[n.mediaIndex])),this.syncController_.saveExpiredSegmentInfo(i,e)}}},{key:"pause",value:function(){this.checkBufferTimeout_&&(y["default"].clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=null)}},{key:"paused",value:function(){return null===this.checkBufferTimeout_}},{key:"mimeType",value:function(e){this.mimeType_||(this.mimeType_=e,"INIT"===this.state&&this.couldBeginLoading_()&&this.init_())}},{key:"resetEverything",value:function(){this.ended_=!1,this.resetLoader(),this.remove(0,this.duration_()),this.trigger("reseteverything")}},{key:"resetLoader",value:function(){this.fetchAtBuffer_=!1,this.resyncLoader()}},{key:"resyncLoader",value:function(){this.mediaIndex=null,this.syncPoint_=null,this.abort()}},{key:"remove",value:function(e,t){this.sourceUpdater_&&this.sourceUpdater_.remove(e,t),(0,v["default"])(e,t,this.segmentMetadataTrack_)}},{key:"monitorBuffer_",value:function(){this.checkBufferTimeout_&&y["default"].clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=y["default"].setTimeout(this.monitorBufferTick_.bind(this),1)}},{key:"monitorBufferTick_",value:function(){"READY"===this.state&&this.fillBuffer_(),this.checkBufferTimeout_&&y["default"].clearTimeout(this.checkBufferTimeout_),this.checkBufferTimeout_=y["default"].setTimeout(this.monitorBufferTick_.bind(this),500)}},{key:"fillBuffer_",value:function(){if(!this.sourceUpdater_.updating()){this.syncPoint_||(this.syncPoint_=this.syncController_.getSyncPoint(this.playlist_,this.duration_(),this.currentTimeline_,this.currentTime_()));var e=this.checkBuffer_(this.buffered_(),this.playlist_,this.mediaIndex,this.hasPlayed_(),this.currentTime_(),this.syncPoint_);if(e){if(k(this.playlist_,this.mediaSource_,e.mediaIndex))return void this.endOfStream();(e.mediaIndex!==this.playlist_.segments.length-1||"ended"!==this.mediaSource_.readyState||this.seeking_())&&((e.timeline!==this.currentTimeline_||null!==e.startOfSegment&&e.startOfSegment=this.goalBufferLength_())return null;if(!n&&u>=1)return null;if(this.logger_("checkBuffer_","mediaIndex:",i,"hasPlayed:",n,"currentTime:",r,"syncPoint:",a,"fetchAtBuffer:",this.fetchAtBuffer_,"bufferedTime:",u),null===a)return i=this.getSyncSegmentCandidate_(t),this.logger_("getSync","mediaIndex:",i),this.generateSegmentInfo_(t,i,null,!0);if(null!==i){this.logger_("walkForward","mediaIndex:",i+1);var l=t.segments[i];return o=l&&l.end?l.end:s,this.generateSegmentInfo_(t,i+1,o,!1)}if(this.fetchAtBuffer_){var f=d["default"].getMediaInfoForTime(t,s,a.segmentIndex,a.time);i=f.mediaIndex,o=f.startTime}else{var f=d["default"].getMediaInfoForTime(t,r,a.segmentIndex,a.time);i=f.mediaIndex,o=f.startTime}return this.logger_("getMediaIndexForTime","mediaIndex:",i,"startOfSegment:",o),this.generateSegmentInfo_(t,i,o,!1)}},{key:"getSyncSegmentCandidate_",value:function(e){var t=this;if(-1===this.currentTimeline_)return 0;var i=e.segments.map(function(e,t){return{timeline:e.timeline,segmentIndex:t}}).filter(function(e){return e.timeline===t.currentTimeline_});return i.length?i[Math.min(i.length-1,1)].segmentIndex:Math.max(e.segments.length-1,0)}},{key:"generateSegmentInfo_",value:function(e,t,i,n){if(t<0||t>=e.segments.length)return null;var r=e.segments[t];return{requestId:"segment-loader-"+Math.random(),uri:r.resolvedUri,mediaIndex:t,isSyncRequest:n,startOfSegment:i,playlist:e,bytes:null,encryptedBytes:null,timestampOffset:null,timeline:r.timeline,duration:r.duration,segment:r}}},{key:"abortRequestEarly_",value:function(e){if(this.hls_.tech_.paused()||!this.xhrOptions_.timeout||!this.playlist_.attributes.BANDWIDTH)return!1;if(Date.now()-(e.firstBytesReceivedAt||Date.now())<1e3)return!1;var t=this.currentTime_(),i=e.bandwidth,n=this.pendingSegment_.duration,r=d["default"].estimateSegmentRequestTime(n,i,this.playlist_,e.bytesReceived),a=(0,S.timeUntilRebuffer)(this.buffered_(),t,this.hls_.tech_.playbackRate())-1;if(r<=a)return!1;var s=(0,w.minRebufferMaxBandwidthSelector)({master:this.hls_.playlists.master,currentTime:t,bandwidth:i,duration:this.duration_(),segmentDuration:n,timeUntilRebuffer:a,currentTimeline:this.currentTimeline_,syncController:this.syncController_});if(s){var o=r-a,u=o-s.rebufferingImpact,l=.5;return a<=S.TIME_FUDGE_FACTOR&&(l=1),!s.playlist||s.playlist.uri===this.playlist_.uri||u0&&this.remove(0,t)}},{key:"createSimplifiedSegmentObj_",value:function(e){var t=e.segment,i={resolvedUri:t.resolvedUri,byterange:t.byterange,requestId:e.requestId};if(t.key){var n=t.key.iv||new Uint32Array([0,0,0,e.mediaIndex+e.playlist.mediaSequence]);i.key={resolvedUri:t.key.resolvedUri,iv:n}}return t.map&&(i.map=this.initSegment(t.map)),i}},{key:"segmentRequestFinished_",value:function(e,t){if(this.mediaRequests+=1,t.stats&&(this.mediaBytesTransferred+=t.stats.bytesReceived,this.mediaTransferDuration+=t.stats.roundTripTime),!this.pendingSegment_)return void(this.mediaRequestsAborted+=1);if(t.requestId===this.pendingSegment_.requestId){if(e)return this.pendingSegment_=null,this.state="READY",e.code===T.REQUEST_ERRORS.ABORTED?void(this.mediaRequestsAborted+=1):(this.pause(),e.code===T.REQUEST_ERRORS.TIMEOUT?(this.mediaRequestsTimedout+=1,this.bandwidth=1,this.roundTrip=NaN,void this.trigger("bandwidthupdate")):(this.mediaRequestsErrored+=1,this.error(e),void this.trigger("error")));this.bandwidth=t.stats.bandwidth,this.roundTrip=t.stats.roundTripTime,t.map&&(t.map=this.initSegment(t.map,!0)),this.processSegmentResponse_(t)}}},{key:"processSegmentResponse_",value:function(e){var t=this.pendingSegment_;t.bytes=e.bytes,e.map&&(t.segment.map.bytes=e.map.bytes),t.endOfAllRequests=e.endOfAllRequests,this.handleSegment_()}},{key:"handleSegment_",value:function(){var e=this;if(!this.pendingSegment_)return void(this.state="READY");var t=this.pendingSegment_,i=t.segment,n=this.syncController_.probeSegmentInfo(t);"undefined"==typeof this.startingMedia_&&n&&(n.containsAudio||n.containsVideo)&&(this.startingMedia_={containsAudio:n.containsAudio,containsVideo:n.containsVideo});var r=E(this.loaderType_,this.startingMedia_,n);if(r)return this.error({message:r,blacklistDuration:Infinity}),void this.trigger("error");if(t.isSyncRequest)return this.trigger("syncinfoupdate"),this.pendingSegment_=null,void(this.state="READY");null!==t.timestampOffset&&t.timestampOffset!==this.sourceUpdater_.timestampOffset()&&(this.sourceUpdater_.timestampOffset(t.timestampOffset),this.trigger("timestampoffset"));var a=this.syncController_.mappingForTimeline(t.timeline);null!==a&&this.trigger({type:"segmenttimemapping",mapping:a}),this.state="APPENDING",i.map&&function(){var t=(0,b.initSegmentId)(i.map);if(!e.activeInitSegmentId_||e.activeInitSegmentId_!==t){var n=e.initSegment(i.map);e.sourceUpdater_.appendBuffer(n.bytes,function(){e.activeInitSegmentId_=t})}}(),t.byteLength=t.bytes.byteLength,"number"==typeof i.start&&"number"==typeof i.end?this.mediaSecondsLoaded+=i.end-i.start:this.mediaSecondsLoaded+=i.duration,this.sourceUpdater_.appendBuffer(t.bytes,this.handleUpdateEnd_.bind(this))}},{key:"handleUpdateEnd_",value:function(){if(this.logger_("handleUpdateEnd_","segmentInfo:",this.pendingSegment_),!this.pendingSegment_)return this.state="READY",void(this.paused()||this.monitorBuffer_());var e=this.pendingSegment_,t=e.segment,i=null!==this.mediaIndex;if(this.pendingSegment_=null,this.recordThroughput_(e),this.addSegmentMetadataCue_(e),this.state="READY",this.mediaIndex=e.mediaIndex,this.fetchAtBuffer_=!0,this.currentTimeline_=e.timeline,this.trigger("syncinfoupdate"),t.end&&this.currentTime_()-t.end>3*e.playlist.targetDuration)return void this.resetEverything();i&&this.trigger("bandwidthupdate"),this.trigger("progress"),k(e.playlist,this.mediaSource_,e.mediaIndex+1)&&this.endOfStream(),this.paused()||this.monitorBuffer_()}},{key:"recordThroughput_",value:function(e){var t=this.throughput.rate,i=Date.now()-e.endOfAllRequests+1,n=Math.floor(e.byteLength/i*8*1e3);this.throughput.rate+=(n-t)/++this.throughput.count}},{key:"logger_",value:function(){}},{key:"addSegmentMetadataCue_",value:function(e){if(this.segmentMetadataTrack_){var t=e.segment,i=t.start,n=t.end;if(O(i)&&O(n)){(0,v["default"])(i,n,this.segmentMetadataTrack_);var r=y["default"].WebKitDataCue||y["default"].VTTCue,a={bandwidth:e.playlist.attributes.BANDWIDTH,resolution:e.playlist.attributes.RESOLUTION,codecs:e.playlist.attributes.CODECS,byteLength:e.byteLength,uri:e.uri,timeline:e.timeline,playlist:e.playlist.uri,start:i,end:n},s=JSON.stringify(a),o=new r(i,n,s);o.value=a,this.segmentMetadataTrack_.addCue(o)}}}}]),t}(f["default"].EventTarget);i["default"]=L}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],17:[function(e,t,i){(function(e){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var r=function(){function e(e,t){for(var i=0;i=l)&&(o=l,s={time:d.start,segmentIndex:u})}}return s}},{name:"Discontinuity",run:function(e,t,i,n,r){var a=null;if(r=r||0,t.discontinuityStarts&&t.discontinuityStarts.length)for(var s=null,o=0;o=f)&&(s=f,a={time:l.time,segmentIndex:u})}}return a}},{name:"Playlist",run:function(e,t,i,n,r){if(t.syncInfo){return{time:t.syncInfo.time,segmentIndex:t.syncInfo.mediaSequence-t.mediaSequence}}return null}}];i.syncPointStrategies=p;var m=function(e){function t(){var e=arguments.length<=0||arguments[0]===undefined?{}:arguments[0];r(this,t),o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this),this.inspectCache_=undefined,this.timelines=[],this.discontinuities=[],this.datetimeToDisplayTime=null,e.debug&&(this.logger_=h["default"].log.bind(h["default"],"sync-controller ->"))}return a(t,e),s(t,[{key:"getSyncPoint",value:function(e,t,i,n){var r=this.runStrategies_(e,t,i,n);return r.length?this.selectSyncPoint_(r,{key:"time",value:n}):null}},{key:"getExpiredTime",value:function(e,t){if(!e||!e.segments)return null;var i=this.runStrategies_(e,t,e.discontinuitySequence,0);if(!i.length)return null;var n=this.selectSyncPoint_(i,{key:"segmentIndex",value:0});return n.segmentIndex>0&&(n.time*=-1),Math.abs(n.time+(0,f.sumDurations)(e,n.segmentIndex,0))}},{key:"runStrategies_",value:function(e,t,i,n){for(var r=[],a=0;a:",o))}return r}},{key:"selectSyncPoint_",value:function(e,t){for(var i=e[0].syncPoint,n=Math.abs(e[0].syncPoint[t.key]-t.value),r=e[0].strategy,a=1;a chosen: ",i),i}},{key:"saveExpiredSegmentInfo",value:function(e,t){for(var i=t.mediaSequence-e.mediaSequence,n=i-1;n>=0;n--){var r=e.segments[n];if(r&&"undefined"!=typeof r.start){t.syncInfo={mediaSequence:e.mediaSequence+n,time:r.start},this.logger_("playlist sync:",t.syncInfo),this.trigger("syncinfoupdate");break}}}},{key:"setDateTimeMapping",value:function(e){if(!this.datetimeToDisplayTime&&e.dateTimeObject){var t=e.dateTimeObject.getTime()/1e3;this.datetimeToDisplayTime=-t}}},{key:"reset",value:function(){this.inspectCache_=undefined}},{key:"probeSegmentInfo",value:function(e){var t=e.segment,i=e.playlist,n=undefined;return n=t.map?this.probeMp4Segment_(e):this.probeTsSegment_(e),n&&this.calculateSegmentTimeMapping_(e,n)&&(this.saveDiscontinuitySyncInfo_(e),i.syncInfo||(i.syncInfo={mediaSequence:i.mediaSequence+e.mediaIndex,time:t.start})),n}},{key:"probeMp4Segment_",value:function(e){var t=e.segment,i=d["default"].timescale(t.map.bytes),n=d["default"].startTime(i,e.bytes);return null!==e.timestampOffset&&(e.timestampOffset-=n),{start:n,end:n+t.duration}}},{key:"probeTsSegment_",value:function(e){var t=(0,l.inspect)(e.bytes,this.inspectCache_),i=undefined,n=undefined;return t?(t.video&&2===t.video.length?(this.inspectCache_=t.video[1].dts,i=t.video[0].dtsTime,n=t.video[1].dtsTime):t.audio&&2===t.audio.length&&(this.inspectCache_=t.audio[1].dts,i=t.audio[0].dtsTime,n=t.audio[1].dtsTime),{start:i,end:n,containsVideo:t.video&&2===t.video.length,containsAudio:t.audio&&2===t.audio.length}):null}},{key:"timestampOffsetForTimeline",value:function(e){return"undefined"==typeof this.timelines[e]?null:this.timelines[e].time}},{key:"mappingForTimeline",value:function(e){return"undefined"==typeof this.timelines[e]?null:this.timelines[e].mapping}},{key:"calculateSegmentTimeMapping_",value:function(e,t){var i=e.segment,n=this.timelines[e.timeline];if(null!==e.timestampOffset)this.logger_("tsO:",e.timestampOffset),n={time:e.startOfSegment,mapping:e.startOfSegment-t.start},this.timelines[e.timeline]=n,this.trigger("timestampoffset"),i.start=e.startOfSegment,i.end=t.end+n.mapping;else{if(!n)return!1;i.start=t.start+n.mapping,i.end=t.end+n.mapping}return!0}},{key:"saveDiscontinuitySyncInfo_",value:function(e){var t=e.playlist,i=e.segment;if(i.discontinuity)this.discontinuities[i.timeline]={time:i.start,accuracy:0};else if(t.discontinuityStarts.length)for(var n=0;no){var u=undefined;u=s<0?i.start-(0,f.sumDurations)(t,e.mediaIndex,r):i.end+(0,f.sumDurations)(t,e.mediaIndex+1,r),this.discontinuities[a]={time:u,accuracy:o}}}}},{key:"logger_",value:function(){}}]),t}(h["default"].EventTarget);i["default"]=m}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],19:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n=function(){var e=arguments.length<=0||arguments[0]===undefined?"":arguments[0],t={codecCount:0},i=undefined;return t.codecCount=e.split(",").length,t.codecCount=t.codecCount||2,i=/(^|\s|,)+(avc1)([^ ,]*)/i.exec(e),i&&(t.videoCodec=i[2],t.videoObjectTypeIndicator=i[3]),t.audioProfile=/(^|\s|,)+mp4a.[0-9A-Fa-f]+\.([0-9A-Fa-f]+)/i.exec(e),t.audioProfile=t.audioProfile&&t.audioProfile[2],t};i.parseCodecs=n},{}],20:[function(e,t,i){(function(n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(i,"__esModule",{value:!0});var o=function(){function e(e,t){for(var i=0;i>7))^a]=a;for(s=o=0;!n[s];s^=l||1,o=d[o]||1)for(h=o^o<<1^o<<2^o<<3^o<<4,h=h>>8^255&h^99,n[s]=h,r[h]=s,c=u[f=u[l=u[s]]],m=16843009*c^65537*f^257*l^16843008*s,p=257*u[h]^16843008*h,a=0;a<4;a++)t[a][s]=p=p<<24^p>>>8,i[a][h]=m=m<<24^m>>>8;for(a=0;a<5;a++)t[a]=t[a].slice(0),i[a]=i[a].slice(0);return e},s=null,o=function(){function e(t){n(this,e),s||(s=a()),this._tables=[[s[0][0].slice(),s[0][1].slice(),s[0][2].slice(),s[0][3].slice(),s[0][4].slice()],[s[1][0].slice(),s[1][1].slice(),s[1][2].slice(),s[1][3].slice(),s[1][4].slice()]];var i=undefined,r=undefined,o=undefined,u=undefined,d=undefined,l=this._tables[0][4],f=this._tables[1],c=t.length,h=1;if(4!==c&&6!==c&&8!==c)throw new Error("Invalid aes key size");for(u=t.slice(0),d=[],this._key=[u,d],i=c;i<4*c+28;i++)o=u[i-1],(i%c==0||8===c&&i%c==4)&&(o=l[o>>>24]<<24^l[o>>16&255]<<16^l[o>>8&255]<<8^l[255&o],i%c==0&&(o=o<<8^o>>>24^h<<24,h=h<<1^283*(h>>7))),u[i]=u[i-c]^o;for(r=0;i;r++,i--)o=u[3&r?i:i-4],d[r]=i<=4||r<4?o:f[0][l[o>>>24]]^f[1][l[o>>16&255]]^f[2][l[o>>8&255]]^f[3][l[255&o]]}return r(e,[{key:"decrypt",value:function(e,t,i,n,r,a){var s=this._key[1],o=e^s[0],u=n^s[1],d=i^s[2],l=t^s[3],f=undefined,c=undefined,h=undefined,p=s.length/4-2,m=undefined,g=4,y=this._tables[1],_=y[0],v=y[1],b=y[2],T=y[3],S=y[4];for(m=0;m
>>24]^v[u>>16&255]^b[d>>8&255]^T[255&l]^s[g],c=_[u>>>24]^v[d>>16&255]^b[l>>8&255]^T[255&o]^s[g+1],h=_[d>>>24]^v[l>>16&255]^b[o>>8&255]^T[255&u]^s[g+2],l=_[l>>>24]^v[o>>16&255]^b[u>>8&255]^T[255&d]^s[g+3],g+=4,o=f,u=c,d=h;for(m=0;m<4;m++)r[(3&-m)+a]=S[o>>>24]<<24^S[u>>16&255]<<16^S[d>>8&255]<<8^S[255&l]^s[g++],f=o,o=u,u=d,d=l,l=f}}]),e}();i["default"]=o,t.exports=i["default"]},{}],23:[function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(i,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;i>8|e>>>24},c=function(e,t,i){var n=new Int32Array(e.buffer,e.byteOffset,e.byteLength>>2),r=new o["default"](Array.prototype.slice.call(t)),a=new Uint8Array(e.byteLength),s=new Int32Array(a.buffer),u=undefined,d=undefined,l=undefined,c=undefined,h=undefined,p=undefined,m=undefined,g=undefined,y=undefined;for(u=i[0],d=i[1],l=i[2],c=i[3],y=0;y-1)}},{key:"trigger",value:function(e){var t=undefined,i=undefined,n=undefined,r=undefined;if(t=this.listeners[e])if(2===arguments.length)for(n=t.length,i=0;i-1;t=this.buffer.indexOf("\n"))this.trigger("data",this.buffer.substring(0,t)),this.buffer=this.buffer.substring(t+1)}}]),t}(u["default"]);i["default"]=d},{}],35:[function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(i,"__esModule",{value:!0});var s=function(){function e(e,t){var i=[],n=!0,r=!1,a=undefined;try{for(var s,o=e[Symbol.iterator]();!(n=(s=o.next()).done)&&(i.push(s.value),!t||i.length!==t);n=!0);}catch(u){r=!0,a=u}finally{try{!n&&o["return"]&&o["return"]()}finally{if(r)throw a}}return i}return function(t,i){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(){function e(e,t){for(var i=0;i0&&(s.duration=e.duration),0===e.duration&&(s.duration=.01,this.trigger("info",{message:"updating zero segment duration to a small value"})),this.manifest.segments=n},key:function(){return e.attributes?"NONE"===e.attributes.METHOD?void(d=null):e.attributes.URI?(e.attributes.METHOD||this.trigger("warn",{message:"defaulting key method to AES-128"}),d={method:e.attributes.METHOD||"AES-128",uri:e.attributes.URI},void("undefined"!=typeof e.attributes.IV&&(d.iv=e.attributes.IV))):void this.trigger("warn",{message:"ignoring key declaration without URI"}):void this.trigger("warn",{message:"ignoring key declaration without attribute list"})},"media-sequence":function(){if(!isFinite(e.number))return void this.trigger("warn",{message:"ignoring invalid media sequence: "+e.number});this.manifest.mediaSequence=e.number},"discontinuity-sequence":function(){if(!isFinite(e.number))return void this.trigger("warn",{message:"ignoring invalid discontinuity sequence: "+e.number});this.manifest.discontinuitySequence=e.number,h=e.number},"playlist-type":function(){if(!/VOD|EVENT/.test(e.playlistType))return void this.trigger("warn",{message:"ignoring unknown playlist type: "+e.playlist});this.manifest.playlistType=e.playlistType},map:function(){u={},e.uri&&(u.uri=e.uri),e.byterange&&(u.byterange=e.byterange)},"stream-inf":function(){if(this.manifest.playlists=n,this.manifest.mediaGroups=this.manifest.mediaGroups||f,!e.attributes)return void this.trigger("warn",{message:"ignoring empty stream-inf attributes"});s.attributes||(s.attributes={}),o(s.attributes,e.attributes)},media:function(){if(this.manifest.mediaGroups=this.manifest.mediaGroups||f,!(e.attributes&&e.attributes.TYPE&&e.attributes["GROUP-ID"]&&e.attributes.NAME))return void this.trigger("warn",{message:"ignoring incomplete or missing media group"});var i=this.manifest.mediaGroups[e.attributes.TYPE];i[e.attributes["GROUP-ID"]]=i[e.attributes["GROUP-ID"]]||{},t=i[e.attributes["GROUP-ID"]],r={"default":/yes/i.test(e.attributes.DEFAULT)},r["default"]?r.autoselect=!0:r.autoselect=/yes/i.test(e.attributes.AUTOSELECT),e.attributes.LANGUAGE&&(r.language=e.attributes.LANGUAGE),e.attributes.URI&&(r.uri=e.attributes.URI),e.attributes["INSTREAM-ID"]&&(r.instreamId=e.attributes["INSTREAM-ID"]),e.attributes.CHARACTERISTICS&&(r.characteristics=e.attributes.CHARACTERISTICS),e.attributes.FORCED&&(r.forced=/yes/i.test(e.attributes.FORCED)),t[e.attributes.NAME]=r},discontinuity:function(){h+=1,s.discontinuity=!0,this.manifest.discontinuityStarts.push(n.length)},"program-date-time":function(){this.manifest.dateTimeString=e.dateTimeString,this.manifest.dateTimeObject=e.dateTimeObject},targetduration:function(){if(!isFinite(e.duration)||e.duration<0)return void this.trigger("warn",{message:"ignoring invalid target duration: "+e.duration});this.manifest.targetDuration=e.duration},totalduration:function(){if(!isFinite(e.duration)||e.duration<0)return void this.trigger("warn",{message:"ignoring invalid total duration: "+e.duration});this.manifest.totalDuration=e.duration},"cue-out":function(){s.cueOut=e.data},"cue-out-cont":function(){s.cueOutCont=e.data},"cue-in":function(){s.cueIn=e.data}})[e.tagType]||l).call(i)},uri:function(){s.uri=e.uri,n.push(s),!this.manifest.targetDuration||"duration"in s||(this.trigger("warn",{message:"defaulting segment duration to the target duration"}),s.duration=this.manifest.targetDuration),d&&(s.key=d),s.timeline=h,u&&(s.map=u),s={}},comment:function(){}})[e.type].call(i)}),e}return s(t,e),u(t,[{key:"push",value:function(e){this.lineStream.push(e)}},{key:"end",value:function(){this.lineStream.push("\n")}}]),t}(l["default"]);i["default"]=m},{}],37:[function(e,t,i){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var r=function(){function e(e,t){for(var i=0;i-1}},{key:"trigger",value:function(e){var t=this.listeners[e],i=void 0,n=void 0,r=void 0;if(t)if(2===arguments.length)for(n=t.length,i=0;i>4?i+20:i+10},this.parseAdtsSize=function(e,t){var i=(224&e[t+5])>>5,n=e[t+4]<<3;return 6144&e[t+3]|n|i},this.push=function(i){var n,r,a,s,o=0,u=0;for(e.length?(s=e.length,e=new Uint8Array(i.byteLength+s),e.set(e.subarray(0,s)),e.set(i,s)):e=i;e.length-u>=3;)if(e[u]!=="I".charCodeAt(0)||e[u+1]!=="D".charCodeAt(0)||e[u+2]!=="3".charCodeAt(0))if(!0&e[u]&&240==(240&e[u+1])){if(e.length-u<7)break;if((o=this.parseAdtsSize(e,u))>e.length)break;a={type:"audio",data:e.subarray(u,u+o),pts:t,dts:t},this.trigger("data",a),u+=o}else u++;else{if(e.length-u<10)break;if((o=this.parseId3TagSize(e,u))>e.length)break;r={type:"timed-metadata",data:e.subarray(u,u+o)},this.trigger("data",r),u+=o}n=e.length-u,e=n>0?e.subarray(u):new Uint8Array}},n.prototype=new r,t.exports=n},{}],39:[function(e,t,i){"use strict";var n=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],r=function(e){return e[0]<<21|e[1]<<14|e[2]<<7|e[3]},a=function(e,t,i){var n,r="";for(n=t;n>4?i+20:i+10},u=function(e,t){var i=(224&e[t+5])>>5,n=e[t+4]<<3;return 6144&e[t+3]|n|i},d=function(e,t){return e[t]==="I".charCodeAt(0)&&e[t+1]==="D".charCodeAt(0)&&e[t+2]==="3".charCodeAt(0)?"timed-metadata":!0&e[t]&&240==(240&e[t+1])?"audio":null},l=function(e){for(var t=0;t+5>>2];t++}return null},f=function(e){var t,i,n;t=10,64&e[5]&&(t+=4,t+=r(e.subarray(10,14)));do{if((i=r(e.subarray(t+4,t+8)))<1)return null;if("PRIV"===String.fromCharCode(e[t],e[t+1],e[t+2],e[t+3])){n=e.subarray(t+10,t+i+10);for(var a=0;a>>2;return d*=4,d+=3&u[7]}break}}t+=10,t+=i}while(t>5,o=1024*(1+(3&e[d+6])),u=9e4*o/a[(60&e[d+2])>>>2],r=d+i,e.byteLength>>6&3),channelcount:(1&e[d+2])<<2|(192&e[d+3])>>>6,samplerate:a[(60&e[d+2])>>>2],samplingfrequencyindex:(60&e[d+2])>>>2,samplesize:16,data:e.subarray(d+7+n,r)}),e.byteLength===r)return void(e=undefined);l++,e=e.subarray(r)}else d++},this.flush=function(){this.trigger("done")}},n.prototype=new r,t.exports=n},{}],41:[function(e,t,i){"use strict";var n,r,a,s=e(62),o=e(61);r=function(){var e,t,i=0;r.prototype.init.call(this),this.push=function(n){var r;for(t?(r=new Uint8Array(t.byteLength+n.data.byteLength),r.set(t),r.set(n.data,t.byteLength),t=r):t=n.data;i3&&this.trigger("data",t.subarray(i+3)),t=null,i=0,this.trigger("done")}},r.prototype=new s,a={100:!0,110:!0,122:!0,244:!0,44:!0,83:!0,86:!0,118:!0,128:!0,138:!0,139:!0,134:!0},n=function(){var e,t,i,s,u,d,l,f=new r;n.prototype.init.call(this),e=this,this.push=function(e){"video"===e.type&&(t=e.trackId,i=e.pts,s=e.dts,f.push(e))},f.on("data",function(n){var r={trackId:t,pts:i,dts:s,data:n};switch(31&n[0]){case 5:r.nalUnitType="slice_layer_without_partitioning_rbsp_idr";break;case 6:r.nalUnitType="sei_rbsp",r.escapedRBSP=u(n.subarray(1));break;case 7:r.nalUnitType="seq_parameter_set_rbsp",r.escapedRBSP=u(n.subarray(1)),r.config=d(r.escapedRBSP);break;case 8:r.nalUnitType="pic_parameter_set_rbsp";break;case 9:r.nalUnitType="access_unit_delimiter_rbsp"}e.trigger("data",r)}),f.on("done",function(){e.trigger("done")}),this.flush=function(){f.flush()},l=function(e,t){var i,n,r=8,a=8;for(i=0;i0)throw new Error("Attempted to create new NAL wihout closing the old one");r=this.length,this.length+=4,this.position=this.length},this.endNalUnit=function(e){var t,i;this.length===r+4?this.length-=4:r>0&&(t=r+4,i=this.length-t,this.position=r,this.view.setUint32(this.position,i),this.position=this.length,e&&e.push(this.bytes.subarray(t,t+i))),r=0},this.writeMetaDataDouble=function(e,t){var i;if(s(this,2+e.length+9),this.view.setUint16(this.position,e.length),this.position+=2,"width"===e)this.bytes.set(o,this.position),this.position+=5;else if("height"===e)this.bytes.set(u,this.position),this.position+=6;else if("videocodecid"===e)this.bytes.set(d,this.position),this.position+=12;else for(i=0;i>>16,this.bytes[14]=(65280&e)>>>8,this.bytes[15]=(255&e)>>>0;break;case n.AUDIO_TAG:this.bytes[11]=175,this.bytes[12]=t?0:1;break;case n.METADATA_TAG:this.position=11,this.view.setUint8(this.position,2),this.position++,this.view.setUint16(this.position,10),this.position+=2,this.bytes.set([111,110,77,101,116,97,68,97,116,97],this.position),this.position+=10,this.bytes[this.position]=8,this.position++,this.view.setUint32(this.position,r),this.position=this.length,this.bytes.set([0,0,9],this.position),this.position+=3,this.length=this.position}return i=this.length-11,this.bytes[1]=(16711680&i)>>>16,this.bytes[2]=(65280&i)>>>8,this.bytes[3]=(255&i)>>>0,this.bytes[4]=(16711680&this.dts)>>>16,this.bytes[5]=(65280&this.dts)>>>8,this.bytes[6]=(255&this.dts)>>>0,this.bytes[7]=(4278190080&this.dts)>>>24,this.bytes[8]=0,this.bytes[9]=0,this.bytes[10]=0,s(this,4),this.view.setUint32(this.length,this.length),this.length+=4,this.position+=4,this.bytes=this.bytes.subarray(0,this.length),this.frameTime=n.frameTime(this.bytes),this}},n.AUDIO_TAG=8,n.VIDEO_TAG=9,n.METADATA_TAG=18,n.isAudioFrame=function(e){return n.AUDIO_TAG===e[0]},n.isVideoFrame=function(e){return n.VIDEO_TAG===e[0]},n.isMetaData=function(e){return n.METADATA_TAG===e[0]},n.isKeyFrame=function(e){return n.isVideoFrame(e)?23===e[11]:!!n.isAudioFrame(e)||!!n.isMetaData(e)},n.frameTime=function(e){var t=e[4]<<16;return t|=e[5]<<8,t|=e[6]<<0,t|=e[7]<<24},t.exports=n},{}],46:[function(e,t,i){t.exports={tag:e(45),Transmuxer:e(48),getFlvHeader:e(44)}},{}],47:[function(e,t,i){"use strict";var n=function(){var e=this;this.list=[],this.push=function(e){this.list.push({bytes:e.bytes,dts:e.dts,pts:e.pts,keyFrame:e.keyFrame,metaDataTag:e.metaDataTag})},Object.defineProperty(this,"length",{get:function(){return e.list.length}})};t.exports=n},{}],48:[function(e,t,i){"use strict";var n,r,a,s,o,u,d=e(62),l=e(45),f=e(50),c=e(40),h=e(41).H264Stream,p=e(43),m=e(47);s=function(e,t){"number"==typeof t.pts&&(e.timelineStartInfo.pts===undefined?e.timelineStartInfo.pts=t.pts:e.timelineStartInfo.pts=Math.min(e.timelineStartInfo.pts,t.pts)),"number"==typeof t.dts&&(e.timelineStartInfo.dts===undefined?e.timelineStartInfo.dts=t.dts:e.timelineStartInfo.dts=Math.min(e.timelineStartInfo.dts,t.dts))},o=function(e,t){var i=new l(l.METADATA_TAG);return i.dts=t,i.pts=t,i.writeMetaDataDouble("videocodecid",7),i.writeMetaDataDouble("width",e.width),i.writeMetaDataDouble("height",e.height),i},u=function(e,t){var i,n=new l(l.VIDEO_TAG,!0);for(n.dts=t,n.pts=t,n.writeByte(1),n.writeByte(e.profileIdc),n.writeByte(e.profileCompatibility),n.writeByte(e.levelIdc),n.writeByte(255),n.writeByte(225),n.writeShort(e.sps[0].length),n.writeBytes(e.sps[0]),n.writeByte(e.pps.length),i=0;i=n[0]&&(s=n.shift(),this.writeMetaDataTags(o,s)),(e.extraData!==t||r.pts-s>=1e3)&&(this.writeMetaDataTags(o,r.pts),t=e.extraData,s=r.pts),a=new l(l.AUDIO_TAG),a.pts=r.pts,a.dts=r.dts,a.writeBytes(r.data),o.push(a.finalize());n.length=0,t=null,this.trigger("data",{track:e,tags:o.list}),this.trigger("done","AudioSegmentStream")},this.writeMetaDataTags=function(t,i){var n;n=new l(l.METADATA_TAG),n.pts=i,n.dts=i,n.writeMetaDataDouble("audiocodecid",10),n.writeMetaDataBoolean("stereo",2===e.channelcount),n.writeMetaDataDouble("audiosamplerate",e.samplerate),n.writeMetaDataDouble("audiosamplesize",16),t.push(n.finalize()),n=new l(l.AUDIO_TAG,!0),n.pts=i,n.dts=i,n.view.setUint16(n.position,e.extraData),n.position+=2,n.length=Math.max(n.length,n.position),t.push(n.finalize())},this.onVideoKeyFrame=function(e){n.push(e)}},a.prototype=new d,r=function(e){var t,i,n=[];r.prototype.init.call(this),this.finishFrame=function(n,r){if(r){if(t&&e&&e.newMetadata&&(r.keyFrame||0===n.length)){var a=o(t,r.dts).finalize(),s=u(e,r.dts).finalize();a.metaDataTag=s.metaDataTag=!0,n.push(a),n.push(s),e.newMetadata=!1,this.trigger("keyframe",r.dts)}r.endNalUnit(),n.push(r.finalize()),i=null}},this.push=function(t){s(e,t),t.pts=Math.round(t.pts/90),t.dts=Math.round(t.dts/90),n.push(t)},this.flush=function(){for(var r,a=new m;n.length&&"access_unit_delimiter_rbsp"!==n[0].nalUnitType;)n.shift();if(0===n.length)return void this.trigger("done","VideoSegmentStream");for(;n.length;)r=n.shift(),"seq_parameter_set_rbsp"===r.nalUnitType?(e.newMetadata=!0,t=r.config,e.width=t.width,e.height=t.height,e.sps=[r.data],e.profileIdc=t.profileIdc,e.levelIdc=t.levelIdc,e.profileCompatibility=t.profileCompatibility,i.endNalUnit()):"pic_parameter_set_rbsp"===r.nalUnitType?(e.newMetadata=!0,e.pps=[r.data],i.endNalUnit()):"access_unit_delimiter_rbsp"===r.nalUnitType?(i&&this.finishFrame(a,i),i=new l(l.VIDEO_TAG),i.pts=r.pts,i.dts=r.dts):("slice_layer_without_partitioning_rbsp_idr"===r.nalUnitType&&(i.keyFrame=!0),i.endNalUnit()),i.startNalUnit(),i.writeBytes(r.data);i&&this.finishFrame(a,i),this.trigger("data",{track:e,tags:a.list}),this.trigger("done","VideoSegmentStream")}},r.prototype=new d,n=function(e){var t,i,s,o,u,d,l,m,g,y,_,v,b=this;n.prototype.init.call(this),e=e||{},this.metadataStream=new f.MetadataStream,e.metadataStream=this.metadataStream,t=new f.TransportPacketStream,i=new f.TransportParseStream,s=new f.ElementaryStream,o=new f.TimestampRolloverStream("video"),u=new f.TimestampRolloverStream("audio"),d=new f.TimestampRolloverStream("timed-metadata"),l=new c,m=new h,v=new p(e),t.pipe(i).pipe(s),s.pipe(o).pipe(m),s.pipe(u).pipe(l),s.pipe(d).pipe(this.metadataStream).pipe(v),_=new f.CaptionStream,m.pipe(_).pipe(v),s.on("data",function(e){var t,i,n;if("metadata"===e.type){for(t=e.tracks.length;t--;)"video"===e.tracks[t].type?i=e.tracks[t]:"audio"===e.tracks[t].type&&(n=e.tracks[t]);i&&!g&&(v.numberOfTracks++,g=new r(i),m.pipe(g).pipe(v)),n&&!y&&(v.numberOfTracks++,y=new a(n),l.pipe(y).pipe(v),g&&g.on("keyframe",y.onVideoKeyFrame))}}),this.push=function(e){t.push(e)},this.flush=function(){t.flush()},this.resetCaptions=function(){_.reset()},v.on("data",function(e){b.trigger("data",e)}),v.on("done",function(){b.trigger("done")})},n.prototype=new d,t.exports=n},{}],49:[function(e,t,i){"use strict";var n=e(62),r=function(e){for(var t=0,i={payloadType:-1,payloadSize:0},n=0,r=0;t>>8,r=255&t,t!==this.PADDING_)if(t===this.RESUME_CAPTION_LOADING_)this.mode_="popOn";else if(t===this.END_OF_CAPTION_)this.clearFormatting(e.pts),this.flushDisplayed(e.pts),i=this.displayed_,this.displayed_=this.nonDisplayed_,this.nonDisplayed_=i,this.startPts_=e.pts;else if(t===this.ROLL_UP_2_ROWS_)this.topRow_=13,this.mode_="rollUp";else if(t===this.ROLL_UP_3_ROWS_)this.topRow_=12,this.mode_="rollUp";else if(t===this.ROLL_UP_4_ROWS_)this.topRow_=11,this.mode_="rollUp";else if(t===this.CARRIAGE_RETURN_)this.clearFormatting(e.pts),this.flushDisplayed(e.pts),this.shiftRowsUp_(),this.startPts_=e.pts;else if(t===this.BACKSPACE_)"popOn"===this.mode_?this.nonDisplayed_[14]=this.nonDisplayed_[14].slice(0,-1):this.displayed_[14]=this.displayed_[14].slice(0,-1);else if(t===this.ERASE_DISPLAYED_MEMORY_)this.flushDisplayed(e.pts),this.displayed_=f();else if(t===this.ERASE_NON_DISPLAYED_MEMORY_)this.nonDisplayed_=f();else if(t===this.RESUME_DIRECT_CAPTIONING_)this.mode_="paintOn";else if(this.isSpecialCharacter(n,r))n=(3&n)<<8,a=d(n|r),this[this.mode_](e.pts,a),this.column_++;else if(this.isExtCharacter(n,r))"popOn"===this.mode_?this.nonDisplayed_[this.row_]=this.nonDisplayed_[this.row_].slice(0,-1):this.displayed_[14]=this.displayed_[14].slice(0,-1),n=(3&n)<<8,a=d(n|r),this[this.mode_](e.pts,a),this.column_++;else if(this.isMidRowCode(n,r))this.clearFormatting(e.pts),this[this.mode_](e.pts," "),this.column_++,14==(14&r)&&this.addFormatting(e.pts,["i"]),1==(1&r)&&this.addFormatting(e.pts,["u"]);else if(this.isOffsetControlCode(n,r))this.column_+=3&r;else if(this.isPAC(n,r)){var s=l.indexOf(7968&t);s!==this.row_&&(this.clearFormatting(e.pts),this.row_=s),1&r&&-1===this.formatting_.indexOf("u")&&this.addFormatting(e.pts,["u"]),16==(16&t)&&(this.column_=4*((14&t)>>1)),this.isColorPAC(r)&&14==(14&r)&&this.addFormatting(e.pts,["i"])}else this.isNormalChar(n)&&(0===r&&(r=null),a=d(n),a+=d(r),this[this.mode_](e.pts,a),this.column_+=a.length)}};c.prototype=new n,c.prototype.flushDisplayed=function(e){var t=this.displayed_.map(function(e){return e.trim()}).join("\n").replace(/^\n+|\n+$/g,"");t.length&&this.trigger("data",{startPts:this.startPts_,endPts:e,text:t,stream:this.name_})},c.prototype.reset=function(){this.mode_="popOn",this.topRow_=0,this.startPts_=0,this.displayed_=f(),this.nonDisplayed_=f(),this.lastControlCode_=null,this.column_=0,this.row_=14,this.formatting_=[]},c.prototype.setConstants=function(){0===this.dataChannel_?(this.BASE_=16,this.EXT_=17,this.CONTROL_=(20|this.field_)<<8,this.OFFSET_=23):1===this.dataChannel_&&(this.BASE_=24,this.EXT_=25,this.CONTROL_=(28|this.field_)<<8,this.OFFSET_=31),this.PADDING_=0,this.RESUME_CAPTION_LOADING_=32|this.CONTROL_,this.END_OF_CAPTION_=47|this.CONTROL_,this.ROLL_UP_2_ROWS_=37|this.CONTROL_,this.ROLL_UP_3_ROWS_=38|this.CONTROL_,this.ROLL_UP_4_ROWS_=39|this.CONTROL_,this.CARRIAGE_RETURN_=45|this.CONTROL_,this.RESUME_DIRECT_CAPTIONING_=41|this.CONTROL_,this.BACKSPACE_=33|this.CONTROL_,this.ERASE_DISPLAYED_MEMORY_=44|this.CONTROL_,this.ERASE_NON_DISPLAYED_MEMORY_=46|this.CONTROL_},c.prototype.isSpecialCharacter=function(e,t){return e===this.EXT_&&t>=48&&t<=63},c.prototype.isExtCharacter=function(e,t){return(e===this.EXT_+1||e===this.EXT_+2)&&t>=32&&t<=63},c.prototype.isMidRowCode=function(e,t){return e===this.EXT_&&t>=32&&t<=47},c.prototype.isOffsetControlCode=function(e,t){return e===this.OFFSET_&&t>=33&&t<=35},c.prototype.isPAC=function(e,t){return e>=this.BASE_&&e=64&&t<=127},c.prototype.isColorPAC=function(e){return e>=64&&e<=79||e>=96&&e<=127},c.prototype.isNormalChar=function(e){return e>=32&&e<=127},c.prototype.addFormatting=function(e,t){this.formatting_=this.formatting_.concat(t);var i=t.reduce(function(e,t){return e+"<"+t+">"},"");this[this.mode_](e,i)},c.prototype.clearFormatting=function(e){if(this.formatting_.length){var t=this.formatting_.reverse().reduce(function(e,t){return e+""+t+">"},"");this.formatting_=[],this[this.mode_](e,t)}},c.prototype.popOn=function(e,t){var i=this.nonDisplayed_[this.row_];i+=t,this.nonDisplayed_[this.row_]=i},c.prototype.rollUp=function(e,t){var i=this.displayed_[14];i+=t,this.displayed_[14]=i},c.prototype.shiftRowsUp_=function(){var e;for(e=0;e>>4>1&&(n+=t[n]+1),0===i.pid)i.type="pat",e(t.subarray(n),i),this.trigger("data",i);else if(i.pid===this.pmtPid)for(i.type="pmt",e(t.subarray(n),i),this.trigger("data",i);this.packetsWaitingForPmt.length;)this.processPes_.apply(this,this.packetsWaitingForPmt.shift());else this.programMapTable===undefined?this.packetsWaitingForPmt.push([t,n,i]):this.processPes_(t,n,i)},this.processPes_=function(e,t,i){i.pid===this.programMapTable.video?i.streamType=u.H264_STREAM_TYPE:i.pid===this.programMapTable.audio?i.streamType=u.ADTS_STREAM_TYPE:i.streamType=this.programMapTable["timed-metadata"][i.pid],i.type="pes",i.data=e.subarray(t),this.trigger("data",i)}},r.prototype=new s,r.STREAM_TYPES={h264:27,adts:15},a=function(){var e=this,t={data:[],size:0},i={data:[],size:0},n={data:[],size:0},r=function(e,t){var i;t.packetLength=6+(e[4]<<8|e[5]),t.dataAlignmentIndicator=0!=(4&e[6]),i=e[7],192&i&&(t.pts=(14&e[9])<<27|(255&e[10])<<20|(254&e[11])<<12|(255&e[12])<<5|(254&e[13])>>>3,t.pts*=4,t.pts+=(6&e[13])>>>1,t.dts=t.pts,64&i&&(t.dts=(14&e[14])<<27|(255&e[15])<<20|(254&e[16])<<12|(255&e[17])<<5|(254&e[18])>>>3,t.dts*=4,t.dts+=(6&e[18])>>>1)),t.data=e.subarray(9+e[8])},s=function(t,i,n){var a,s=new Uint8Array(t.size),o={type:i},u=0,d=0,l=!1;if(t.data.length&&!(t.size<9)){for(o.trackId=t.data[0].pid,u=0;u>>2;p*=4,p+=3&h[7],u.timeStamp=p,t.pts===undefined&&t.dts===undefined&&(t.pts=u.timeStamp,t.dts=u.timeStamp),this.trigger("timestamp",u)}t.frames.push(u),n+=10,n+=a}while(n>>4>1&&(t+=e[4]+1),t},o=function(e,t){var i=r(e);return 0===i?"pat":i===t?"pmt":t?"pes":null},u=function(e){var t=a(e),i=4+s(e);return t&&(i+=e[i]+1),(31&e[i+10])<<8|e[i+11]},d=function(e){var t={},i=a(e),n=4+s(e);if(i&&(n+=e[n]+1),1&e[n+5]){var r,o,u;r=(15&e[n+1])<<8|e[n+2],o=3+r-4,u=(15&e[n+10])<<8|e[n+11];for(var d=12+u;d=e.byteLength)return null;var i,n=null;return i=e[t+7],192&i&&(n={},n.pts=(14&e[t+9])<<27|(255&e[t+10])<<20|(254&e[t+11])<<12|(255&e[t+12])<<5|(254&e[t+13])>>>3,n.pts*=4,n.pts+=(6&e[t+13])>>>1,n.dts=n.pts,64&i&&(n.dts=(14&e[t+14])<<27|(255&e[t+15])<<20|(254&e[t+16])<<12|(255&e[t+17])<<5|(254&e[t+18])>>>3,n.dts*=4,n.dts+=(6&e[t+18])>>>1)),n},c=function(e){switch(e){case 5:return"slice_layer_without_partitioning_rbsp_idr";case 6:return"sei_rbsp";case 7:return"seq_parameter_set_rbsp";case 8:return"pic_parameter_set_rbsp";case 9:return"access_unit_delimiter_rbsp";default:return null}},h=function(e){for(var t,i=4+s(e),n=e.subarray(i),r=0,a=0,o=!1;a3&&"slice_layer_without_partitioning_rbsp_idr"===(t=c(31&n[a+3]))&&(o=!0),o};t.exports={parseType:o,parsePat:u,parsePmt:d,parsePayloadUnitStartIndicator:a,parsePesType:l,parsePesTime:f,videoPacketContainsKeyFrame:h}},{}],53:[function(e,t,i){"use strict";t.exports={H264_STREAM_TYPE:27,ADTS_STREAM_TYPE:15,METADATA_STREAM_TYPE:21}},{}],54:[function(e,t,i){"use strict";var n=e(62),r=function(e,t){var i=1;for(e>t&&(i=-1);Math.abs(t-e)>4294967296;)e+=8589934592*i;return e},a=function(e){var t,i;a.prototype.init.call(this),this.type_=e,this.push=function(e){e.type===this.type_&&(i===undefined&&(i=e.dts),e.dts=r(e.dts,i),e.pts=r(e.pts,i),t=e.dts,this.trigger("data",e))},this.flush=function(){i=t,this.trigger("done")},this.discontinuity=function(){i=void 0,t=void 0}};a.prototype=new n,t.exports={TimestampRolloverStream:a,handleRollover:r}},{}],55:[function(e,t,i){t.exports={generator:e(56),Transmuxer:e(58).Transmuxer,AudioSegmentStream:e(58).AudioSegmentStream,VideoSegmentStream:e(58).VideoSegmentStream}},{}],56:[function(e,t,i){"use strict";var n,r,a,s,o,u,d,l,f,c,h,p,m,g,y,_,v,b,T,S,w,k,O,E,A,L,P,I,C,U,M,D,R,x,B,j,N=Math.pow(2,32)-1;!function(){var e;if(O={avc1:[],avcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],smhd:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],styp:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[]},"undefined"!=typeof Uint8Array){for(e in O)O.hasOwnProperty(e)&&(O[e]=[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]);E=new Uint8Array(["i".charCodeAt(0),"s".charCodeAt(0),"o".charCodeAt(0),"m".charCodeAt(0)]),L=new Uint8Array(["a".charCodeAt(0),"v".charCodeAt(0),"c".charCodeAt(0),"1".charCodeAt(0)]),A=new Uint8Array([0,0,0,1]),P=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),I=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),C={video:P,audio:I},D=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),M=new Uint8Array([0,0,0,0,0,0,0,0]),R=new Uint8Array([0,0,0,0,0,0,0,0]),x=R,B=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),j=R,U=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])}}(),n=function(e){var t,i,n,r=[],a=0;for(t=1;t>>1,e.samplingfrequencyindex<<7|e.channelcount<<3,6,1,2]))},s=function(){return n(O.ftyp,E,A,E,L)},_=function(e){return n(O.hdlr,C[e])},o=function(e){return n(O.mdat,e)},y=function(e){var t=new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,0,1,95,144,e.duration>>>24&255,e.duration>>>16&255,e.duration>>>8&255,255&e.duration,85,196,0,0]);return e.samplerate&&(t[12]=e.samplerate>>>24&255,t[13]=e.samplerate>>>16&255,t[14]=e.samplerate>>>8&255,t[15]=255&e.samplerate),n(O.mdhd,t)},g=function(e){return n(O.mdia,y(e),_(e.type),d(e))},u=function(e){return n(O.mfhd,new Uint8Array([0,0,0,0,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e]))},d=function(e){return n(O.minf,"video"===e.type?n(O.vmhd,U):n(O.smhd,M),r(),b(e))},l=function(e,t){for(var i=[],r=t.length;r--;)i[r]=S(t[r]);return n.apply(null,[O.moof,u(e)].concat(i))},f=function(e){for(var t=e.length,i=[];t--;)i[t]=p(e[t]);return n.apply(null,[O.moov,h(4294967295)].concat(i).concat(c(e)))},c=function(e){for(var t=e.length,i=[];t--;)i[t]=w(e[t]);return n.apply(null,[O.mvex].concat(i))},h=function(e){var t=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,0,1,95,144,(4278190080&e)>>24,(16711680&e)>>16,(65280&e)>>8,255&e,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return n(O.mvhd,t)},v=function(e){var t,i,r=e.samples||[],a=new Uint8Array(4+r.length);for(i=0;i>>8),a.push(255&i[t].byteLength),a=a.concat(Array.prototype.slice.call(i[t]));for(t=0;t>>8),s.push(255&r[t].byteLength),s=s.concat(Array.prototype.slice.call(r[t]));return n(O.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(65280&e.width)>>8,255&e.width,(65280&e.height)>>8,255&e.height,0,72,0,0,0,72,0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),n(O.avcC,new Uint8Array([1,e.profileIdc,e.profileCompatibility,e.levelIdc,255].concat([i.length]).concat(a).concat([r.length]).concat(s))),n(O.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])))},t=function(e){return n(O.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,(65280&e.channelcount)>>8,255&e.channelcount,(65280&e.samplesize)>>8,255&e.samplesize,0,0,0,0,(65280&e.samplerate)>>8,255&e.samplerate,0,0]),a(e))}}(),m=function(e){var t=new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,0,(4278190080&e.duration)>>24,(16711680&e.duration)>>16,(65280&e.duration)>>8,255&e.duration,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,(65280&e.width)>>8,255&e.width,0,0,(65280&e.height)>>8,255&e.height,0,0]);return n(O.tkhd,t)},S=function(e){var t,i,r,a,s,o,u;return t=n(O.tfhd,new Uint8Array([0,0,0,58,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0])),o=Math.floor(e.baseMediaDecodeTime/(N+1)),u=Math.floor(e.baseMediaDecodeTime%(N+1)),i=n(O.tfdt,new Uint8Array([1,0,0,0,o>>>24&255,o>>>16&255,o>>>8&255,255&o,u>>>24&255,u>>>16&255,u>>>8&255,255&u])),s=92,"audio"===e.type?(r=k(e,s),n(O.traf,t,i,r)):(a=v(e),r=k(e,a.length+s),n(O.traf,t,i,r,a))},p=function(e){return e.duration=e.duration||4294967295,n(O.trak,m(e),g(e))},w=function(e){var t=new Uint8Array([0,0,0,0,(4278190080&e.id)>>24,(16711680&e.id)>>16,(65280&e.id)>>8,255&e.id,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return"video"!==e.type&&(t[t.length-1]=0),n(O.trex,t)},function(){var e,t,i;i=function(e,t){var i=0,n=0,r=0,a=0;return e.length&&(e[0].duration!==undefined&&(i=1),e[0].size!==undefined&&(n=2),e[0].flags!==undefined&&(r=4),e[0].compositionTimeOffset!==undefined&&(a=8)),[0,0,i|n|r|a,1,(4278190080&e.length)>>>24,(16711680&e.length)>>>16,(65280&e.length)>>>8,255&e.length,(4278190080&t)>>>24,(16711680&t)>>>16,(65280&t)>>>8,255&t]},t=function(e,t){var r,a,s,o;for(a=e.samples||[],t+=20+16*a.length,r=i(a,t),o=0;o>>24,(16711680&s.duration)>>>16,(65280&s.duration)>>>8,255&s.duration,(4278190080&s.size)>>>24,(16711680&s.size)>>>16,(65280&s.size)>>>8,255&s.size,s.flags.isLeading<<2|s.flags.dependsOn,s.flags.isDependedOn<<6|s.flags.hasRedundancy<<4|s.flags.paddingValue<<1|s.flags.isNonSyncSample,61440&s.flags.degradationPriority,15&s.flags.degradationPriority,(4278190080&s.compositionTimeOffset)>>>24,(16711680&s.compositionTimeOffset)>>>16,(65280&s.compositionTimeOffset)>>>8,255&s.compositionTimeOffset]);return n(O.trun,new Uint8Array(r))},e=function(e,t){var r,a,s,o;for(a=e.samples||[],t+=20+8*a.length,r=i(a,t),o=0;o>>24,(16711680&s.duration)>>>16,(65280&s.duration)>>>8,255&s.duration,(4278190080&s.size)>>>24,(16711680&s.size)>>>16,(65280&s.size)>>>8,255&s.size]);return n(O.trun,new Uint8Array(r))},k=function(i,n){return"audio"===i.type?e(i,n):t(i,n)}}(),t.exports={ftyp:s,mdat:o,moof:l,moov:f,initSegment:function(e){var t,i=s(),n=f(e);return t=new Uint8Array(i.byteLength+n.byteLength),t.set(i),t.set(n,i.byteLength),t}}},{}],57:[function(e,t,i){
-"use strict";var n,r,a,s;n=function(e,t){var i,a,s,o,u,d=[];if(!t.length)return null;for(i=0;i1?i+a:e.byteLength,s===t[0]&&(1===t.length?d.push(e.subarray(i+8,o)):(u=n(e.subarray(i+8,o),t.slice(1)),u.length&&(d=d.concat(u)))),i=o;return d},r=function(e){var t="";return t+=String.fromCharCode(e[0]),t+=String.fromCharCode(e[1]),t+=String.fromCharCode(e[2]),t+=String.fromCharCode(e[3])},a=function(e){var t={};return n(e,["moov","trak"]).reduce(function(e,t){var i,r,a,s,o;return(i=n(t,["tkhd"])[0])?(r=i[0],a=0===r?12:20,s=i[a]<<24|i[a+1]<<16|i[a+2]<<8|i[a+3],(o=n(t,["mdia","mdhd"])[0])?(r=o[0],a=0===r?12:20,e[s]=o[a]<<24|o[a+1]<<16|o[a+2]<<8|o[a+3],e):null):null},t)},s=function(e,t){var i,r,a;return i=n(t,["moof","traf"]),r=[].concat.apply([],i.map(function(t){return n(t,["tfhd"]).map(function(i){var r,a,s;return r=i[4]<<24|i[5]<<16|i[6]<<8|i[7],a=e[r]||9e4,s=n(t,["tfdt"]).map(function(e){var t,i;return t=e[0],i=e[4]<<24|e[5]<<16|e[6]<<8|e[7],1===t&&(i*=Math.pow(2,32),i+=e[8]<<24|e[9]<<16|e[10]<<8|e[11]),i})[0],(s=s||Infinity)/a})})),a=Math.min.apply(null,r),isFinite(a)?a:0},t.exports={parseType:r,timescale:a,startTime:s}},{}],58:[function(e,t,i){"use strict";var n,r,a,s,o,u,d,l,f,c,h,p=e(62),m=e(56),g=e(50),y=e(40),_=e(41).H264Stream,v=e(38),b=e(42),T=e(60),S=["audioobjecttype","channelcount","samplerate","samplingfrequencyindex","samplesize"],w=["width","height","profileIdc","levelIdc","profileCompatibility"];o=function(){return{size:0,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0,degradationPriority:0}}},u=function(e){return e[0]==="I".charCodeAt(0)&&e[1]==="D".charCodeAt(0)&&e[2]==="3".charCodeAt(0)},c=function(e,t){var i;if(e.length!==t.length)return!1;for(i=0;i45e3))){for(n=b[e.samplerate],n||(n=t[0].data),r=0;r=n?t:(e.minSegmentDts=Infinity,t.filter(function(t){return t.dts>=n&&(e.minSegmentDts=Math.min(e.minSegmentDts,t.dts),e.minSegmentPts=e.minSegmentDts,!0)}))},this.generateSampleTable_=function(e){var t,i,n=[];for(t=0;t=-1e4&&i<=45e3&&(!n||o>i)&&(n=a,o=i));return n?n.gop:null},this.extendFirstKeyFrame_=function(e){var t;return!e[0][0].keyFrame&&e.length>1&&(t=e.shift(),e.byteLength-=t.byteLength,e.nalCount-=t.nalCount,e[0][0].dts=t.dts,e[0][0].pts=t.pts,e[0][0].duration+=t.duration),e},this.groupNalsIntoFrames_=function(e){var t,i,n=[],r=[];for(n.byteLength=0,t=0;tn.pts?t++:(i++,a-=r.byteLength,s-=r.nalCount,o-=r.duration);return 0===i?e:i===e.length?null:(d=e.slice(i),d.byteLength=a,d.duration=o,d.nalCount=s,d.pts=d[0].pts,d.dts=d[0].dts,d)},this.alignGopsAtEnd_=function(e){var t,i,n,r,a,s;for(t=u.length-1,i=e.length-1,a=null,s=!1;t>=0&&i>=0;){if(n=u[t],r=e[i],n.pts===r.pts){s=!0;break}n.pts>r.pts?t--:(t===u.length-1&&(a=i),i--)}if(!s&&null===a)return null;var o;if(0===(o=s?i:a))return e;var d=e.slice(o),l=d.reduce(function(e,t){return e.byteLength+=t.byteLength,e.duration+=t.duration,e.nalCount+=t.nalCount,e},{byteLength:0,duration:0,nalCount:0});return d.byteLength=l.byteLength,d.duration=l.duration,d.nalCount=l.nalCount,d.pts=d[0].pts,d.dts=d[0].dts,d},this.alignGopsWith=function(e){u=e}},n.prototype=new p,d=function(e,t){"number"==typeof t.pts&&(e.timelineStartInfo.pts===undefined&&(e.timelineStartInfo.pts=t.pts),e.minSegmentPts===undefined?e.minSegmentPts=t.pts:e.minSegmentPts=Math.min(e.minSegmentPts,t.pts),e.maxSegmentPts===undefined?e.maxSegmentPts=t.pts:e.maxSegmentPts=Math.max(e.maxSegmentPts,t.pts)),"number"==typeof t.dts&&(e.timelineStartInfo.dts===undefined&&(e.timelineStartInfo.dts=t.dts),e.minSegmentDts===undefined?e.minSegmentDts=t.dts:e.minSegmentDts=Math.min(e.minSegmentDts,t.dts),e.maxSegmentDts===undefined?e.maxSegmentDts=t.dts:e.maxSegmentDts=Math.max(e.maxSegmentDts,t.dts))},l=function(e){delete e.minSegmentDts,delete e.maxSegmentDts,delete e.minSegmentPts,delete e.maxSegmentPts},f=function(e){var t,i,n=e.minSegmentDts-e.timelineStartInfo.dts;return t=e.timelineStartInfo.baseMediaDecodeTime,t+=n,t=Math.max(0,t),"audio"===e.type&&(i=e.samplerate/9e4,t*=i,t=Math.floor(t)),t},s=function(e,t){this.numberOfTracks=0,this.metadataStream=t,"undefined"!=typeof e.remux?this.remuxTracks=!!e.remux:this.remuxTracks=!0,this.pendingTracks=[],this.videoTrack=null,this.pendingBoxes=[],this.pendingCaptions=[],this.pendingMetadata=[],this.pendingBytes=0,this.emittedTracks=0,s.prototype.init.call(this),this.push=function(e){return e.text?this.pendingCaptions.push(e):e.frames?this.pendingMetadata.push(e):(this.pendingTracks.push(e.track),this.pendingBoxes.push(e.boxes),this.pendingBytes+=e.boxes.byteLength,"video"===e.track.type&&(this.videoTrack=e.track),void("audio"===e.track.type&&(this.audioTrack=e.track)))}},s.prototype=new p,s.prototype.flush=function(e){var t,i,n,r,a=0,s={captions:[],captionStreams:{},metadata:[],info:{}},o=0;if(this.pendingTracks.length=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0))}for(this.videoTrack?(o=this.videoTrack.timelineStartInfo.pts,w.forEach(function(e){s.info[e]=this.videoTrack[e]},this)):this.audioTrack&&(o=this.audioTrack.timelineStartInfo.pts,S.forEach(function(e){s.info[e]=this.audioTrack[e]},this)),1===this.pendingTracks.length?s.type=this.pendingTracks[0].type:s.type="combined",this.emittedTracks+=this.pendingTracks.length,n=m.initSegment(this.pendingTracks),s.initSegment=new Uint8Array(n.byteLength),s.initSegment.set(n),s.data=new Uint8Array(this.pendingBytes),r=0;r=this.numberOfTracks&&(this.trigger("done"),this.emittedTracks=0)},a=function(e){var t,i,o=this,d=!0;a.prototype.init.call(this),e=e||{},this.baseMediaDecodeTime=e.baseMediaDecodeTime||0,this.transmuxPipeline_={},this.setupAacPipeline=function(){var t={};this.transmuxPipeline_=t,t.type="aac",t.metadataStream=new g.MetadataStream,t.aacStream=new v,t.audioTimestampRolloverStream=new g.TimestampRolloverStream("audio"),t.timedMetadataTimestampRolloverStream=new g.TimestampRolloverStream("timed-metadata"),t.adtsStream=new y,t.coalesceStream=new s(e,t.metadataStream),t.headOfPipeline=t.aacStream,t.aacStream.pipe(t.audioTimestampRolloverStream).pipe(t.adtsStream),t.aacStream.pipe(t.timedMetadataTimestampRolloverStream).pipe(t.metadataStream).pipe(t.coalesceStream),t.metadataStream.on("timestamp",function(e){t.aacStream.setTimestamp(e.timeStamp)}),t.aacStream.on("data",function(e){"timed-metadata"!==e.type||t.audioSegmentStream||(i=i||{timelineStartInfo:{baseMediaDecodeTime:o.baseMediaDecodeTime},codec:"adts",type:"audio"},t.coalesceStream.numberOfTracks++,t.audioSegmentStream=new r(i),t.adtsStream.pipe(t.audioSegmentStream).pipe(t.coalesceStream))}),t.coalesceStream.on("data",this.trigger.bind(this,"data")),t.coalesceStream.on("done",this.trigger.bind(this,"done"))},this.setupTsPipeline=function(){var a={};this.transmuxPipeline_=a,a.type="ts",a.metadataStream=new g.MetadataStream,a.packetStream=new g.TransportPacketStream,a.parseStream=new g.TransportParseStream,a.elementaryStream=new g.ElementaryStream,a.videoTimestampRolloverStream=new g.TimestampRolloverStream("video"),a.audioTimestampRolloverStream=new g.TimestampRolloverStream("audio"),a.timedMetadataTimestampRolloverStream=new g.TimestampRolloverStream("timed-metadata"),a.adtsStream=new y,a.h264Stream=new _,a.captionStream=new g.CaptionStream,a.coalesceStream=new s(e,a.metadataStream),a.headOfPipeline=a.packetStream,a.packetStream.pipe(a.parseStream).pipe(a.elementaryStream),a.elementaryStream.pipe(a.videoTimestampRolloverStream).pipe(a.h264Stream),a.elementaryStream.pipe(a.audioTimestampRolloverStream).pipe(a.adtsStream),a.elementaryStream.pipe(a.timedMetadataTimestampRolloverStream).pipe(a.metadataStream).pipe(a.coalesceStream),a.h264Stream.pipe(a.captionStream).pipe(a.coalesceStream),a.elementaryStream.on("data",function(s){var u;if("metadata"===s.type){for(u=s.tracks.length;u--;)t||"video"!==s.tracks[u].type?i||"audio"!==s.tracks[u].type||(i=s.tracks[u],i.timelineStartInfo.baseMediaDecodeTime=o.baseMediaDecodeTime):(t=s.tracks[u],t.timelineStartInfo.baseMediaDecodeTime=o.baseMediaDecodeTime);t&&!a.videoSegmentStream&&(a.coalesceStream.numberOfTracks++,a.videoSegmentStream=new n(t,e),a.videoSegmentStream.on("timelineStartInfo",function(e){i&&(i.timelineStartInfo=e,a.audioSegmentStream.setEarliestDts(e.dts))}),a.videoSegmentStream.on("processedGopsInfo",o.trigger.bind(o,"gopInfo")),a.videoSegmentStream.on("baseMediaDecodeTime",function(e){i&&a.audioSegmentStream.setVideoBaseMediaDecodeTime(e)}),a.h264Stream.pipe(a.videoSegmentStream).pipe(a.coalesceStream)),i&&!a.audioSegmentStream&&(a.coalesceStream.numberOfTracks++,a.audioSegmentStream=new r(i),a.adtsStream.pipe(a.audioSegmentStream).pipe(a.coalesceStream))}}),a.coalesceStream.on("data",this.trigger.bind(this,"data")),a.coalesceStream.on("done",this.trigger.bind(this,"done"))},this.setBaseMediaDecodeTime=function(e){var n=this.transmuxPipeline_;this.baseMediaDecodeTime=e,i&&(i.timelineStartInfo.dts=undefined,i.timelineStartInfo.pts=undefined,l(i),i.timelineStartInfo.baseMediaDecodeTime=e,n.audioTimestampRolloverStream&&n.audioTimestampRolloverStream.discontinuity()),t&&(n.videoSegmentStream&&(n.videoSegmentStream.gopCache_=[],n.videoTimestampRolloverStream.discontinuity()),t.timelineStartInfo.dts=undefined,t.timelineStartInfo.pts=undefined,l(t),n.captionStream.reset(),t.timelineStartInfo.baseMediaDecodeTime=e),n.timedMetadataTimestampRolloverStream&&n.timedMetadataTimestampRolloverStream.discontinuity()},this.setAudioAppendStart=function(e){i&&this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(e)},this.alignGopsWith=function(e){t&&this.transmuxPipeline_.videoSegmentStream&&this.transmuxPipeline_.videoSegmentStream.alignGopsWith(e)},this.push=function(e){if(d){var t=u(e);t&&"aac"!==this.transmuxPipeline_.type?this.setupAacPipeline():t||"ts"===this.transmuxPipeline_.type||this.setupTsPipeline(),d=!1}this.transmuxPipeline_.headOfPipeline.push(e)},this.flush=function(){d=!0,this.transmuxPipeline_.headOfPipeline.flush()},this.resetCaptions=function(){this.transmuxPipeline_.captionStream&&this.transmuxPipeline_.captionStream.reset()}},a.prototype=new p,t.exports={Transmuxer:a,VideoSegmentStream:n,AudioSegmentStream:r,AUDIO_PROPERTIES:S,VIDEO_PROPERTIES:w}},{}],59:[function(e,t,i){"use strict";var n=e(53),r=e(54).handleRollover,a={};a.ts=e(52),a.aac=e(39);var s=function(e){return e[0]==="I".charCodeAt(0)&&e[1]==="D".charCodeAt(0)&&e[2]==="3".charCodeAt(0)},o=function(e,t){for(var i,n=0,r=188;r=0;)if(71!==e[u]||71!==e[d])u--,d--;else{switch(n=e.subarray(u,d),a.ts.parseType(n,t.pid)){case"pes":r=a.ts.parsePesType(n,t.table),s=a.ts.parsePayloadUnitStartIndicator(n),"audio"===r&&s&&(o=a.ts.parsePesTime(n))&&(o.type="audio",i.audio.push(o),l=!0)}if(l)break;u-=188,d-=188}},d=function(e,t,i){for(var n,r,s,o,u,d,l,f=0,c=188,h=!1,p={data:[],size:0};c=0;)if(71!==e[f]||71!==e[c])f--,c--;else{switch(n=e.subarray(f,c),a.ts.parseType(n,t.pid)){case"pes":r=a.ts.parsePesType(n,t.table),s=a.ts.parsePayloadUnitStartIndicator(n),"video"===r&&s&&(o=a.ts.parsePesTime(n))&&(o.type="video",i.video.push(o),h=!0)}if(h)break;f-=188,c-=188}},l=function(e,t){if(e.audio&&e.audio.length){var i=t;void 0===i&&(i=e.audio[0].dts),e.audio.forEach(function(e){e.dts=r(e.dts,i),e.pts=r(e.pts,i),e.dtsTime=e.dts/9e4,e.ptsTime=e.pts/9e4})}if(e.video&&e.video.length){var n=t;if(void 0===n&&(n=e.video[0].dts),e.video.forEach(function(e){e.dts=r(e.dts,n),e.pts=r(e.pts,n),e.dtsTime=e.dts/9e4,e.ptsTime=e.pts/9e4}),e.firstKeyFrame){var a=e.firstKeyFrame;a.dts=r(a.dts,n),a.pts=r(a.pts,n),a.dtsTime=a.dts/9e4,a.ptsTime=a.dts/9e4}}},f=function(e){for(var t,i=!1,n=0,r=null,s=null,o=0,u=0;e.length-u>=3;){switch(a.aac.parseType(e,u)){case"timed-metadata":if(e.length-u<10){i=!0;break}if((o=a.aac.parseId3TagSize(e,u))>e.length){i=!0;break}null===s&&(t=e.subarray(u,u+o),s=a.aac.parseAacTimestamp(t)),u+=o;break;case"audio":if(e.length-u<7){i=!0;break}if((o=a.aac.parseAdtsSize(e,u))>e.length){i=!0;break}null===r&&(t=e.subarray(u,u+o),r=a.aac.parseSampleRate(t)),n++,u+=o;break;default:u++}if(i)return null}if(null===r||null===s)return null;var d=9e4/r;return{audio:[{type:"audio",dts:s,pts:s},{type:"audio",dts:s+1024*n*d,pts:s+1024*n*d}]}},c=function(e){var t={pid:null,table:null},i={};o(e,t);for(var r in t.table)if(t.table.hasOwnProperty(r)){var a=t.table[r];switch(a){case n.H264_STREAM_TYPE:i.video=[],d(e,t,i),0===i.video.length&&delete i.video;break;case n.ADTS_STREAM_TYPE:i.audio=[],u(e,t,i),0===i.audio.length&&delete i.audio}}return i},h=function(e,t){var i,n=s(e);return(i=n?f(e):c(e))&&(i.audio||i.video)?(l(i,t),i):null};t.exports={inspect:h}},{}],60:[function(e,t,i){var n,r,a,s,o,u;n=function(e){return 9e4*e},r=function(e,t){return e*t},a=function(e){return e/9e4},s=function(e,t){return e/t},o=function(e,t){return n(s(e,t))},u=function(e,t){return r(a(e),t)},t.exports={secondsToVideoTs:n,secondsToAudioTs:r,videoTsToSeconds:a,audioTsToSeconds:s,audioTsToVideoTs:o,videoTsToAudioTs:u}},{}],61:[function(e,t,i){"use strict";var n;n=function(e){var t=e.byteLength,i=0,n=0;this.length=function(){return 8*t},this.bitsAvailable=function(){return 8*t+n},this.loadWord=function(){var r=e.byteLength-t,a=new Uint8Array(4),s=Math.min(4,t);if(0===s)throw new Error("no bytes available");a.set(e.subarray(r,r+s)),i=new DataView(a.buffer).getUint32(0),n=8*s,t-=s},this.skipBits=function(e){var r;n>e?(i<<=e,n-=e):(e-=n,r=Math.floor(e/8),e-=8*r,t-=r,this.loadWord(),i<<=e,n-=e)},this.readBits=function(e){var r=Math.min(n,e),a=i>>>32-r;return n-=r,n>0?i<<=r:t>0&&this.loadWord(),r=e-r,r>0?a<>>e))return i<<=e,n-=e,e;return this.loadWord(),e+this.skipLeadingZeros()},this.skipUnsignedExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.skipExpGolomb=function(){this.skipBits(1+this.skipLeadingZeros())},this.readUnsignedExpGolomb=function(){var e=this.skipLeadingZeros();return this.readBits(e+1)-1},this.readExpGolomb=function(){var e=this.readUnsignedExpGolomb();return 1&e?1+e>>>1:-1*(e>>>1)},this.readBoolean=function(){return 1===this.readBits(1)},this.readUnsignedByte=function(){return this.readBits(8)},this.loadWord()},t.exports=n},{}],62:[function(e,t,i){"use strict";var n=function(){this.init=function(){var e={};this.on=function(t,i){e[t]||(e[t]=[]),e[t]=e[t].concat(i)},this.off=function(t,i){var n;return!!e[t]&&(n=e[t].indexOf(i),e[t]=e[t].slice(),e[t].splice(n,1),n>-1)},this.trigger=function(t){var i,n,r,a;if(i=e[t])if(2===arguments.length)for(r=i.length,n=0;n1){var n=i[0].replace(/"/g,"").trim(),r=i[1].replace(/"/g,"").trim();t.parameters[n]=r}}),t},s=function(e){return e.map(function(e){return e.replace(/avc1\.(\d+)\.(\d+)/i,function(e,t,i){return"avc1."+("00"+Number(t).toString(16)).slice(-2)+"00"+("00"+Number(i).toString(16)).slice(-2)})})};i["default"]={isAudioCodec:n,parseContentType:a,isVideoCodec:r,translateLegacyCodecs:s},t.exports=i["default"]},{}],66:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n=function(e,t,i){var n=t.player_;if(i.captions&&i.captions.length){e.inbandTextTracks_||(e.inbandTextTracks_={});for(var r in i.captionStreams)if(!e.inbandTextTracks_[r]){n.tech_.trigger({type:"usage",name:"hls-608"});var a=n.textTracks().getTrackById(r);e.inbandTextTracks_[r]=a||n.addRemoteTextTrack({kind:"captions",id:r,label:r},!1).track}}i.metadata&&i.metadata.length&&!e.metadataTrack_&&(e.metadataTrack_=n.addRemoteTextTrack({kind:"metadata",label:"Timed Metadata"},!1).track,e.metadataTrack_.inBandMetadataTrackDispatchType=i.metadata.dispatchType)};i["default"]=n,t.exports=i["default"]},{}],67:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n={TIME_BETWEEN_CHUNKS:1,BYTES_PER_CHUNK:32768};i["default"]=n,t.exports=i["default"]},{}],68:[function(e,t,i){(function(n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(i,"__esModule",{value:!0});var o=function(){function e(e,t){for(var i=0;i=0&&(this.timestampOffset_=e,this.mediaSource_.swfObj.vjs_discontinuity(),this.basePtsOffset_=NaN,this.audioBufferEnd_=NaN,this.videoBufferEnd_=NaN,this.transmuxer_.postMessage({action:"reset"}))}}),Object.defineProperty(this,"buffered",{get:function(){if(!(this.mediaSource_&&this.mediaSource_.swfObj&&"vjs_getProperty"in this.mediaSource_.swfObj))return c["default"].createTimeRange();var e=this.mediaSource_.swfObj.vjs_getProperty("buffered");return e&&e.length&&(e[0][0]=P(e[0][0],3),e[0][1]=P(e[0][1],3)),c["default"].createTimeRanges(e)}}),this.mediaSource_.player_.on("seeked",function(){if((0,g["default"])(0,Infinity,i.metadataTrack_),i.inbandTextTracks_)for(var e in i.inbandTextTracks_)(0,g["default"])(0,Infinity,i.inbandTextTracks_[e])});var s=this.onHlsReset_.bind(this);this.mediaSource_.player_.tech_.on("hls-reset",s),this.mediaSource_.player_.tech_.hls.on("dispose",function(){i.transmuxer_.terminate(),i.mediaSource_.player_.tech_.off("hls-reset",s)})}return s(t,e),o(t,[{key:"appendBuffer",value:function(e){var t=undefined;if(this.updating)throw t=new Error("SourceBuffer.append() cannot be called while an update is in progress"),t.name="InvalidStateError",t.code=11,t;this.updating=!0,this.mediaSource_.readyState="open",this.trigger({type:"update"}),this.transmuxer_.postMessage({action:"push",data:e.buffer,byteOffset:e.byteOffset,byteLength:e.byteLength},[e.buffer]),this.transmuxer_.postMessage({action:"flush"})}},{key:"abort",value:function(){this.buffer_=[],this.bufferSize_=0,this.mediaSource_.swfObj.vjs_abort(),this.updating&&(this.updating=!1,this.trigger({type:"updateend"}))}},{key:"remove",value:function(e,t){if((0,g["default"])(e,t,this.metadataTrack_),this.inbandTextTracks_)for(var i in this.inbandTextTracks_)(0,g["default"])(e,t,this.inbandTextTracks_[i]);this.trigger({type:"update"}),this.trigger({type:"updateend"})}},{key:"receiveBuffer_",value:function(e){var t=this;(0,_["default"])(this,this.mediaSource_,e),(0,v.addTextTrackData)(this,e.captions,e.metadata),A(function(){var i=t.convertTagsToData_(e);0===t.buffer_.length&&A(t.processBuffer_.bind(t)),i&&(t.buffer_.push(i),t.bufferSize_+=i.byteLength)})}},{key:"processBuffer_",value:function(){var e=this,t=O["default"].BYTES_PER_CHUNK;if(!this.buffer_.length)return void(!1!==this.updating&&(this.updating=!1,this.trigger({type:"updateend"})));var i=this.buffer_[0].subarray(0,t);i.byteLength=n){for(;--d;){var l=a[d];if(!(l.pts>n)&&(l.keyFrame||l.metaDataTag))break}for(;d;){if(!a[d-1].metaDataTag)break;d--}}var f=a.slice(d),c=undefined;for(c=isNaN(this.audioBufferEnd_)?n:this.audioBufferEnd_+.1,f.length&&(c=Math.min(c,f[0].pts)),d=0;d=c);)d++;var h=s.slice(d);h.length&&(this.audioBufferEnd_=h[h.length-1].pts),f.length&&(this.videoBufferEnd_=f[f.length-1].pts);var p=this.getOrderedTags_(f,h);if(0!==p.length){if(p[0].ptsthis.nativeMediaSource_.duration||isNaN(this.nativeMediaSource_.duration))&&(this.nativeMediaSource_.duration=t)}},{key:"addSourceBuffer",value:function(e){var t=undefined,i=(0,_.parseContentType)(e);if(/^(video|audio)\/mp2t$/i.test(i.type)){var n=[];i.parameters&&i.parameters.codecs&&(n=i.parameters.codecs.split(","),n=(0,_.translateLegacyCodecs)(n),n=n.filter(function(e){return(0,_.isAudioCodec)(e)||(0,_.isVideoCodec)(e)})),0===n.length&&(n=["avc1.4d400d","mp4a.40.2"]),t=new g["default"](this,n),0!==this.sourceBuffers.length&&(this.sourceBuffers[0].createRealSourceBuffers_(),t.createRealSourceBuffers_(),this.sourceBuffers[0].audioDisabled_=!0)}else t=this.nativeMediaSource_.addSourceBuffer(e);return this.sourceBuffers.push(t),t}}]),t}(p["default"].EventTarget);i["default"]=v,t.exports=i["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],72:[function(e,t,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var n=function(e,t,i){var n=undefined,r=undefined;if(i&&i.cues)for(n=i.cues.length;n--;)r=i.cues[n],r.startTime<=t&&r.endTime>=e&&i.removeCue(r)};i["default"]=n,t.exports=i["default"]},{}],73:[function(e,t,i){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var a=function(){function e(e,t){for(var i=0;in);r++);return e.slice(r)};i.gopsSafeToAlignWith=S;var w=function(e,t,i){if(!t.length)return e;if(i)return t.slice();var n=t[0].pts,r=0;for(r;r=n);r++);return e.slice(0,r).concat(t)};i.updateGopBuffer=w;var k=function(e,t,i,n){for(var r=Math.ceil(9e4*(t-n)),a=Math.ceil(9e4*(i-n)),s=e.slice(),o=e.length;o--&&!(e[o].pts<=a););if(-1===o)return s;for(var u=o+1;u--&&!(e[u].pts<=r););return u=Math.max(u,0),s.splice(u,o-u+1),s};i.removeGopBuffer=k;var O=function(e){function t(e,i){var n=this;r(this,t),o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,d["default"].EventTarget),this.timestampOffset_=0,this.pendingBuffers_=[],this.bufferUpdating_=!1,this.mediaSource_=e,this.codecs_=i,this.audioCodec_=null,this.videoCodec_=null,this.audioDisabled_=!1,this.appendAudioInitSegment_=!0,this.gopBuffer_=[],this.timeMapping_=0,this.safeAppend_=d["default"].browser.IE_VERSION>=11;var a={remux:!1,alignGopsAtEnd:this.safeAppend_};this.codecs_.forEach(function(e){(0,v.isAudioCodec)(e)?n.audioCodec_=e:(0,v.isVideoCodec)(e)&&(n.videoCodec_=e)}),this.transmuxer_=(0,g["default"])(_["default"],b()),this.transmuxer_.postMessage({action:"init",options:a}),this.transmuxer_.onmessage=function(e){return"data"===e.data.action?n.data_(e):"done"===e.data.action?n.done_(e):"gopInfo"===e.data.action?n.appendGopInfo_(e):void 0},Object.defineProperty(this,"timestampOffset",{get:function(){return this.timestampOffset_},set:function(e){"number"==typeof e&&e>=0&&(this.timestampOffset_=e,this.appendAudioInitSegment_=!0,this.gopBuffer_.length=0,this.timeMapping_=0,this.transmuxer_.postMessage({action:"setTimestampOffset",timestampOffset:e}))}}),Object.defineProperty(this,"appendWindowStart",{get:function(){return(this.videoBuffer_||this.audioBuffer_).appendWindowStart},set:function(e){this.videoBuffer_&&(this.videoBuffer_.appendWindowStart=e),this.audioBuffer_&&(this.audioBuffer_.appendWindowStart=e)}}),Object.defineProperty(this,"updating",{get:function(){return!!(this.bufferUpdating_||!this.audioDisabled_&&this.audioBuffer_&&this.audioBuffer_.updating||this.videoBuffer_&&this.videoBuffer_.updating)}}),Object.defineProperty(this,"buffered",{get:function(){var e=null,t=null,i=0,n=[],r=[];if(!this.videoBuffer_&&!this.audioBuffer_)return d["default"].createTimeRange();if(!this.videoBuffer_)return this.audioBuffer_.buffered;if(!this.audioBuffer_)return this.videoBuffer_.buffered;if(this.audioDisabled_)return this.videoBuffer_.buffered;if(0===this.videoBuffer_.buffered.length&&0===this.audioBuffer_.buffered.length)return d["default"].createTimeRange();for(var a=this.videoBuffer_.buffered,s=this.audioBuffer_.buffered,o=a.length;o--;)n.push({time:a.start(o),type:"start"}),n.push({time:a.end(o),type:"end"});for(o=s.length;o--;)n.push({time:s.start(o),type:"start"}),n.push({time:s.end(o),type:"end"});for(n.sort(function(e,t){return e.time-t.time}),o=0;o0?1/this.throughput:0,Math.floor(1/(e+t))},set:function(){w["default"].log.error('The "systemBandwidth" property is read-only')}}}),Object.defineProperties(this.stats,{bandwidth:{get:function(){return t.bandwidth||0},enumerable:!0},mediaRequests:{get:function(){return t.masterPlaylistController_.mediaRequests_()||0},enumerable:!0},mediaRequestsAborted:{get:function(){return t.masterPlaylistController_.mediaRequestsAborted_()||0},enumerable:!0},mediaRequestsTimedout:{get:function(){return t.masterPlaylistController_.mediaRequestsTimedout_()||0},enumerable:!0},mediaRequestsErrored:{get:function(){return t.masterPlaylistController_.mediaRequestsErrored_()||0},enumerable:!0},mediaTransferDuration:{get:function(){return t.masterPlaylistController_.mediaTransferDuration_()||0},enumerable:!0},mediaBytesTransferred:{get:function(){return t.masterPlaylistController_.mediaBytesTransferred_()||0},enumerable:!0},mediaSecondsLoaded:{get:function(){return t.masterPlaylistController_.mediaSecondsLoaded_()||0},enumerable:!0}}),this.tech_.one("canplay",this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_)),this.masterPlaylistController_.on("selectedinitialmedia",function(){(0,L["default"])(t)}),this.on(this.masterPlaylistController_,"progress",function(){this.tech_.trigger("progress")}),this.on(this.masterPlaylistController_,"firstplay",function(){this.ignoreNextSeekingEvent_=!0}),this.tech_.ready(function(){return t.setupQualityLevels_()}),this.tech_.el()&&this.tech_.src(w["default"].URL.createObjectURL(this.masterPlaylistController_.mediaSource)))}},{key:"setupQualityLevels_",value:function(){var e=this,t=w["default"].players[this.tech_.options_.playerId];t&&t.qualityLevels&&(this.qualityLevels_=t.qualityLevels(),this.masterPlaylistController_.on("selectedinitialmedia",function(){j(e.qualityLevels_,e)}),this.playlists.on("mediachange",function(){B(e.qualityLevels_,e.playlists)}))}},{key:"play",value:function(){this.masterPlaylistController_.play()}},{key:"setCurrentTime",value:function(e){this.masterPlaylistController_.setCurrentTime(e)}},{key:"duration",value:function(){return this.masterPlaylistController_.duration()}},{key:"seekable",value:function(){return this.masterPlaylistController_.seekable()}},{key:"dispose",value:function(){this.playbackWatcher_&&this.playbackWatcher_.dispose(),this.masterPlaylistController_&&this.masterPlaylistController_.dispose(),this.qualityLevels_&&this.qualityLevels_.dispose(),o(Object.getPrototypeOf(t.prototype),"dispose",this).call(this)}}]),t}(N),q=function H(e){return{canHandleSource:function(t){var i=arguments.length<=1||arguments[1]===undefined?{}:arguments[1],n=w["default"].mergeOptions(w["default"].options,i);return(!n.hls||!n.hls.mode||n.hls.mode===e)&&H.canPlayType(t.type,n)},handleSource:function(t,i){var n=arguments.length<=2||arguments[2]===undefined?{}:arguments[2],r=w["default"].mergeOptions(w["default"].options,n,{hls:{mode:e}});return"flash"===e&&i.setTimeout(function(){i.trigger("loadstart")},1),i.hls=new F(t,i,r),i.hls.xhr=(0,m["default"])(),i.hls.src(t.src),i.hls},canPlayType:function(e){var t=arguments.length<=1||arguments[1]===undefined?{}:arguments[1],i=w["default"].mergeOptions(w["default"].options,t);return H.canPlayType(e,i)?"maybe":""}}};q.canPlayType=function(e,t){if(w["default"].browser.IE_VERSION&&w["default"].browser.IE_VERSION<=10)return!1;var i=/^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i;return!(!t.hls.overrideNative&&x.supportsNativeHls)&&i.test(e)},"undefined"!=typeof w["default"].MediaSource&&"undefined"!=typeof w["default"].URL||(w["default"].MediaSource=v.MediaSource,w["default"].URL=v.URL);var G=w["default"].getTech("Flash");v.MediaSource.supportsNativeMediaSources()&&w["default"].getTech("Html5").registerSourceHandler(q("html5"),0),I["default"].Uint8Array&&G&&G.registerSourceHandler(q("flash")),w["default"].HlsHandler=F,w["default"].HlsSourceHandler=q,w["default"].Hls=x,w["default"].use||w["default"].registerComponent("Hls",x),w["default"].m3u8=T["default"],w["default"].options.hls=w["default"].options.hls||{},w["default"].registerPlugin?w["default"].registerPlugin("reloadSourceOnError",D["default"]):w["default"].plugin("reloadSourceOnError",D["default"]),t.exports={Hls:x,HlsHandler:F,HlsSourceHandler:q}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[77]);
\ No newline at end of file
diff --git a/static/wf.svg b/static/wf.svg
deleted file mode 100644
index ca782b4..0000000
--- a/static/wf.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file