// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/annotationsketch/canvas_cairo.c
// Function: gt_canvas_cairo_visit_element
int gt_canvas_cairo_visit_element(GtCanvas *canvas, GtElement *elem,
                                  GtError *err)
{
  int had_err = 0, arrow_status = ARROW_NONE;
  GtRange elem_range = gt_element_get_range(elem);
  GtDrawingRange draw_range;
  double elem_start = GT_UNDEF_DOUBLE,
         elem_width = GT_UNDEF_DOUBLE,
         stroke_width = STROKE_WIDTH_DEFAULT,
         bar_height = BAR_HEIGHT_DEFAULT,
         arrow_width = ARROW_WIDTH_DEFAULT;
  GtColor elem_color, grey, fill_color;
  const char *type;
  GtStyleQueryStatus rval;
  GtStr *style;
  GtStrand strand = gt_element_get_strand(elem);

  gt_assert(canvas && elem);

  /* This shouldn't happen. */
  if (!gt_range_overlap(&elem_range, &canvas->pvt->viewrange))
    return -1;

  type = gt_element_get_type(elem);
  grey.red = grey.green = grey.blue = .85;
  grey.alpha = 0.5;

  /* get default or image-wide bar height */
  if (gt_style_get_num(canvas->pvt->sty, "format", "bar_height", &bar_height,
                       NULL, err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }
  /* try to get type-specific bar height */
  if (gt_style_get_num_with_track(canvas->pvt->sty, type, "bar_height",
                       &bar_height,
                       gt_element_get_node_ref(elem),
                       gt_track_get_title(canvas->pvt->current_track),
                       err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }
  /* get default or image-wide arrow width */
  if (gt_style_get_num(canvas->pvt->sty, "format", "arrow_width", &arrow_width,
                        NULL, err)== GT_STYLE_QUERY_ERROR) {
    return -1;
  }
  /* try to get type-specific arrow width */
  if (gt_style_get_num_with_track(canvas->pvt->sty, type, "arrow_width",
                       &arrow_width,
                       gt_element_get_node_ref(elem),
                       gt_track_get_title(canvas->pvt->current_track),
                       err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }

  if ((strand == GT_STRAND_REVERSE || strand == GT_STRAND_BOTH)
         /*&& delem == gt_dlist_first(elems)*/)
    arrow_status = ARROW_LEFT;
  if ((strand == GT_STRAND_FORWARD || strand == GT_STRAND_BOTH)
         /*&& gt_dlistelem_next(delem) == NULL*/)
    arrow_status = (arrow_status == ARROW_LEFT ? ARROW_BOTH : ARROW_RIGHT);

  gt_log_log("processing element from "GT_WU" to "GT_WU", strand %d\n",
             elem_range.start, elem_range.end, (int) strand);

  draw_range = gt_coords_calc_generic_range(elem_range, canvas->pvt->viewrange);
  draw_range.start *= (canvas->pvt->width-2*canvas->pvt->margins);
  draw_range.end *= (canvas->pvt->width-2*canvas->pvt->margins);
  elem_start = draw_range.start + canvas->pvt->margins;
  elem_width = draw_range.end - draw_range.start;
  gt_assert(elem_start != GT_UNDEF_DOUBLE && elem_width != GT_UNDEF_DOUBLE);

  if (gt_element_is_marked(elem)) {
    if (gt_style_get_color_with_track(canvas->pvt->sty, type, "stroke_marked",
                           &elem_color, gt_element_get_node_ref(elem),
                           gt_track_get_title(canvas->pvt->current_track),
                           err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
    if (gt_style_get_num_with_track(canvas->pvt->sty, "format",
                          "stroke_marked_width",
                          &stroke_width, gt_element_get_node_ref(elem),
                          gt_track_get_title(canvas->pvt->current_track),
                          err) == GT_STYLE_QUERY_ERROR) {
    return -1;
    }
  }
  else {
    if (gt_style_get_color_with_track(canvas->pvt->sty, type, "stroke",
                              &elem_color,
                              gt_element_get_node_ref(elem),
                              gt_track_get_title(canvas->pvt->current_track),
                              err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
    if (gt_style_get_num_with_track(canvas->pvt->sty, "format", "stroke_width",
                         &stroke_width,
                         gt_element_get_node_ref(elem),
                         gt_track_get_title(canvas->pvt->current_track),
                         err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
    if (gt_style_get_num_with_track(canvas->pvt->sty, type, "stroke_width",
                         &stroke_width,
                         gt_element_get_node_ref(elem),
                         gt_track_get_title(canvas->pvt->current_track),
                         err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
  }
  if (gt_style_get_color_with_track(canvas->pvt->sty, type, "fill",
                                 &fill_color,
                                 gt_element_get_node_ref(elem),
                                 gt_track_get_title(canvas->pvt->current_track),
                                 err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }

  if (canvas->pvt->bt &&
          gt_double_smaller_double(draw_range.end-draw_range.start, 1.1))
  {
    if ((GtUword) draw_range.start > gt_bittab_size(canvas->pvt->bt))
      return had_err;
    if (gt_bittab_bit_is_set(canvas->pvt->bt, (GtUword) draw_range.start))
      return had_err;
    gt_graphics_draw_vertical_line(canvas->pvt->g,
                                   elem_start,
                                   canvas->pvt->y - bar_height/2,
                                   elem_color,
                                   bar_height,
                                   stroke_width);
    gt_bittab_set_bit(canvas->pvt->bt, (GtUword) draw_range.start);
  }

  /* register coordinates in GtImageInfo object if available */
  if (canvas->pvt->ii)
  {
    GtRecMap *rm = gt_rec_map_new(elem_start, canvas->pvt->y - bar_height/2,
                                  elem_start+elem_width,
                                  canvas->pvt->y+bar_height/2,
                                  (GtFeatureNode*)
                                    gt_element_get_node_ref(elem));
    gt_image_info_add_rec_map(canvas->pvt->ii, rm);
    }

  if (canvas->pvt->bt && draw_range.end-draw_range.start <= 1.1)
  {
    return had_err;
  }

  gt_log_log("drawing element from %f to %f, arrow status: %d",
             draw_range.start, draw_range.end, arrow_status);

  /* draw each element according to style set in the style */
  style = gt_str_new();
  rval = gt_style_get_str_with_track(canvas->pvt->sty, type, "style", style,
                          gt_element_get_node_ref(elem),
                          gt_track_get_title(canvas->pvt->current_track),
                          err);
  switch (rval) {
    case GT_STYLE_QUERY_NOT_SET:
      gt_str_set(style, "box");    /* default style */
      break;
    case GT_STYLE_QUERY_ERROR:
      gt_str_delete(style);
      gt_assert(gt_error_is_set(err));
      return -1;
    default:
      break;
  }

  if (strcmp(gt_str_get(style), "box") == 0)
  {
    gt_graphics_draw_box(canvas->pvt->g,
                         elem_start,
                         canvas->pvt->y - bar_height/2,
                         elem_width,
                         bar_height,
                         fill_color,
                         arrow_status,
                         arrow_width,
                         stroke_width,
                         elem_color,
                         false);
  }
  else if (strcmp(gt_str_get(style), "rectangle") == 0)
  {
    gt_graphics_draw_box(canvas->pvt->g,
                         elem_start,
                         canvas->pvt->y - bar_height/2,
                         elem_width,
                         bar_height,
                         fill_color,
                         ARROW_NONE,
                         arrow_width,
                         stroke_width,
                         elem_color,
                         false);
  }
  else if (strcmp(gt_str_get(style), "caret") == 0)
  {
    gt_graphics_draw_caret(canvas->pvt->g,
                           elem_start,
                           canvas->pvt->y - bar_height/2,
                           elem_width,
                           bar_height,
                           ARROW_NONE,
                           arrow_width,
                           stroke_width,
                           elem_color);
  }
  else if (strcmp(gt_str_get(style), "dashes") == 0)
  {
    gt_graphics_draw_dashes(canvas->pvt->g,
                            elem_start,
                            canvas->pvt->y - bar_height/2,
                            elem_width,
                            bar_height,
                            arrow_status,
                            arrow_width,
                            stroke_width,
                            elem_color);
  }
  else if (strcmp(gt_str_get(style), "line") == 0)
  {
    gt_graphics_draw_horizontal_line(canvas->pvt->g,
                                     elem_start,
                                     canvas->pvt->y - bar_height/2,
                                     elem_color,
                                     elem_width,
                                     1.0);
  }
  else
  {
     gt_graphics_draw_box(canvas->pvt->g,
                          elem_start,
                          canvas->pvt->y - bar_height/2,
                          elem_width,
                          bar_height,
                          fill_color,
                          arrow_status,
                          arrow_width,
                          stroke_width,
                          elem_color,
                          false);
  }
  gt_str_delete(style);

  /* draw arrowheads at clipped margins */
  if (draw_range.clip == CLIPPED_LEFT || draw_range.clip == CLIPPED_BOTH)
      gt_graphics_draw_arrowhead(canvas->pvt->g,
                                 canvas->pvt->margins - 10,
                                 canvas->pvt->y - 4,
                                 grey,
                                 ARROW_LEFT);
  if (draw_range.clip == CLIPPED_RIGHT || draw_range.clip == CLIPPED_BOTH)
      gt_graphics_draw_arrowhead(canvas->pvt->g,
                                 canvas->pvt->width-canvas->pvt->margins + 10,
                                 canvas->pvt->y - 4,
                                 grey,
                                 ARROW_RIGHT);
  return had_err;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x8e67d
movq %rax, 0xb0(%rsp)
movq %rdx, 0xb8(%rsp)
movabsq $0x3fe0000000000000, %rax # imm = 0x3FE0000000000000
movq %rax, 0x58(%rsp)
movabsq $0x4030000000000000, %rax # imm = 0x4030000000000000
movq %rax, 0x50(%rsp)
movabsq $0x4018000000000000, %rax # imm = 0x4018000000000000
movq %rax, 0x70(%rsp)
movq %r12, %rdi
callq 0x8e6a0
testq %rbx, %rbx
je 0x8d65f
testq %r12, %r12
je 0x8d65f
movl %eax, %r15d
movq 0x8(%rbx), %rsi
leaq 0xb0(%rsp), %rdi
callq 0x7e06e
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
testb %al, %al
je 0x8cdb1
movq %r12, %rdi
callq 0x8e691
movq %rax, %r13
movaps 0x6966c(%rip), %xmm0    # 0xf6310
movaps %xmm0, 0x100(%rsp)
movapd 0x6966c(%rip), %xmm0    # 0xf6320
movapd %xmm0, 0x110(%rsp)
movq 0x8(%rbx), %rax
movq 0x38(%rax), %rdi
leaq 0x544ca(%rip), %rsi     # 0xe1196
leaq 0x60376(%rip), %rdx     # 0xed049
leaq 0x50(%rsp), %rcx
xorl %r8d, %r8d
movq %r14, %r9
callq 0x545d2
cmpl $0x2, %eax
je 0x8cdb1
movq 0x8(%rbx), %rax
movq %r13, 0x68(%rsp)
movq 0x38(%rax), %r13
movq %r12, %rdi
callq 0x8e6dc
movq %rax, %rbp
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
movq %r14, (%rsp)
leaq 0x6032d(%rip), %rdx     # 0xed049
leaq 0x50(%rsp), %rcx
movq %r13, %rdi
movq 0x68(%rsp), %rsi
movq %rbp, %r8
movq %rax, %r9
callq 0x543b4
cmpl $0x2, %eax
je 0x8cdac
movq 0x8(%rbx), %rax
movq 0x38(%rax), %rdi
leaq 0x5444e(%rip), %rsi     # 0xe1196
leaq 0x69790(%rip), %rdx     # 0xf64df
leaq 0x70(%rsp), %rcx
xorl %r8d, %r8d
movq %r14, %r9
callq 0x545d2
cmpl $0x2, %eax
je 0x8cdac
movq 0x8(%rbx), %rax
movq 0x38(%rax), %r13
movq %r12, %rdi
callq 0x8e6dc
movq %rax, %rbp
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
movq %r14, (%rsp)
leaq 0x69750(%rip), %rdx     # 0xf64df
leaq 0x70(%rsp), %rcx
movq %r13, %rdi
movq 0x68(%rsp), %rsi
movq %rbp, %r8
movq %rax, %r9
callq 0x543b4
cmpl $0x2, %eax
jne 0x8cdc5
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
movl %ebp, %eax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leal -0x1(%r15), %eax
xorl %ecx, %ecx
cmpl $0x2, %eax
setae %cl
leal (%rcx,%rcx,2), %eax
movl $0x0, %ecx
adcl $0x1, %ecx
testl $0xfffffffd, %r15d      # imm = 0xFFFFFFFD
cmovnel %eax, %ecx
movl %ecx, 0x64(%rsp)
movq 0xb0(%rsp), %rsi
movq 0xb8(%rsp), %rdx
leaq 0x69740(%rip), %rdi     # 0xf6541
movl %r15d, %ecx
xorl %eax, %eax
callq 0x35a32
movq 0x8(%rbx), %rax
movq 0xb0(%rsp), %rsi
movq 0xb8(%rsp), %rdx
movq (%rax), %rcx
movq 0x8(%rax), %r8
leaq 0x90(%rsp), %r15
movq %r15, %rdi
callq 0x8e1f4
movq 0x8(%rbx), %rax
movsd 0x28(%rax), %xmm0
unpcklps 0x5463a(%rip), %xmm0    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x54642(%rip), %xmm0    # 0xe1490
movapd %xmm0, %xmm2
unpckhpd %xmm0, %xmm2            # xmm2 = xmm2[1],xmm0[1]
addsd %xmm0, %xmm2
movsd 0x20(%rax), %xmm1
movapd %xmm1, %xmm0
addsd %xmm1, %xmm0
subsd %xmm0, %xmm2
unpcklpd %xmm2, %xmm2            # xmm2 = xmm2[0,0]
mulpd (%r15), %xmm2
addsd %xmm2, %xmm1
movsd %xmm1, 0x48(%rsp)
ucomisd 0x54a62(%rip), %xmm1    # 0xe18e8
jne 0x8ce8e
jnp 0x8d664
movapd %xmm2, %xmm0
unpckhpd %xmm2, %xmm0            # xmm0 = xmm0[1],xmm2[1]
movapd %xmm0, 0x120(%rsp)
subsd %xmm2, %xmm0
movapd %xmm0, 0x80(%rsp)
ucomisd 0x54a34(%rip), %xmm0    # 0xe18e8
jne 0x8cebc
jnp 0x8d664
movapd %xmm2, 0xf0(%rsp)
movl 0xa0(%rsp), %r13d
movq %r12, %rdi
callq 0x8e6af
movl %eax, %ebp
movq 0x8(%rbx), %rax
movq 0x38(%rax), %r15
movq %r12, %rdi
callq 0x8e6dc
movq %rax, 0x78(%rsp)
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
testb %bpl, %bpl
je 0x8cf71
movq %r14, (%rsp)
leaq 0x67c46(%rip), %rdx     # 0xf4b4f
leaq 0x90(%rsp), %rcx
movq %r15, %rdi
movq 0x68(%rsp), %rsi
movq 0x78(%rsp), %r8
movq %rax, %r9
callq 0x53a23
cmpl $0x2, %eax
je 0x8cdac
movl %r13d, %ebp
movq 0x8(%rbx), %rax
movq 0x38(%rax), %r15
movq %r12, %rdi
callq 0x8e6dc
movq %rax, %r13
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
movq %r14, (%rsp)
leaq 0x54239(%rip), %rsi     # 0xe1196
leaq 0x6964b(%rip), %rdx     # 0xf65af
leaq 0x58(%rsp), %rcx
movq %r15, %rdi
jmp 0x8d02b
movq %r14, (%rsp)
leaq 0x6957c(%rip), %rdx     # 0xf64f8
leaq 0x90(%rsp), %rcx
movq %r15, %rdi
movq 0x68(%rsp), %rsi
movq 0x78(%rsp), %r8
movq %rax, %r9
callq 0x53a23
cmpl $0x2, %eax
je 0x8cdac
movl %r13d, %ebp
movq 0x8(%rbx), %rax
movq 0x38(%rax), %r15
movq %r12, %rdi
callq 0x8e6dc
movq %rax, %r13
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
movq %r14, (%rsp)
leaq 0x541c6(%rip), %rsi     # 0xe1196
leaq 0x69514(%rip), %rdx     # 0xf64eb
leaq 0x58(%rsp), %rcx
movq %r15, %rdi
movq %r13, %r8
movq %rax, %r9
callq 0x543b4
cmpl $0x2, %eax
je 0x8cdac
movq 0x8(%rbx), %rax
movq 0x38(%rax), %r15
movq %r12, %rdi
callq 0x8e6dc
movq %rax, %r13
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
movq %r14, (%rsp)
leaq 0x694cd(%rip), %rdx     # 0xf64eb
leaq 0x58(%rsp), %rcx
movq %r15, %rdi
movq 0x68(%rsp), %rsi
movq %r13, %r8
movq %rax, %r9
callq 0x543b4
cmpl $0x2, %eax
je 0x8cdac
movq 0x8(%rbx), %rax
movq 0x38(%rax), %r15
movq %r12, %rdi
callq 0x8e6dc
movq %rax, %r13
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
movq %r14, (%rsp)
leaq 0x644a5(%rip), %rdx     # 0xf150f
leaq 0xd0(%rsp), %rcx
movq %r15, %rdi
movq 0x68(%rsp), %rsi
movq %r13, %r8
movq %rax, %r9
callq 0x53a23
cmpl $0x2, %eax
je 0x8cdac
movq 0x8(%rbx), %rax
cmpq $0x0, 0x50(%rax)
movl %ebp, %r13d
je 0x8d16f
movsd 0x69208(%rip), %xmm1    # 0xf62b0
movapd 0x80(%rsp), %xmm0
callq 0x7a0a0
testb %al, %al
je 0x8d16f
movapd 0xf0(%rsp), %xmm0
cvttsd2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subsd 0x5d6d5(%rip), %xmm0    # 0xea7b0
cvttsd2si %xmm0, %r15
andq %rcx, %r15
orq %rax, %r15
movq 0x8(%rbx), %rax
movq 0x50(%rax), %rdi
callq 0x70bd9
xorl %ebp, %ebp
cmpq %r15, %rax
jb 0x8cdb1
movq 0x8(%rbx), %rax
movq 0x50(%rax), %rdi
movq %r15, %rsi
callq 0x70b1b
testb %al, %al
jne 0x8cdb1
movq 0x8(%rbx), %rax
movq 0x58(%rax), %rdi
movsd 0x50(%rsp), %xmm2
movsd 0x5e054(%rip), %xmm1    # 0xeb180
mulsd %xmm2, %xmm1
addsd 0x18(%rax), %xmm1
movsd 0x58(%rsp), %xmm3
movups 0x90(%rsp), %xmm0
movups 0xa0(%rsp), %xmm4
movups %xmm4, 0x10(%rsp)
movups %xmm0, (%rsp)
movsd 0x48(%rsp), %xmm0
callq 0x4eefb
movq 0x8(%rbx), %rax
movq 0x50(%rax), %rdi
movq %r15, %rsi
callq 0x70790
movq 0x8(%rbx), %rax
cmpq $0x0, 0x60(%rax)
je 0x8d202
movsd 0x18(%rax), %xmm0
movsd 0x50(%rsp), %xmm1
mulsd 0x5d50f(%rip), %xmm1    # 0xea6a0
movapd %xmm0, %xmm2
subsd %xmm1, %xmm2
movsd %xmm2, 0x78(%rsp)
movsd 0x48(%rsp), %xmm2
addsd 0x80(%rsp), %xmm2
movsd %xmm2, 0xc8(%rsp)
addsd %xmm0, %xmm1
movsd %xmm1, 0xc0(%rsp)
movq %r12, %rdi
callq 0x8e6dc
movsd 0x48(%rsp), %xmm0
movsd 0x78(%rsp), %xmm1
movsd 0xc8(%rsp), %xmm2
movsd 0xc0(%rsp), %xmm3
movq %rax, %rdi
callq 0x53308
movq 0x8(%rbx), %rcx
movq 0x60(%rcx), %rdi
movq %rax, %rsi
callq 0x52237
movq 0x8(%rbx), %rax
xorl %ebp, %ebp
cmpq $0x0, 0x50(%rax)
je 0x8d226
movsd 0x69099(%rip), %xmm0    # 0xf62b0
ucomisd 0x80(%rsp), %xmm0
jae 0x8cdb1
movl %r13d, 0x78(%rsp)
leaq 0x69391(%rip), %rdi     # 0xf65c3
movapd 0xf0(%rsp), %xmm0
movapd 0x120(%rsp), %xmm1
movl 0x64(%rsp), %esi
movb $0x2, %al
callq 0x35a32
callq 0x3bfe0
movq %rax, %r13
movq 0x8(%rbx), %rax
movq 0x38(%rax), %r15
movq %r12, %rdi
callq 0x8e6dc
movq %rax, %r12
movq 0x8(%rbx), %rax
movq 0x40(%rax), %rdi
callq 0x56394
movq %r14, (%rsp)
leaq 0x713e6(%rip), %rdx     # 0xfe668
movq %r15, %rdi
movq 0x68(%rsp), %rsi
movq %r13, %rcx
movq %r12, %r8
movq %rax, %r9
callq 0x540c7
cmpl $0x2, %eax
je 0x8d3aa
cmpl $0x1, %eax
movl 0x78(%rsp), %r14d
jne 0x8d2ba
leaq 0x5e2c8(%rip), %rsi     # 0xeb57a
movq %r13, %rdi
callq 0x3c0cc
movq %r13, %rdi
callq 0x3c40b
leaq 0x5e2b1(%rip), %rsi     # 0xeb57a
movq %rax, %rdi
callq 0xb890
testl %eax, %eax
je 0x8d3cc
movq %r13, %rdi
callq 0x3c40b
leaq 0x5e2e8(%rip), %rsi     # 0xeb5d0
movq %rax, %rdi
callq 0xb890
testl %eax, %eax
je 0x8d43f
movq %r13, %rdi
callq 0x3c40b
leaq 0x5e2ac(%rip), %rsi     # 0xeb5b3
movq %rax, %rdi
callq 0xb890
testl %eax, %eax
je 0x8d59c
movq %r13, %rdi
callq 0x3c40b
leaq 0x5e26f(%rip), %rsi     # 0xeb595
movq %rax, %rdi
callq 0xb890
testl %eax, %eax
je 0x8d5fe
movq %r13, %rdi
callq 0x3c40b
leaq 0x5e981(%rip), %rsi     # 0xebcc6
movq %rax, %rdi
callq 0xb890
movq 0x8(%rbx), %rcx
movsd 0x50(%rsp), %xmm3
movsd 0x5de21(%rip), %xmm1    # 0xeb180
mulsd %xmm3, %xmm1
addsd 0x18(%rcx), %xmm1
movq 0x58(%rcx), %rdi
testl %eax, %eax
jne 0x8d3eb
movups 0x90(%rsp), %xmm0
movups 0xa0(%rsp), %xmm2
movups %xmm2, 0x10(%rsp)
movups %xmm0, (%rsp)
movsd 0x5455f(%rip), %xmm3    # 0xe18f0
movsd 0x48(%rsp), %xmm0
movapd 0x80(%rsp), %xmm2
callq 0x4ee70
jmp 0x8d4b8
movq %r13, %rdi
callq 0x3d1eb
movq %r14, %rdi
callq 0x3566a
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
testb %al, %al
jne 0x8cdb1
callq 0x21642
movq 0x8(%rbx), %rax
movq 0x58(%rax), %rdi
movsd 0x50(%rsp), %xmm3
movsd 0x5dd9e(%rip), %xmm1    # 0xeb180
mulsd %xmm3, %xmm1
addsd 0x18(%rax), %xmm1
movsd 0x70(%rsp), %xmm4
movsd 0x58(%rsp), %xmm5
movups 0x90(%rsp), %xmm0
movups 0xa0(%rsp), %xmm2
movups %xmm2, 0x30(%rsp)
movups %xmm0, 0x20(%rsp)
movups 0xd0(%rsp), %xmm0
movups 0xe0(%rsp), %xmm2
movups %xmm2, 0x10(%rsp)
movups %xmm0, (%rsp)
movsd 0x48(%rsp), %xmm0
movapd 0x80(%rsp), %xmm2
movl 0x64(%rsp), %esi
jmp 0x8d4b1
movq 0x8(%rbx), %rax
movq 0x58(%rax), %rdi
movsd 0x50(%rsp), %xmm3
movsd 0x5dd2b(%rip), %xmm1    # 0xeb180
mulsd %xmm3, %xmm1
addsd 0x18(%rax), %xmm1
movsd 0x70(%rsp), %xmm4
movsd 0x58(%rsp), %xmm5
movups 0x90(%rsp), %xmm0
movups 0xa0(%rsp), %xmm2
movups %xmm2, 0x30(%rsp)
movups %xmm0, 0x20(%rsp)
movups 0xd0(%rsp), %xmm0
movups 0xe0(%rsp), %xmm2
movups %xmm2, 0x10(%rsp)
movups %xmm0, (%rsp)
movsd 0x48(%rsp), %xmm0
movapd 0x80(%rsp), %xmm2
movl $0x3, %esi
xorl %edx, %edx
callq 0x4ef89
movq %r13, %rdi
callq 0x3d1eb
testl %r14d, %r14d
je 0x8d52c
cmpl $0x3, %r14d
je 0x8d4d5
cmpl $0x1, %r14d
jne 0x8cdb1
movq 0x8(%rbx), %rax
movq 0x58(%rax), %rdi
movsd 0x18(%rax), %xmm1
movsd 0x20(%rax), %xmm0
addsd 0x68dc9(%rip), %xmm0    # 0xf62b8
addsd 0x68dc9(%rip), %xmm1    # 0xf62c0
movapd 0x100(%rsp), %xmm2
movapd 0x110(%rsp), %xmm3
movupd %xmm3, 0x10(%rsp)
movupd %xmm2, (%rsp)
xorl %ebp, %ebp
xorl %esi, %esi
callq 0x4f29d
cmpl $0x3, %r14d
je 0x8d52c
testl %r14d, %r14d
jne 0x8cdb1
movq 0x8(%rbx), %rax
movsd 0x28(%rax), %xmm1
unpcklps 0x53f44(%rip), %xmm1    # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]
subpd 0x53f4c(%rip), %xmm1    # 0xe1490
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
subsd 0x20(%rax), %xmm0
addsd 0x68d4b(%rip), %xmm0    # 0xf62a8
movq 0x58(%rax), %rdi
movsd 0x18(%rax), %xmm1
addsd 0x68d52(%rip), %xmm1    # 0xf62c0
movapd 0x100(%rsp), %xmm2
movapd 0x110(%rsp), %xmm3
movupd %xmm3, 0x10(%rsp)
movupd %xmm2, (%rsp)
movl $0x1, %esi
callq 0x4f29d
xorl %ebp, %ebp
jmp 0x8cdb1
movq 0x8(%rbx), %rax
movq 0x58(%rax), %rdi
movsd 0x50(%rsp), %xmm3
movsd 0x5dbce(%rip), %xmm1    # 0xeb180
mulsd %xmm3, %xmm1
addsd 0x18(%rax), %xmm1
movsd 0x70(%rsp), %xmm4
movsd 0x58(%rsp), %xmm5
movups 0x90(%rsp), %xmm0
movups 0xa0(%rsp), %xmm2
movups %xmm2, 0x10(%rsp)
movups %xmm0, (%rsp)
movsd 0x48(%rsp), %xmm0
movapd 0x80(%rsp), %xmm2
movl $0x3, %esi
callq 0x4f118
jmp 0x8d4b8
movq 0x8(%rbx), %rax
movq 0x58(%rax), %rdi
movsd 0x50(%rsp), %xmm3
movsd 0x5db6c(%rip), %xmm1    # 0xeb180
mulsd %xmm3, %xmm1
addsd 0x18(%rax), %xmm1
movsd 0x70(%rsp), %xmm4
movsd 0x58(%rsp), %xmm5
movups 0x90(%rsp), %xmm0
movups 0xa0(%rsp), %xmm2
movups %xmm2, 0x10(%rsp)
movups %xmm0, (%rsp)
movsd 0x48(%rsp), %xmm0
movapd 0x80(%rsp), %xmm2
movl 0x64(%rsp), %esi
callq 0x4f06c
jmp 0x8d4b8
callq 0x215d0
callq 0x21609