PHP 8.5.2
Preview: usb_modeswitch_dispatcher Size: 26.78 KB
//usr/sbin/usb_modeswitch_dispatcher

#!/usr/bin/tclsh

# Wrapper (tcl) for usb_modeswitch, called from
# /lib/udev/rules.d/40-usb_modeswitch.rules
# (part of data pack "usb-modeswitch-data") via
# /lib/udev/usb_modeswitch
#
# Does ID check on newly discovered USB devices and calls
# the mode switching program with the matching parameter
# file from /usr/share/usb_modeswitch
#
# Part of usb-modeswitch-2.6.1 package, 2020/07/10
# (C) Josua Dietze 2009 - 2020
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details:
#
# http://www.gnu.org/licenses/gpl.txt

set arg0 [lindex $argv 0]
if [regexp {\.tcl$} $arg0] {
	if [file exists $arg0] {
		set argv [lrange $argv 1 end]
		source $arg0
		exit
	}
}

# Setting of these switches is done in the global config
# file (/etc/usb_modeswitch.conf) if available

set flags(logging) 0
set flags(noswitching) 0
set flags(stordelay) 0
set flags(nombim) 0

set flags(logwrite) 0
# also settable in device config files
set flags(nombim) 0
set flags(althuawei) 0

# Execution starts at file bottom

proc {Main} {argv argc} {

global scsi usb config match device flags setup devdir loginit

set flags(config) ""

# arg0: optional custom location of configuration file
# arg1: the "kernel name" for the device to switch (udev: %k)
# The parameter "bus id" for the device (udev: %b) is now deprecated
#
# From version 2.5.0 upward %b is removed by udev sh script
# which can handle old and new udev params ('%b/%k' and '%k')

Log "Raw parameters: $argv"
set device "noname"
set arg0 ""
for {set i 0} {$i < [llength $argv]} {incr i} {
	set option [lindex $argv $i]
	switch -glob -- $option {
		"--config-file" {
			if [regexp {config-file=(\"[^\"]+\"|[^ ]+)} $option d param] {
				set arg0 [string trim $param {"}]
			} else {
				set arg0 [lindex $argv $i+1]
			}
		}
		"--switch-mode" {
			if [regexp {switch-mode=(.+)} $option d param] {
				set arg1 $param
			} else {
				set arg1 [lindex $argv $i+1]
			}
		}
	}
}
Log "[ParseGlobalConfig $arg0]"
set flags(logwrite) 1


# The facility to add a symbolic link pointing to the
# ttyUSB port which provides interrupt transfer, i.e.
# the port to connect through.
# Will check for interrupt endpoint in ttyUSB port (lowest if
# there is more than one); if found, return "gsmmodem[n]" name
# to udev for symlink creation

# This is run once for every port of LISTED devices by
# a udev rule

if {[lindex $argv 0] == "--symlink-name"} {
	puts -nonewline [SymLinkName [lindex $argv 1]]
	SafeExit
}


if {$flags(stordelay) > 0} {
	SetStorageDelay $flags(stordelay)
}

if [info exists arg1] {
	if {[string length $arg1] == 0} {
		ShowUsage
		Log "\nNo device provided for mode-switching. Exit"
		SafeExit
	}
} else {
	ShowUsage
	Log "\nNo command option given. Exit"
	SafeExit
}

if {![regexp {(.*?):.*$} $arg1 d device]} {
	if {![regexp {([0-9]+-[0-9]+\.?[0-9]*.*)} $arg1 d device]} {
		ShowUsage
		Log "Could not determine device dir from udev values! Exit"
		SafeExit
	}
}

set setup(dbdir) /usr/share/usb_modeswitch
set setup(dbdir_etc) /etc/usb_modeswitch.d
if {![file exists $setup(dbdir)] && ![file exists $setup(dbdir_etc)]} {
	Log "\nError: no config database found in /usr/share or /etc. Exit"
	SafeExit
}

set bindir /usr/sbin
set devList1 {}
set devList2 {}
set ifChk 0

set devdir /sys/bus/usb/devices/$device
if {![file isdirectory $devdir]} {
	Log "Top device directory not found ($devdir)! Exit"
	SafeExit
}
Log "Use top device dir $devdir"

set iface 0
Log "Check class of first interface ..."
set config(class) [IfClass 0 $devdir]
if {$config(class) < 0} {
	Log " No access to first interface. Exit"
	SafeExit
}
Log " Interface class is $config(class)."

set ifdir [file tail [IfDir $iface $devdir]]
regexp {:([0-9]+\.[0-9]+)$} $ifdir d iface

# Mapping of the short string identifiers (in the config
# file names) to the long name used here
#
# If we need them it's a snap to add new attributes here!

set match(sVe) scsi(vendor)
set match(sMo) scsi(model)
set match(sRe) scsi(rev)
set match(uMa) usb(manufacturer)
set match(uPr) usb(product)
set match(uSe) usb(serial)


# Now reading the USB attributes
if {![ReadUSBAttrs $devdir]} {
	Log "USB attributes not found in sysfs tree. Exit"
	SafeExit
}
set config(vendor) $usb(idVendor)
set config(product) $usb(idProduct)


if $flags(logging) {
	Log "\n----------------\nUSB values from sysfs:"
	foreach attr {manufacturer product serial} {
		Log "  $attr\t$usb($attr)"
	}
	Log "----------------"
}

if $flags(noswitching) {
	SysLog "usb_modeswitch: switching disabled, no action for $usb(idVendor):$usb(idProduct)"
	Log "\nSwitching globally disabled. Exit"
	SafeExit
}

if {$usb(bNumConfigurations) == "1"} {
	set configParam "-u -1"
	Log "bNumConfigurations is 1 - don't check for active configuration"
} else {
	set configParam ""
}

# Check (and switch) for operating system if Huawei device present

set flags(os) "linux"
if {$usb(idVendor) == "12d1" && [regexp -nocase {android} [exec cat /proc/version]]} {
	set flags(os) "android"
}
if {$flags(os) == "android"} {
	set configList [ConfigGet conflist $usb(idVendor):#android]
} else {
	set configList [ConfigGet conflist $usb(idVendor):$usb(idProduct)]
}

if {[llength $configList] == 0} {
	Log "Aargh! Config file missing for $usb(idVendor):$usb(idProduct)! Exit"
	SafeExit
}
Log "ConfigList: $configList"

# Check if there is more than one config file for this USB ID,
# which would make an attribute test necessary. If so, check if
# SCSI values are needed

set scsiNeeded 0
if {[llength $configList] > 1} {
	if [regexp {:s} $configList] {
		set scsiNeeded 1
	}
}
if $scsiNeeded {
	if [ReadSCSIAttrs $devdir:$iface] {
		Log "----------------\nSCSI values from sysfs:"
		foreach attr {vendor model rev} {
			Log " $attr\t$scsi($attr)"
		}
		Log "----------------"
	} else {
		Log "Could not get SCSI attributes, exclude devices with SCSI match"
	}
} else {
	Log "SCSI attributes not needed, move on"
}

# Now check for a matching config file. Matching is done
# by MatchDevice

set report ""
foreach mconfig $configList {

	# skipping installer leftovers like "*.rpmnew"
	if [regexp {\.(dpkg|rpm)} $mconfig] {continue}

	Log "Check config: $mconfig"
	if [MatchDevice $mconfig] {
		Log "! matched. Read config data"
		set flags(config) [ConfigGet conffile $mconfig]
		break
	} else {
		Log "* no match, don't use this config"
	}
}
if {$flags(config) == ""} {
	Log "No matching config file found. Exit"
	SafeExit
}

ParseDeviceConfig $flags(config)

if [regexp -nocase {0x([0-9a-f]+)} $config(TargetClass) d tc] {
	if {$tc == $config(class)} {
		Log "Class of interface 0 matches target. Do nothing"
		set report "ok:busdev"
	}
}

if [string length $usb(busnum)] {
	set busParam "-b [string trimleft $usb(busnum) 0]"
	set devParam "-g [string trimleft $usb(devnum) 0]"
} else {
	set busParam ""
	set devParam ""
}
if [regexp -nocase $flags(os) $flags(config)] {
	Log "Note: Using generic manufacturer configuration for \"$flags(os)\""
}
if $flags(althuawei) {
	regsub {HuaweiNewMode} $flags(config) {HuaweiAltMode} flags(config)
	Log "Alternative Huawei mode set globally, modify config"
}
if $flags(nombim) {
	set config(NoMBIMCheck) 1
}
if {$config(NoMBIMCheck)==0 && $usb(bNumConfigurations) > 1} {
	Log "Device may have an MBIM configuration, check driver ..."
	if [CheckMBIM] {
		Log " driver for MBIM devices is available"
		Log "Find MBIM configuration number ..."
		if [catch {set cfgno [exec /usr/sbin/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] {
			Log "Error when trying to find MBIM configuration, switch to legacy modem mode"
		} else {
			set cfgno [string trim $cfgno]
			if {$cfgno > 0} {
				set config(Configuration) $cfgno
				set flags(config) "Configuration=$cfgno"
			} else {
				Log " No MBIM configuration found, switch to legacy modem mode"
			}
		}
	} else {
		Log " no MBIM driver found, switch to legacy modem mode"
	}
}
if [PantechAutoSwitch] {
	Log "Waiting for Pantech auto-modeswitch"
	set report "ok:busdev"
}
if {$config(Configuration) == 0} {
	Log "Config file contains dummy method, do nothing. Exit"
	SafeExit
}
# General wait - some devices need this
after 500

if {$config(WaitBefore) != ""} {
	Log "Delay time of $config(WaitBefore) seconds"
	append config(WaitBefore) "000"
	after $config(WaitBefore)
}

if {$report == ""} {
	# Now we are actually switching
	if $flags(logging) {
		Log "Command line:\nusb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f \$flags(config)"
		catch {set report [exec /usr/sbin/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
		Log "\nVerbose debug output of usb_modeswitch and libusb follows"
		Log "(Note that some USB errors are to be expected in the process)"
		Log "--------------------------------"
		Log $report
		Log "--------------------------------"
		Log "(end of usb_modeswitch output)\n"
	} else {
		catch {set report [exec /usr/sbin/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report
	}
}

# Switching is complete; success checking was either
# done by usb_modeswitch and logged via syslog OR bus/dev
# parameter were used; then we do check for success HERE

if {$config(Configuration) != ""} {
	set ifdir [regsub {(\d):\d+\.0} $ifdir "\\1:$config(Configuration).0"]
}

if [regexp {ok:busdev} $report] {
	if [CheckSuccess $devdir] {
		Log "Mode switching was successful, found $usb(idVendor):$usb(idProduct) ($usb(manufacturer): $usb(product))"
		SysLog "usb_modeswitch: switched to $usb(idVendor):$usb(idProduct) on [format %03d $usb(busnum)]/[format %03d $usb(devnum)]"
	} else {
		Log "\nTarget config not matching - current values are"
		LogAttributes
		Log "\nMode switching may have failed. Exit"
		SafeExit
	}
} else {
	if {![file isdirectory $devdir]} {
		Log "Device directory in sysfs is gone! Something went wrong, abort"
		SafeExit
	}
	if {![regexp {ok:} $report]} {
		Log "\nCore program reported switching failure. Exit"
		SafeExit
	}
	# Give the device another second if it's not fully back yet
	if {![file exists $devdir/idProduct]} {
		after 1000
	}
	ReadUSBAttrs $devdir $ifdir
}

# driver binding removed !!

if {[string length "$usb(idVendor)$usb(idProduct)"] < 8} {
	if {![regexp {ok:(\w{4}):(\w{4})} $report d usb(idVendor) usb(idProduct)]} {
		Log "No target vendor/product ID found or given, can't continue. Abort"
		SafeExit
	}
}
# wait for drivers to bind
after 500
if {[llength [glob -nocomplain $devdir/$ifdir/ttyUSB*]] > 0} {
	Log "Serial USB driver bound to interface 0\n will try to guess and symlink modem port on next connect"
	AddToList link_list $usb(idVendor):$usb(idProduct)
}

# In newer kernels there is a switch to avoid the use of a device
# reset (e.g. from usb-storage) which would possibly switch back
# a mode-switching device to initial mode
if [regexp {ok:} $report] {
	Log "Check for AVOID_RESET_QUIRK kernel attribute"
	if [file exists $devdir/avoid_reset_quirk] {
		if [catch {exec echo "1" >$devdir/avoid_reset_quirk 2>/dev/null} err] {
			Log " Error setting the attribute: $err"
		} else {
			Log " AVOID_RESET_QUIRK activated"
		}
	} else {
		Log " not present in this kernel"
	}
}

Log "\nAll done, exit\n"
SafeExit

}
# end of proc {Main}


proc {ReadSCSIAttrs} {topdir} {

global scsi
set counter 0
set sysdir $topdir
Log "Check storage tree in sysfs ..."
while {$counter < 20} {
	Log " loop $counter/20"
	if {![file isdirectory $sysdir]} {
		# Device is gone. Unplugged? Switched by kernel?
		Log " sysfs device tree is gone; abort SCSI value check"
		return 0
	}
	# Searching the storage/SCSI tree; might take a while
	if {[set dirList [glob -nocomplain $topdir/host*]] != ""} {
		set sysdir [lindex $dirList 0]
		if {[set dirList [glob -nocomplain $sysdir/target*]] != ""} {
			set sysdir [lindex $dirList 0]
			regexp {.*target(.*)} $sysdir d subdir
			if {[set dirList [glob -nocomplain $sysdir/$subdir*]] != ""} {
				set sysdir [lindex $dirList 0]
				if [file exists $sysdir/vendor] {
					Log " Storage tree is ready"
					break
				}
			}
		}
	}
	after 500
	incr counter
}
if {$counter == 20} {
	Log "SCSI tree not found; you may want to check if this path/file exists:"
	Log "$sysdir/vendor\n"
	return 0
}

Log "Read SCSI values ..."
foreach attr {vendor model rev} {
	if [file exists $sysdir/$attr] {
		set rc [open $sysdir/$attr r]
		set scsi($attr) [read -nonewline $rc]
		close $rc
	} else {
		set scsi($attr) ""
		Log "Warning: SCSI attribute \"$attr\" not found."
	}
}
return 1

}
# end of proc {ReadSCSIAttrs}


proc {ReadUSBAttrs} {dir args} {

global usb

set attrList {idVendor idProduct bConfigurationValue manufacturer product serial devnum busnum bNumConfigurations}
set mandatoryList {idVendor idProduct bNumConfigurations}
set result 1
if {$args != ""} {
	lappend attrList "$args/bInterfaceClass"
	lappend mandatoryList "$args/bInterfaceClass"
}
foreach attr $attrList {
	if [file exists $dir/$attr] {
		set rc [open $dir/$attr r]
		set usb($attr) [string trim [read -nonewline $rc]]
		close $rc
	} else {
		set usb($attr) ""
		if {[lsearch $mandatoryList $attr] > -1} {
			set result 0
		}
		if {$attr == "serial"} {continue}
		Log "   Warning: USB attribute \"$attr\" not found"
	}
}
return $result

}
# end of proc {ReadUSBAttrs}


proc {MatchDevice} {config} {

global scsi usb match

set devinfo [file tail $config]
set infoList [split $devinfo :]
set stringList [lrange $infoList 2 end]
if {[llength $stringList] == 0} {return 1}

foreach teststring $stringList {
	if {$teststring == "?"} {return 0}
	set tokenList [split $teststring =]
	set id [lindex $tokenList 0]
	set matchstring [lindex $tokenList 1]
	set blankstring ""
	regsub -all {_} $matchstring { } blankstring
	Log "match $match($id)"
	Log "  string1 (exact):  $matchstring"
	Log "  string2 (blanks): $blankstring"
	Log " device string: [set $match($id)]"
	if {!([string match *$matchstring* [set $match($id)]] || [string match *$blankstring* [set $match($id)]])} {
		return 0
	}
}
return 1

}
# end of proc {MatchDevice}


proc {ParseGlobalConfig} {path} {

global flags
set configFile ""
if [string length $path] {
	set places [list $path]
} else {
	set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch]
}
foreach cfg $places {
	if [file exists $cfg] {
		set configFile $cfg
		break
	}
}
if {$configFile == ""} {return "No configuration file found, using defaults"}

set rc [open $configFile r]
while {![eof $rc]} {
	gets $rc line
	if [regexp {^#} [string trim $line]] {continue}
	if [regexp {DisableMBIMGlobal\s*=\s*([^\s]+)} $line d val] {
		set flags(nombim) [regexp -nocase {1|yes|true} $val]
	}
	if [regexp {DisableSwitching\s*=\s*([^\s]+)} $line d val] {
		set flags(noswitching) [regexp -nocase {1|yes|true} $val]
	}
	if [regexp {EnableLogging\s*=\s*([^\s]+)} $line d val] {
		set flags(logging) [regexp -nocase {1|yes|true} $val]
	}
	if [regexp {SetStorageDelay\s*=\s*([^\s]+)} $line d val] {
		if [regexp {\d+} $val] {
			set flags(stordelay) $val
		}
	}
	if [regexp {HuaweiAltModeGlobal\s*=\s*([^\s]+)} $line d val] {
		set flags(althuawei) [regexp -nocase {1|yes|true} $val]
	}

}
return "Use global config file: $configFile"

}
# end of proc {ParseGlobalConfig}


proc ParseDeviceConfig {cfg} {

global config
set config(WaitBefore) ""
set config(TargetVendor) ""
set config(TargetProduct) ""
set config(TargetClass) ""
set config(Configuration) ""
set config(NoMBIMCheck) 0
set config(PantechMode) 0
set config(CheckSuccess) 20

foreach pname [lsort [array names config]] {
	if [regexp -line "^\[^# \]*?$pname.*?= *(0x(\\w+)|\"(\[0-9a-fA-F,\]+)\"|(\[0-9\]+)) *\$" $cfg d config($pname)] {
#		Log "config: $pname set to $config($pname)"
	}
}

set config(WaitBefore) [string trimleft $config(WaitBefore) 0]

}
# end of proc {ParseDeviceConfig}


proc ConfigGet {command config} {

global setup usb flags

switch $command {

	conflist {
		# Unpackaged configs first; sorting is essential for priority
		set configList [lsort -decreasing [glob -nocomplain $setup(dbdir_etc)/$config*]]
		set configList [concat $configList [lsort -decreasing [glob -nocomplain $setup(dbdir)/$config*]]]
		eval lappend configList [glob -nocomplain $setup(dbdir)/$usb(idVendor):#$flags(os)]
		if [file exists $setup(dbdir)/configPack.tar.gz] {
			Log "Found packed config collection $setup(dbdir)/configPack.tar.gz"
			if [catch {set packedList [exec tar -tzf $setup(dbdir)/configPack.tar.gz 2>/dev/null]} err] {
				Log "Error: problem opening config package; tar returned\n $err"
				return {}
			}
			set packedList [split $packedList \n]
			set packedConfigList [lsort -decreasing [lsearch -glob -all -inline $packedList $config*]]
			lappend packedConfigList [lsearch -inline $packedList $usb(idVendor):#$flags(os)]
			# Now add packaged configs with a mark, again sorted for priority
			foreach packedConfig $packedConfigList {
				lappend configList "pack/$packedConfig"
			}
		}
		return $configList
	}
	conffile {
		if [regexp {^pack/} $config] {
			set config [regsub {pack/} $config {}]
			Log "Extract config $config from collection $setup(dbdir)/configPack.tar.gz"
			set configContent [exec tar -xzOf $setup(dbdir)/configPack.tar.gz $config 2>/dev/null]
		} else {
			if [regexp [list $setup(dbdir_etc)] $config] {
				Log "Use config file from override folder $setup(dbdir_etc)"
				SysLog "usb_modeswitch: use overriding config file $config; make sure this is intended"
				SysLog "usb_modeswitch: please report any new or corrected settings; otherwise, check for outdated files"
			}
			set rc [open $config r]
			set configContent [read $rc]
			close $rc
		}
		return $configContent
	}
}

}
# end of proc {ConfigGet}

proc {Log} {msg} {

global flags device loginit

if {$flags(logwrite) == 0} {append loginit $msg\n}
if {$flags(logging) == 0} {return}

if $flags(logwrite) {
	if [string length $loginit] {
		exec echo "\nUSB_ModeSwitch log from [clock format [clock seconds]]" >/var/log/usb_modeswitch_$device
		exec echo "$loginit" >>/var/log/usb_modeswitch_$device
		set loginit ""
	}
	exec echo $msg >>/var/log/usb_modeswitch_$device
} else {
	append loginit "\n$msg"
}

}
# end of proc {Log}


# Writing the log file and exit
proc {SafeExit} {} {

global flags
set flags(logwrite) 1
Log ""
exit

}
# end of proc {SafeExit}


proc {SymLinkName} {path} {
global device flags

proc {hasInterrupt} {ifDir} {
	if {[llength [glob -nocomplain $ifDir/ttyUSB*]] == 0} {
		Log "  no ttyUSB interface - skip endpoint check"
		return 0
	}
	foreach epDir [glob -nocomplain $ifDir/ep_*] {
		set e [file tail $epDir]
		Log "  check $e ..."
		if [file exists $epDir/type] {
			set rc [open $epDir/type r]
			set type [read $rc]
			close $rc
			if [regexp {Interrupt} $type] {
				Log "  $e has interrupt transfer type"
				return 1
			}
		}
	}
	return 0
}

# In case the device path is returned as /class/tty/ttyUSB,
# get the USB device path from linked tree "device"
set linkpath /sys$path/device
if [file exists $linkpath] {
	if {[file type $linkpath] == "link"} {
		set rawpath [file readlink $linkpath]
		set trimpath [regsub -all {\.\./} $rawpath {}]
 		if [file isdirectory /sys/$trimpath] {
			append loginit "\n Use path $path\n"
			set path /$trimpath
		}
	}
}
if {![regexp {([0-9]+-[0-9]+[\.0-9]*:[^/]*).*(ttyUSB[0-9]+)} $path d myDev myPort]} {
	if $flags(logging) {
		set device [clock clicks]
		Log "This is not a ttyUSB port. Abort"
	}
	return ""
}

set device ttyUSB_$myDev
set flags(logwrite) 1
Log "My name is $myPort\n"

if {![regexp {(.*?[0-9]+)\.([0-9]+)/ttyUSB} /sys$path d ifRoot ifNum]} {
	Log "Could not find interface in path\n $path. Abort"
	return ""
}

set ifDir $ifRoot.$ifNum

Log "Check my endpoints ...\n in $ifDir"
if [hasInterrupt $ifDir] {
	Log "\n--> I am an interrupt port"
	set rightPort 1
} else {
	Log "\n--> I am not an interrupt port\n"
	set rightPort 0
}

# There are devices with more than one interrupt interface.
# Assume that the lowest of these is usable. Check all
# possible lower interfaces

if { $rightPort && ($ifNum > 0) } {
	Log "\nLook for lower ports with interrupt endpoints"
	for {set i 0} {$i < $ifNum} {incr i} {
		set ifDir $ifRoot.$i
		Log " in ifDir $ifDir ..."
		if [hasInterrupt $ifDir] {
			Log "\n--> found an interrupt interface below me\n"
			set rightPort 0
			break
		}
	}
}
if {$rightPort == 0} {
	Log "Return empty name and exit"
	return ""
}

Log "\n--> No interrupt interface below me\n"

cd /dev
set idx 2
set symlinkName "gsmmodem"
while {$idx < 256} {
	if {![file exists $symlinkName]} {
		set placeholder [open /dev/$symlinkName w]
		close $placeholder
		break
	}
	set symlinkName gsmmodem$idx
	incr idx
}
if {$idx == 256} {return ""}

Log "Return symlink name \"$symlinkName\" and exit"
return $symlinkName

}
# end of proc {SymLinkName}


# Add USB ID to list of devices needing later treatment
proc {AddToList} {name id} {

set listfile /var/lib/usb_modeswitch/$name
if [file exists $listfile] {
	set rc [open $listfile r]
	set buffer [read $rc]
	close $rc
	if [string match *$id* $buffer] {
		return
	}
	set idList [split [string trim $buffer] \n]
}
lappend idList $id
set buffer [join $idList "\n"]
if [catch {set lc [open $listfile w]}] {return}
puts $lc $buffer
close $lc

}
# end of proc {AddToList}


proc {CheckSuccess} {devdir} {

global config usb flags

# For Cisco AM10, target device not on same port
if {$usb(idVendor) == "1307" && $usb(idProduct) == "1169"} {
	set devdir [string range $devdir 0 end-1]2
}
set ifdir [file tail [IfDir 0 $devdir]]
if {[string length $config(TargetClass)] || [string length $config(Configuration)]} {
	set config(TargetVendor) $usb(idVendor)
	set config(TargetProduct) $usb(idProduct)
}
Log "Check success of mode switch for max. $config(CheckSuccess) seconds ..."

set expected 1
for {set i 1} {$i <= $config(CheckSuccess)} {incr i} {
	after 1000 
	if {![file isdirectory $devdir]} {
		Log " Wait for device file system ($i sec.) ..."
		continue
	} else {
		Log " Read attributes ..."
	}
	set ifdir [IfDir 0 $devdir]
	if {$ifdir == ""} {continue}
	set ifdir [file tail $ifdir]
	if {![ReadUSBAttrs $devdir $ifdir]} {
		Log " Essential attributes are missing, continue wait ..."
		continue
	}
	if [string length $config(Configuration)] {
		if {$usb(bConfigurationValue) != $config(Configuration)} {continue}
	}
	if [string length $config(TargetClass)] {
		if {![regexp -nocase $usb($ifdir/bInterfaceClass) $config(TargetClass)]} {
			if {$config(class) != $usb($ifdir/bInterfaceClass} {
				set expected 0
			} else {continue}
		}
	}
	if {![regexp -nocase $usb(idVendor) $config(TargetVendor)]} {
		if {![regexp -nocase $usb(idVendor) $config(vendor)]} {
			set expected 0
		} else {continue}
	}
	if {![regexp -nocase $usb(idProduct) $config(TargetProduct)]} {
		if {![regexp -nocase $usb(idProduct) $config(product)]} {
			set expected 0
		} else {continue}
	}
	# Arriving here means that device attributes have changed
	if $expected {
		Log " All attributes matched"
	} else {
		if [regexp -nocase {/[0-9a-f]+:#} $flags(config)] {
			Log " idProduct has changed after generic mode-switch, assume success"
		} else {
			if [regexp {HuaweiAltMode} $flags(config)] {
				Log " Alternative target attributes found, assume success"
			} else {
				Log " Attributes are different but target values are unexpected:"
				LogAttributes
			}
		}
	}
	break
}
if {$i > 20} {return 0} else {return 1}

}
# end of proc {CheckSuccess}


proc {IfDir} {iface devdir} {

set files [glob -nocomplain $devdir/*]
set iffiles [lsort [lsearch -all -inline -regexp $files {^.*/[^/]*[0-9]+\.[0-9]$}]]
set sorted [concat $iffiles [lsort [lsearch -all -inline -regexp $files {^.*/[^/]*[0-9]+\.[0-9][0-9]$}]]]
if {[llength $sorted] == 0} {
	return ""
}
set ifdir [lindex $sorted $iface]
if {![string length $ifdir] || ![file isdirectory $ifdir]} {
	return ""
}
return $ifdir

}
# end of proc {IfDir}


proc {IfClass} {iface devdir} {

set ifdir [IfDir $iface $devdir]

if {![file exists $ifdir/bInterfaceClass]} {
	return -1
}
set rc [open $ifdir/bInterfaceClass r]
set c [read $rc]
close $rc
return [string trim $c]

}
# end of proc {IfClass}


proc {ShowUsage} {} {
	puts "Dispatcher for 'usb_modeswitch'; usually run by udev, not intended for interactive operation"
	puts "Usage: usb_modeswitch_dispatcher [--config-file=<path>] --switch-mode=<device kernel name>"
	puts "       usb_modeswitch_dispatcher --symlink-name=<sys path to device>"
}
# end of proc {ShowUsage}


proc {SysLog} {msg} {

global flags
if {![info exists flags(logger)]} {
	set flags(logger) ""
	foreach fn {/bin/logger /usr/bin/logger} {
		if [file exists $fn] {
			set flags(logger) $fn
		}
	}
	Log "Logger is $flags(logger)"
}
if {$flags(logger) == ""} {
	Log "Can't add system message, no syslog helper found"
	return
}
catch {exec $flags(logger) -p syslog.notice "$msg" 2>/dev/null}

}
# end of proc {SysLog}


proc {SetStorageDelay} {secs} {

Log "Adjust delay for USB storage devices ..."
set attrib /sys/module/usb_storage/parameters/delay_use
if {![file exists $attrib]} {
	Log "Error: could not find delay_use attribute"
	return
}
if [catch {set ch [open $attrib r+]} err] {
	Log "Error: could not access delay_use attribute: $err"
	return
}
if {[read $ch] < $secs} {
	seek $ch 0 start
	puts -nonewline $ch $secs
	Log " Delay set to $secs seconds\n"
} else {
	Log " Current value is higher than $secs. Leave it alone\n"
}
close $ch

}
# end of proc {SetStorageDelay}


proc {CheckMBIM} {} {

set kversion [exec uname -r]
if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/cdc_mbim*]] {return 1}
if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1}
return 0

}
# end of proc {CheckMBIM}


proc {CheckQMI} {} {

set kversion [exec uname -r]
if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/qmi_wwan*]] {return 1}
if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1}
return 0

}
# end of proc {CheckQMI}


proc {PantechAutoSwitch} {} {

global config flags
if {$config(PantechMode) == 3} {return 1}
if {$config(PantechMode) == 1} {
	if {"$config(vendor):$config(product)" == "10a9:6080"} {
		set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=2"]
		Log " PantechMode changed to 2"
		return 0
	} elseif [CheckQMI] {
		set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=4"]
		Log " PantechMode changed to 4"
		return 0
	} else {
		return 1
	}
} else {return 0}

}
# end of proc {PantechAutoSwitch}


proc {LogAttributes} {} {

global flags usb
if $flags(logging) {
	set attrList {idVendor idProduct bConfigurationValue manufacturer product serial}
	foreach attr [lsort [array names usb]] {
		Log "    [format %-26s $attr:] $usb($attr)"
	}
}

}
# end of proc {LogAttributes}


proc {HasFF} {devdir} {

set i 0
while {[set dir [IfDir $i $devdir]] != ""} {
	set c [exec cat $dir/bInterfaceClass]
	if {$c == "ff"} {return 1}
	incr i
}
return 0

}
# end of proc {HasFF}


# The actual entry point
Main $argv $argc

Directory Contents

Dirs: 0 × Files: 654

Name Size Perms Modified Actions
38.75 KB lrwxr-xr-x 2025-08-15 12:16:02
Edit Download
3.15 KB lrwxr-xr-x 2025-08-15 12:16:02
Edit Download
39.06 KB lrwxr-xr-x 2025-08-15 12:16:02
Edit Download
137 B lrwxr-xr-x 2024-04-12 03:59:30
Edit Download
14.55 KB lrwxr-xr-x 2024-04-08 14:45:49
Edit Download
1.03 KB lrwxr-xr-x 2024-03-31 08:47:33
Edit Download
3.00 KB lrwxr-xr-x 2026-01-05 22:01:39
Edit Download
53.90 KB lrwxr-xr-x 2023-07-05 17:42:39
Edit Download
53.90 KB lrwxr-xr-x 2023-07-05 17:42:39
Edit Download
59.56 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
1.55 MB lrwxr-xr-x 2025-08-15 12:16:02
Edit Download
39.06 KB lrwxr-xr-x 2025-08-15 12:16:02
Edit Download
2.17 KB lrwxr-xr-x 2026-01-05 22:01:39
Edit Download
36.00 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
61.61 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
26.33 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
18.54 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
34.32 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
2.32 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
698 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
14.30 KB lrwxr-xr-x 2024-04-08 15:54:26
Edit Download
15.96 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
11.10 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
664 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
681 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
10.01 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
3.86 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
27.20 KB lrwxr-xr-x 2024-10-14 20:25:58
Edit Download
10.58 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.12 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
915 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
9.34 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.14 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
567 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
15.97 KB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
22.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
54.41 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
34.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
34.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
2.54 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.58 KB lrwxr-xr-x 2026-01-13 13:56:02
Edit Download
108.49 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
6.47 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
9.75 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
6.38 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
9.15 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
8.28 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.88 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
57.09 KB lrwxr-xr-x 2025-02-20 15:49:57
Edit Download
94.73 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
166.48 KB lrwxr-xr-x 2024-03-31 05:38:03
Edit Download
30.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
952 B lrwxr-xr-x 2011-04-26 15:10:00
Edit Download
58.32 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
34.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
54.43 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
299.05 KB lrwxr-xr-x 2024-10-02 12:40:49
Edit Download
38.51 KB lrwxr-xr-x 2025-06-22 16:21:39
Edit Download
11.03 MB lrwxr-xr-x 2026-01-23 09:08:05
Edit Download
53 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
11.10 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
48.45 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
48.45 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
6.85 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
14.59 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
497 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
8.41 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
58.67 KB lrwxr-xr-x 2024-03-31 00:06:27
Edit Download
1.51 KB lrwxr-xr-x 2024-06-05 13:46:49
Edit Download
844 B lrwxr-xr-x 2024-06-05 13:46:49
Edit Download
225.90 KB lrwxr-xr-x 2024-11-14 03:44:47
Edit Download
14.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
7.22 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
3.70 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
80.52 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
4.03 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.23 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
3.77 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
20.45 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
225.87 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
18.53 KB lrwxr-xr-x 2023-07-05 17:42:39
Edit Download
18.53 KB lrwxr-xr-x 2023-07-05 17:42:39
Edit Download
170.24 KB lrwxr-xr-x 2024-10-02 12:40:49
Edit Download
150.86 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
395.40 KB lrwxr-xr-x 2025-11-13 17:47:30
Edit Download
8.37 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
50.38 KB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
135.25 KB lrwxr-xr-x 2024-10-14 20:25:58
Edit Download
171.05 KB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
171.05 KB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
78.38 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
38.38 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
7.76 KB lrwxr-xr-x 2022-10-15 10:01:41
Edit Download
4.25 KB lrwxr-xr-x 2024-04-12 12:40:53
Edit Download
4.43 KB lrwxr-xr-x 2024-04-12 12:40:53
Edit Download
6.73 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
34.31 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
18.30 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
364.34 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
42.31 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
110.56 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
34.31 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
7.12 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
5.27 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
22.30 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
30.38 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
34.30 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
651.68 KB lrwxr-xr-x 2024-04-08 15:57:18
Edit Download
9.82 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
928 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
9.42 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
6.53 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
9.71 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
22.31 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
38.38 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
114.42 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
18.32 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
5.64 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
6.38 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
7.20 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
6.35 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
14.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
58.48 KB lrwxr-xr-x 2024-03-31 05:38:03
Edit Download
24.00 KB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
42.42 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
1.16 KB lrwxr-xr-x 2024-03-31 08:43:21
Edit Download
30.44 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
364.34 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
364.34 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
364.34 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
78.38 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
54.41 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
78.38 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
78.38 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
2.51 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
14.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
14.30 KB lrwxr-xr-x 2024-04-08 16:20:36
Edit Download
42.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
37.00 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
13.63 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
32.20 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
23.66 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
14.30 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
12.16 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
12.68 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
5.46 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
11.28 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
10.38 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
198.48 KB lrwxr-xr-x 2024-03-31 05:38:03
Edit Download
120.58 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
14.30 KB lrwxr-xr-x 2025-02-20 15:49:57
Edit Download
3.82 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.19 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
14.30 KB lrwxr-xr-x 2025-02-20 15:49:57
Edit Download
59.56 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
71.13 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
62.91 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
58.34 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
71.04 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
58.32 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
50.16 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
50.16 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
958.55 KB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
1.17 MB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
946.41 KB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
8.63 KB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
70.69 KB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
954.66 KB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
4.73 KB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
3.47 KB lrwxr-xr-x 2025-03-17 13:20:09
Edit Download
1.43 MB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
6.85 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
139.43 KB lrwxr-xr-x 2024-04-08 15:58:49
Edit Download
14.30 KB lrwxr-xr-x 2025-12-09 15:50:28
Edit Download
34.47 KB lrwxr-xr-x 2026-01-30 08:27:54
Edit Download
77.17 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
1.18 MB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
98.45 KB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
16.06 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
170.24 KB lrwxr-xr-x 2024-10-02 12:40:49
Edit Download
4.44 KB lrwxr-xr-x 2022-10-06 18:03:38
Edit Download
2.60 KB lrwxr-xr-x 2024-03-31 08:47:33
Edit Download
67.06 KB lrwxr-xr-x 2024-11-14 03:44:47
Edit Download
16.13 KB lrwxr-xr-x 2023-12-06 07:46:52
Edit Download
496 B lrwxr-xr-x 2024-04-01 05:56:53
Edit Download
496 B lrwxr-xr-x 2024-04-01 05:56:53
Edit Download
754.80 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
6.89 KB lrwxr-xr-x 2023-08-12 22:33:39
Edit Download
92.95 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
92.95 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
92.95 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
18.30 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
6.89 KB lrwxr-xr-x 2023-08-12 22:33:39
Edit Download
92.95 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
92.95 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
92.95 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
18.30 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
18.30 KB lrwxr-xr-x 2025-06-04 12:20:05
Edit Download
370.43 KB lrwxr-xr-x 2025-06-04 12:20:05
Edit Download
286.55 KB lrwxr-xr-x 2025-06-04 12:20:05
Edit Download
274.49 KB lrwxr-xr-x 2025-06-04 12:20:05
Edit Download
5.17 KB lrwxr-xr-x 2025-06-04 12:20:05
Edit Download
14.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
55 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
52 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
56 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
57 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
18.31 KB lrwxr-xr-x 2024-03-31 09:02:08
Edit Download
26.23 KB lrwxr-xr-x 2024-04-08 16:20:36
Edit Download
4.45 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
873 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
13.04 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
42.16 KB lrwxr-xr-x 2025-07-22 15:44:15
Edit Download
11.19 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
26.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
387 B lrwxr-xr-x 2026-01-30 08:27:54
Edit Download
1.00 MB lrwxr-xr-x 2026-01-30 08:27:54
Edit Download
4.48 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.10 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
4.21 KB lrwxr-xr-x 2024-08-08 13:37:04
Edit Download
94.24 KB lrwxr-xr-x 2024-04-08 16:11:30
Edit Download
14.16 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
74.52 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
170.24 KB lrwxr-xr-x 2024-10-02 12:40:49
Edit Download
3.32 KB lrwxr-xr-x 2024-06-05 13:46:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
10.12 KB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
235.97 KB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
589 B lrwxr-xr-x 2024-05-07 23:33:14
Edit Download
589 B lrwxr-xr-x 2024-05-07 23:33:14
Edit Download
22.38 KB lrwxr-xr-x 2024-04-08 15:54:26
Edit Download
6.65 KB lrwxr-xr-x 2023-10-01 04:19:41
Edit Download
622.21 KB lrwxr-xr-x 2024-07-29 08:06:31
Edit Download
2.24 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
775 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
258.80 KB lrwxr-xr-x 2024-07-29 08:06:31
Edit Download
20.80 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
26.73 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
50.83 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
130.62 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
14.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
22.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
560.30 KB lrwxr-xr-x 2024-03-31 08:43:21
Edit Download
34.32 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
130.62 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
130.62 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
130.62 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
50.83 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
42.39 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
50.83 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
66.38 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
50.83 KB lrwxr-xr-x 2024-03-31 08:49:11
Edit Download
438.99 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
22.34 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
15.39 KB lrwxr-xr-x 2025-02-07 14:21:59
Edit Download
14.30 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
66.38 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
50.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
2.07 MB lrwxr-xr-x 2024-03-31 02:34:30
Edit Download
170.24 KB lrwxr-xr-x 2024-10-02 12:40:49
Edit Download
170.24 KB lrwxr-xr-x 2024-10-02 12:40:49
Edit Download
18.30 KB lrwxr-xr-x 2024-04-08 15:57:57
Edit Download
18.30 KB lrwxr-xr-x 2024-04-08 15:57:57
Edit Download
118.98 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
159.01 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
159.01 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
14.62 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
31.21 KB lrwxr-xr-x 2025-07-22 15:44:15
Edit Download
34.30 KB lrwxr-xr-x 2025-07-22 15:44:15
Edit Download
18.30 KB lrwxr-xr-x 2025-07-22 15:44:15
Edit Download
142.46 KB lrwxr-xr-x 2025-07-22 15:44:15
Edit Download
60.72 MB lrwxr-xr-x 2025-12-16 08:06:46
Edit Download
96.36 MB lrwxr-xr-x 2025-12-16 08:06:46
Edit Download
3.05 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
14.39 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
1.01 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
40.13 KB lrwxr-xr-x 2024-12-05 11:53:51
Edit Download
802 B lrwxr-xr-x 2025-01-20 18:19:16
Edit Download
5.59 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
86.96 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
18.30 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
4.95 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
13.61 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
26.23 KB lrwxr-xr-x 2024-04-08 16:14:26
Edit Download
1.32 MB lrwxr-xr-x 2025-04-28 07:08:08
Edit Download
52 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
14.30 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
50.38 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
30.38 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
22.38 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
62.39 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
50.38 KB lrwxr-xr-x 2024-04-08 14:46:29
Edit Download
13.46 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
15.31 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
3.70 KB lrwxr-xr-x 2025-06-04 14:29:58
Edit Download
2.04 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.17 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
14.24 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
953 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
2.45 KB lrwxr-xr-x 2024-07-03 16:00:19
Edit Download
14.45 KB lrwxr-xr-x 2024-10-14 20:25:58
Edit Download
20.96 KB lrwxr-xr-x 2025-03-05 14:39:56
Edit Download
26.31 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
34.31 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
2.82 KB lrwxr-xr-x 2025-03-05 14:39:56
Edit Download
467 B lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
14.31 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
4.07 KB lrwxr-xr-x 2024-04-08 16:06:21
Edit Download
94.40 KB lrwxr-xr-x 2024-03-31 06:44:32
Edit Download
14.38 KB lrwxr-xr-x 2024-03-31 06:44:32
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
55 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
4.40 MB lrwxr-xr-x 2025-07-22 07:08:08
Edit Download
4.66 MB lrwxr-xr-x 2025-07-22 07:08:08
Edit Download
4.58 MB lrwxr-xr-x 2025-07-22 07:08:08
Edit Download
4.59 MB lrwxr-xr-x 2025-07-22 07:08:08
Edit Download
4.76 MB lrwxr-xr-x 2025-07-22 07:08:08
Edit Download
5.30 MB lrwxr-xr-x 2025-12-30 07:08:08
Edit Download
5.41 MB lrwxr-xr-x 2025-12-30 07:08:08
Edit Download
5.51 MB lrwxr-xr-x 2026-01-22 07:08:08
Edit Download
5.71 MB lrwxr-xr-x 2026-01-22 07:08:08
Edit Download
9.96 MB lrwxr-xr-x 2026-01-22 07:08:08
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
7.11 KB lrwxr-xr-x 2022-07-13 08:19:37
Edit Download
7.11 KB lrwxr-xr-x 2022-07-13 08:19:37
Edit Download
53 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
6.24 KB lrwxr-xr-x 2022-07-13 08:19:37
Edit Download
53 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.08 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
628 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
14.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
14.30 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
146.57 KB lrwxr-xr-x 2025-02-25 05:47:08
Edit Download
22.30 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
22.37 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
195.80 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
22.42 KB lr-xr-xr-x 2024-04-08 14:48:02
Edit Download
18.38 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
4.84 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
3.77 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
3.17 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
14.30 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
14.30 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
14.45 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
22.30 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
30.69 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
22.38 KB lr-xr-xr-x 2024-04-08 14:48:02
Edit Download
30.59 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
42.38 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
1.43 MB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
13.89 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
14.41 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.18 MB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
1.64 KB lrwxr-xr-x 2024-05-09 07:08:08
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
54.29 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
46.16 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
22.31 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
46.16 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
57 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
56 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
56 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.01 MB lrwxr-xr-x 2025-12-15 12:33:49
Edit Download
18.30 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
22.31 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
12.54 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
32.33 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
4.95 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
6.54 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
22.41 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
1.43 MB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
1.08 KB lrwxr-xr-x 2024-03-31 08:47:33
Edit Download
3.42 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
70.30 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
158.67 KB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
18.38 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
170.24 KB lrwxr-xr-x 2024-10-02 12:40:49
Edit Download
54.71 KB lrwxr-xr-x 2024-04-08 16:20:47
Edit Download
54.71 KB lrwxr-xr-x 2024-04-08 16:20:47
Edit Download
42.30 KB lrwxr-xr-x 2025-10-21 12:33:24
Edit Download
22.30 KB lrwxr-xr-x 2025-10-21 12:33:24
Edit Download
68.27 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
771.67 KB lrwxr-xr-x 2025-03-11 18:25:47
Edit Download
28.31 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
34.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
116.52 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
55 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
52 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
56 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.43 MB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
9.30 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
788 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
8.05 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.01 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
9.01 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
54.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
30.45 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
8.89 KB lrwxr-xr-x 2023-12-06 07:50:15
Edit Download
14.30 KB lrwxr-xr-x 2025-02-20 15:49:57
Edit Download
1.76 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
14.37 KB lrwxr-xr-x 2024-03-31 09:02:08
Edit Download
14.43 KB lrwxr-xr-x 2024-03-31 09:02:08
Edit Download
106.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
178.48 KB lrwxr-xr-x 2024-03-31 05:38:03
Edit Download
2.22 KB lrwxr-xr-x 2024-05-07 13:44:18
Edit Download
7.80 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.43 MB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
6.38 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
36.08 KB lrwxr-xr-x 2025-05-28 13:23:35
Edit Download
35.27 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
30.32 KB lrwxr-xr-x 2024-04-08 14:48:02
Edit Download
8.06 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
5.59 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
5.96 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
2.36 KB lrwxr-xr-x 2025-12-09 15:50:28
Edit Download
899.82 KB lrwxr-xr-x 2025-08-26 13:49:17
Edit Download
2.08 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
13.68 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.99 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
16.26 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
47.49 KB lrwxr-xr-x 2025-09-18 17:43:59
Edit Download
4.92 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.26 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
248.50 KB lrwxr-xr-x 2025-06-25 12:42:53
Edit Download
131.67 KB lrwxr-xr-x 2025-06-25 12:42:53
Edit Download
42.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
600 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
18.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
22.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
42.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
22.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
1.27 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
839 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
8.57 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
872 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
30.38 KB lrwxr-xr-x 2024-09-26 08:44:05
Edit Download
936 B lrwxr-xr-x 2024-01-01 21:15:10
Edit Download
630.08 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
54 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
53 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
55 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
53 B lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
9.00 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.71 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
20.11 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
18.46 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.58 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
9.07 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
7.44 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
2.41 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
16.55 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
2.72 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
13.77 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
2.07 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
8.70 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
13.73 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
7.63 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
2.12 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
962 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
12.64 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
17.71 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
1.43 MB lrwxr-xr-x 2025-11-25 18:16:31
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.36 MB lrwxr-xr-x 2024-07-01 18:48:29
Edit Download
1.81 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
712 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
90.52 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
4.06 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
42.86 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
7.51 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
110.56 KB lrwxr-xr-x 2024-04-28 23:44:46
Edit Download
11.69 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
7.92 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
4.84 KB lrwxr-xr-x 2024-03-11 13:18:21
Edit Download
7.64 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
14.30 KB lrwxr-xr-x 2025-08-21 14:16:39
Edit Download
789 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
30.31 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
34.31 KB lrwxr-xr-x 2025-09-15 12:37:15
Edit Download
6.04 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
5.32 KB lrwxr-xr-x 2024-02-04 09:41:43
Edit Download
9.17 KB lrwxr-xr-x 2022-10-06 18:03:38
Edit Download
5.71 KB lrwxr-xr-x 2016-08-21 16:54:00
Edit Download
3.98 KB lrwxr-xr-x 2016-08-21 16:54:11
Edit Download
6.10 KB lrwxr-xr-x 2016-08-21 16:54:20
Edit Download
64 B lrwxr-xr-x 2025-03-17 11:36:12
Edit Download
301 B lrwxr-xr-x 2015-03-27 17:50:35
Edit Download
64 B lrwxr-xr-x 2025-03-17 11:36:12
Edit Download
390 B lrwxr-xr-x 2025-09-25 16:37:20
Edit Download
3.41 KB lrwxr-xr-x 2022-08-27 20:16:50
Edit Download
1.66 KB lrwxr-xr-x 2024-01-13 19:09:56
Edit Download
6.75 KB lrwxr-xr-x 2025-02-07 09:55:44
Edit Download
2.99 KB lrwxr-xr-x 2024-08-08 13:37:04
Edit Download
34.56 KB lrwxr-xr-x 2024-04-08 15:54:09
Edit Download
1.74 KB lrwxr-xr-x 2024-04-08 16:15:21
Edit Download
17.72 KB lrwxr-xr-x 2023-12-06 07:47:58
Edit Download
7.43 KB lrwxr-xr-x 2024-01-24 09:14:48
Edit Download
3.89 KB lrwxr-xr-x 2024-03-31 08:47:33
Edit Download
16.88 KB lrwxr-xr-x 2023-12-12 02:01:07
Edit Download
1.56 KB lrwxr-xr-x 2025-03-17 11:36:42
Edit Download
59.66 KB lrwxr-xr-x 2024-04-08 16:21:24
Edit Download
26.78 KB lrwxr-xr-x 2024-04-08 16:21:24
Edit Download
139.88 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
91.01 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
127.65 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
12.12 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
4.00 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
30.88 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
1.73 KB lrwxr-xr-x 2022-08-02 15:34:43
Edit Download
5.29 MB lrwxr-xr-x 2024-05-09 10:06:11
Edit Download
6.33 KB lrwxr-xr-x 2024-05-09 10:06:11
Edit Download
14.30 KB lrwxr-xr-x 2024-03-31 09:02:08
Edit Download
34.56 KB lrwxr-xr-x 2025-07-10 14:46:54
Edit Download
43.94 KB lrwxr-xr-x 2024-11-14 03:44:47
Edit Download
1.36 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
515 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
4.06 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
721 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
3.01 MB lrwxr-xr-x 2024-11-27 19:06:49
Edit Download
60.69 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
60.69 KB lrwxr-xr-x 2024-05-30 14:52:35
Edit Download
8.69 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
252.71 KB lrwxr-xr-x 2025-06-25 12:42:53
Edit Download
14.58 KB lrwxr-xr-x 2024-10-14 20:25:58
Edit Download
8.10 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
38.38 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download
1.66 KB lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
4.61 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
972 B lrwxr-xr-x 2024-03-07 22:14:52
Edit Download
7.78 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
2.12 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
695 B lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
90.44 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
688.56 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
14.16 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
800 B lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
42.18 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
38.23 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
1.26 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
203.65 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
78.27 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
34.23 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
816 B lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
1.02 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
685 B lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
90.16 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
643.32 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
18.15 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
106.27 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
7.66 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
42.30 KB lrwxr-xr-x 2024-10-17 07:36:15
Edit Download
92.95 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
219.16 KB lrwxr-xr-x 2024-04-08 15:59:59
Edit Download
14.15 KB lrwxr-xr-x 2024-03-31 17:34:05
Edit Download
5.30 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
8.45 KB lrwxr-xr-x 2024-04-16 05:52:23
Edit Download
66.39 KB lrwxr-xr-x 2026-01-30 08:27:54
Edit Download
54.52 KB lrwxr-xr-x 2025-09-16 00:08:02
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).