fenrir

fenrir_ss.png

fenrirについて

作者様
folia(◆WoqZr951YI)
作者様ホームページ「B@r09u3⇔Style Op.2」
http://hp.vector.co.jp/authors/VA026310/
最新バージョン
ver.0.75c [09/09/29]
ソフトのコンセプト
2chの作者さん(◆WoqZr951YI)書き込み。2006/02/26(日) 00:51:07

「パス窓」、「qui」に続いて
「アイテム管理」という要素をランチャから極力省くことを志したランチャです。
(ファイル検索もできる云々は後付けです。)

その基本コンセプトの中で、多機能であるというよりかは仕様の洗練という方向性で作っています。
極力、仕組みがシンプルで原始的ながら、そこそこいろいろなことができる
簡易的なファイルアクセスのための仕組みといった感じです。

インスタントコマンドを搭載するのにも結構躊躇を覚えたほどです。
うちの掲示板に書きましたが、個人的には現段階でもほぼ完成だと思っています。
なので、大幅な機能追加はないと思います。

fenrir.exe

ウインドウクラス
メインウインドウ: fenrirMainWindow
候補ウィンドウ: fenrirListWindow
設定ダイアログ: #32770

最新バージョンの変更点

  • インスタントコマンドとトレイアイコンクリックの実行履歴メニューにおける作業フォルダの問題。
    • これまでは、fenrir.exeのフォルダを作業フォルダにしていた。これを、各コマンドラインの最初に現れるexeがあるフォルダに変更した。
  • fenrirScan011.zip

更新履歴

概要・仕組み・利点

概要

  • 各種ファイラとの連携
  • ランチャ
  • キーボードメイン
  • その他いろいろ

仕組み

  • すべてのディレクトリ、ファイルをスキャンし、DB化。そこからファイルを開いたりできる。
  • 拡張子、ディレクトリを指定し、スキャンする対象を指定。
  • ディレクトリ構造を見ることができたり。

利点

  • ファイルパスに対してインクリメンタルな検索ができる。
  • その上、スキップマッチング、中間部分一致で検索できる。
  • しかも検索は素早い。
  • コマンドを設定することにより、見つかったパスを外部に渡すことが可能。
  • パスごとに、簡単にメニューを出すことができる。
  • その上パスをワイルドカードで判別して、パスごとに同じ操作により別のことが実行可能。

使用時の注意点

  • fenrirを使う際、作業フォルダを設定しておくこと。
    fenrirは(作業フォルダ)\以下にcmd、dataの設定ディレクトリを自動で作成するため。
    作業フォルダを指定しないと、思わぬ場所に設定ディレクトリが作られてしまう。また起動するたびにスキャンしてしまうことになるかもしれない。
  • その解決方法の一つ:
    fenrir.exeのショートカットを作って、ショートカットファイルに作業フォルダを指定すること。fenrirの起動はショートカットから行う。
  • 逆に意図的に異なる場所を作業フォルダとするという使い方もありえる。
  • 最初に起動するとき、確認ダイアログがでて、OKするとスキャンが始まるので、
    起動する前にスキャンファイルの設定をしておくほうが良いかもしれない。

置換文字一覧

置換文字説明
%P選択したパス
%D選択したパスの親パス
%F選択したパスのファイルフォルダ名部分(パスの末端)
%E選択したパスの拡張子
%N選択したパスの拡張子を除いたファイル名
%Cクリップボードに格納されている文字列
%Wfenrirの作業フォルダのパス
%Vfenrirのカレントドライブ(作業フォルダのパスのドライブ部分)
%Aインスタントコマンドの引数
%pipe「|」(パイプ)
%instantfileインスタントファイル(instant.ini)のパス
%scanfileスキャンファイル(scan.ini)のパス
%pathfileインデックスファイル(path)のパス
%initfile動作設定ファイル(fenrir.ini)のパス
%cmddirコマンドファイルの場所のパス
%MN選択した複数のパスを改行で区切ったもの
%MS選択した複数のパスをスペースで区切ったもの

引数一覧

引数説明
/dir=任意のフォルダを開いた状態に
/pathfile=インデックスファイル
/scanfile=スキャンファイル
/initfile=動作設定ファイル
/instantfile=インスタントファイル
/cmddir=コマンドファイルが格納されているフォルダ
/t非常駐モードで起動
/key==以降の文字列を入力する
/restart多重起動する
/cmdtarget==以降のパスに応じたメニューを表示
/cmdfile=/cmd使用時にメニューを出すコマンドファイル
/cmdx=/cmd使用時のメニューの表示位置X
/cmdy=/cmd使用時のメニューの表示位置Y

iniファイルの設定一覧

data\fenrir.iniの中身について。

項目説明
AddIconIndex=アイコンのインデックスがずれ、正しいアイコンが表示されない場合、ずれを補正する0:無効 1:有効
AllowChangeSizeMainWindow=メインウィンドウサイズ(高さ)の変更0:不可 1:可
AutoHide=アクティブな状態から非アクティブになったときに、
自動でウィンドウを非表示にするオプション
0:無効 1:有効
AutoRegistrationMode=scan.iniに指定されたマスクと一致するパスのみを自動登録の対象とするかどうか
(インデックスデータをscan.iniに指定したものだけが登録してある状態にしておきたいというときに有効なオプション)
0:無効 1:有効
BackGroundColor=背景色
ChangePrioriyOfDirectoryBrowsed=潜ったフォルダの優先順位をあげるオプション0:無効 1:有効
CheckPathExist=リストに表示したアイテムの存在確認
実在しないファイルは次回から表示しない
0:無効 1:有効
ClientEdge=ウィンドウの縁が盛り上がった感じになる0:無効 1:有効
CompactPath=パスを縮小表示0:無効 1:有効
EditIcon=入力ウィンドウへのアイコン描画0:描画しない 1:描画する
EditIconDelay=入力ウィンドウへのアイコン描画のディレイ単位はミリ秒
ExecuteHistoryMax=実行履歴保存数[履歴を保存する数]
FitWindowSize=リストウィンドウの幅をメインウィンドウのサイズに合わせるかどうか0:合わせない 1:合わせる
FontColor=フォントの色
HashSize=ハッシュ探索の時に使う、ハッシュテーブルのサイズ気にスンナ
HideEditAfterExec=コマンド実行後にウィンドウを隠す0:隠さない 1:隠す
HotKeyMain=ホットキー詳しくはFAQを参照
HotKeySub=ボツ、機能なしドンマイだお( ^ω^)
ImeOffAlways=アクティブになったときに自動でIMEをOFFにする機能0:無効 1:有効
InputHistoryMax=最大履歴数[履歴を保存する数]
InputHistoryMinLen=何文字以上入力されていたら記録するか[記録開始位置の数字]
KeyMoveToDir=ディレクトリ展開に使うキー詳しくはTIPSを参照
KeyMoveToParentDir=親ディレクトリ展開に使うキー詳しくはTIPSを参照
ListLoopCursor=リストの選択カーソルのループ0:無効 1:有効
ListIcon=リストウィンドウ内のアイコン表示0:表示しない 1:表示する
ListStringsPlacement=リストの右寄せ、左寄せ、中寄せ0=左寄せ 1=中寄せ 2=右寄せ
ListWindowRect=リストウィンドウの位置
LOGFONT=フォント
MainWindowHeightAdd=メインウィンドウの高さの調整。Windows Vistaで高さがおかしいときはここで調節すること[数値]
MainWindowRect=メインウィンドウの位置
MaxListItemCounts=リストウィンドウのアイテムの最大列挙数[列挙数]
MigemoDictPath=Migemo関連のファイルへのディレクトリのフルパス[ディレクトリへのフルパス]
なおダブルクオーテーションは半角空白が存在しても必要なし。
指定されていない場合は、dict\にあるmigemo-dictを使用。
MigemoMode=Migemo検索発動の仕方0:Migemo検索を使用しない。
1:MigemoStringsで指定した文字列を検索キーに含めることで発動。
2:大文字で入力を始めることで発動。
3:小文字で入力を始めることで発動。
MigemoStartLen=何文字入力された時点で検索を始めるか[開始位置の数字]
MigemoStrings=MigemoMode=1の時に使う文字列(8文字まで)[文字列]
NoCaption=ウィンドウタイトルの表示0:表示する 1:表示しない
NoHideAtFilerMode=フォルダに潜っているときにはファイルを実行しても、いちいち閉じないようにするオプション0:閉じる 1:閉じない
PriorityStockCounts=インデックスファイルのプライオリティ保存数[保存数]
ScanProgram=メインとして使うスキャンプログラムのパス[プログラムのパス]
SearchMethod=通常時の検索方式0:先頭部分一致 1:中間部分一致
2:スキップマッチング
SearchMethodInDir=ディレクトリ展開時の検索方式0:先頭部分一致 1:中間部分一致
2:スキップマッチング
ShowStartUp=起動時のウィンドウ表示0:表示しない 1:表示する
SingleSel=アイテムの複数選択0:使用しない 1:使用する
ToggleWindowShowHide=呼び出しキーを押したときに、fenrirが既にアクティブだった場合は閉じないようにするオプション0:閉じない 1:閉じる
TrayIcon=タスクトレイのアイコン表示0:表示しない 1:表示する
UseDummyIcon=ダミーアイコンの使用0:無効 1:有効

fenrir / FAQ

fenrir FAQ

一般

ホットキーについて

呼び出しキーの設定に対応するfenrir.iniのキーは"HotKeyMain"です。
HotKeyMainの値は、勘違いがなければ以下のような感じで求められたはずです。

HotKeyMain=256×Mod+Key

Key:仮想キーコード
Mod:修飾キーの合計値。
[修飾キー]
 Shift:1
 Ctrl:2
 Alt:4
 Win:16
fenrir
http://pc7.2ch.net/test/read.cgi/software/1138634830/483

もっと挙動を素早くしたい、軽くしたい

fenrirの設定を詰める方法として、こんなんどうでしょうか。

  • 候補リストのアイコンを表示しない
    ListIcon=
    0:表示しない 1:表示する
  • 最大列挙数を減らす (上手に管理できれば20程度でも十分でないでしょうか)
    MaxListItemCounts=
    数値(列挙数)
  • 入力ウィンドウへのアイコン描画を行わないようにする
    EditIcon=
    0:描画しない 1:する
  • 入力ウィンドウへのアイコン描画のディレイを調整する
    EditIconDelay=
    数値(ミリ秒)
  • 検索モードを先頭部分一致に
    検索モードは先頭部分一致が速いです
  • scan.iniをもっと指定する
    たとえば、メールデータ、WeBox巡集、FirefoxのScrapBookのデータフォルダや、インストール時に多くフォルダを作成するアプリケーション、ランゲージファイルをフォルダ単位で扱うアプリケーション、テンポラリーファイルを保存しているフォルダなど、上手に除外すればスキャン速度も速くなります。スキャン時にのみscan.iniを読み込むと思われるので、どんどん登録しても大丈夫と思われます。
    • Apple系のソフトウェアや、Caldixあたりもフォルダを大量に作成します。

入力文字の履歴を保存してほしいんですが

スペースキー、または * で履歴っぽくなります。
Ver.0.61 [06/05/30]にて新機能追加。

-------------------------------------------------------------------
Ver.0.61	06/05/30
-------------------------------------------------------------------

・なにも入力していない状態の時に、下を押すと履歴を表示するようにした。

関係する設定
InputHistoryMax		最大履歴数
InputHistoryMinLen	何文字以上入力されていたら記録するか

Migemo検索が遅い

辞書を小さくすればおk。

検索結果にディレクトリだけを表示させたい

; (セミコロン)を検索時に入力すればおk。

ドライブのリストを列挙させたい

: (コロン)を入力すればおk。

でもネットワークドライブとCD/DVDドライブは表示できないですね

とりあえず、PATHファイルに直接書き加えればおkです。
Ver.0.60 [06/05/03]にて修正。

-------------------------------------------------------------------
Ver.0.60	06/05/03
-------------------------------------------------------------------

・ネットワークドライブのフォルダが展開できなかったのを修正。

ファイル名を指定して実行をfenrirでしたい

先頭に、! (エクスクラメーション)を入力すると可能。

!calc

とすると、電卓(OS標準)が起動する。

最初は以下のようになっていた。

------------------------------------------------------------------
Ver 0.48	06/02/15
------------------------------------------------------------------

・入力する文字列の最初や語尾などに(';'の場合と同様に場所は問わない)
エクスクラメーション(!)を入力すると「ファイル名を指定して実行」のように、
入力した文字列を実行するようにした。

しかし、Ver 0.65? から先頭のみに変更された。

-------------------------------------------------------------------
Ver.0.65	07/02/16
-------------------------------------------------------------------

・! による「ファイル名を指定して実行」は、 ! が先頭にあるときにのみ
動作するように変更。

指定ディレクトリだけスキャンしたい

Ver.0.67よりomake.zipに同梱された、fenrirScanを使用すると幸せになれるよ。

scan.iniの除外は最大いくつまで?

256まで。byte制限とかは無い模様。

-------------------------------------------------------------------
Ver.0.63	06/09/29
-------------------------------------------------------------------
・除外パスの制限を64から256まで緩和。

fenrirScanの方は特に制限が無い模様。

インスタントコマンド系

コマンドラインオプションがうまくいかないんです

こんな感じ。例は、sylera.exeに常駐させるコマンドラインオプションの-sを送るというもの。

sylera=""E:\app\seamonkey\sylera.exe" "-s""

フルパスとコマンドラインを囲むように。

fenrir / Tips

fenrir Tips

インスタントコマンド系

どんなにくるしくても
インスタントコマンドに
いろいろ登録しておくと幸せになれるよ。
                 ハ_ハ
               ('(゚∀゚∩ なれるよ!
                ヽ  〈
                 ヽヽ_)
/*=の*の部分に自分の好きな文字(列)を入力。

(例)
/t=test
/test=test

インスタントコマンド編集の際のポイント

例えば、
/a
/ab
というようなコマンドがあって、/abが実行できなくて困るというようなときは、
/a/
/ab/
のように後ろにスラッシュをつけるようにするという手もあり。
fenrir
http://pc7.2ch.net/test/read.cgi/software/1138634830/485

もしくは、

(例) /n=notepad %A
としておけば、「/n」ですぐには起動せず、エンターを押せば
メモ帳が起動する。
たいていのソフトは引数が空でも起動するはず。
fenrir
http://pc7.2ch.net/test/read.cgi/software/1138634830/482

各設定の編集

/*=%instantfile
/*=%scanfile
/*=%initfile
/*=%cmddir 

コマンドファイルの編集

/*=[エディタのパス] %cmddir\%A.txt 

/* 0enterと入力すれば0enter.txtが開く

/*= %cmddir\%A.txt

だけでも開くけど、存在しないと開けないので一応。

インスタントファイルの中身を表示

var FSO = new ActiveXObject("Scripting.FileSystemObject"); 
var stream = null, file = "" ,ForReading = 1; 
file = "[instant.iniのパス]";
//(例)"C:\\PATH\\fenrir\\data\\instant.ini" 
stream = FSO.OpenTextFile(file, ForReading); 
ins = stream.ReadAll(); 
ins = ins.replace(/^;.*$\n/gm,"");
WScript.Echo(ins); 
stream.Close(); 
//new ActiveXObject("Wscript.Shell").Run("c:\\PATH\\fenrir\\fenrir.exe /t /restart");//常駐させてない場合

これを[適当な名前.js]で保存し、インスタントコマンドに登録。 登録時には、[適当な名前.js]をcmdフォルダに入れておけば、

/*=%cmddir\[適当な名前.js]

で開ける。 コメントアウト部分を表示させないように直しました。

ポチエス連携

/*=[ポチエスのパス]

パス存在確認のOn/Off切替

http://d.hatena.ne.jp/blowny/20060224/1140792035
Ver.0.51に加わったfenrir.iniのCheckPathExistをNirCmdで書き換えるインスタントコマンド。
2chより:秀丸ユーザーならマクロでもできる。
CheckPathExistの有効・無効を切り替えるマクロ

$INIFILE = "D:\\tools\\fenrir\\data\\fenrir.ini";
if ( getininum ( $INIFILE, "Main", "CheckPathExist" ) == 0 ) {
writeininum $INIFILE, "Main", "CheckPathExist", 1;
} else {
writeininum $INIFILE, "Main", "CheckPathExist", 0;
}
quit;

上記を「hoge.mac」で保存すると、instant.iniに、

/chk=C:\****\hidemaru.exe /h /x hoge.mac

とすれば、秀丸の画面も出ない。

fenrirでメモをとる

2chより:instant.iniに/memo=このバッチファイルのパス %A
/memo ToDo とすると[日付]ToDoといゆうmemoができます。
ファイル名で使える記号は+-くらいか〜
検索しやすいルールはご自分で決めて下さい。

IF %1=="" GOTO END
SET MEMODIR=C:\memo
REM メモ溜ディレクトリ
SET T=%TIME: =0%
SET HHMM=%T:~0,2%%T:~3,2%
SET YYMMDD=%DATE:/=%
SET MEMO=%MEMODIR%\[%YYMMDD%%HHMM%]%*
START "" "notepad.exe" %MEMO%
ECHO %MEMO% >> パスファイルの場所
:END

別に内容なんか、いらないか??

内容を書いた場合、連結表示.cmdとかで保存して

@ECHO OFF
SET TMP=C:\$$tmp
SET TE=----------------------
SET X=
CD %CD%
IF "%~1"=="" GOTO :EOF
:LOOP
IF "%~1"=="" GOTO NEXT
ECHO %~nx1  %TE%>>%TMP%
ECHO. %X%>>%TMP%
TYPE "%~1" >>%TMP%
ECHO. %X%>>%TMP%
ECHO. %X%>>%TMP%
SHIFT
GOTO LOOP
:NEXT
notepad.exe %TMP%
IF EXIST %TMP% DEL %TMP%

連結表示.cmdとして保存し、cmdfileに

[.***;
連結表示|"%W\連結表示.cmd" %MS||0
]

として複数選択したMEMOを連結表示します。

/cmddirの ショートカットキー一覧

 var fso, f, fc, arg;
 fso = new ActiveXObject("Scripting.FileSystemObject");
 arg = WScript.Arguments;
 var M="ALT ", C="Ctrl ", S="Shift ", W="WIN ", K="■ ";
 // 		ALT      	1
 // 		CONTROL  	2
 // 		SHIFT    	4
 // 		WIN      	8
 for (i = 0; i < arg.length; i++)
 {
 	f = fso.GetFolder(arg(i));
 }
 fc = new Enumerator(f.files);
 var s="";
 for (; !fc.atEnd(); fc.moveNext())
 {
 	s += fc.item().Name;
 	s = s.replace(/0(.*?)\.txt/g, K + '$1');
 	s = s.replace(/1(.*?)\.txt/g , K + M + '+ $1');
 	s = s.replace(/2(.*?)\.txt/g , K + C + '+ $1');
 	s = s.replace(/3(.*?)\.txt/g , K + M + C + '+ $1');
 	s = s.replace(/4(.*?)\.txt/g , K + S + '+ $1');
 	s = s.replace(/5(.*?)\.txt/g , K + M + S + '+ $1');
 	s = s.replace(/6(.*?)\.txt/g , K + C + S + '+ $1');
 	s = s.replace(/7(.*?)\.txt/g , K + M + C + S + '+ $1');
 	s = s.replace(/8(.*?)\.txt/g , K + W + '+ $1');
 	s = s.replace(/9(.*?)\.txt/g , K + M + W + '+ $1');
 	s = s.replace(/10(.*?)\.txt/g, K + C + W + '+ $1');
 	s = s.replace(/11(.*?)\.txt/g, K + M + C + W + '+ $1');
 	s = s.replace(/12(.*?)\.txt/g, K + S + W + '+ $1');
 	s = s.replace(/13(.*?)\.txt/g, K + M + S + W + '+ $1');
 	s = s.replace(/14(.*?)\.txt/g, K + C + S + W + '+ $1');
 	s = s.replace(/15(.*?)\.txt/g, K + M + C + S + W + '+ $1');//ありえないけど一応
 	s += "\n";
 }
 WScript.Echo(s);
 //非常駐な肩はこんなので
 //var sh =new ActiveXObject("Wscript.Shell");
 //sh.CurrentDirectory = [fenrirの作業フォルダ];//????
 //sh.Run("[fenrirのパス] /t /restart");
 

[適当な名前.js]で保存してインスタントコマンドに登録

/c?=%W[適当な名前.js] %cmddir   

もしくは

/c?=%W[適当な名前.js] %cmddir %A

エロイひともっとすっきり書き直して!

指定したブラウザで検索

ブラウザに引数としてURLを渡せばおk。大抵動く。例はOperaの場合。

/g=""C:\Program Files\Opera\Opera.exe" "http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=%A""

SendMessageを送りたい

AutoHotKeyをインスタントコマンドから呼び出せばできそうです。

以下、foobar2000で再生中の曲を停止させる例。

/stop=""E:\app\AutoHotkey\MyScripts\foobarstop.ahk""

foobarstop.ahkの中身はこんな感じで。

DetectHiddenWindows, On
SendMessage, 273, 40010, 0,, ahk_class {DA7CD0DE-1602-45e6-89A1-C2CA151E008E}
DetectHiddenWindows, Off
ExitApp

インスタントコマンドを補完したい

AutoHotKeyeClipを使ってみるとか模索中だけど、himadatenodeの日記(himadatanode様)のところでやりかたが公開されている。

コマンドファイル系

  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;; コマンドファイルっていじくりにくい…
  ヾ;;;ハ    ノ       .::!lリ;;r゙
   `Z;i   〈.,_..,.      ノ;;;;;;;;>
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f    そんなふうに考えていた時期が
   ~''戈ヽ   `二´    r'´:::. `!   俺にもありました

exeファイルのヘルプを表示(2h.txt)

使用ソフト
FindHelp (Site:CSpace)
[.exe;
ヘルプを表示(&H)|[任意]\FindHelp.exe %P /LoadSetting [任意]\FindHelp.ini
]

スキャンから除外したいフォルダを指定

使用ソフト
なし
var FSO = new ActiveXObject("Scripting.FileSystemObject"); 
var ForReading = 1, ForAppending = 8, IsCreate = true ; 
var stream = null, file = "", dir =""; 
var objArgs = WScript.Arguments; 
file = "[scan.iniのパス]"; 
//(例)"C:\\hoge\\fenrir\\data\\scan.ini"
//fenrir.exeと同じ所に置くなら"data\\scan.ini"でもいいかも 
for (i = 0; i < objArgs.length; i++) 
{ 
dir = FSO.GetFolder(objArgs(i)); 
stream = FSO.OpenTextFile(file, ForAppending, IsCreate); 
stream.WriteLine("-" + dir); 
stream.Close(); 
} 
これを[適当な名前.js]で保存する。
そして、適当なコマンドファイルに、
NoScan|[適当な名前.js] %D
と登録する。
直しときました、%D指定してやれば親フォルダ取得してくれるんだったorz

wgetで指定したディレクトリにクリップボードのURLをダウンロード

wgetを使用して、クリップボード内のURLをダウンロードする。

ここにダウンロード|D:\app\wget\bin\wget.exe "--directory-prefix="%P"" "%C"

wgetはこの辺りを参考に。

その他

スキャン前に確認するAHKスクリプト

2chから。2006/02/27(月) 12:05:02
fenrir ver0.50以降でのみ有効

MsgBox, 4,確認,スキャンする?,
IfMsgBox, No
{
  ;;スキャンしない
  return
}
else
{
  ;;スキャンする
  SetFormat, integer, hex
  WM_APP = 0x8000
  DetectHiddenWindows, On
  PostMessage, WM_APP+1, 0, 0,,ahk_class fenrirMainWindow,,
  return
}

これは常駐fenrirじゃないと有効じゃないっす。どうにかしてfenrirを再起動すれば非常駐モードでも何とかなると思うけど。

2ちゃんねる


添付ファイル: filefenrir_part5.7z 59件 [詳細] filefenrir_part5.html 74件 [詳細] filefenrir_ss.png 81件 [詳細] filefenrir_part4.html 858件 [詳細] filefenrir_part4.7z 268件 [詳細] filefenrir_part3.7z 336件 [詳細] filefenrir_part3.htm 468件 [詳細] filefenrir_part2.htm 918件 [詳細] filefenrir_part2.7z 439件 [詳細] filefenrir_part1.7z 562件 [詳細] filefenrir_part1.html 1267件 [詳細]

Top   Edit Freeze Diff Backup Upload Copy Rename Reload   New List Search RecentChanges   Help   Hatena Bookmark   RSS of RecentChanges
Last-modified: 2009-10-11 (日) 19:51:12