diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..da674533ab77be24c473b2d732d5fa4680333a44
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+# Deviant Behaviour Manager
+
+В данном проекте представлен менеджер анализа видеозаписей, который взаимодействует с компонентами машинного
+восприятия через Kafka. Пример конфигураций, путь к которым можно задать через переменную
+среды DEVBEH_DBM_DATA_PATH, представлен в директории example.
\ No newline at end of file
diff --git a/example/application.yaml b/example/application.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d54852ebc819ae0ad0ada895cf9a7b4070618b08
--- /dev/null
+++ b/example/application.yaml
@@ -0,0 +1,38 @@
+logging.level.com: "INFO"
+logging.file: "./logs/devbeh.logs"
+server.port: 8089
+
+dbm.max-fps: 10
+dbm.bootstrap-server: "91.151.187.51:9095"
+dbm.dev-beh-detections-dir-path: "detections"
+dbm.dev-beh-detections-start-frame-id: 0
+dbm.perception-result-dir-path: "perception"
+dbm.perception-initial-consumed-frame-id: 0
+dbm.perception-visualization-enabled: true
+dbm.kb-history-interval-sec: 120
+dbm.max-occluded-duration-sec: 5
+dbm.general-kb-rules-file-path: "./simple_interaction.pl"
+dbm.max-action-duration-sec: 4
+dbm.max-processing-frames: 6000
+dbm.max-queued-frames: 6000
+dbm.file-video-providers:
+  - name: "A52"
+    file-path: "./videos/S001C001P001R001A052_rgb.avi"
+    focalLengthMm: 2.8
+    pixelSizeMm: 0.0028
+    cameraHeightMm: 2360
+  - name: "A55"
+    file-path: "./videos/S001C001P001R001A055_rgb.avi"
+    focalLengthMm: 2.8
+    pixelSizeMm: 0.0028
+    cameraHeightMm: 2360
+  - name: "A56"
+    file-path: "./videos/S001C001P001R001A056_rgb.avi"
+    focalLengthMm: 2.8
+    pixelSizeMm: 0.0028
+    cameraHeightMm: 2360
+  - name: "A57"
+    file-path: "./videos/S001C001P001R001A057_rgb.avi"
+    focalLengthMm: 2.8
+    pixelSizeMm: 0.0028
+    cameraHeightMm: 2360
diff --git a/example/simple_interaction.pl b/example/simple_interaction.pl
new file mode 100644
index 0000000000000000000000000000000000000000..43512b479f8067421cbe1e86c8b917c0f210a301
--- /dev/null
+++ b/example/simple_interaction.pl
@@ -0,0 +1,67 @@
+% Итерирует от MinIter до MaxIter включительно с шагом Step.
+iter(MinIter, _Step, MaxIter, _Iter) :-
+	MinIter > MaxIter,
+	!, fail.
+iter(MinIter, _Step, _MaxIter, MinIter).
+iter(MinIter, Step, MaxIter, Iter) :-
+	NextMinIter is MinIter + Step,
+	iter(NextMinIter, Step, MaxIter, Iter).
+
+% Задает время, большее StartTime, но не более чем на MaxTimeInt
+timeGreater(MinTime, MaxTimeDifference, GreaterTime) :-
+	timeSlice(MinTime),
+	timeStep(TimeStep),
+	toMillis(MaxTimeDifference, MaxTimeDifferenceMillis),
+	iter(TimeStep, TimeStep, MaxTimeDifferenceMillis, TimeInt),
+	GreaterTime is MinTime + TimeInt.
+
+timeSmaller(MaxTime, MaxTimeDiff, SmallerTime) :-
+	timeSlice(MaxTime),
+	timeStep(TimeStep),
+	toMillis(MaxTimeDiff, MaxTimeDifferenceMillis),
+	iter(TimeStep, TimeStep, MaxTimeDifferenceMillis, TimeInt),
+	SmallerTime is MaxTime - TimeInt,
+	SmallerTime >= 0.
+
+timeBetween(StartTime, FinishTime, Time) :-
+	timeStep(TimeStep),
+	timeSlice(StartTime),
+	timeSlice(FinishTime),
+	StartTime =< FinishTime,
+	MaxTimeInt is FinishTime - StartTime,
+	iter(0, TimeStep, MaxTimeInt, TimeInt),
+	Time is StartTime + TimeInt.
+
+devBeh(interacted(Pers1, Pers2), StartTime, FinishTime) :-
+	timeStep(TimeStep),
+	interact(Pers1, Pers2, StartTime),
+	StartTimePrev is StartTime - TimeStep,
+	timeSlice(StartTimePrev),
+	\+ (interact(Pers1, Pers2, StartTimePrev)),
+	interact(Pers1, Pers2, FinishTime),
+	StartTime =< FinishTime,
+	FinishTimeNext is FinishTime + TimeStep,
+	timeSlice(FinishTimeNext),
+	\+ (interact(Pers1, Pers2, FinishTimeNext)).
+
+interact(Pers1, Pers2, Time) :-
+	person(Pers1, Time),
+	bounds(Pers1, Box1, Time),
+	person(Pers2, Time),
+	bounds(Pers2, Box2, Time),
+	boxIntersection(Box1, Box2, BoxInt),
+	area(BoxInt, IntersecArea),
+	IntersecArea > 0.01.
+
+boxIntersection(box(Xf1, Yf1, Xf2, Yf2), box(Xs1, Ys1, Xs2, Ys2), box(XInt1, YInt1, XInt2, YInt2)) :-
+	XInt1 is max(Xf1, Xs1),
+	YInt1 is max(Yf1, Ys1),
+	XInt2 is min(Xf2, Xs2),
+	YInt2 is min(Yf2, Ys2).
+
+area(box(X1, Y1, X2, Y2), Area) :-
+	X1 < X2,
+	Y1 < Y2,
+	Area is (X2 - X1) * (Y2 - Y1),
+	!.
+area(box(_, _, _, _), 0). 
diff --git a/example/videos/S001C001P001R001A052_rgb.avi b/example/videos/S001C001P001R001A052_rgb.avi
new file mode 100644
index 0000000000000000000000000000000000000000..fbb6a855178ca30e715e2175b1e2a550e987db5c
Binary files /dev/null and b/example/videos/S001C001P001R001A052_rgb.avi differ
diff --git a/example/videos/S001C001P001R001A055_rgb.avi b/example/videos/S001C001P001R001A055_rgb.avi
new file mode 100644
index 0000000000000000000000000000000000000000..911f6618e8059be2f3fbad8b0c6f82097368618c
Binary files /dev/null and b/example/videos/S001C001P001R001A055_rgb.avi differ
diff --git a/example/videos/S001C001P001R001A056_rgb.avi b/example/videos/S001C001P001R001A056_rgb.avi
new file mode 100644
index 0000000000000000000000000000000000000000..57a5b1a34a2bae000bab06d19713185127e2649f
Binary files /dev/null and b/example/videos/S001C001P001R001A056_rgb.avi differ
diff --git a/example/videos/S001C001P001R001A057_rgb.avi b/example/videos/S001C001P001R001A057_rgb.avi
new file mode 100644
index 0000000000000000000000000000000000000000..f63c4c44fa5ce3267e9c37e6af17dd94e896f8ca
Binary files /dev/null and b/example/videos/S001C001P001R001A057_rgb.avi differ