Update es-419.coffee

Update es-419.coffee

--- app/locale/es-419.coffee
+++ app/locale/es-419.coffee
@@ -64,7 +64,7 @@
     achievements: "Logros" # Tooltip on achievement list button from /play
     account: "Cuenta" # Tooltip on account button from /play
     settings: "Configuración" # Tooltip on settings button from /play
-#    poll: "Poll" # Tooltip on poll button from /play
+    poll: "Encuestas" # Tooltip on poll button from /play
     next: "Próximo" # Go from choose hero to choose inventory before playing a level
     change_hero: "Cambiar héroe" # Go back from choose inventory to choose hero
     choose_inventory: "Equipar objetos"
@@ -728,7 +728,7 @@
     thang_title: "Editor de Thangs"
     level_title: "Editor de Nivel"
     achievement_title: "Editor de logros"
-#    poll_title: "Poll Editor"
+    poll_title: "Editor de Encuesta"
     back: "Atrás"
     revert: "Revertir"
     revert_models: "Revertir Modelos"
@@ -789,13 +789,13 @@
     new_level_title_login: "Ingresa para Crear un Nuevo Nivel"
     new_achievement_title: "Crear un Nuevo Logro"
     new_achievement_title_login: "Ingresa para Crear un Nuevo Logro"
-#    new_poll_title: "Create a New Poll"
-#    new_poll_title_login: "Log In to Create a New Poll"
+    new_poll_title: "Crear una nueva encuesta"
+    new_poll_title_login: "Ingresa para crear una nueva encuesta"
     article_search_title: "Buscar Artículos aquí"
     thang_search_title: "Buscar tipos de Thang aquí"
     level_search_title: "Buscar Niveles aquí"
     achievement_search_title: "Buscar logros"
-#    poll_search_title: "Search Polls"
+    poll_search_title: "Buscar Encuesta"
     read_only_warning2: "Nota: no puedes guardar ediciones aquí, porque no estas logeado."
     no_achievements: "No hay logros agregados en este nivel por ahora."
 #    achievement_query_misc: "Key achievement off of miscellanea"
@@ -973,7 +973,7 @@
     payments: "Pagos"
     purchased: "Comprado"
     subscription: "Suscripción"
-#    invoices: "Invoices"
+    invoices: "Facturas"
     service_apple: "Apple"
     service_web: "Web"
     paid_on: "Pagado en"
@@ -990,15 +990,15 @@
     status_unsubscribed_active: "No estas suscripto y no se te cobrará, pero tu cuenta está activa por ahora."
     status_unsubscribed: "Obtén acceso a nuevos niveles, heroés, items y gemas extras con la suscripción a CodeCombat!"

-#  account_invoices:
-#    amount: "Amount in US dollars"
-#    declined: "Your card was declined"
-#    invalid_amount: "Please enter a US dollar amount."
-#    not_logged_in: "Log in or create an account to access invoices."
-#    pay: "Pay Invoice"
-#    purchasing: "Purchasing..."
-#    retrying: "Server error, retrying."
-#    success: "Successfully paid. Thanks!"
+  account_invoices:
+    amount: "Cantidad en dólares."
+    declined: "La tarjeta fue rechazada."
+    invalid_amount: "Por favor ingrese cantidad en dólares."
+    not_logged_in: "Ingresate o crea una cuenta para acceder a las facturas."
+    pay: "Pagar Factura"
+    purchasing: "Comprando..."
+    retrying: "Error de Servidor, reintentando..."
+    success: "Listo, fue cobrado. Gracias!"

   loading_error:
     could_not_load: "Error cargando del servidor"
@@ -1060,8 +1060,8 @@
     feedback: "Feedback"
     payment_info: "Información de pago"
     campaigns: "Campañas"
-#    poll: "Poll"
-#    user_polls_record: "Poll Voting History"
+    poll: "Encuesta"
+    user_polls_record: "Historia de Visitas de Encuestas"

   delta:
     added: "Agregado"


Tweak debug js

Tweak debug js

--- assets/javascripts/debug.js.coffee
+++ assets/javascripts/debug.js.coffee
@@ -13,15 +13,17 @@

 _start = app.start
 app.start = ->
+  console.timeEnd 'Load'
+  console.time 'Start'
   _start.call(app, arguments...)
-  console.timeEnd 'Load'
-
-_super = app.Searcher
-_proto = app.Searcher.prototype
+  console.timeEnd 'Start'

 #
 # Searcher
 #
+
+_super = app.Searcher
+_proto = app.Searcher.prototype

 app.Searcher = ->
   _super.apply @, arguments


Fix rotating file logger

Fix rotating file logger

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/lectern/lectern-core.git/'


Implemented reverse sorting of backbone collection

--- app/views/play/ladder_view.coffee
+++ app/views/play/ladder_view.coffee
@@ -105,6 +105,10 @@
     _.extend @, Backbone.Events
     @topPlayers = new LeaderboardCollection(@level, {order:-1, scoreOffset: HIGHEST_SCORE, team: @team, limit: if @session then 10 else 20})
     @topPlayers.fetch()
+    @topPlayers.comparator = (model) ->
+      return -model.get('totalScore')
+    @topPlayers.sort()
+
     @topPlayers.once 'sync', @leaderboardPartLoaded, @

 #    if @session


Create tokenizer

Create tokenizer

error: pathspec 'source/index.coffee' did not match any file(s) known to git

--- source/index.coffee
+++ source/index.coffee
@@ -0,0 +1,56 @@
+configure = ($ = {}) ->
+
+  $.assign ?= (target, source) ->
+    target[key] = val for own key, val of source
+
+  $.require ?= (path) -> require path
+
+  class Tokenizer
+    marked: null
+
+    constructor: (props) ->
+      $.assign this, props
+      @marked ?= $.require("marked")
+
+    isExampleToken: (mdToken) ->
+      mdToken.type is "heading" and /^example/i.test mdToken.text
+
+    isContextToken: (mdToken) ->
+      mdToken.type is "heading" and !@isExampleToken mdToken
+
+    isCodeToken: (mdToken) ->
+      mdToken.type is "code"
+
+    createExampleToken: (mdToken) ->
+      type: "example"
+      text: mdToken.text
+      depth: mdToken.depth
+
+    createContextToken: (mdToken) ->
+      type: "context"
+      text: mdToken.text
+      depth: mdToken.depth
+
+    createCodeToken: (mdToken) ->
+      type: "code"
+      text: mdToken.text
+
+    processMarkdownToken: (tokens, mdToken) ->
+      createToken = switch
+        when @isExampleToken mdToken then @createExampleToken
+        when @isContextToken mdToken then @createContextToken
+        when @isCodeToken mdToken then @createCodeToken
+
+      tokens = tokens.concat createToken(mdToken) if createToken?
+      return tokens
+
+    tokenizeMarkdown: (markdown) ->
+      @marked.lexer markdown
+
+    tokenize: (markdown) ->
+      mdTokens = @tokenizeMarkdown markdown
+      mdTokens.reduce @processMarkdownToken.bind(this), []
+
+  Tokenizer: Tokenizer
+
+module.exports = configure()


collider uses space partition

collider uses space partition

error: pathspec 'test/collider.coffee' did not match any file(s) known to git

--- test/collider.coffee
+++ test/collider.coffee
@@ -0,0 +1,89 @@
+Collider = require '../lib/collider'
+ADT = require '../lib/adt'
+Bounds = ADT.Bounds
+
+Collidable = Collider.Collidable
+
+describe 'Collidable', ->
+  it 'should construct correctly', ->
+    a = new Collidable
+      layer: 'a'
+      layersToCollide: ['a']
+      bounds: new Bounds
+        radius: 10
+    a.layer.should.equal 'a'
+    a.layersToCollide[0].should.equal 'a'
+    a.bounds.radius.should.equal 10
+
+describe 'Collider', ->
+  it 'should add/remove correctly', ->
+    a = new Collidable
+      layer: 'a'
+      layersToCollide: ['a']
+      bounds: new Bounds
+        radius: 10
+    b = new Collidable
+      layer: 'b'
+      layersToCollide: ['a']
+      bounds: new Bounds
+        radius: 10
+    collider = new Collider.Collider
+    collider.add(a)
+    collider.add(b)
+
+    collider.objects.a[0].should.equal a
+    collider.objects.b[0].should.equal b
+
+    collider.remove(a)
+    collider.remove(b)
+
+    collider.objects.a.length.should.equal 0
+    collider.objects.b.length.should.equal 0
+  it 'should collide correctly', ->
+    class ColliderTracker extends Collider.Collider
+      collideObjects: (o1, o2)->
+        return true
+
+    a = new Collidable
+      layer: 'a'
+      layersToCollide: ['a']
+      bounds: new Bounds
+        radius: 10
+    a.position =
+      x: 0
+      y: 0
+    b = new Collidable
+      layer: 'b'
+      layersToCollide: ['a']
+      bounds: new Bounds
+        radius: 10
+    b.position =
+      x: 0
+      y: 0
+    c = new Collidable
+      layer: 'c'
+      layersToCollide: ['a', 'b']
+      bounds: new Bounds
+        radius: 10
+    c.position =
+      x: 0
+      y: 0
+
+    collider = new ColliderTracker
+
+    collider.add(a)
+    collider.add(b)
+    collider.add(c)
+
+    collisions = collider.collide()
+
+    #does not collide by itself
+    #b collides with a
+
+    collisions.length.should.equal 3
+    collisions[0].object1.should.equal b
+    collisions[0].object2.should.equal a
+    collisions[1].object1.should.equal c
+    collisions[1].object2.should.equal a
+    collisions[2].object1.should.equal c
+    collisions[2].object2.should.equal b


Add a vote click handler stub

Add a vote click handler stub

error: pathspec 'assets/js/vote.js.coffee' did not match any file(s) known to git

--- assets/js/vote.js.coffee
+++ assets/js/vote.js.coffee
@@ -0,0 +1,14 @@
+$ ->
+  $('.vote').on 'click', (event) ->
+    do event.preventDefault
+    return unless (comicID = $(this).data 'id')
+    $counter = $('.number-of-votes')
+    count = parseInt $counter.text()
+    count = 0 if isNaN(count)
+
+    console.log "Vote on: #{comicID} with #{count} votes so far"
+
+    # TODO: Make a call, then on success
+    do ->
+      count += 1
+      $counter.text count


update atom config

update atom config

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/allanbreyes/dotfiles-1.git/'


Updated data from playtime breakdown script.

--- scripts/mongodb/queries/playtime-breakdown.coffee
+++ scripts/mongodb/queries/playtime-breakdown.coffee
@@ -91,3 +91,74 @@
   "criss-cross" : 1,
 }
 """
+
+# With usernames, 3 days instead of 1:
+"""
+Found 532 users who played more than an hour out of 277828.
+>
+> print("Levels by number of users completing:");
+Levels by number of users completing:
+>
+> levelUserCounts;
+{
+  "dungeons-of-kithgard" : 524,
+  "gems-in-the-deep" : 513,
+  "shadow-guard" : 515,
+  "kounter-kithwise" : 229,
+  "forgetful-gemsmith" : 520,
+  "true-names" : 516,
+  "favorable-odds" : 216,
+  "the-raised-sword" : 504,
+  "haunted-kithmaze" : 494,
+  "the-second-kithmaze" : 472,
+  "dread-door" : 475,
+  "known-enemy" : 463,
+  "master-of-names" : 440,
+  "lowly-kithmen" : 403,
+  "closing-the-distance" : 393,
+  "tactical-strike" : 139,
+  "the-final-kithmaze" : 321,
+  "the-gauntlet" : 113,
+  "kithgard-gates" : 253,
+  "defense-of-plainswood" : 236,
+  "descending-further" : 200,
+  "winding-trail" : 196,
+  "endangered-burl" : 133,
+  "village-guard" : 118,
+  "thornbush-farm" :  89,
+  "back-to-back" :  77,
+  "ogre-encampment" :  66,
+  "woodland-cleaver" :  56,
+  "shield-rush" :  32,
+  "peasant-protection" :  30,
+  "munchkin-swarm" :  28,
+  "munchkin-harvest" :   9,
+  "swift-dagger" :   3,
+  "shrapnel" :   1,
+  "arcane-ally" :  10,
+  "bonemender" :   4,
+  "coinucopia" :  21,
+  "copper-meadows" :  17,
+  "drop-the-flag" :  11,
+  "deadly-pursuit" :  13,
+  "rich-forager" :   6,
+
+  "undefined" :   8,
+  "dungeon-arena-tutorial" :   8,
+  "dungeon-arena" :   8,
+  "grab-the-mushroom" :   6,
+  "gold-rush" :   6,
+  "criss-cross" :   4,
+  "rescue-mission" :   3,
+  "touch-of-death" :   2,
+  "taunt-the-guards" :   1,
+  "taunt" :   1,
+  "sky-span" :   1,
+  "greed" :   1,
+  "dungeon-battle" :   1,
+  "drink-me" :   1,
+  "cowardly-taunt" :   1,
+  "bubble-sort-bootcamp-battle" :   1,
+  "break-the-prison" :   1
+}
+"""


fix menu behavior

fix menu behavior

--- client/app/components/menu.coffee
+++ client/app/components/menu.coffee
@@ -128,10 +128,10 @@
                 fullWidth: true # /!\ Hide second panel when switching account

         toggleActive = =>
-            if isSelected
-                @setState displayActiveAccount: not @state.displayActiveAccount
-            else
-                @setState displayActiveAccount: true
+            #if isSelected
+                #@setState displayActiveAccount: not @state.displayActiveAccount
+            #else
+            @setState displayActiveAccount: true
         nbTotal  = 0
         nbUnread = 0
         nbNew    = 0


fixes

fixes

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/bubblegroup/bubblebot.git/'


handling lowercasing better

handling lowercasing better


bug fixes

bug fixes


Storage for basic ship info.

Storage for basic ship info.

error: pathspec 'coffeescripts/cards-common.coffee' did not match any file(s) known to git

--- coffeescripts/cards-common.coffee
+++ coffeescripts/cards-common.coffee
@@ -0,0 +1,2346 @@
+# This must be loaded before any of the card language modules!
+exportObj = exports ? this
+
+exportObj.basicCardData =
+    ships:
+        "X-Wing":
+            name: "X-Wing"
+            faction: "Rebel Alliance"
+            attack: 3
+            agility: 2
+            hull: 3
+            shields: 2
+            actions: [
+                "Focus"
+                "Target Lock"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 0, 2, 2, 2, 0, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 1, 1, 1, 1, 1, 0]
+              [ 0, 0, 1, 0, 0, 3]
+            ]
+        "Y-Wing":
+            name: "Y-Wing"
+            faction: "Rebel Alliance"
+            attack: 2
+            agility: 1
+            hull: 5
+            shields: 3
+            actions: [
+                "Focus"
+                "Target Lock"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 0, 1, 2, 1, 0, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 3, 1, 1, 1, 3, 0]
+              [ 0, 0, 3, 0, 0, 3]
+            ]
+        "A-Wing":
+            name: "A-Wing"
+            faction: "Rebel Alliance"
+            attack: 2
+            agility: 3
+            hull: 2
+            shields: 2
+            actions: [
+                "Focus"
+                "Target Lock"
+                "Boost"
+                "Evade"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 1, 0, 0, 0, 1, 0]
+              [ 2, 2, 2, 2, 2, 0]
+              [ 1, 1, 2, 1, 1, 3]
+              [ 0, 0, 2, 0, 0, 0]
+              [ 0, 0, 2, 0, 0, 3]
+            ]
+        "YT-1300":
+            name: "YT-1300"
+            faction: "Rebel Alliance"
+            attack: 2
+            agility: 1
+            hull: 6
+            shields: 4
+            actions: [
+                "Focus"
+                "Target Lock"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 1, 2, 2, 2, 1, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 0, 1, 1, 1, 0, 3]
+              [ 0, 0, 1, 0, 0, 3]
+            ]
+            large: true
+        "TIE Fighter":
+            name: "TIE Fighter"
+            faction: "Galactic Empire"
+            attack: 2
+            agility: 3
+            hull: 3
+            shields: 0
+            actions: [
+                "Focus"
+                "Barrel Roll"
+                "Evade"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 1, 0, 0, 0, 1, 0]
+              [ 1, 2, 2, 2, 1, 0]
+              [ 1, 1, 2, 1, 1, 3]
+              [ 0, 0, 1, 0, 0, 3]
+              [ 0, 0, 1, 0, 0, 0]
+            ]
+        "TIE Advanced":
+            name: "TIE Advanced"
+            faction: "Galactic Empire"
+            attack: 2
+            agility: 3
+            hull: 3
+            shields: 2
+            actions: [
+                "Focus"
+                "Target Lock"
+                "Barrel Roll"
+                "Evade"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 0, 2, 0, 2, 0, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 0, 0, 1, 0, 0, 3]
+              [ 0, 0, 1, 0, 0, 0]
+            ]
+        "TIE Interceptor":
+            name: "TIE Interceptor"
+            faction: "Galactic Empire"
+            attack: 3
+            agility: 3
+            hull: 3
+            shields: 0
+            actions: [
+                "Focus"
+                "Barrel Roll"
+                "Boost"
+                "Evade"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 1, 0, 0, 0, 1, 0]
+              [ 2, 2, 2, 2, 2, 0]
+              [ 1, 1, 2, 1, 1, 3]
+              [ 0, 0, 2, 0, 0, 0]
+              [ 0, 0, 1, 0, 0, 3]
+            ]
+        "Firespray-31":
+            name: "Firespray-31"
+            faction: "Galactic Empire"
+            attack: 3
+            agility: 2
+            hull: 6
+            shields: 4
+            actions: [
+                "Focus"
+                "Target Lock"
+                "Evade"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 0, 2, 2, 2, 0, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 1, 1, 1, 1, 1, 3]
+              [ 0, 0, 1, 0, 0, 3]
+            ]
+            large: true
+        "HWK-290":
+            name: "HWK-290"
+            faction: "Rebel Alliance"
+            attack: 1
+            agility: 2
+            hull: 4
+            shields: 1
+            actions: [
+                "Focus"
+                "Target Lock"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0]
+              [ 0, 2, 2, 2, 0]
+              [ 1, 1, 2, 1, 1]
+              [ 0, 3, 1, 3, 0]
+              [ 0, 0, 3, 0, 0]
+            ]
+        "Lambda-Class Shuttle":
+            name: "Lambda-Class Shuttle"
+            faction: "Galactic Empire"
+            attack: 3
+            agility: 1
+            hull: 5
+            shields: 5
+            actions: [
+                "Focus"
+                "Target Lock"
+            ]
+            maneuvers: [
+              [ 0, 0, 3, 0, 0]
+              [ 0, 2, 2, 2, 0]
+              [ 3, 1, 2, 1, 3]
+              [ 0, 3, 1, 3, 0]
+            ]
+            large: true
+        "B-Wing":
+            name: "B-Wing"
+            faction: "Rebel Alliance"
+            attack: 3
+            agility: 1
+            hull: 3
+            shields: 5
+            actions: [
+                "Focus"
+                "Target Lock"
+                "Barrel Roll"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 3, 2, 2, 2, 3, 0]
+              [ 1, 1, 2, 1, 1, 3]
+              [ 0, 3, 1, 3, 0, 0]
+              [ 0, 0, 3, 0, 0, 0]
+            ]
+        "TIE Bomber":
+            name: "TIE Bomber"
+            faction: "Galactic Empire"
+            attack: 2
+            agility: 2
+            hull: 6
+            shields: 0
+            actions: [
+                "Focus"
+                "Target Lock"
+                "Barrel Roll"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 0, 1, 2, 1, 0, 0]
+              [ 3, 1, 2, 1, 3, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 0, 0, 1, 0, 0, 0]
+              [ 0, 0, 0, 0, 0, 3]
+            ]
+        "GR-75 Medium Transport":
+            name: "GR-75 Medium Transport"
+            faction: "Rebel Alliance"
+            energy: 4
+            agility: 0
+            hull: 8
+            shields: 4
+            actions: [
+                "Recover"
+                "Reinforce"
+                "Coordinate"
+                "Jam"
+            ]
+            huge: true
+        "Z-95 Headhunter":
+            name: "Z-95 Headhunter"
+            faction: "Rebel Alliance"
+            attack: 2
+            agility: 2
+            hull: 2
+            shields: 2
+            actions: [
+                "Focus"
+                "Target Lock"
+            ]
+            maneuvers: [
+              [ 0, 0, 0, 0, 0, 0]
+              [ 0, 1, 2, 1, 0, 0]
+              [ 1, 1, 2, 1, 1, 0]
+              [ 1, 1, 1, 1, 1, 0]
+              [ 0, 0, 3, 0, 0, 3]
+            ]
+        "TIE Defender":
+            name: "TIE Defender"
+            faction: "Galactic Empire"
+            attack: 3
+            agility: 3
+            hull: 3
+            shields: 3
+            actions: [
+                "Focus"
+                "Target Lock"
+                "Barrel Roll"
+            ]
+        "E-Wing":
+            name: "E-Wing"
+            faction: "Rebel Alliance"
+            attack: 3
+            agility: 3
+            hull: 2
+            shields: 3
+            actions: [
+                "Focus"
+                "Target Lock"
+                "Barrel Roll"
+                "Evade"
+            ]
+        "TIE Phantom":
+            name: "TIE Phantom"
+            faction: "Galactic Empire"
+            attack: 4
+            agility: 2
+            hull: 2
+            shields: 2
+            actions: [
+                "Focus"
+                "Barrel Roll"
+                "Evade"
+                "Cloak"
+            ]
+        "CR90 Corvette (Fore)":
+            name: "CR90 Corvette (Fore)"
+            faction: "Rebel Alliance"
+            attack: 4
+            agility: 0
+            hull: 8
+            shields: 5
+            actions: [
+                "Coordinate"
+                "Target Lock"
+            ]
+            huge: true
+        "CR90 Corvette (Aft)":
+            name: "CR90 Corvette (Aft)"
+            faction: "Rebel Alliance"
+            energy: 5
+            agility: 0
+            hull: 8
+            shields: 3
+            actions: [
+                "Reinforce"
+                "Jam"
+            ]
+            huge: true
+
+    # name field is for convenience only
+    pilotsById: [
+        {
+            name: "Wedge Antilles"
+            id: 0
+            sources: [ "X-Wing Expansion Pack", ]
+            unique: true
+            ship: "X-Wing"
+            skill: 9
+            points: 29
+            slots: [
+                "Elite"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Garven Dreis"
+            id: 1
+            sources: [ "X-Wing Expansion Pack", ]
+            unique: true
+            ship: "X-Wing"
+            skill: 6
+            points: 26
+            slots: [
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Red Squadron Pilot"
+            id: 2
+            sources: [ "Core", "X-Wing Expansion Pack", ]
+            ship: "X-Wing"
+            skill: 4
+            points: 23
+            slots: [
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Rookie Pilot"
+            id: 3
+            sources: [ "Core", "X-Wing Expansion Pack", ]
+            ship: "X-Wing"
+            skill: 2
+            points: 21
+            slots: [
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Biggs Darklighter"
+            id: 4
+            unique: true
+            sources: [ "Core", ]
+            ship: "X-Wing"
+            skill: 5
+            points: 25
+            slots: [
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Luke Skywalker"
+            id: 5
+            unique: true
+            sources: [ "Core", ]
+            ship: "X-Wing"
+            skill: 8
+            points: 28
+            slots: [
+                "Elite"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Gray Squadron Pilot"
+            id: 6
+            ship: "Y-Wing"
+            sources: [ "Y-Wing Expansion Pack", ]
+            skill: 4
+            points: 20
+            slots: [
+                "Turret"
+                "Torpedo"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: '"Dutch" Vander'
+            id: 7
+            unique: true
+            ship: "Y-Wing"
+            sources: [ "Y-Wing Expansion Pack", ]
+            skill: 6
+            points: 23
+            slots: [
+                "Turret"
+                "Torpedo"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Horton Salm"
+            id: 8
+            unique: true
+            ship: "Y-Wing"
+            sources: [ "Y-Wing Expansion Pack", ]
+            skill: 8
+            points: 25
+            slots: [
+                "Turret"
+                "Torpedo"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Gold Squadron Pilot"
+            id: 9
+            ship: "Y-Wing"
+            sources: [ "Y-Wing Expansion Pack", ]
+            skill: 2
+            points: 18
+            slots: [
+                "Turret"
+                "Torpedo"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Academy Pilot"
+            id: 10
+            ship: "TIE Fighter"
+            sources: [ "Core", "TIE Fighter Expansion Pack", ]
+            skill: 1
+            points: 12
+            slots: []
+        }
+        {
+            name: "Obsidian Squadron Pilot"
+            id: 11
+            ship: "TIE Fighter"
+            sources: [ "Core", "TIE Fighter Expansion Pack", ]
+            skill: 3
+            points: 13
+            slots: []
+        }
+        {
+            name: "Black Squadron Pilot"
+            id: 12
+            ship: "TIE Fighter"
+            sources: [ "Core", "TIE Fighter Expansion Pack", ]
+            skill: 4
+            points: 14
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: '"Winged Gundark"'
+            id: 13
+            unique: true
+            ship: "TIE Fighter"
+            sources: [ "TIE Fighter Expansion Pack", ]
+            skill: 5
+            points: 15
+            slots: [ ]
+        }
+        {
+            name: '"Night Beast"'
+            id: 14
+            unique: true
+            ship: "TIE Fighter"
+            sources: [ "Core", ]
+            skill: 5
+            points: 15
+            slots: [ ]
+        }
+        {
+            name: '"Backstabber"'
+            id: 15
+            unique: true
+            ship: "TIE Fighter"
+            sources: [ "TIE Fighter Expansion Pack", ]
+            skill: 6
+            points: 16
+            slots: [ ]
+        }
+        {
+            name: '"Dark Curse"'
+            id: 16
+            unique: true
+            ship: "TIE Fighter"
+            sources: [ "Core", ]
+            skill: 6
+            points: 16
+            slots: [ ]
+        }
+        {
+            name: '"Mauler Mithel"'
+            id: 17
+            unique: true
+            ship: "TIE Fighter"
+            sources: [ "Core", ]
+            skill: 7
+            points: 17
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: '"Howlrunner"'
+            id: 18
+            unique: true
+            ship: "TIE Fighter"
+            sources: [ "TIE Fighter Expansion Pack", ]
+            skill: 8
+            points: 18
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: "Maarek Stele"
+            id: 19
+            unique: true
+            ship: "TIE Advanced"
+            sources: [ "TIE Advanced Expansion Pack", ]
+            skill: 7
+            points: 27
+            slots: [
+                "Elite"
+                "Missile"
+            ]
+        }
+        {
+            name: "Tempest Squadron Pilot"
+            id: 20
+            ship: "TIE Advanced"
+            sources: [ "TIE Advanced Expansion Pack", ]
+            skill: 2
+            points: 21
+            slots: [
+                "Missile"
+            ]
+        }
+        {
+            name: "Storm Squadron Pilot"
+            id: 21
+            ship: "TIE Advanced"
+            sources: [ "TIE Advanced Expansion Pack", ]
+            skill: 4
+            points: 23
+            slots: [
+                "Missile"
+            ]
+        }
+        {
+            name: "Darth Vader"
+            id: 22
+            unique: true
+            ship: "TIE Advanced"
+            sources: [ "TIE Advanced Expansion Pack", ]
+            skill: 9
+            points: 29
+            slots: [
+                "Elite"
+                "Missile"
+            ]
+        }
+        {
+            name: "Alpha Squadron Pilot"
+            id: 23
+            ship: "TIE Interceptor"
+            sources: [ "TIE Interceptor Expansion Pack", ]
+            skill: 1
+            points: 18
+            slots: [ ]
+        }
+        {
+            name: "Avenger Squadron Pilot"
+            id: 24
+            ship: "TIE Interceptor"
+            sources: [ "TIE Interceptor Expansion Pack", ]
+            skill: 3
+            points: 20
+            slots: [ ]
+        }
+        {
+            name: "Saber Squadron Pilot"
+            id: 25
+            ship: "TIE Interceptor"
+            sources: [
+                "TIE Interceptor Expansion Pack"
+                "Imperial Aces Expansion Pack"
+            ]
+            skill: 4
+            points: 21
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: "\"Fel's Wrath\""
+            id: 26
+            unique: true
+            ship: "TIE Interceptor"
+            sources: [ "TIE Interceptor Expansion Pack", ]
+            skill: 5
+            points: 23
+            slots: [ ]
+        }
+        {
+            name: "Turr Phennir"
+            id: 27
+            unique: true
+            ship: "TIE Interceptor"
+            sources: [ "TIE Interceptor Expansion Pack", ]
+            skill: 7
+            points: 25
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: "Soontir Fel"
+            id: 28
+            unique: true
+            ship: "TIE Interceptor"
+            sources: [ "TIE Interceptor Expansion Pack", ]
+            skill: 9
+            points: 27
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: "Tycho Celchu"
+            id: 29
+            unique: true
+            ship: "A-Wing"
+            sources: [ "A-Wing Expansion Pack", ]
+            skill: 8
+            points: 26
+            slots: [
+                "Elite"
+                "Missile"
+            ]
+        }
+        {
+            name: "Arvel Crynyd"
+            id: 30
+            unique: true
+            ship: "A-Wing"
+            sources: [ "A-Wing Expansion Pack", ]
+            skill: 6
+            points: 23
+            slots: [
+                "Missile"
+            ]
+        }
+        {
+            name: "Green Squadron Pilot"
+            id: 31
+            ship: "A-Wing"
+            sources: [ "A-Wing Expansion Pack", "Rebel Aces Expansion Pack" ]
+            skill: 3
+            points: 19
+            slots: [
+                "Elite"
+                "Missile"
+            ]
+        }
+        {
+            name: "Prototype Pilot"
+            id: 32
+            ship: "A-Wing"
+            sources: [ "A-Wing Expansion Pack", "Rebel Aces Expansion Pack" ]
+            skill: 1
+            points: 17
+            slots: [
+                "Missile"
+            ]
+        }
+        {
+            name: "Outer Rim Smuggler"
+            id: 33
+            ship: "YT-1300"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            skill: 1
+            points: 27
+            slots: [
+                "Crew"
+                "Crew"
+            ]
+        }
+        {
+            name: "Chewbacca"
+            id: 34
+            unique: true
+            ship: "YT-1300"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            skill: 5
+            points: 42
+            slots: [
+                "Elite"
+                "Missile"
+                "Crew"
+                "Crew"
+            ]
+            ship_override:
+                attack: 3
+                agility: 1
+                hull: 8
+                shields: 5
+        }
+        {
+            name: "Lando Calrissian"
+            id: 35
+            unique: true
+            ship: "YT-1300"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            skill: 7
+            points: 44
+            slots: [
+                "Elite"
+                "Missile"
+                "Crew"
+                "Crew"
+            ]
+            ship_override:
+                attack: 3
+                agility: 1
+                hull: 8
+                shields: 5
+        }
+        {
+            name: "Han Solo"
+            id: 36
+            unique: true
+            ship: "YT-1300"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            skill: 9
+            points: 46
+            slots: [
+                "Elite"
+                "Missile"
+                "Crew"
+                "Crew"
+            ]
+            ship_override:
+                attack: 3
+                agility: 1
+                hull: 8
+                shields: 5
+        }
+        {
+            name: "Kath Scarlet"
+            id: 37
+            unique: true
+            ship: "Firespray-31"
+            sources: [ "Slave I Expansion Pack", ]
+            skill: 7
+            points: 38
+            slots: [
+                "Elite"
+                "Cannon"
+                "Bomb"
+                "Crew"
+                "Missile"
+            ]
+        }
+        {
+            name: "Boba Fett"
+            id: 38
+            unique: true
+            ship: "Firespray-31"
+            sources: [ "Slave I Expansion Pack", ]
+            skill: 8
+            points: 39
+            slots: [
+                "Elite"
+                "Cannon"
+                "Bomb"
+                "Crew"
+                "Missile"
+            ]
+        }
+        {
+            name: "Krassis Trelix"
+            id: 39
+            unique: true
+            ship: "Firespray-31"
+            sources: [ "Slave I Expansion Pack", ]
+            skill: 5
+            points: 36
+            slots: [
+                "Cannon"
+                "Bomb"
+                "Crew"
+                "Missile"
+            ]
+        }
+        {
+            name: "Bounty Hunter"
+            id: 40
+            ship: "Firespray-31"
+            sources: [ "Slave I Expansion Pack", ]
+            skill: 3
+            points: 33
+            slots: [
+                "Cannon"
+                "Bomb"
+                "Crew"
+                "Missile"
+            ]
+        }
+        {
+            name: "Ten Numb"
+            id: 41
+            unique: true
+            ship: "B-Wing"
+            sources: [ "B-Wing Expansion Pack", ]
+            skill: 8
+            points: 31
+            slots: [
+                "Elite"
+                "System"
+                "Cannon"
+                "Torpedo"
+                "Torpedo"
+            ]
+        }
+        {
+            name: "Ibtisam"
+            id: 42
+            unique: true
+            ship: "B-Wing"
+            sources: [ "B-Wing Expansion Pack", ]
+            skill: 6
+            points: 28
+            slots: [
+                "Elite"
+                "System"
+                "Cannon"
+                "Torpedo"
+                "Torpedo"
+            ]
+        }
+        {
+            name: "Dagger Squadron Pilot"
+            id: 43
+            ship: "B-Wing"
+            sources: [ "B-Wing Expansion Pack", "Rebel Aces Expansion Pack" ]
+            skill: 4
+            points: 24
+            slots: [
+                "System"
+                "Cannon"
+                "Torpedo"
+                "Torpedo"
+            ]
+        }
+        {
+            name: "Blue Squadron Pilot"
+            id: 44
+            ship: "B-Wing"
+            sources: [ "B-Wing Expansion Pack", "Rebel Aces Expansion Pack" ]
+            skill: 2
+            points: 22
+            slots: [
+                "System"
+                "Cannon"
+                "Torpedo"
+                "Torpedo"
+            ]
+        }
+        {
+            name: "Rebel Operative"
+            id: 45
+            ship: "HWK-290"
+            sources: [ "HWK-290 Expansion Pack", ]
+            skill: 2
+            points: 16
+            slots: [
+                "Turret"
+                "Crew"
+            ]
+        }
+        {
+            name: "Roark Garnet"
+            id: 46
+            unique: true
+            ship: "HWK-290"
+            sources: [ "HWK-290 Expansion Pack", ]
+            skill: 4
+            points: 19
+            slots: [
+                "Turret"
+                "Crew"
+            ]
+        }
+        {
+            name: "Kyle Katarn"
+            id: 47
+            unique: true
+            ship: "HWK-290"
+            sources: [ "HWK-290 Expansion Pack", ]
+            skill: 6
+            points: 21
+            slots: [
+                "Elite"
+                "Turret"
+                "Crew"
+            ]
+        }
+        {
+            name: "Jan Ors"
+            id: 48
+            unique: true
+            ship: "HWK-290"
+            sources: [ "HWK-290 Expansion Pack", ]
+            skill: 8
+            points: 25
+            slots: [
+                "Elite"
+                "Turret"
+                "Crew"
+            ]
+        }
+        {
+            name: "Scimitar Squadron Pilot"
+            id: 49
+            ship: "TIE Bomber"
+            sources: [ "TIE Bomber Expansion Pack", ]
+            skill: 2
+            points: 16
+            slots: [
+                "Torpedo"
+                "Torpedo"
+                "Missile"
+                "Missile"
+                "Bomb"
+            ]
+        }
+        {
+            name: "Gamma Squadron Pilot"
+            id: 50
+            ship: "TIE Bomber"
+            sources: [ "TIE Bomber Expansion Pack", ]
+            skill: 4
+            points: 18
+            slots: [
+                "Torpedo"
+                "Torpedo"
+                "Missile"
+                "Missile"
+                "Bomb"
+            ]
+        }
+        {
+            name: "Captain Jonus"
+            id: 51
+            unique: true
+            ship: "TIE Bomber"
+            sources: [ "TIE Bomber Expansion Pack", ]
+            skill: 6
+            points: 22
+            slots: [
+                "Elite"
+                "Torpedo"
+                "Torpedo"
+                "Missile"
+                "Missile"
+                "Bomb"
+            ]
+        }
+        {
+            name: "Major Rhymer"
+            id: 52
+            unique: true
+            ship: "TIE Bomber"
+            sources: [ "TIE Bomber Expansion Pack", ]
+            skill: 7
+            points: 26
+            slots: [
+                "Elite"
+                "Torpedo"
+                "Torpedo"
+                "Missile"
+                "Missile"
+                "Bomb"
+            ]
+        }
+        {
+            name: "Captain Kagi"
+            id: 53
+            unique: true
+            ship: "Lambda-Class Shuttle"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            skill: 8
+            points: 27
+            slots: [
+                "System"
+                "Cannon"
+                "Crew"
+                "Crew"
+            ]
+        }
+        {
+            name: "Colonel Jendon"
+            id: 54
+            unique: true
+            ship: "Lambda-Class Shuttle"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            skill: 6
+            points: 26
+            slots: [
+                "System"
+                "Cannon"
+                "Crew"
+                "Crew"
+            ]
+        }
+        {
+            name: "Captain Yorr"
+            id: 55
+            unique: true
+            ship: "Lambda-Class Shuttle"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            skill: 4
+            points: 24
+            slots: [
+                "System"
+                "Cannon"
+                "Crew"
+                "Crew"
+            ]
+        }
+        {
+            name: "Omicron Group Pilot"
+            id: 56
+            ship: "Lambda-Class Shuttle"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            skill: 2
+            points: 21
+            slots: [
+                "System"
+                "Cannon"
+                "Crew"
+                "Crew"
+            ]
+        }
+        {
+            name: "Lieutenant Lorrir"
+            id: 57
+            unique: true
+            ship: "TIE Interceptor"
+            sources: [ "Imperial Aces Expansion Pack", ]
+            skill: 5
+            points: 23
+            slots: [ ]
+        }
+        {
+            name: "Royal Guard Pilot"
+            id: 58
+            ship: "TIE Interceptor"
+            sources: [ "Imperial Aces Expansion Pack", ]
+            skill: 6
+            points: 22
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: "Tetran Cowall"
+            id: 59
+            unique: true
+            ship: "TIE Interceptor"
+            sources: [ "Imperial Aces Expansion Pack", ]
+            skill: 7
+            points: 24
+            slots: [
+                "Elite"
+            ]
+            modifier_func: (stats) ->
+                # add speed 1 k-turn to table (Interceptor already has 3/5)
+                stats.maneuvers[1][5] = 3
+        }
+        {
+            name: "Kir Kanos"
+            id: 61
+            unique: true
+            ship: "TIE Interceptor"
+            sources: [ "Imperial Aces Expansion Pack", ]
+            skill: 6
+            points: 24
+            slots: [ ]
+        }
+        {
+            name: "Carnor Jax"
+            id: 62
+            unique: true
+            ship: "TIE Interceptor"
+            sources: [ "Imperial Aces Expansion Pack", ]
+            skill: 8
+            points: 26
+            slots: [
+                "Elite"
+            ]
+        }
+        {
+            name: "GR-75 Medium Transport"
+            id: 63
+            ship: "GR-75 Medium Transport"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            skill: 3
+            points: 30
+            slots: [
+                "Crew"
+                "Crew"
+                "Cargo"
+                "Cargo"
+                "Cargo"
+            ]
+        }
+        {
+            name: "Bandit Squadron Pilot"
+            id: 64
+            ship: "Z-95 Headhunter"
+            sources: [ "Z-95 Headhunter Expansion Pack", ]
+            skill: 2
+            points: 12
+            slots: [
+                "Missile"
+            ]
+        }
+        {
+            name: "Tala Squadron Pilot"
+            id: 65
+            ship: "Z-95 Headhunter"
+            sources: [ "Z-95 Headhunter Expansion Pack", ]
+            skill: 4
+            points: 13
+            slots: [
+                "Missile"
+            ]
+        }
+        {
+            name: "Lieutenant Blount"
+            id: 66
+            unique: true
+            ship: "Z-95 Headhunter"
+            sources: [ "Z-95 Headhunter Expansion Pack", ]
+            skill: 6
+            points: 17
+            slots: [
+                "Elite"
+                "Missile"
+            ]
+        }
+        {
+            name: "Airen Cracken"
+            id: 67
+            unique: true
+            ship: "Z-95 Headhunter"
+            sources: [ "Z-95 Headhunter Expansion Pack", ]
+            skill: 8
+            points: 19
+            slots: [
+                "Elite"
+                "Missile"
+            ]
+        }
+        {
+            name: "Delta Squadron Pilot"
+            id: 68
+            ship: "TIE Defender"
+            sources: [ "TIE Defender Expansion Pack", ]
+            skill: 1
+            points: 30
+            slots: [
+                "Cannon"
+                "Missile"
+            ]
+        }
+        {
+            name: "Onyx Squadron Pilot"
+            id: 69
+            ship: "TIE Defender"
+            sources: [ "TIE Defender Expansion Pack", ]
+            skill: 3
+            points: 99
+            slots: [
+                "Cannon"
+                "Missile"
+            ]
+        }
+        {
+            name: "Colonel Vessery"
+            id: 70
+            unique: true
+            ship: "TIE Defender"
+            sources: [ "TIE Defender Expansion Pack", ]
+            skill: 6
+            points: 99
+            slots: [
+                "Cannon"
+                "Missile"
+            ]
+        }
+        {
+            name: "Rexler Brath"
+            id: 71
+            unique: true
+            ship: "TIE Defender"
+            sources: [ "TIE Defender Expansion Pack", ]
+            skill: 8
+            points: 99
+            slots: [
+                "Elite"
+                "Cannon"
+                "Missile"
+            ]
+        }
+        {
+            name: "Knave Squadron Pilot"
+            id: 72
+            ship: "E-Wing"
+            sources: [ "E-Wing Expansion Pack", ]
+            skill: 1
+            points: 27
+            slots: [
+                "System"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Blackmoon Squadron Pilot"
+            id: 73
+            ship: "E-Wing"
+            sources: [ "E-Wing Expansion Pack", ]
+            skill: 3
+            points: 99
+            slots: [
+                "System"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Etahn A'baht"
+            id: 74
+            unique: true
+            ship: "E-Wing"
+            sources: [ "E-Wing Expansion Pack", ]
+            skill: 5
+            points: 32
+            slots: [
+                "Elite"
+                "System"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Corran Horn"
+            id: 75
+            unique: true
+            ship: "E-Wing"
+            sources: [ "E-Wing Expansion Pack", ]
+            skill: 8
+            points: 99
+            slots: [
+                "Elite"
+                "System"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Sigma Squadron Pilot"
+            id: 76
+            ship: "TIE Phantom"
+            sources: [ "TIE Phantom Expansion Pack", ]
+            skill: 3
+            points: 25
+            slots: [
+                "System"
+                "Crew"
+            ]
+        }
+        {
+            name: "Shadow Squadron Pilot"
+            id: 77
+            ship: "TIE Phantom"
+            sources: [ "TIE Phantom Expansion Pack", ]
+            skill: 5
+            points: 99
+            slots: [
+                "System"
+                "Crew"
+            ]
+        }
+        {
+            name: "Unspoiled PS6 TIE Phantom Pilot"
+            id: 78
+            unique: true
+            ship: "TIE Phantom"
+            sources: [ "TIE Phantom Expansion Pack", ]
+            skill: 6
+            points: 99
+            slots: [
+                "System"
+                "Crew"
+            ]
+        }
+        {
+            name: '"Whisper"'
+            id: 79
+            unique: true
+            ship: "TIE Phantom"
+            sources: [ "TIE Phantom Expansion Pack", ]
+            skill: 7
+            points: 32
+            slots: [
+                "Elite"
+                "System"
+                "Crew"
+            ]
+        }
+        {
+            name: "CR90 Corvette (Fore)"
+            id: 80
+            ship: "CR90 Corvette (Fore)"
+            sources: [ "Tantive IV Expansion Pack", ]
+            skill: 4
+            points: 50
+            slots: [
+                "Crew"
+                "Hardpoint"
+                "Hardpoint"
+                "Team"
+                "Team"
+                "Cargo"
+            ]
+        }
+        {
+            name: "CR90 Corvette (Aft)"
+            id: 81
+            ship: "CR90 Corvette (Aft)"
+            sources: [ "Tantive IV Expansion Pack", ]
+            skill: 4
+            points: 40
+            slots: [
+                "Crew"
+                "Hardpoint"
+                "Team"
+                "Cargo"
+            ]
+        }
+        {
+            name: "Wes Janson"
+            id: 82
+            unique: true
+            ship: "X-Wing"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            skill: 8
+            points: 29
+            slots: [
+                "Elite"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Jek Porkins"
+            id: 83
+            unique: true
+            ship: "X-Wing"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            skill: 7
+            points: 26
+            slots: [
+                "Elite"
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: '"Hobbie" Kilvan'
+            id: 84
+            unique: true
+            ship: "X-Wing"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            skill: 5
+            points: 25
+            slots: [
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Tarn Mison"
+            id: 85
+            unique: true
+            ship: "X-Wing"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            skill: 3
+            points: 23
+            slots: [
+                "Torpedo"
+                "Astromech"
+            ]
+        }
+        {
+            name: "Jake Farrell"
+            id: 86
+            unique: true
+            ship: "A-Wing"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            skill: 7
+            points: 24
+            slots: [
+                "Elite"
+                "Missile"
+            ]
+        }
+        {
+            name: "Unspoiled PS5 A-Wing Pilot"
+            id: 87
+            unique: true
+            ship: "A-Wing"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            skill: 5
+            points: 99
+            slots: [
+                "Missile"
+            ]
+        }
+        {
+            name: "Keyan Farlander"
+            id: 88
+            unique: true
+            ship: "B-Wing"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            skill: 7
+            points: 29
+            slots: [
+                "Elite"
+                "System"
+                "Cannon"
+                "Torpedo"
+                "Torpedo"
+            ]
+        }
+        {
+            name: "Unspoiled PS5 B-Wing Pilot"
+            id: 89
+            unique: true
+            ship: "B-Wing"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            skill: 5
+            points: 99
+            slots: [
+                "System"
+                "Cannon"
+                "Torpedo"
+                "Torpedo"
+            ]
+        }
+    ]
+
+    upgrades: [
+        {
+            name: "Ion Cannon Turret"
+            id: 0
+            slot: "Turret"
+            sources: [ "Y-Wing Expansion Pack", "HWK-290 Expansion Pack", ]
+            points: 5
+            attack: 3
+            range: "1-2"
+        }
+        {
+            name: "Proton Torpedoes"
+            id: 1
+            slot: "Torpedo"
+            sources: [
+                "Core"
+                "X-Wing Expansion Pack"
+                "Y-Wing Expansion Pack"
+                "B-Wing Expansion Pack"
+            ]
+            points: 4
+            attack: 4
+            range: "2-3"
+        }
+        {
+            name: "R2 Astromech"
+            id: 2
+            slot: "Astromech"
+            sources: [ "Y-Wing Expansion Pack", ]
+            points: 1
+            modifier_func: (stats) ->
+                if stats.maneuvers? and stats.maneuvers.length > 0
+                    for turn in [0 ... stats.maneuvers[1].length]
+                        if stats.maneuvers[1][turn] > 0
+                            stats.maneuvers[1][turn] = 2
+                        if stats.maneuvers[2][turn] > 0
+                            stats.maneuvers[2][turn] = 2
+        }
+        {
+            name: "R2-D2"
+            aka: [ "R2-D2 (Crew)" ]
+            id: 3
+            unique: true
+            slot: "Astromech"
+            sources: [ "Core", ]
+            points: 4
+        }
+        {
+            name: "R2-F2"
+            id: 4
+            unique: true
+            slot: "Astromech"
+            sources: [ "Core", ]
+            points: 3
+        }
+        {
+            name: "R5-D8"
+            id: 5
+            unique: true
+            slot: "Astromech"
+            sources: [ "Y-Wing Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "R5-K6"
+            id: 6
+            unique: true
+            slot: "Astromech"
+            sources: [ "X-Wing Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "R5 Astromech"
+            id: 7
+            slot: "Astromech"
+            sources: [ "X-Wing Expansion Pack", ]
+            points: 1
+        }
+        {
+            name: "Determination"
+            id: 8
+            slot: "Elite"
+            sources: [ "Core", "TIE Fighter Expansion Pack", ]
+            points: 1
+        }
+        {
+            name: "Swarm Tactics"
+            id: 9
+            slot: "Elite"
+            sources: [
+                "TIE Fighter Expansion Pack"
+                "TIE Advanced Expansion Pack"
+            ]
+            points: 2
+        }
+        {
+            name: "Squad Leader"
+            id: 10
+            unique: true
+            slot: "Elite"
+            sources: [ "TIE Advanced Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Expert Handling"
+            id: 11
+            slot: "Elite"
+            sources: [ "X-Wing Expansion Pack", "TIE Advanced Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Marksmanship"
+            id: 12
+            slot: "Elite"
+            sources: [ "Core", "X-Wing Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Concussion Missiles"
+            id: 13
+            slot: "Missile"
+            sources: [
+                "TIE Advanced Expansion Pack"
+                "A-Wing Expansion Pack"
+                "Millennium Falcon Expansion Pack"
+            ]
+            points: 4
+            attack: 4
+            range: "2-3"
+        }
+        {
+            name: "Cluster Missiles"
+            id: 14
+            slot: "Missile"
+            sources: [ "TIE Advanced Expansion Pack", "A-Wing Expansion Pack", ]
+            points: 4
+            attack: 3
+            range: "1-2"
+        }
+        {
+            name: "Daredevil"
+            id: 15
+            slot: "Elite"
+            sources: [ "TIE Interceptor Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Elusiveness"
+            id: 16
+            slot: "Elite"
+            sources: [ "TIE Interceptor Expansion Pack", "Millennium Falcon Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Homing Missiles"
+            id: 17
+            slot: "Missile"
+            sources: [ "A-Wing Expansion Pack", "Slave I Expansion Pack", ]
+            attack: 4
+            range: "2-3"
+            points: 5
+        }
+        {
+            name: "Push the Limit"
+            id: 18
+            slot: "Elite"
+            sources: [ "A-Wing Expansion Pack", "Imperial Aces Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Deadeye"
+            id: 19
+            slot: "Elite"
+            sources: [ "A-Wing Expansion Pack", ]
+            points: 1
+        }
+        {
+            name: "Expose"
+            id: 20
+            slot: "Elite"
+            sources: [ "Slave I Expansion Pack", ]
+            points: 4
+        }
+        {
+            name: "Gunner"
+            id: 21
+            slot: "Crew"
+            sources: [ "Slave I Expansion Pack", ]
+            points: 5
+        }
+        {
+            name: "Ion Cannon"
+            id: 22
+            slot: "Cannon"
+            sources: [
+                "Slave I Expansion Pack"
+                "B-Wing Expansion Pack"
+                "TIE Defender Expansion Pack"
+            ]
+            points: 3
+            attack: 3
+            range: "1-3"
+        }
+        {
+            name: "Heavy Laser Cannon"
+            id: 23
+            slot: "Cannon"
+            sources: [ "Slave I Expansion Pack", "Lambda-Class Shuttle Expansion Pack", ]
+            points: 7
+            attack: 4
+            range: "2-3"
+        }
+        {
+            name: "Seismic Charges"
+            id: 24
+            slot: "Bomb"
+            sources: [ "Slave I Expansion Pack", "TIE Bomber Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Mercenary Copilot"
+            id: 25
+            slot: "Crew"
+            sources: [ "Slave I Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Assault Missiles"
+            id: 26
+            slot: "Missile"
+            sources: [
+                "Millennium Falcon Expansion Pack"
+                "Slave I Expansion Pack"
+                "TIE Bomber Expansion Pack"
+                "Z-95 Headhunter Expansion Pack"
+            ]
+            points: 5
+            attack: 4
+            range: "2-3"
+        }
+        {
+            name: "Veteran Instincts"
+            id: 27
+            slot: "Elite"
+            sources: [ "Millennium Falcon Expansion Pack", "Slave I Expansion Pack", ]
+            points: 1
+            modifier_func: (stats) ->
+                stats.skill += 2
+        }
+        {
+            name: "Proximity Mines"
+            id: 28
+            slot: "Bomb"
+            sources: [ "Slave I Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Weapons Engineer"
+            id: 29
+            slot: "Crew"
+            sources: [ "Millennium Falcon Expansion Pack", "Lambda-Class Shuttle Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Draw Their Fire"
+            id: 30
+            slot: "Elite"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            points: 1
+        }
+        {
+            name: "Luke Skywalker"
+            id: 31
+            unique: true
+            faction: "Rebel Alliance"
+            slot: "Crew"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            points: 7
+        }
+        {
+            name: "Nien Nunb"
+            id: 32
+            unique: true
+            faction: "Rebel Alliance"
+            slot: "Crew"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            points: 1
+            modifier_func: (stats) ->
+                for s in (stats.maneuvers ? [])
+                    if s[2] > 0 # is there a straight (2) maneuver at this speed?
+                        s[2] = 2 # set it to green (2)
+        }
+        {
+            name: "Chewbacca"
+            id: 33
+            unique: true
+            faction: "Rebel Alliance"
+            slot: "Crew"
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            points: 4
+        }
+        {
+            name: "Advanced Proton Torpedoes"
+            id: 34
+            slot: "Torpedo"
+            attack: 5
+            range: "1"
+            sources: [ "B-Wing Expansion Pack", "TIE Bomber Expansion Pack", ]
+            points: 6
+        }
+        {
+            name: "Autoblaster"
+            id: 35
+            slot: "Cannon"
+            attack: 3
+            range: "1"
+            sources: [ "B-Wing Expansion Pack", ]
+            points: 5
+        }
+        {
+            name: "Fire-Control System"
+            id: 36
+            slot: "System"
+            sources: [ "B-Wing Expansion Pack", "TIE Phantom Expansion Pack" ]
+            points: 2
+        }
+        {
+            name: "Blaster Turret"
+            id: 37
+            slot: "Turret"
+            sources: [ "HWK-290 Expansion Pack", ]
+            points: 4
+            attack: 3
+            range: "1-2"
+        }
+        {
+            name: "Recon Specialist"
+            id: 38
+            slot: "Crew"
+            sources: [ "HWK-290 Expansion Pack", "TIE Phantom Expansion Pack" ]
+            points: 3
+        }
+        {
+            name: "Saboteur"
+            id: 39
+            slot: "Crew"
+            sources: [ "HWK-290 Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Intelligence Agent"
+            id: 40
+            slot: "Crew"
+            sources: [ "HWK-290 Expansion Pack", "Lambda-Class Shuttle Expansion Pack", ]
+            points: 1
+        }
+        {
+            name: "Proton Bomb"
+            id: 41
+            slot: "Bomb"
+            sources: [ "TIE Bomber Expansion Pack", ]
+            points: 5
+        }
+        {
+            name: "Adrenaline Rush"
+            id: 42
+            slot: "Elite"
+            sources: [ "TIE Bomber Expansion Pack", ]
+            points: 1
+        }
+        {
+            name: "Advanced Sensors"
+            id: 43
+            slot: "System"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", "E-Wing Expansion Pack" ]
+            points: 3
+        }
+        {
+            name: "Sensor Jammer"
+            id: 44
+            slot: "System"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            points: 4
+        }
+        {
+            name: "Darth Vader"
+            id: 45
+            unique: true
+            faction: "Galactic Empire"
+            slot: "Crew"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Rebel Captive"
+            id: 46
+            unique: true
+            faction: "Galactic Empire"
+            slot: "Crew"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Flight Instructor"
+            id: 47
+            slot: "Crew"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            points: 4
+        }
+        {
+            name: "Navigator"
+            id: 48
+            slot: "Crew"
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Opportunist"
+            id: 49
+            slot: "Elite"
+            sources: [ "Imperial Aces Expansion Pack", ]
+            points: 4
+        }
+        {
+            name: "Comms Booster"
+            id: 50
+            slot: "Cargo"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            points: 4
+        }
+        {
+            name: "Slicer Tools"
+            id: 51
+            slot: "Cargo"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            points: 7
+        }
+        {
+            name: "Shield Projector"
+            id: 52
+            slot: "Cargo"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            points: 4
+        }
+        {
+            name: "Ion Pulse Missiles"
+            id: 53
+            slot: "Missile"
+            sources: [ "Z-95 Headhunter Expansion Pack", "TIE Defender Expansion Pack" ]
+            points: 3
+            attack: 3
+            range: """2-3"""
+        }
+        {
+            name: "Wingman"
+            id: 54
+            slot: "Elite"
+            sources: [ "Z-95 Headhunter Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Decoy"
+            id: 55
+            slot: "Elite"
+            sources: [ "Z-95 Headhunter Expansion Pack", ]
+            points: 99
+        }
+        {
+            name: "Outmaneuver"
+            id: 56
+            slot: "Elite"
+            sources: [ "TIE Defender Expansion Pack", "E-Wing Expansion Pack" ]
+            points: 99
+        }
+        {
+            name: "Predator"
+            id: 57
+            slot: "Elite"
+            sources: [ "TIE Defender Expansion Pack", ]
+            points: 99
+        }
+        {
+            name: "Flechette Torpedoes"
+            id: 58
+            slot: "Torpedo"
+            sources: [ "E-Wing Expansion Pack", "Rebel Transport Expansion Pack" ]
+            points: 2
+            attack: 3
+            range: """2-3"""
+        }
+        {
+            name: "R7 Astromech"
+            id: 59
+            slot: "Astromech"
+            sources: [ "E-Wing Expansion Pack", ]
+            points: 99
+        }
+        {
+            name: "R7-T1"
+            id: 60
+            unique: true
+            slot: "Astromech"
+            sources: [ "E-Wing Expansion Pack", ]
+            points: 3
+        }
+        {
+            name: "Tactician"
+            id: 61
+            slot: "Crew"
+            sources: [ "TIE Phantom Expansion Pack", ]
+            points: 99
+        }
+        {
+            name: "R2-D2 (Crew)"
+            aka: [ "R2-D2" ]
+            id: 62
+            unique: true
+            slot: "Crew"
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 4
+            faction: "Rebel Alliance"
+        }
+        {
+            name: "C-3PO"
+            unique: true
+            id: 63
+            slot: "Crew"
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 3
+            faction: "Rebel Alliance"
+        }
+        {
+            name: "Single Turbolasers"
+            id: 64
+            slot: "Hardpoint"
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 8
+            energy: 2
+            attack: 4
+            range: "3-5"
+        }
+        {
+            name: "Quad Laser Cannons"
+            id: 65
+            slot: "Hardpoint"
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 6
+            energy: 2
+            attack: 3
+            range: "1-2"
+        }
+        {
+            name: "Tibanna Gas Supplies"
+            id: 66
+            slot: "Cargo"
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 4
+            limited: true
+        }
+        {
+            name: "Ionization Reactor"
+            id: 67
+            slot: "Cargo"
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 4
+            energy: 5
+            limited: true
+        }
+        {
+            name: "Engine Booster"
+            id: 68
+            slot: "Cargo"
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 3
+            limited: true
+        }
+        {
+            name: "R3-A2"
+            id: 69
+            unique: true
+            slot: "Astromech"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "R2-D6"
+            id: 70
+            unique: true
+            slot: "Astromech"
+            sources: [ "Rebel Transport Expansion Pack", ]
+            points: 1
+            restriction_func: (ship) ->
+                return false if (ship.effectiveStats().skill <= 2 or 'Elite' in ship.pilot.slots)
+                # Otherwise, if there's an Elite slot upgrade, it has to have
+                # been conferred, and it can't be conferred by another upgrade
+                for upgrade in ship.upgrades
+                    if upgrade? and upgrade.data?.name != 'R2-D6'
+                        for conferred_addon in upgrade.conferredAddons
+                            return false if conferred_addon.slot == 'Elite'
+                true
+            confersAddons: [
+                {
+                    type: exportObj.Upgrade
+                    slot: "Elite"
+                }
+            ]
+        }
+        {
+            name: "Enhanced Scopes"
+            id: 71
+            slot: "System"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            points: 1
+        }
+        {
+            name: "Chardaan Refit"
+            id: 72
+            slot: "Missile"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            points: -2
+            ship: "A-Wing"
+        }
+        {
+            name: "Proton Rockets"
+            id: 73
+            slot: "Missile"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            points: 99
+        }
+        {
+            name: "Kyle Katarn"
+            id: 74
+            unique: true
+            slot: "Crew"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            points: 99
+            faction: "Rebel Alliance"
+        }
+        {
+            name: "Jan Ors"
+            id: 75
+            unique: true
+            slot: "Crew"
+            sources: [ "Rebel Aces Expansion Pack", ]
+            points: 99
+            faction: "Rebel Alliance"
+        }
+    ]
+
+    modifications: [
+        {
+            name: "Stealth Device"
+            id: 1
+            points: 3
+            sources: [ "Slave I Expansion Pack", ]
+            modifier_func: (stats) ->
+                stats.agility += 1
+        }
+        {
+            name: "Shield Upgrade"
+            id: 2
+            points: 4
+            sources: [ "Millennium Falcon Expansion Pack", "Imperial Aces Expansion Pack", ]
+            modifier_func: (stats) ->
+                stats.shields += 1
+        }
+        {
+            name: "Engine Upgrade"
+            id: 3
+            points: 4
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            modifier_func: (stats) ->
+                stats.actions.push 'Boost' if 'Boost' not in stats.actions
+        }
+        {
+            name: "Anti-Pursuit Lasers"
+            id: 4
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            points: 2
+            restriction_func: (ship) ->
+                ship.data.large ? false
+        }
+        {
+            name: "Targeting Computer"
+            id: 5
+            sources: [ "Imperial Aces Expansion Pack", ]
+            points: 2
+            modifier_func: (stats) ->
+                stats.actions.push 'Target Lock' if 'Target Lock' not in stats.actions
+        }
+        {
+            name: "Hull Upgrade"
+            id: 6
+            sources: [ "Imperial Aces Expansion Pack", ]
+            points: 3
+            modifier_func: (stats) ->
+                stats.hull += 1
+        }
+        {
+            name: "Munitions Failsafe"
+            id: 7
+            sources: [ "Z-95 Headhunter Expansion Pack", "TIE Defender Expansion Pack" ]
+            points: 1
+        }
+        {
+            name: "Stygium Particle Accelerator"
+            id: 8
+            sources: [ "TIE Phantom Expansion Pack", ]
+            points: 2
+        }
+        {
+            name: "Advanced Cloaking Device"
+            id: 9
+            sources: [ "TIE Phantom Expansion Pack", ]
+            points: 99
+            ship: "TIE Phantom"
+        }
+    ]
+
+    titles: [
+        {
+            name: "Slave I"
+            id: 1
+            sources: [ "Slave I Expansion Pack", ]
+            unique: true
+            points: 0
+            ship: "Firespray-31"
+            confersAddons: [
+                {
+                    type: exportObj.Upgrade
+                    slot: "Torpedo"
+                }
+            ]
+        }
+        {
+            name: "Millennium Falcon"
+            id: 2
+            sources: [ "Millennium Falcon Expansion Pack", ]
+            unique: true
+            points: 1
+            ship: "YT-1300"
+            actions: "Evade"
+            modifier_func: (stats) ->
+                stats.actions.push 'Evade' if 'Evade' not in stats.actions
+        }
+        {
+            name: "Moldy Crow"
+            id: 3
+            sources: [ "HWK-290 Expansion Pack", ]
+            unique: true
+            points: 3
+            ship: "HWK-290"
+        }
+        {
+            name: "ST-321"
+            id: 4
+            sources: [ "Lambda-Class Shuttle Expansion Pack", ]
+            unique: true
+            points: 3
+            ship: "Lambda-Class Shuttle"
+        }
+        {
+            name: "Royal Guard TIE"
+            id: 5
+            sources: [ "Imperial Aces Expansion Pack", ]
+            points: 0
+            ship: "TIE Interceptor"
+            confersAddons: [
+                {
+                    type: exportObj.Modification
+                }
+            ]
+            restriction_func: (ship) ->
+                ship.effectiveStats().skill > 4
+        }
+        {
+            name: "Dodonna's Pride"
+            id: 6
+            unique: true
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 4
+            ship: "CR90 Corvette (Fore)"
+        }
+        {
+            name: "A-Wing Test Pilot"
+            id: 7
+            sources: [ "Rebel Aces Expansion Pack", ]
+            points: 0
+            ship: "A-Wing"
+            restriction_func: (ship) ->
+                ship.effectiveStats().skill > 1
+            confersAddons: [
+                {
+                    type: exportObj.Upgrade
+                    slot: "Elite"
+                }
+            ]
+        }
+        {
+            name: "B-Wing/E"
+            id: 8
+            sources: [ "Rebel Aces Expansion Pack", ]
+            points: 99
+            ship: "B-Wing"
+            confersAddons: [
+                {
+                    type: exportObj.Upgrade
+                    slot: "Crew"
+                }
+            ]
+        }
+        {
+            name: "Tantive IV"
+            id: 9
+            unique: true
+            sources: [ "Tantive IV Expansion Pack", ]
+            points: 4
+            ship: "CR90 Corvette (Fore)"
+            confersAddons: [
+                {
+                    type: exportObj.Upgrade
+                    slot: "Crew"
+                }
+                {
+                    type: exportObj.Upgrade
+                    slot: "Team"
+                }
+            ]
+        }
+    ]


Update de-DE.coffee

Update de-DE.coffee

Checked for errors and better translations.

--- app/locale/de-DE.coffee
+++ app/locale/de-DE.coffee
@@ -43,7 +43,7 @@
     title: "Hilf CodeCombat zu übersetzen!" # This shows up when a player switches to a non-English language using the language selector.
     sub_heading: "Wir brauchen Deine Sprachfähigkeiten."
     pitch_body: "Wir entwickeln CodeCombat in Englisch, aber wir haben Spieler in der ganzen Welt. Viele von ihnen wollen in Deutsch spielen, sprechen aber kein Englisch. Wenn Du also beide Sprachen beherrscht, melde Dich an um ein Diplomat zu werden und hilf die Website und die Levels zu Deutsch zu übersetzen."
-    missing_translations: "Solange wir nicht alles ins Deutsche übesetzt haben, siehst Du die englische Übersetzung, wo Deutsch leider noch nicht zur Verfügung steht."
+    missing_translations: "Solange wir nicht alles ins Deutsche übersetzt haben, siehst Du die englische Übersetzung, wo Deutsch leider noch nicht zur Verfügung steht."
     learn_more: "Finde heraus, wie Du ein Diplomat werden kannst"
     subscribe_as_diplomat: "Schreibe dich als Diplomat ein"

@@ -55,7 +55,7 @@
     items: "Gegenstände" # Tooltip on item shop button from /play
     unlock: "Entsperren" # For purchasing items and heroes
     confirm: "Bestätigen"
-    owned: "Besitzen" # For items you own
+    owned: "im Besitz" # For items you own
     locked: "Gesperrt"
 #    purchasable: "Purchasable" # For a hero you unlocked but haven't purchased
     available: "Verfügbar"
@@ -82,8 +82,8 @@
     campaign_old_beginner: "Alte Anfänger Kampagne"
     campaign_old_beginner_description: "... in der Du die Zauberei der Programmierung lernst."
     campaign_dev: "Beliebiges schwierigeres Level"
-    campaign_dev_description: "... in welchem Du die Bedienung erlernst, indem Du etwas schwierigeres machst."
-    campaign_multiplayer: "Multiplayerarena"
+    campaign_dev_description: "... in welchem Du die Bedienung erlernst, indem Du etwas Schwierigeres machst."
+    campaign_multiplayer: "Mehrspieler Arena"
     campaign_multiplayer_description: "... in der Du Kopf-an-Kopf gegen andere Spieler programmierst."
     campaign_player_created: "Von Spielern erstellt"
     campaign_player_created_description: "... in welchem Du gegen die Kreativität eines Artisan Zauberers kämpfst."
@@ -112,7 +112,7 @@
     creating: "Erzeuge Account..."
     sign_up: "Neuen Account anlegen"
     log_in: "mit Passwort einloggen"
-    social_signup: "oder, du registriest dich über Facebook oder G+:"
+    social_signup: "oder, du registrierst dich über Facebook oder G+:"
     required: "Du musst dich vorher einloggen um dort hin zu gehen."

   recover:
@@ -139,10 +139,10 @@
     create: "Erstelle"
     manual: "Manuell"
     fork: "Fork"
-    play: "Abspielen" # When used as an action verb, like "Play next level"
+    play: "Spiel starten" # When used as an action verb, like "Play next level"
     retry: "Erneut versuchen"
-    watch: "Verfolgen"
-    unwatch: "Nicht verfolgen"
+    watch: "Beobachten"
+    unwatch: "Nicht beobachten"
     submit_patch: "Patch einreichen"

   general:
@@ -151,7 +151,7 @@
     date: "Datum"
     body: "Inhalt"
     version: "Version"
-    commit_msg: "Commit Nachricht"
+    commit_msg: "Übertrage Nachricht"
     version_history: "Versionshistorie"
     version_history_for: "Versionsgeschichte für: "
     result: "Ergebnis"
@@ -210,8 +210,8 @@
     failing: "Fehlgeschlagen"
     action_timeline: "Aktionszeitstrahl"
     click_to_select: "Klicke auf eine Einheit, um sie auszuwählen."
-#    control_bar_multiplayer: "Multiplayer"
-#    control_bar_join_game: "Join Game"
+#    control_bar_multiplayer: "Mehrspieler"
+#    control_bar_join_game: "Spiel beitreten"
     reload: "Neu laden"
     reload_title: "Gesamten Code neu laden?"
     reload_really: "Bist Du sicher, dass Du das Level neu beginnen willst?"
@@ -238,9 +238,9 @@
     tome_minion_spells: "Die Zaubersprüche Deiner Knechte" # Only in old-style levels.
     tome_read_only_spells: "Nur-lesen Zauberspüche" # Only in old-style levels.
     tome_other_units: "Andere Einheiten" # Only in old-style levels.
-    tome_cast_button_run: "Run"
-    tome_cast_button_running: "Running"
-    tome_cast_button_ran: "Ran"
+    tome_cast_button_run: "Zaubern"
+    tome_cast_button_running: "Wird gezaubert"
+    tome_cast_button_ran: "Wurde gezaubert"
     tome_submit_button: "Senden"
     tome_reload_method: "Original Code für diese Methode neu laden" # Title text for individual method reload button.
     tome_select_method: "Methode auswählen"
@@ -248,7 +248,7 @@
     tome_select_a_thang: "Wähle jemanden aus, um "
     tome_available_spells: "Verfügbare Zauber"
     tome_your_skills: "Deine Fähigkeiten"
-#    tome_help: "Help"
+#    tome_help: "Hilfe"
     tome_current_method: "Aktuelle Methode"
     hud_continue_short: "Fortsetzen"
     code_saved: "Code gespeichert"
@@ -272,7 +272,7 @@
     tip_theory_practice: "In der Theorie gibt es keinen Unterschied zwischen Theorie und Praxis. In der Praxis schon. - Yogi Berra"
     tip_error_free: "Es gibt zwei Wege fehlerfreie Programme zu schreiben; nur der Dritte funktioniert. - Alan Perlis"
     tip_debugging_program: "Wenn Debugging der Prozess zum Fehler entfernen ist, dann muss Programmieren der Prozess sein Fehler zu machen. - Edsger W. Dijkstra"
-    tip_forums: "Gehe zum Forum und sage uns was du denkst!"
+    tip_forums: "Komm ins Forum und sage uns was du denkst!"
     tip_baby_coders: "In der Zukunft werden sogar Babies Erzmagier sein."
     tip_morale_improves: "Das Laden wird weiter gehen bis die Stimmung sich verbessert."
     tip_all_species: "Wir glauben an gleiche Chancen für alle Arten Programmieren zu lernen."
@@ -280,32 +280,32 @@
     tip_harry: "Du bist ein Zauberer, "
     tip_great_responsibility: "Mit großen Programmierfähigkeiten kommt große Verantwortung."
     tip_munchkin: "Wenn du dein Gemüse nicht isst, besucht dich ein Zwerg während du schläfst."
-    tip_binary: "Es gibt auf der Welt nur 10 Arten von Menschen: die, welche Binär verstehen und die, welche nicht."
+    tip_binary: "Es gibt auf der Welt nur 10 Arten von Menschen: die die Binär verstehen und die die nicht."
     tip_commitment_yoda: "Ein Programmier muss die größte Hingabe haben, den ernstesten Verstand. ~ Yoda"
     tip_no_try: "Tu. Oder tu nicht. Es gibt kein Versuchen. - Yoda"
-    tip_patience: "Geduld du musst haben, junger Padawan. - Yoda"
+    tip_patience: "Geduld du haben musst, junger Padawan. - Yoda"
     tip_documented_bug: "Ein dokumentierter Fehler ist kein Fehler; er ist ein Merkmal."
     tip_impossible: "Es wirkt immer unmöglich bis es vollbracht ist. - Nelson Mandela"
     tip_talk_is_cheap: "Reden ist billig. Zeig mir den Code. - Linus Torvalds"
-    tip_first_language: "Das schwierigste, das du jemals lernen wirst, ist die erste Programmiersprache. - Alan Kay"
+    tip_first_language: "Das Schwierigste, das du jemals lernen wirst, ist die erste Programmiersprache. - Alan Kay"
     tip_hardware_problem: "Q: Wie viele Programmierer braucht man um eine Glühbirne auszuwechseln? A: Keine, es ist ein Hardware-Problem."
     tip_hofstadters_law: "Hofstadter's Gesetz: Es dauert immer länger als erwartet, auch wenn du Hofstadter's Gesetz anwendest."
-    tip_premature_optimization: "Vorzeitige Optimierung ist die Wurzel alles Übels (oder der mindestens Meister) bei der Programmierung - Donald Knuth"
+    tip_premature_optimization: "Vorzeitige Optimierung ist die Wurzel allen Übels (oder mindestens des meisten) bei der Programmierung - Donald Knuth"
     tip_brute_force: "Verwende im Zweifelsfall rohe Gewalt. - Ken Thompson"
     customize_wizard: "Bearbeite den Zauberer"

   game_menu:
     inventory_tab: "Inventar"
-    save_load_tab: "Speichere/Lade"
+    save_load_tab: "Speicher/Lade"
     options_tab: "Einstellungen"
-    guide_tab: "Guide"
+    guide_tab: "Handbuch"
     multiplayer_tab: "Mehrspieler"
     auth_tab: "Registrieren"
     inventory_caption: "Rüste deinen Helden aus"
     choose_hero_caption: "Wähle Helden, Sprache"
     save_load_caption: "... und schaue dir die Historie an"
     options_caption: "konfiguriere Einstellungen"
-    guide_caption: "Doku und Tipps"
+    guide_caption: "Handbuch und Tipps"
     multiplayer_caption: "Spiele mit Freunden!"
     auth_caption: "Fortschritt speichern."

@@ -319,7 +319,7 @@
     locked: "(gesperrt)"
     restricted: "(benötigt für dieses Level)"
     equip: "Ausrüsten"
-    unequip: "Abrüsten"
+    unequip: "Ablegen"

   buy_gems:
     few_gems: "Ein paar Edelsteine"
@@ -327,7 +327,7 @@
     chest_gems: "Kiste von Edelsteinen"
     purchasing: "Kaufabwicklung..."
     declined: "Deine Karte wurde abgelehnt"
-    retrying: "Serverfehler, versuche erneut."
+    retrying: "Serverfehler, versuche es erneut."
     prompt_title: "Nicht genug Edelsteine"
     prompt_body: "Benötigst du mehr?"
     prompt_button: "Laden betreten"
@@ -339,25 +339,25 @@
     default: "Standard"
     experimental: "Experimentell"
     python_blurb: "Einfach jedoch leistungsfähig, Python ist eine gute Allzweck-Programmiersprache."
-    javascript_blurb: "Die Sprache des Web."
+    javascript_blurb: "Die Sprache des Netzes."
     coffeescript_blurb: "Schönere JavaScript Syntax."
     clojure_blurb: "Ein modernes Lisp."
     lua_blurb: "Skriptsprache für Spiele."
     io_blurb: "Simpel aber obskur."
     status: "Status"
     weapons: "Waffen"
-    weapons_warrior: "Schwert - Kurze Reichweite, Kein Zauber"
-    weapons_ranger: "Armbrust, Geschütz - Hohe Reichweite, Kein Zauber"
+    weapons_warrior: "Schwert - Kurze Reichweite, Keine Zauber"
+    weapons_ranger: "Armbrust, Geschütz - Hohe Reichweite, Keine Zauber"
     weapons_wizard: "Stäbe, Stäbe - Lange Reichweite, Zauber"
     attack: "Schaden" # Can also translate as "Attack"
     health: "Gesundheit"
     speed: "Geschwindigkeit"
     regeneration: "Regeneration"
     range: "Reichweite" # As in "attack or visual range"
-    blocks: "Blockieren" # As in "this shield blocks this much damage"
+    blocks: "Blocken" # As in "this shield blocks this much damage"
     skills: "Fähigkeiten"
-#    available_for_purchase: "Available for Purchase"
-#    level_to_unlock: "Level to unlock:"
+#    available_for_purchase: "Verkäuflich"
+#    level_to_unlock: "Benötigtes Level:"
     restricted_to_certain_heroes: "Nur bestimmte Helden können dieses Level spielen."

   skill_docs:
@@ -371,12 +371,12 @@
     action_radius: "Radius"
     action_duration: "Dauer"
     example: "Beispiel"
-#    ex: "ex" # Abbreviation of "example"
+#    ex: "Bsp." # Abbreviation of "example"
     current_value: "Aktueller Wert"
     default_value: "Standardwert"
     parameters: "Parameter"
 #    returns: "Returns"
-#    granted_by: "Granted by"
+#    granted_by: "Gewährt durch"

   save_load:
     granularity_saved_games: "Gespeichert"
@@ -402,7 +402,7 @@
     editor_config_livecompletion_description: "Zeigt Vorschläge der Auto-Vervollständigung an während du tippst."
     editor_config_invisibles_label: "Zeige unsichtbare Zeichen"
     editor_config_invisibles_description: "Zeigt unsichtbare Zeichen wie Leertasten an."
-    editor_config_indentguides_label: "Zeige Einrückungshilfe"
+    editor_config_indentguides_label: "Zeige Einrückhilfe"
     editor_config_indentguides_description: "Zeigt vertikale Linien an um Einrückungen besser zu sehen."
     editor_config_behaviors_label: "Intelligentes Verhalten"
     editor_config_behaviors_description: "Vervollständigt automatisch Klammern und Anführungszeichen."
@@ -415,7 +415,7 @@
     why_paragraph_2_center: "sondern Spaß wie"
     why_paragraph_2_italic_caps: "NEIN MUTTI ICH MUSS NOCH DEN LEVEL BEENDEN !"
     why_paragraph_2_suffix: "Deshalb ist CodeCombat ein Multiplayerspiel und kein spielähnlicher Kurs. Wir werden nicht aufhören bis du nicht mehr aufhören kannst -- nur diesmal ist das eine gute Sache."
-    why_paragraph_3: "Wenn dich Spiele süchtig machen, dass lass dich von diesem süchtig machen und werde ein Zauberer des Technologiezeitalters."
+    why_paragraph_3: "Wenn dich Spiele süchtig machen, dann lass dich von diesem süchtig machen und werde ein Zauberer des Technologiezeitalters."
     press_title: "Blogger/Presse"
     press_paragraph_1_prefix: "Sie möchten über uns schreiben? Laden und benutzen Sie ruhig alle Ressourcen in unserem"
     press_paragraph_1_link: "Presse-Paket"
@@ -520,7 +520,7 @@
     level_editor_prefix: "Benutze den CodeCombat"
     level_editor_suffix: "um Level zu erstellen oder zu bearbeiten. Benutzer haben bereits Level für ihre Klassen, Freunde, Hackathons, Schüler und Geschwister erstellt. Wenn das Neuerstellen eines Levels abschreckend wirkt, dann kannst du erstmal ein bestehendes kopieren!"
     thang_editor_prefix: "Wir nennen Einheiten innerhalb des Spiels 'Thangs'. Benutze den"
-#    thang_editor_suffix: "to modify the CodeCombat source artwork. Allow units to throw projectiles, alter the direction of an animation, change a unit's hit points, or upload your own vector sprites."
+#    thang_editor_suffix: "um die CodeCombat Grafik Dateien zu bearbeiten.  Gib Einheiten die Fähigkeit Projektile zu werfen,  throw projectiles, änder die Richtung einer Animation, die Lebenspunkte einer Einheit, oder lade deine eigenen vector sprites hoch."
     article_editor_prefix: "Hast du einen Fehler in unseren Dokus gefunden? Willst du Anleitungen für deine Kreationen erstellen? Schau dir den"
     article_editor_suffix: "und hilf CodeCombat Spielern das meiste aus ihrer Spielzeit heraus zu bekommen."
     find_us: "Finde uns auf diesen Seiten"
@@ -554,7 +554,7 @@
     achievement_title: "Achievement Editor"
     back: "Zurück"
     revert: "Zurücksetzen"
-    revert_models: "Models zurücksetzen."
+    revert_models: "Modelle zurücksetzen."
     pick_a_terrain: "Wähle ein Terrain"
     small: "Klein"
     grassy: "Grasig"
@@ -722,12 +722,12 @@
     summary_matches: "Matches - "
     summary_wins: " Siege, "
     summary_losses: " Verluste"
-#    rank_no_code: "No New Code to Rank"
-#    rank_my_game: "Rank My Game!"
+#    rank_no_code: "Kein neuer Code zu bewerten"
+#    rank_my_game: "Bewerte mein Spiel!"
     rank_submitting: "Übermitteln..."
-#    rank_submitted: "Submitted for Ranking"
-#    rank_failed: "Failed to Rank"
-#    rank_being_ranked: "Game Being Ranked"
+#    rank_submitted: "Zur Bewertung übermittelt"
+#    rank_failed: "Bewertung gescheitert"
+#    rank_being_ranked: "Spiel wird bewertet"
     rank_last_submitted: "übermittelt "
     help_simulate: "Hilf Spiele zu simulieren?"
 #    code_being_simulated: "Your new code is being simulated by other players for ranking. This will refresh as new matches come in."
@@ -774,11 +774,11 @@
     favorite_postfix: "."

   achievements:
-#    last_earned: "Last Earned"
+#    last_earned: "Zuletzt erhalten"
     amount_achieved: "Anzahl"
     achievement: "Achievement"
     category_contributor: "Mitwirkender"
-#    category_ladder: "Ladder"
+#    category_ladder: "Rangliste"
 #    category_level: "Level"
     category_miscellaneous: "Sonstiges"
     category_levels: "Level"
@@ -1124,7 +1124,7 @@
     candidate_looking_for: "Sucht nach"
     candidate_role: "Rolle"
     candidate_top_skills: "Top Fähigkeiten"
-#    candidate_years_experience: "Yrs Exp"
+#    candidate_years_experience: "Erfahrung (Jahre)"
     candidate_last_updated: "Zuletzt aktualisiert"
     candidate_who: "Wer"
 #    featured_developers: "Featured Developers"


Update pt-PT.coffee

Update pt-PT.coffee

--- app/locale/pt-PT.coffee
+++ app/locale/pt-PT.coffee
@@ -858,7 +858,7 @@
     new_to_programming: ". Novo na programação? Faz a Campanha para Iniciantes para expandires as tuas capacidades."
     so_ready: "Estou mais que pronto para isto"

-  loading_error:
+#   loading_error:
 #    could_not_load: "Error loading from server"
 #    connection_failure: "Connection failed."
 #    unauthorized: "You need to be signed in. Do you have cookies disabled?"
@@ -868,12 +868,12 @@
 #    timeout: "Server timeout."
 #    conflict: "Resource conflict."
 #    bad_input: "Bad input."
-    server_error: "Erro do servidor."
-    unknown: "Erro desconhecido."
-
-  resources:
-    your_sessions: "As Suas Sessões"
-    level: "Nível"
+#    server_error: "Server error."
+#    unknown: "Unknown error."
+
+#   resources:
+#    your_sessions: "Your Sessions"
+#    level: "Level"
 #    social_network_apis: "Social Network APIs"
 #    facebook_status: "Facebook Status"
 #    facebook_friends: "Facebook Friends"


Update pt-PT.coffee

Update pt-PT.coffee

--- app/locale/pt-PT.coffee
+++ app/locale/pt-PT.coffee
@@ -608,12 +608,12 @@
     revert: "Reverter"
     revert_models: "Reverter Modelos"
     pick_a_terrain: "Escolhe Um Terreno"
-#    dungeon: "Dungeon"
-#    indoor: "Indoor"
-#    desert: "Desert"
-    grassy: "Com Relva"
+    dungeon: "Masmorra"
+    indoor: "Interior"
+    desert: "Deserto"
+    grassy: "Relvado"
     small: "Pequeno"
-#    large: "Large"
+    large: "Grande"
     fork_title: "Bifurcar Nova Versão"
     fork_creating: "A Criar Bifurcação..."
     generate_terrain: "Gerar Terreno"


Fix extra pixel on whomp

Fix extra pixel on whomp

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/CodeforHawaii/projectmonitor.git/'


few changes

few changes

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/evercam/evercam-dashboard.git/'


wee bit of testing with very aggressive upload interval, fixed some bugs

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/UCSFMemoryAndAging/tabcat.git/'


remove 'returns'; ensure value passed to setText is a string

--- src/packages/fuzzy-finder/src/fuzzy-finder.coffee
+++ src/packages/fuzzy-finder/src/fuzzy-finder.coffee
@@ -110,14 +110,14 @@
             @rootView.open(paths[0])
           else if paths?.length
             @attach()
-            @miniEditor.setText(theWord))
+            @miniEditor.setText(''+theWord))

   populateProjectPaths: (options = {}) ->
     if @projectPaths?.length > 0
       listedItems =
         if options.filter?
           @projectPaths.filter (path) ->
-            return path.indexOf(options.filter) >= 0
+            path.indexOf(options.filter) >= 0
         else
           @projectPaths
       @setArray(listedItems)
@@ -140,7 +140,7 @@
         listedItems =
           if options.filter?
             @projectPaths.filter (path) ->
-              return path.indexOf(options.filter) >= 0
+              path.indexOf(options.filter) >= 0
           else
             @projectPaths


Adding the start of client_authorize

Adding the start of client_authorize

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/damianb/crimson.git/'


ApiGenerator: support instance level method examples and export them

--- scripts/api-generator.coffee
+++ scripts/api-generator.coffee
@@ -199,18 +199,35 @@

   for method, signatures of methods.instance

+    parameters = [ { $ref: '#/parameters/instanceParam' } ]
+    response = { description: 'OK', schema }
+    if returns = docs[name]['instance'][method]?.returns
+      if Object.keys(returns).length and swagger.definitions[returns.type]
+        response =
+          description: returns.description
+          schema: { $ref: "#/definitions/#{returns.type}" }
+
+    if hasParams = signatures.length > 1 or signatures[0].split(',').length > 1
+      examples = docs[name]['instance'][method]?.examples ? []
+      for example in examples when example.title is 'api'
+        parameters.push {
+          in: 'body'
+          name: 'body'
+          schema: example.schema
+          required: true
+          description: 'body of the request'
+        }
+
     paths["/remote.api/#{name}.#{method}/{id}"] =
       post:
         tags: [ name ]
         consumes: [ 'application/json' ]
         description: docs[name]['instance'][method]?.description ? ''
-        parameters: [
-          { $ref: '#/parameters/instanceParam' }
-        ]
+        parameters: parameters
         responses:
           '200':
-            description: 'OK'
-            schema: schema
+            description: response.description
+            schema: response.schema

 module.exports = generateApi = (callback) ->


More contracting officer additions...

More contracting officer additions...

error: pathspec 'app/assets/javascripts/contracting_officers.js.coffee' did not match any file(s) known to git

--- app/assets/javascripts/contracting_officers.js.coffee
+++ app/assets/javascripts/contracting_officers.js.coffee
@@ -0,0 +1,3 @@
+# Place all the behaviors and hooks related to the matching controller here.
+# All this logic will automatically be available in application.js.
+# You can use CoffeeScript in this file: http://coffeescript.org/


Add wolfram script to ask questions

Add wolfram script to ask questions

error: pathspec 'scripts/wolfram.coffee' did not match any file(s) known to git

--- scripts/wolfram.coffee
+++ scripts/wolfram.coffee
@@ -0,0 +1,29 @@
+  # Description:
+#   Allows hubot to answer almost any question by asking Wolfram Alpha
+#
+# Dependencies:
+#   "wolfram": "0.2.2"
+#
+# Configuration:
+#   HUBOT_WOLFRAM_APPID - your AppID
+#
+# Commands:
+#   hubot question <question> - Searches Wolfram Alpha for the answer to the question
+#
+# Notes:
+#   This may not work with node 0.6.x
+#
+# Author:
+#   dhorrigan
+
+Wolfram = require('wolfram').createClient("548YWR-HWXYT65W88")
+
+module.exports = (robot) ->
+  robot.respond /(question|wfa) (.*)$/i, (msg) ->
+    console.log msg.match
+    Wolfram.query msg.match[2], (e, result) ->
+      # console.log result
+      if result and result.length > 0
+        msg.send result[1]['subpods'][0]['value']
+      else
+        msg.send 'Hmm...not sure'


Convert tlsOptions.ca

Convert tlsOptions.ca

tls module wants the ca-option (amongs others) to be an array of
buffers. Since the LDAP settings are defined in a JSON file we kind of
expect it to be a file name.

So, if the file is found convert it. If not then do nothing and probably
fail. There are other possible options that should be handled the same
way but in current environment I just need the ca certificate.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/leonidas/qa-dashboard.git/'