// File: /workspace/github_cpp_makefile_star2_O1/demon386[P]git-store/./libs/filesystem/src/operations.cpp
// Function: boost::filesystem::absolute(boost::filesystem::path const&, boost::filesystem::path const&)
BOOST_FILESYSTEM_DECL
  path absolute(const path& p, const path& base)
  {
//    if ( p.empty() || p.is_absolute() )
//      return p;
//    //  recursively calling absolute is sub-optimal, but is simple
//    path abs_base(base.is_absolute() ? base : absolute(base));
//# ifdef BOOST_WINDOWS_API
//    if (p.has_root_directory())
//      return abs_base.root_name() / p;
//    //  !p.has_root_directory
//    if (p.has_root_name())
//      return p.root_name()
//        / abs_base.root_directory() / abs_base.relative_path() / p.relative_path();
//    //  !p.has_root_name()
//# endif
//    return abs_base / p;

    //  recursively calling absolute is sub-optimal, but is sure and simple
    path abs_base(base.is_absolute() ? base : absolute(base));

    //  store expensive to compute values that are needed multiple times
    path p_root_name (p.root_name());
    path base_root_name (abs_base.root_name());
    path p_root_directory (p.root_directory());

    if (p.empty())
      return abs_base;

    if (!p_root_name.empty())  // p.has_root_name()
    {
      if (p_root_directory.empty())  // !p.has_root_directory()
        return p_root_name / abs_base.root_directory()
        / abs_base.relative_path() / p.relative_path();
      // p is absolute, so fall through to return p at end of block
    }

    else if (!p_root_directory.empty())  // p.has_root_directory()
    {
#     ifdef BOOST_POSIX_API
      // POSIX can have root name it it is a network path
      if (base_root_name.empty())   // !abs_base.has_root_name()
        return p;
#     endif
      return base_root_name / p;
    }

    else
    {
      return abs_base / p;
    }

    return p;  // p.is_absolute() is true
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x168, %rsp            # imm = 0x168
movq %rdx, %r12
movq %rsi, %r14
movq %rdi, %rbx
movq %rdx, %rdi
callq 0x29a86
movl %eax, %r15d
testb %al, %al
je 0x2602f
leaq -0x58(%rbp), %rax
movq %rax, -0x10(%rax)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq -0x68(%rbp), %rdi
callq 0xfa18
jmp 0x2604f
leaq -0x188(%rbp), %r13
movq %r13, %rdi
xorl %esi, %esi
callq 0x2787e
leaq -0x68(%rbp), %rdi
movq %r12, %rsi
movq %r13, %rdx
callq 0x25fe4
testb %r15b, %r15b
jne 0x26069
leaq -0x178(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26069
callq 0xb430
leaq -0xc8(%rbp), %rdi
movq %r14, %rsi
callq 0x2aa06
leaq -0xe8(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2aa06
leaq -0x168(%rbp), %rdi
movq %r14, %rsi
callq 0x2aaac
movq 0x8(%r14), %rdx
testq %rdx, %rdx
je 0x260d4
cmpq $0x0, -0xc0(%rbp)
movq -0x160(%rbp), %rax
je 0x260f3
testq %rax, %rax
je 0x26150
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq (%r14), %rsi
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xfa18
jmp 0x26338
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xfa18
jmp 0x26338
testq %rax, %rax
je 0x262e9
movq -0xe0(%rbp), %rax
testq %rax, %rax
je 0x260ba
leaq -0x38(%rbp), %r15
movq %r15, -0x10(%r15)
movq -0xe8(%rbp), %rsi
addq %rsi, %rax
leaq -0x48(%rbp), %rdi
movq %rax, %rdx
callq 0xfa18
leaq -0x48(%rbp), %rdi
movq %r14, %rsi
callq 0x2a134
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xfa18
jmp 0x2632a
leaq -0x148(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2aaac
leaq -0x38(%rbp), %r12
movq %r12, -0x10(%r12)
movq -0xc8(%rbp), %rsi
movq -0xc0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x48(%rbp), %rdi
callq 0xfa18
leaq -0x48(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x2a134
leaq -0x78(%rbp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x88(%rbp), %rdi
callq 0xfa18
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x261bf
callq 0xb430
leaq -0x128(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x2ab84
leaq -0x48(%rbp), %rdi
movq %r12, (%rdi)
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdx
addq %rsi, %rdx
callq 0xfa18
leaq -0x48(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x2a134
leaq -0x98(%rbp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0xa8(%rbp), %rdi
callq 0xfa18
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x26228
callq 0xb430
leaq -0x108(%rbp), %rdi
movq %r14, %rsi
callq 0x2ab84
leaq -0x48(%rbp), %rdi
movq %r12, (%rdi)
movq -0xa8(%rbp), %rsi
movq -0xa0(%rbp), %rdx
addq %rsi, %rdx
callq 0xfa18
leaq -0x48(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x2a134
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xfa18
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x2628b
callq 0xb430
leaq -0xf8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x262a0
callq 0xb430
movq -0xa8(%rbp), %rdi
cmpq %r13, %rdi
je 0x262b1
callq 0xb430
leaq -0x118(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x262c6
callq 0xb430
movq -0x88(%rbp), %rdi
cmpq %r15, %rdi
je 0x262d7
callq 0xb430
leaq -0x138(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x26333
jmp 0x26338
leaq -0x38(%rbp), %r15
movq %r15, -0x10(%r15)
movq -0x68(%rbp), %rsi
movq -0x60(%rbp), %rdx
addq %rsi, %rdx
leaq -0x48(%rbp), %rdi
callq 0xfa18
leaq -0x48(%rbp), %rdi
movq %r14, %rsi
callq 0x2a134
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xfa18
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
je 0x26338
callq 0xb430
leaq -0x158(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2634d
callq 0xb430
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26362
callq 0xb430
leaq -0xb8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26377
callq 0xb430
leaq -0x58(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26389
callq 0xb430
movq %rbx, %rax
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0x263e0
movq %rax, %rbx
jmp 0x263f5
movq %rax, %rbx
jmp 0x26406
movq %rax, %rbx
jmp 0x2641b
movq %rax, %rbx
jmp 0x2642c
jmp 0x2646b
jmp 0x263be
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r15, %rdi
jne 0x2643c
jmp 0x2646e
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
je 0x263e0
callq 0xb430
leaq -0xf8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x263f5
callq 0xb430
movq -0xa8(%rbp), %rdi
cmpq %r13, %rdi
je 0x26406
callq 0xb430
leaq -0x118(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2641b
callq 0xb430
movq -0x88(%rbp), %rdi
cmpq %r15, %rdi
je 0x2642c
callq 0xb430
leaq -0x138(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2646e
callq 0xb430
jmp 0x2646e
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
jne 0x26401
jmp 0x26406
movq %rax, %rbx
movq -0x48(%rbp), %rdi
cmpq %r12, %rdi
jne 0x26427
jmp 0x2642c
movq %rax, %rbx
leaq -0x178(%rbp), %rax
jmp 0x264c0
movq %rax, %rbx
leaq -0x158(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x26488
callq 0xb430
jmp 0x26488
movq %rax, %rbx
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x264a2
callq 0xb430
jmp 0x264a2
movq %rax, %rbx
leaq -0xb8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x264bc
callq 0xb430
jmp 0x264bc
movq %rax, %rbx
leaq -0x58(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x264ce
callq 0xb430
movq %rbx, %rdi
callq 0xb7f0