// File: epfml[P]Bi-Sent2Vec/src/main.cc
// Function: main
int main(int argc, char** argv) {
  if (argc < 2) {
    printUsage();
    exit(EXIT_FAILURE);
  }
  std::string command(argv[1]);
  if (command == "transgram" || command == "bisent2vec" ) {
    train(argc, argv);
  } else if (command == "test") {
    test(argc, argv);
  } else if (command == "saveDict") {
    saveDict(argc, argv);
  } else if (command == "sent2vecFromDict") {
    trainFromDict(argc, argv);
  } else if (command == "quantize") {
    quantize(argc, argv);
  } else if (command == "print-word-vectors") {
    printWordVectors(argc, argv);
  } else if (command == "print-sentence-vectors") {
    printSentenceVectors(argc, argv);
  } else if (command == "print-vocabulary-vectors") {
    printVocabularyVectors(argc, argv);
  } else if (command == "print-vocabulary") {
    printVocabulary(argc, argv);
  } else if (command == "print-ngrams") {
    printNgrams(argc, argv);
  } else if (command == "nn") {
    nn(argc, argv);
  } else if (command == "nnSent") {
    nnSent(argc, argv);
  } else if (command == "analogies") {
    analogies(argc, argv);
  } else if (command == "analogiesSent") {
    analogiesSent(argc, argv);
  } else if (command == "predict" || command == "predict-prob" ) {
    predict(argc, argv);
  } else {
    printUsage();
    exit(EXIT_FAILURE);
  }
  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x2, -0x8(%rbp)
jge 0x4163b
callq 0x3f830
movl $0x1, %edi
callq 0x54f0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x58(%rbp)
leaq -0x31(%rbp), %rdi
movq %rdi, -0x50(%rbp)
callq 0x57b0
movq -0x58(%rbp), %rsi
movq -0x50(%rbp), %rdx
leaq -0x30(%rbp), %rdi
callq 0x7c10
jmp 0x41667
leaq -0x31(%rbp), %rdi
callq 0x5480
leaq 0x2fcf(%rip), %rsi      # 0x44646
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x59(%rbp)
jmp 0x41685
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x416ac
jmp 0x4168e
leaq 0x985(%rip), %rsi       # 0x4201a
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x5a(%rbp)
jmp 0x416a3
movb -0x5a(%rbp), %al
testb $0x1, %al
jne 0x416ac
jmp 0x416f3
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x41340
jmp 0x416ba
jmp 0x419e6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x31(%rbp), %rdi
callq 0x5480
jmp 0x419ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x58d8
jmp 0x419ff
leaq 0x978(%rip), %rsi       # 0x42072
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x5b(%rbp)
jmp 0x41708
movb -0x5b(%rbp), %al
testb $0x1, %al
jne 0x41711
jmp 0x41724
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x3fe30
jmp 0x4171f
jmp 0x419e4
leaq 0x2f25(%rip), %rsi      # 0x44650
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x5c(%rbp)
jmp 0x41739
movb -0x5c(%rbp), %al
testb $0x1, %al
jne 0x41742
jmp 0x41755
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x41430
jmp 0x41750
jmp 0x419e2
leaq 0x2efd(%rip), %rsi      # 0x44659
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x5d(%rbp)
jmp 0x4176a
movb -0x5d(%rbp), %al
testb $0x1, %al
jne 0x41773
jmp 0x41786
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x41520
jmp 0x41781
jmp 0x419e0
leaq 0x2edd(%rip), %rsi      # 0x4466a
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x5e(%rbp)
jmp 0x4179b
movb -0x5e(%rbp), %al
testb $0x1, %al
jne 0x417a4
jmp 0x417b7
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x3fb90
jmp 0x417b2
jmp 0x419de
leaq 0x2eb5(%rip), %rsi      # 0x44673
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x5f(%rbp)
jmp 0x417cc
movb -0x5f(%rbp), %al
testb $0x1, %al
jne 0x417d5
jmp 0x417e8
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40460
jmp 0x417e3
jmp 0x419dc
leaq 0x2e97(%rip), %rsi      # 0x44686
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x60(%rbp)
jmp 0x417fd
movb -0x60(%rbp), %al
testb $0x1, %al
jne 0x41806
jmp 0x41819
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40590
jmp 0x41814
jmp 0x419da
leaq 0x2e7d(%rip), %rsi      # 0x4469d
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x61(%rbp)
jmp 0x4182e
movb -0x61(%rbp), %al
testb $0x1, %al
jne 0x41837
jmp 0x4184a
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x406c0
jmp 0x41845
jmp 0x419d8
leaq 0x2e65(%rip), %rsi      # 0x446b6
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x62(%rbp)
jmp 0x4185f
movb -0x62(%rbp), %al
testb $0x1, %al
jne 0x41868
jmp 0x4187b
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x408d0
jmp 0x41876
jmp 0x419d6
leaq 0x2e45(%rip), %rsi      # 0x446c7
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x63(%rbp)
jmp 0x41890
movb -0x63(%rbp), %al
testb $0x1, %al
jne 0x41899
jmp 0x418ac
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40b30
jmp 0x418a7
jmp 0x419d4
leaq 0x87f(%rip), %rsi       # 0x42132
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x64(%rbp)
jmp 0x418c1
movb -0x64(%rbp), %al
testb $0x1, %al
jne 0x418ca
jmp 0x418dd
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40ce0
jmp 0x418d8
jmp 0x419d2
leaq 0x2df0(%rip), %rsi      # 0x446d4
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x65(%rbp)
jmp 0x418f2
movb -0x65(%rbp), %al
testb $0x1, %al
jne 0x418fb
jmp 0x4190e
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40e30
jmp 0x41909
jmp 0x419d0
leaq 0x2dc6(%rip), %rsi      # 0x446db
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x66(%rbp)
jmp 0x41923
movb -0x66(%rbp), %al
testb $0x1, %al
jne 0x4192c
jmp 0x4193f
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x41010
jmp 0x4193a
jmp 0x419ce
leaq 0x2d9f(%rip), %rsi      # 0x446e5
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x67(%rbp)
jmp 0x41954
movb -0x67(%rbp), %al
testb $0x1, %al
jne 0x4195d
jmp 0x4196d
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x41160
jmp 0x4196b
jmp 0x419cc
leaq 0x2d7f(%rip), %rsi      # 0x446f3
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x68(%rbp)
jmp 0x41982
movb -0x68(%rbp), %al
testb $0x1, %al
jne 0x419a9
jmp 0x4198b
leaq 0x2ca7(%rip), %rsi      # 0x44639
leaq -0x30(%rbp), %rdi
callq 0x7cc0
movb %al, -0x69(%rbp)
jmp 0x419a0
movb -0x69(%rbp), %al
testb $0x1, %al
jne 0x419a9
jmp 0x419b9
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x40100
jmp 0x419b7
jmp 0x419ca
callq 0x3f830
jmp 0x419c0
movl $0x1, %edi
callq 0x54f0
jmp 0x419cc
jmp 0x419ce
jmp 0x419d0
jmp 0x419d2
jmp 0x419d4
jmp 0x419d6
jmp 0x419d8
jmp 0x419da
jmp 0x419dc
jmp 0x419de
jmp 0x419e0
jmp 0x419e2
jmp 0x419e4
jmp 0x419e6
movl $0x0, -0x4(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x58d8
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x57a0
nopl (%rax,%rax)