// File: p-ranav[P]video_device_discovery/src/helpers.cpp
// Function: get_video_device_files[abi:cxx11]()
std::vector<fs::path> get_video_device_files() {
  std::vector<fs::path> result; 
  auto root = fs::path("/sys/class/video4linux");
  for(auto& p: fs::directory_iterator(root)) {
    if (fs::is_symlink(p)) {
      auto absolute_path = fs::read_symlink(p);
      if (absolute_path.is_relative()) {
	absolute_path = fs::canonical(root / absolute_path);
      }
      if (string_contains(absolute_path.filename().string(), std::string{"video"}))
	result.push_back(fs::path{"/dev"} / absolute_path.filename());
    }
  }
  return result;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x340, %rsp            # imm = 0x340
movq %rdi, -0x318(%rbp)
movq %rdi, %rax
movq %rax, -0x310(%rbp)
movq %rdi, -0x8(%rbp)
movb $0x0, -0x9(%rbp)
callq 0x150e0
leaq 0x1516e(%rip), %rsi     # 0x29d3e
leaq -0x50(%rbp), %rdi
callq 0x15100
jmp 0x14bdb
leaq -0x78(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x15190
jmp 0x14bea
leaq -0x78(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rsi
leaq -0x98(%rbp), %rdi
callq 0x151f0
leaq -0x88(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x151c0
leaq -0x98(%rbp), %rdi
callq 0x15220
movq -0x68(%rbp), %rsi
leaq -0xb8(%rbp), %rdi
callq 0x151f0
leaq -0xa8(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x15240
leaq -0xb8(%rbp), %rdi
callq 0x15220
leaq -0x88(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x15280
movb %al, -0x319(%rbp)
jmp 0x14c6b
movb -0x319(%rbp), %al
testb $0x1, %al
jne 0x14cd0
jmp 0x14c77
leaq -0xa8(%rbp), %rdi
callq 0x15220
leaq -0x88(%rbp), %rdi
callq 0x15220
leaq -0x78(%rbp), %rdi
callq 0x15220
jmp 0x15039
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x15075
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x1504e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x15016
leaq -0x88(%rbp), %rdi
callq 0x17ae0
movq %rax, -0x328(%rbp)
jmp 0x14ce5
movq -0x328(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rdi
callq 0x152e0
movq %rax, %rdi
callq 0x152b0
movb %al, -0x329(%rbp)
jmp 0x14d0f
movb -0x329(%rbp), %al
testb $0x1, %al
jne 0x14d1e
jmp 0x15001
movq -0xc0(%rbp), %rdi
callq 0x152e0
movq %rax, %rsi
leaq -0x100(%rbp), %rdi
callq 0x1e410
jmp 0x14d3b
leaq -0x100(%rbp), %rdi
callq 0x152f0
movb %al, -0x32a(%rbp)
jmp 0x14d4f
movb -0x32a(%rbp), %al
testb $0x1, %al
jne 0x14d5e
jmp 0x14e22
leaq -0x180(%rbp), %rdi
leaq -0x50(%rbp), %rsi
leaq -0x100(%rbp), %rdx
callq 0x15310
jmp 0x14d77
leaq -0x1c0(%rbp), %rdi
callq 0x1c1e0
jmp 0x14d85
leaq -0x140(%rbp), %rdi
leaq -0x180(%rbp), %rsi
leaq -0x1c0(%rbp), %rdx
callq 0x24890
jmp 0x14da1
leaq -0x100(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0xf330
leaq -0x140(%rbp), %rdi
callq 0x8ec0
leaq -0x1c0(%rbp), %rdi
callq 0x8ec0
leaq -0x180(%rbp), %rdi
callq 0x8ec0
jmp 0x14e22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x14ff3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x14e11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x8ec0
leaq -0x180(%rbp), %rdi
callq 0x8ec0
jmp 0x14ff3
leaq -0x220(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x15390
jmp 0x14e37
leaq -0x1e0(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x7cd0
jmp 0x14e4c
leaq -0x241(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x57a0
movq -0x338(%rbp), %rdx
leaq 0x1422c(%rip), %rsi     # 0x29099
leaq -0x240(%rbp), %rdi
callq 0x81c0
jmp 0x14e7b
leaq -0x1e0(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x10530
movb %al, -0x339(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x52f0
leaq -0x241(%rbp), %rdi
callq 0x54e0
leaq -0x1e0(%rbp), %rdi
callq 0x52f0
leaq -0x220(%rbp), %rdi
callq 0x8ec0
movb -0x339(%rbp), %al
testb $0x1, %al
jne 0x14ed3
jmp 0x14fe5
leaq 0x14e7b(%rip), %rsi     # 0x29d55
leaq -0x2c8(%rbp), %rdi
callq 0x15430
jmp 0x14ee8
leaq -0x308(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x15390
jmp 0x14efd
leaq -0x288(%rbp), %rdi
leaq -0x2c8(%rbp), %rsi
leaq -0x308(%rbp), %rdx
callq 0x15310
jmp 0x14f19
movq -0x318(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x15400
jmp 0x14f2e
leaq -0x288(%rbp), %rdi
callq 0x8ec0
leaq -0x308(%rbp), %rdi
callq 0x8ec0
leaq -0x2c8(%rbp), %rdi
callq 0x8ec0
jmp 0x14fe5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x14f89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x241(%rbp), %rdi
callq 0x54e0
leaq -0x1e0(%rbp), %rdi
callq 0x52f0
leaq -0x220(%rbp), %rdi
callq 0x8ec0
jmp 0x14ff3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x14fd7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0x14fcb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x288(%rbp), %rdi
callq 0x8ec0
leaq -0x308(%rbp), %rdi
callq 0x8ec0
leaq -0x2c8(%rbp), %rdi
callq 0x8ec0
jmp 0x14ff3
leaq -0x100(%rbp), %rdi
callq 0x8ec0
jmp 0x15001
leaq -0x100(%rbp), %rdi
callq 0x8ec0
jmp 0x15016
jmp 0x15003
leaq -0x88(%rbp), %rdi
callq 0x19070
jmp 0x15011
jmp 0x14c50
leaq -0xa8(%rbp), %rdi
callq 0x15220
leaq -0x88(%rbp), %rdi
callq 0x15220
leaq -0x78(%rbp), %rdi
callq 0x15220
jmp 0x1504e
movb $0x1, -0x9(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x8ec0
testb $0x1, -0x9(%rbp)
jne 0x15065
jmp 0x15059
leaq -0x50(%rbp), %rdi
callq 0x8ec0
jmp 0x15075
movq -0x318(%rbp), %rdi
callq 0xa850
movq -0x310(%rbp), %rax
addq $0x340, %rsp            # imm = 0x340
popq %rbp
retq
movq -0x318(%rbp), %rdi
callq 0xa850
movq -0x58(%rbp), %rdi
callq 0x5790
nopw (%rax,%rax)