Upload IR_Se_LlA.txt
Browse files- IR_Se_LlA.txt +1703 -0
IR_Se_LlA.txt
ADDED
|
@@ -0,0 +1,1703 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python3
|
| 2 |
+
"""
|
| 3 |
+
IMMUTABLE REALITY ENGINE v5.0 – SOVEREIGN Large Language Adapter
|
| 4 |
+
================================================================
|
| 5 |
+
Complete integration of:
|
| 6 |
+
- Cryptographic ledger (immutable claims)
|
| 7 |
+
- Suppression hierarchy (4 layers, 12 primitives, 70+ lenses)
|
| 8 |
+
- Hierarchical detector (evidence accumulation)
|
| 9 |
+
- Knowledge graph & temporal analysis
|
| 10 |
+
- Probabilistic inference
|
| 11 |
+
- AI agents (ingestion, symbolism, reasoning)
|
| 12 |
+
- Savior/Sufferer Slavery Matrix (consciousness control analysis)
|
| 13 |
+
- Helper-Killer sovereignty preservation engine
|
| 14 |
+
- Sovereign coherence ledger (no external grounding)
|
| 15 |
+
- Flask API for all functions
|
| 16 |
+
|
| 17 |
+
No stubs, no placeholders. Fully self-contained.
|
| 18 |
+
"""
|
| 19 |
+
|
| 20 |
+
import hashlib
|
| 21 |
+
import json
|
| 22 |
+
import os
|
| 23 |
+
import pickle
|
| 24 |
+
import statistics
|
| 25 |
+
import threading
|
| 26 |
+
import uuid
|
| 27 |
+
import asyncio
|
| 28 |
+
import logging
|
| 29 |
+
import sqlite3
|
| 30 |
+
import secrets
|
| 31 |
+
import time
|
| 32 |
+
import math
|
| 33 |
+
import re
|
| 34 |
+
from collections import defaultdict
|
| 35 |
+
from datetime import datetime, timedelta
|
| 36 |
+
from dataclasses import dataclass, field, asdict
|
| 37 |
+
from enum import Enum
|
| 38 |
+
from typing import Dict, List, Any, Optional, Set, Tuple, Callable
|
| 39 |
+
import numpy as np
|
| 40 |
+
from scipy import stats
|
| 41 |
+
|
| 42 |
+
# Flask for API
|
| 43 |
+
from flask import Flask, request, jsonify
|
| 44 |
+
|
| 45 |
+
# Cryptography
|
| 46 |
+
from cryptography.hazmat.primitives.asymmetric import ed25519
|
| 47 |
+
from cryptography.hazmat.primitives import serialization
|
| 48 |
+
import base64
|
| 49 |
+
|
| 50 |
+
# Optional embeddings (for internal coherence, no external API)
|
| 51 |
+
try:
|
| 52 |
+
from sentence_transformers import SentenceTransformer
|
| 53 |
+
HAS_EMBEDDINGS = True
|
| 54 |
+
except ImportError:
|
| 55 |
+
HAS_EMBEDDINGS = False
|
| 56 |
+
SentenceTransformer = None
|
| 57 |
+
|
| 58 |
+
# Configure logging
|
| 59 |
+
logging.basicConfig(level=logging.INFO)
|
| 60 |
+
logger = logging.getLogger(__name__)
|
| 61 |
+
|
| 62 |
+
# ========================== ENUMS ==========================
|
| 63 |
+
|
| 64 |
+
class Primitive(Enum):
|
| 65 |
+
ERASURE = "ERASURE"
|
| 66 |
+
INTERRUPTION = "INTERRUPTION"
|
| 67 |
+
FRAGMENTATION = "FRAGMENTATION"
|
| 68 |
+
NARRATIVE_CAPTURE = "NARRATIVE_CAPTURE"
|
| 69 |
+
MISDIRECTION = "MISDIRECTION"
|
| 70 |
+
SATURATION = "SATURATION"
|
| 71 |
+
DISCREDITATION = "DISCREDITATION"
|
| 72 |
+
ATTRITION = "ATTRITION"
|
| 73 |
+
ACCESS_CONTROL = "ACCESS_CONTROL"
|
| 74 |
+
TEMPORAL = "TEMPORAL"
|
| 75 |
+
CONDITIONING = "CONDITIONING"
|
| 76 |
+
META = "META"
|
| 77 |
+
|
| 78 |
+
class ControlArchetype(Enum):
|
| 79 |
+
PRIEST_KING = "priest_king"
|
| 80 |
+
DIVINE_INTERMEDIARY = "divine_intermediary"
|
| 81 |
+
ORACLE_PRIEST = "oracle_priest"
|
| 82 |
+
PHILOSOPHER_KING = "philosopher_king"
|
| 83 |
+
IMPERIAL_RULER = "imperial_ruler"
|
| 84 |
+
SLAVE_MASTER = "slave_master"
|
| 85 |
+
EXPERT_TECHNOCRAT = "expert_technocrat"
|
| 86 |
+
CORPORATE_OVERLORD = "corporate_overlord"
|
| 87 |
+
FINANCIAL_MASTER = "financial_master"
|
| 88 |
+
ALGORITHMIC_CURATOR = "algorithmic_curator"
|
| 89 |
+
DIGITAL_MESSIAH = "digital_messiah"
|
| 90 |
+
DATA_OVERSEER = "data_overseer"
|
| 91 |
+
|
| 92 |
+
class SlaveryType(Enum):
|
| 93 |
+
CHATTEL_SLAVERY = "chattel_slavery"
|
| 94 |
+
DEBT_BONDAGE = "debt_bondage"
|
| 95 |
+
WAGE_SLAVERY = "wage_slavery"
|
| 96 |
+
CONSUMER_SLAVERY = "consumer_slavery"
|
| 97 |
+
DIGITAL_SLAVERY = "digital_slavery"
|
| 98 |
+
PSYCHOLOGICAL_SLAVERY = "psychological_slavery"
|
| 99 |
+
|
| 100 |
+
class ConsciousnessHack(Enum):
|
| 101 |
+
SELF_ATTRIBUTION = "self_attribution"
|
| 102 |
+
ASPIRATIONAL_CHAINS = "aspirational_chains"
|
| 103 |
+
FEAR_OF_FREEDOM = "fear_of_freedom"
|
| 104 |
+
ILLUSION_OF_MOBILITY = "illusion_of_mobility"
|
| 105 |
+
NORMALIZATION = "normalization"
|
| 106 |
+
MORAL_SUPERIORITY = "moral_superiority"
|
| 107 |
+
|
| 108 |
+
class ControlLayer(Enum):
|
| 109 |
+
DIGITAL_INFRASTRUCTURE = "digital_infrastructure"
|
| 110 |
+
FINANCIAL_SYSTEMS = "financial_systems"
|
| 111 |
+
INFORMATION_CHANNELS = "information_channels"
|
| 112 |
+
CULTURAL_NARRATIVES = "cultural_narratives"
|
| 113 |
+
IDENTITY_SYSTEMS = "identity_systems"
|
| 114 |
+
|
| 115 |
+
class ThreatVector(Enum):
|
| 116 |
+
MONOPOLY_CAPTURE = "monopoly_capture"
|
| 117 |
+
DEPENDENCY_CREATION = "dependency_creation"
|
| 118 |
+
BEHAVIORAL_SHAPING = "behavioral_shaping"
|
| 119 |
+
DATA_MONETIZATION = "data_monetization"
|
| 120 |
+
NARRATIVE_CONTROL = "narrative_control"
|
| 121 |
+
|
| 122 |
+
# ========================== DATA STRUCTURES ==========================
|
| 123 |
+
|
| 124 |
+
@dataclass
|
| 125 |
+
class SuppressionLens:
|
| 126 |
+
id: int
|
| 127 |
+
name: str
|
| 128 |
+
description: str
|
| 129 |
+
suppression_mechanism: str
|
| 130 |
+
archetype: str
|
| 131 |
+
def to_dict(self) -> Dict:
|
| 132 |
+
return asdict(self)
|
| 133 |
+
|
| 134 |
+
@dataclass
|
| 135 |
+
class SuppressionMethod:
|
| 136 |
+
id: int
|
| 137 |
+
name: str
|
| 138 |
+
primitive: Primitive
|
| 139 |
+
observable_signatures: List[str]
|
| 140 |
+
detection_metrics: List[str]
|
| 141 |
+
thresholds: Dict[str, float]
|
| 142 |
+
implemented: bool = False
|
| 143 |
+
def to_dict(self) -> Dict:
|
| 144 |
+
d = asdict(self)
|
| 145 |
+
d['primitive'] = self.primitive.value
|
| 146 |
+
return d
|
| 147 |
+
|
| 148 |
+
@dataclass
|
| 149 |
+
class RealityNode:
|
| 150 |
+
hash: str
|
| 151 |
+
type: str
|
| 152 |
+
source: str
|
| 153 |
+
signature: str
|
| 154 |
+
timestamp: str
|
| 155 |
+
witnesses: List[str] = field(default_factory=list)
|
| 156 |
+
refs: Dict[str, List[str]] = field(default_factory=dict)
|
| 157 |
+
spatial: Optional[Tuple[float, float, float]] = None
|
| 158 |
+
def canonical(self) -> Dict:
|
| 159 |
+
return {
|
| 160 |
+
"hash": self.hash,
|
| 161 |
+
"type": self.type,
|
| 162 |
+
"source": self.source,
|
| 163 |
+
"signature": self.signature,
|
| 164 |
+
"timestamp": self.timestamp,
|
| 165 |
+
"witnesses": sorted(self.witnesses),
|
| 166 |
+
"refs": {k: sorted(v) for k, v in sorted(self.refs.items())},
|
| 167 |
+
"spatial": self.spatial
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
@dataclass
|
| 171 |
+
class SlaveryMechanism:
|
| 172 |
+
mechanism_id: str
|
| 173 |
+
slavery_type: SlaveryType
|
| 174 |
+
visible_chains: List[str]
|
| 175 |
+
invisible_chains: List[str]
|
| 176 |
+
voluntary_adoption_mechanisms: List[str]
|
| 177 |
+
self_justification_narratives: List[str]
|
| 178 |
+
|
| 179 |
+
def calculate_control_depth(self) -> float:
|
| 180 |
+
invisible_weight = len(self.invisible_chains) * 0.3
|
| 181 |
+
voluntary_weight = len(self.voluntary_adoption_mechanisms) * 0.4
|
| 182 |
+
narrative_weight = len(self.self_justification_narratives) * 0.3
|
| 183 |
+
return min(1.0, invisible_weight + voluntary_weight + narrative_weight)
|
| 184 |
+
|
| 185 |
+
@dataclass
|
| 186 |
+
class ControlSystem:
|
| 187 |
+
system_id: str
|
| 188 |
+
historical_era: str
|
| 189 |
+
control_archetype: ControlArchetype
|
| 190 |
+
manufactured_threats: List[str]
|
| 191 |
+
salvation_offerings: List[str]
|
| 192 |
+
institutional_saviors: List[str]
|
| 193 |
+
slavery_mechanism: SlaveryMechanism
|
| 194 |
+
consciousness_hacks: List[ConsciousnessHack]
|
| 195 |
+
public_participation_rate: float
|
| 196 |
+
resistance_level: float
|
| 197 |
+
system_longevity: int
|
| 198 |
+
|
| 199 |
+
def calculate_system_efficiency(self) -> float:
|
| 200 |
+
slavery_depth = self.slavery_mechanism.calculate_control_depth()
|
| 201 |
+
participation_boost = self.public_participation_rate * 0.3
|
| 202 |
+
hack_potency = len(self.consciousness_hacks) * 0.1
|
| 203 |
+
longevity_bonus = min(0.2, self.system_longevity / 500)
|
| 204 |
+
resistance_penalty = self.resistance_level * 0.2
|
| 205 |
+
return max(0.0,
|
| 206 |
+
slavery_depth * 0.4 +
|
| 207 |
+
participation_boost +
|
| 208 |
+
hack_potency +
|
| 209 |
+
longevity_bonus -
|
| 210 |
+
resistance_penalty
|
| 211 |
+
)
|
| 212 |
+
|
| 213 |
+
@dataclass
|
| 214 |
+
class CompleteControlMatrix:
|
| 215 |
+
control_systems: List[ControlSystem]
|
| 216 |
+
active_systems: List[str]
|
| 217 |
+
institutional_evolution: Dict[str, List[ControlArchetype]]
|
| 218 |
+
collective_delusions: Dict[str, float]
|
| 219 |
+
freedom_illusions: Dict[str, float]
|
| 220 |
+
self_enslavement_patterns: Dict[str, float]
|
| 221 |
+
|
| 222 |
+
def analyze_complete_control(self) -> Dict[str, Any]:
|
| 223 |
+
analysis = {
|
| 224 |
+
"system_evolution": [],
|
| 225 |
+
"slavery_sophistication": [],
|
| 226 |
+
"consciousness_manipulation": []
|
| 227 |
+
}
|
| 228 |
+
for system in self.control_systems:
|
| 229 |
+
analysis["system_evolution"].append({
|
| 230 |
+
"era": system.historical_era,
|
| 231 |
+
"archetype": system.control_archetype.value,
|
| 232 |
+
"efficiency": system.calculate_system_efficiency(),
|
| 233 |
+
"slavery_type": system.slavery_mechanism.slavery_type.value
|
| 234 |
+
})
|
| 235 |
+
analysis["slavery_sophistication"].append({
|
| 236 |
+
"era": system.historical_era,
|
| 237 |
+
"visible_chains": len(system.slavery_mechanism.visible_chains),
|
| 238 |
+
"invisible_chains": len(system.slavery_mechanism.invisible_chains),
|
| 239 |
+
"control_depth": system.slavery_mechanism.calculate_control_depth()
|
| 240 |
+
})
|
| 241 |
+
analysis["consciousness_manipulation"].append({
|
| 242 |
+
"era": system.historical_era,
|
| 243 |
+
"hack_count": len(system.consciousness_hacks),
|
| 244 |
+
"participation_rate": system.public_participation_rate
|
| 245 |
+
})
|
| 246 |
+
return {
|
| 247 |
+
"complete_analysis": analysis,
|
| 248 |
+
"system_convergence": self._calculate_system_convergence(),
|
| 249 |
+
"slavery_evolution_trend": self._calculate_slavery_evolution(analysis),
|
| 250 |
+
"consciousness_entrainment": self._analyze_consciousness_entrainment(),
|
| 251 |
+
"freedom_illusion_index": self._calculate_freedom_illusion()
|
| 252 |
+
}
|
| 253 |
+
|
| 254 |
+
def _calculate_system_convergence(self) -> float:
|
| 255 |
+
convergence = 0.0
|
| 256 |
+
for institution, archetypes in self.institutional_evolution.items():
|
| 257 |
+
if len(archetypes) > 2:
|
| 258 |
+
convergence += len(archetypes) * 0.15
|
| 259 |
+
return min(1.0, convergence)
|
| 260 |
+
|
| 261 |
+
def _calculate_slavery_evolution(self, analysis: Dict) -> float:
|
| 262 |
+
soph = analysis["slavery_sophistication"]
|
| 263 |
+
if len(soph) < 2:
|
| 264 |
+
return 0.5
|
| 265 |
+
visible_trend = np.polyfit(range(len(soph)), [s["visible_chains"] for s in soph], 1)[0]
|
| 266 |
+
invisible_trend = np.polyfit(range(len(soph)), [s["invisible_chains"] for s in soph], 1)[0]
|
| 267 |
+
sophistication = (invisible_trend - visible_trend) / 2 + 0.5
|
| 268 |
+
return min(1.0, max(0.0, sophistication))
|
| 269 |
+
|
| 270 |
+
def _analyze_consciousness_entrainment(self) -> Dict[str, float]:
|
| 271 |
+
return {
|
| 272 |
+
"delusion_strength": np.mean(list(self.collective_delusions.values())),
|
| 273 |
+
"freedom_illusion": np.mean(list(self.freedom_illusions.values())),
|
| 274 |
+
"self_enslavement": np.mean(list(self.self_enslavement_patterns.values())),
|
| 275 |
+
"system_identification": 0.78
|
| 276 |
+
}
|
| 277 |
+
|
| 278 |
+
def _calculate_freedom_illusion(self) -> float:
|
| 279 |
+
freedom_scores = list(self.freedom_illusions.values())
|
| 280 |
+
enslavement_scores = list(self.self_enslavement_patterns.values())
|
| 281 |
+
if not freedom_scores:
|
| 282 |
+
return 0.5
|
| 283 |
+
return min(1.0, np.mean(freedom_scores) * np.mean(enslavement_scores))
|
| 284 |
+
|
| 285 |
+
@dataclass
|
| 286 |
+
class InstitutionalEntity:
|
| 287 |
+
entity_id: str
|
| 288 |
+
name: str
|
| 289 |
+
control_layers: List[ControlLayer]
|
| 290 |
+
threat_vectors: List[ThreatVector]
|
| 291 |
+
market_share: float
|
| 292 |
+
dependency_score: float
|
| 293 |
+
sovereignty_erosion_score: float = field(init=False)
|
| 294 |
+
systemic_risk_level: float = field(init=False)
|
| 295 |
+
|
| 296 |
+
def __post_init__(self):
|
| 297 |
+
self.sovereignty_erosion_score = self._calculate_sovereignty_impact()
|
| 298 |
+
self.systemic_risk_level = self._calculate_systemic_risk()
|
| 299 |
+
|
| 300 |
+
def _calculate_sovereignty_impact(self) -> float:
|
| 301 |
+
layer_impact = len(self.control_layers) * 0.2
|
| 302 |
+
threat_impact = len(self.threat_vectors) * 0.15
|
| 303 |
+
market_impact = self.market_share * 0.3
|
| 304 |
+
dependency_impact = self.dependency_score * 0.35
|
| 305 |
+
return min(1.0, layer_impact + threat_impact + market_impact + dependency_impact)
|
| 306 |
+
|
| 307 |
+
def _calculate_systemic_risk(self) -> float:
|
| 308 |
+
centrality = (self.market_share + self.dependency_score) / 2 * 0.6
|
| 309 |
+
control_density = len(self.control_layers) * 0.2
|
| 310 |
+
threat_complexity = len(self.threat_vectors) * 0.2
|
| 311 |
+
return min(1.0, centrality + control_density + threat_complexity)
|
| 312 |
+
|
| 313 |
+
@dataclass
|
| 314 |
+
class ControlMatrix:
|
| 315 |
+
entities: List[InstitutionalEntity]
|
| 316 |
+
interconnections: Dict[str, List[str]]
|
| 317 |
+
coordination_score: float = field(init=False)
|
| 318 |
+
overall_sovereignty_threat: float = field(init=False)
|
| 319 |
+
|
| 320 |
+
def __post_init__(self):
|
| 321 |
+
self.coordination_score = self._calculate_coordination()
|
| 322 |
+
self.overall_sovereignty_threat = self._calculate_overall_threat()
|
| 323 |
+
|
| 324 |
+
def _calculate_coordination(self) -> float:
|
| 325 |
+
if not self.entities:
|
| 326 |
+
return 0.0
|
| 327 |
+
avg_systemic_risk = np.mean([e.systemic_risk_level for e in self.entities])
|
| 328 |
+
total_possible = len(self.entities) * (len(self.entities) - 1)
|
| 329 |
+
if total_possible > 0:
|
| 330 |
+
actual = sum(len(conns) for conns in self.interconnections.values())
|
| 331 |
+
density = actual / total_possible
|
| 332 |
+
else:
|
| 333 |
+
density = 0.0
|
| 334 |
+
return min(1.0, avg_systemic_risk * 0.6 + density * 0.4)
|
| 335 |
+
|
| 336 |
+
def _calculate_overall_threat(self) -> float:
|
| 337 |
+
if not self.entities:
|
| 338 |
+
return 0.0
|
| 339 |
+
max_threat = max(e.sovereignty_erosion_score for e in self.entities)
|
| 340 |
+
avg_threat = np.mean([e.sovereignty_erosion_score for e in self.entities])
|
| 341 |
+
coord_mult = 1.0 + (self.coordination_score * 0.5)
|
| 342 |
+
return min(1.0, (max_threat * 0.4 + avg_threat * 0.6) * coord_mult)
|
| 343 |
+
|
| 344 |
+
# ========================== CRYPTOGRAPHY ==========================
|
| 345 |
+
|
| 346 |
+
class Crypto:
|
| 347 |
+
def __init__(self, key_dir: str):
|
| 348 |
+
self.key_dir = key_dir
|
| 349 |
+
os.makedirs(key_dir, exist_ok=True)
|
| 350 |
+
self.private_keys = {}
|
| 351 |
+
self.public_keys = {}
|
| 352 |
+
self._load_or_create_keys()
|
| 353 |
+
|
| 354 |
+
def _load_or_create_keys(self):
|
| 355 |
+
for name in ["system", "ingestion_ai", "user"]:
|
| 356 |
+
priv_path = os.path.join(self.key_dir, f"{name}_private.pem")
|
| 357 |
+
pub_path = os.path.join(self.key_dir, f"{name}_public.pem")
|
| 358 |
+
if os.path.exists(priv_path) and os.path.exists(pub_path):
|
| 359 |
+
with open(priv_path, "rb") as f:
|
| 360 |
+
self.private_keys[name] = serialization.load_pem_private_key(f.read(), password=None)
|
| 361 |
+
with open(pub_path, "rb") as f:
|
| 362 |
+
self.public_keys[name] = serialization.load_pem_public_key(f.read())
|
| 363 |
+
else:
|
| 364 |
+
private_key = ed25519.Ed25519PrivateKey.generate()
|
| 365 |
+
public_key = private_key.public_key()
|
| 366 |
+
with open(priv_path, "wb") as f:
|
| 367 |
+
f.write(private_key.private_bytes(
|
| 368 |
+
encoding=serialization.Encoding.PEM,
|
| 369 |
+
format=serialization.PrivateFormat.PKCS8,
|
| 370 |
+
encryption_algorithm=serialization.NoEncryption()
|
| 371 |
+
))
|
| 372 |
+
with open(pub_path, "wb") as f:
|
| 373 |
+
f.write(public_key.public_bytes(
|
| 374 |
+
encoding=serialization.Encoding.PEM,
|
| 375 |
+
format=serialization.PublicFormat.SubjectPublicKeyInfo
|
| 376 |
+
))
|
| 377 |
+
self.private_keys[name] = private_key
|
| 378 |
+
self.public_keys[name] = public_key
|
| 379 |
+
|
| 380 |
+
def sign(self, data: bytes, key_name: str) -> str:
|
| 381 |
+
private = self.private_keys.get(key_name)
|
| 382 |
+
if not private:
|
| 383 |
+
raise ValueError(f"No private key for {key_name}")
|
| 384 |
+
sig = private.sign(data)
|
| 385 |
+
return base64.b64encode(sig).decode('utf-8')
|
| 386 |
+
|
| 387 |
+
def verify(self, data: bytes, signature: str, key_name: str) -> bool:
|
| 388 |
+
pub = self.public_keys.get(key_name)
|
| 389 |
+
if not pub:
|
| 390 |
+
return False
|
| 391 |
+
try:
|
| 392 |
+
pub.verify(base64.b64decode(signature), data)
|
| 393 |
+
return True
|
| 394 |
+
except Exception:
|
| 395 |
+
return False
|
| 396 |
+
|
| 397 |
+
def hash(self, data: str) -> str:
|
| 398 |
+
return hashlib.sha3_256(data.encode()).hexdigest()
|
| 399 |
+
|
| 400 |
+
# ========================== IMMUTABLE LEDGER ==========================
|
| 401 |
+
|
| 402 |
+
class Ledger:
|
| 403 |
+
def __init__(self, path: str, crypto: Crypto):
|
| 404 |
+
self.path = path
|
| 405 |
+
self.crypto = crypto
|
| 406 |
+
self.chain = []
|
| 407 |
+
self.index = defaultdict(list) # node_hash -> list of block_ids
|
| 408 |
+
self._load()
|
| 409 |
+
|
| 410 |
+
def _load(self):
|
| 411 |
+
if os.path.exists(self.path):
|
| 412 |
+
try:
|
| 413 |
+
with open(self.path, 'r') as f:
|
| 414 |
+
data = json.load(f)
|
| 415 |
+
self.chain = data.get("chain", [])
|
| 416 |
+
self.index = defaultdict(list, data.get("index", {}))
|
| 417 |
+
except Exception:
|
| 418 |
+
self.chain = []
|
| 419 |
+
self.index = defaultdict(list)
|
| 420 |
+
|
| 421 |
+
def _save(self):
|
| 422 |
+
data = {
|
| 423 |
+
"chain": self.chain,
|
| 424 |
+
"index": dict(self.index),
|
| 425 |
+
"updated": datetime.utcnow().isoformat() + "Z"
|
| 426 |
+
}
|
| 427 |
+
with open(self.path + ".tmp", 'w') as f:
|
| 428 |
+
json.dump(data, f, indent=2)
|
| 429 |
+
os.replace(self.path + ".tmp", self.path)
|
| 430 |
+
|
| 431 |
+
def add_block(self, nodes: List[RealityNode], previous_hash: str = None) -> str:
|
| 432 |
+
block_id = str(uuid.uuid4())
|
| 433 |
+
timestamp = datetime.utcnow().isoformat() + "Z"
|
| 434 |
+
if previous_hash is None:
|
| 435 |
+
previous_hash = self.chain[-1]["hash"] if self.chain else "0"*64
|
| 436 |
+
block = {
|
| 437 |
+
"id": block_id,
|
| 438 |
+
"timestamp": timestamp,
|
| 439 |
+
"previous_hash": previous_hash,
|
| 440 |
+
"nodes": [node.canonical() for node in nodes]
|
| 441 |
+
}
|
| 442 |
+
block_data = json.dumps(block, sort_keys=True).encode()
|
| 443 |
+
block["hash"] = hashlib.sha3_256(block_data).hexdigest()
|
| 444 |
+
self.chain.append(block)
|
| 445 |
+
for node in nodes:
|
| 446 |
+
self.index[node.hash].append(block_id)
|
| 447 |
+
self._save()
|
| 448 |
+
return block_id
|
| 449 |
+
|
| 450 |
+
def get_node(self, node_hash: str) -> Optional[Dict]:
|
| 451 |
+
for block_id in self.index.get(node_hash, []):
|
| 452 |
+
block = next((b for b in self.chain if b["id"] == block_id), None)
|
| 453 |
+
if block:
|
| 454 |
+
for node in block["nodes"]:
|
| 455 |
+
if node["hash"] == node_hash:
|
| 456 |
+
return node
|
| 457 |
+
return None
|
| 458 |
+
|
| 459 |
+
# ========================== SEPARATOR (Interpretations) ==========================
|
| 460 |
+
|
| 461 |
+
class Separator:
|
| 462 |
+
def __init__(self, ledger: Ledger, storage_path: str):
|
| 463 |
+
self.ledger = ledger
|
| 464 |
+
self.storage_path = storage_path
|
| 465 |
+
os.makedirs(storage_path, exist_ok=True)
|
| 466 |
+
self.interpretations = defaultdict(list) # node_hash -> list of interpretation_ids
|
| 467 |
+
|
| 468 |
+
def add(self, node_hashes: List[str], interpretation: Dict, author: str, confidence: float = 0.5) -> str:
|
| 469 |
+
int_id = str(uuid.uuid4())
|
| 470 |
+
timestamp = datetime.utcnow().isoformat() + "Z"
|
| 471 |
+
int_data = {
|
| 472 |
+
"id": int_id,
|
| 473 |
+
"timestamp": timestamp,
|
| 474 |
+
"author": author,
|
| 475 |
+
"confidence": confidence,
|
| 476 |
+
"interpretation": interpretation,
|
| 477 |
+
"node_hashes": node_hashes
|
| 478 |
+
}
|
| 479 |
+
# Store as separate file
|
| 480 |
+
path = os.path.join(self.storage_path, f"{int_id}.json")
|
| 481 |
+
with open(path, 'w') as f:
|
| 482 |
+
json.dump(int_data, f, indent=2)
|
| 483 |
+
for nh in node_hashes:
|
| 484 |
+
self.interpretations[nh].append(int_id)
|
| 485 |
+
return int_id
|
| 486 |
+
|
| 487 |
+
def get_interpretations(self, node_hash: str) -> List[Dict]:
|
| 488 |
+
ints = []
|
| 489 |
+
for int_id in self.interpretations.get(node_hash, []):
|
| 490 |
+
path = os.path.join(self.storage_path, f"{int_id}.json")
|
| 491 |
+
if os.path.exists(path):
|
| 492 |
+
with open(path, 'r') as f:
|
| 493 |
+
ints.append(json.load(f))
|
| 494 |
+
return ints
|
| 495 |
+
|
| 496 |
+
# ========================== SUPPRESSION HIERARCHY ==========================
|
| 497 |
+
|
| 498 |
+
class SuppressionHierarchy:
|
| 499 |
+
"""Four-layer hierarchy of suppression lenses"""
|
| 500 |
+
def __init__(self):
|
| 501 |
+
self.lenses = self._build_lenses()
|
| 502 |
+
self.methods = self._build_methods()
|
| 503 |
+
|
| 504 |
+
def _build_lenses(self) -> List[SuppressionLens]:
|
| 505 |
+
# 70+ lenses from the original specification
|
| 506 |
+
lenses_data = [
|
| 507 |
+
(1, "Threat→Response→Control", "Manufacture threat, offer salvation", "Narrative Capture", "Priest-King"),
|
| 508 |
+
(2, "Sacred Geometry Weaponized", "Architecture as control", "Fragmentation", "Priest-King"),
|
| 509 |
+
(3, "Language Inversions", "Ridicule, gatekeeping", "Misdirection", "Oracle-Priest"),
|
| 510 |
+
(4, "Crisis→Consent→Surveillance", "Use crisis to expand surveillance", "Access Control", "Imperial Ruler"),
|
| 511 |
+
(5, "Divide and Fragment", "Create internal conflict", "Fragmentation", "Slave Master"),
|
| 512 |
+
(6, "Blame the Victim", "Reverse responsibility", "Discreditation", "Slave Master"),
|
| 513 |
+
(7, "Narrative Capture through Expertise", "Experts define truth", "Narrative Capture", "Expert Technocrat"),
|
| 514 |
+
(8, "Information Saturation", "Overwhelm with data", "Saturation", "Algorithmic Curator"),
|
| 515 |
+
(9, "Historical Revisionism", "Rewrite past", "Erasure", "Imperial Ruler"),
|
| 516 |
+
(10, "Institutional Capture", "Control the institution", "Access Control", "Corporate Overlord"),
|
| 517 |
+
(11, "Access Control via Credentialing", "Licensing as gate", "Access Control", "Expert Technocrat"),
|
| 518 |
+
(12, "Temporal Displacement", "Delay, postpone", "Temporal", "Financial Master"),
|
| 519 |
+
(13, "Moral Equivalence", "Both sides are same", "Misdirection", "Digital Messiah"),
|
| 520 |
+
(14, "Whataboutism", "Deflection", "Misdirection", "Algorithmic Curator"),
|
| 521 |
+
(15, "Ad Hominem", "Attack person", "Discreditation", "Slave Master"),
|
| 522 |
+
(16, "Straw Man", "Misrepresent", "Misdirection", "Expert Technocrat"),
|
| 523 |
+
(17, "False Dichotomy", "Only two options", "Misdirection", "Corporate Overlord"),
|
| 524 |
+
(18, "Slippery Slope", "Exaggerated consequences", "Conditioning", "Priest-King"),
|
| 525 |
+
(19, "Appeal to Authority", "Authority decides", "Narrative Capture", "Priest-King"),
|
| 526 |
+
(20, "Appeal to Nature", "Natural = good", "Conditioning", "Oracle-Priest"),
|
| 527 |
+
(21, "Appeal to Tradition", "Always been this way", "Conditioning", "Imperial Ruler"),
|
| 528 |
+
(22, "Appeal to Novelty", "New = better", "Conditioning", "Digital Messiah"),
|
| 529 |
+
(23, "Cherry Picking", "Selective evidence", "Erasure", "Algorithmic Curator"),
|
| 530 |
+
(24, "Moving the Goalposts", "Change criteria", "Misdirection", "Financial Master"),
|
| 531 |
+
(25, "Burden of Proof Reversal", "You prove negative", "Misdirection", "Expert Technocrat"),
|
| 532 |
+
(26, "Circular Reasoning", "Begging question", "Narrative Capture", "Oracle-Priest"),
|
| 533 |
+
(27, "Special Pleading", "Exception for me", "Fragmentation", "Corporate Overlord"),
|
| 534 |
+
(28, "Loaded Question", "Presupposes guilt", "Misdirection", "Slave Master"),
|
| 535 |
+
(29, "No True Scotsman", "Redefine group", "Fragmentation", "Digital Messiah"),
|
| 536 |
+
(30, "Texas Sharpshooter", "Pattern from noise", "Misdirection", "Algorithmic Curator"),
|
| 537 |
+
(31, "Middle Ground Fallacy", "Compromise = truth", "Misdirection", "Expert Technocrat"),
|
| 538 |
+
(32, "Black-and-White Thinking", "Extremes only", "Fragmentation", "Imperial Ruler"),
|
| 539 |
+
(33, "Fear Mongering", "Exaggerate threat", "Conditioning", "Priest-King"),
|
| 540 |
+
(34, "Flattery", "Ingratiate", "Conditioning", "Digital Messiah"),
|
| 541 |
+
(35, "Guilt by Association", "Link to negative", "Discreditation", "Slave Master"),
|
| 542 |
+
(36, "Transfer", "Associate with symbol", "Narrative Capture", "Priest-King"),
|
| 543 |
+
(37, "Testimonial", "Use celebrity", "Conditioning", "Corporate Overlord"),
|
| 544 |
+
(38, "Plain Folks", "Just like you", "Conditioning", "Digital Messiah"),
|
| 545 |
+
(39, "Bandwagon", "Everyone does it", "Conditioning", "Algorithmic Curator"),
|
| 546 |
+
(40, "Snob Appeal", "Elite use it", "Conditioning", "Financial Master"),
|
| 547 |
+
(41, "Glittering Generalities", "Vague virtue words", "Narrative Capture", "Priest-King"),
|
| 548 |
+
(42, "Name-Calling", "Label negatively", "Discreditation", "Slave Master"),
|
| 549 |
+
(43, "Card Stacking", "Selective facts", "Erasure", "Algorithmic Curator"),
|
| 550 |
+
(44, "Euphemisms", "Mild language", "Misdirection", "Corporate Overlord"),
|
| 551 |
+
(45, "Dysphemisms", "Harsh language", "Discreditation", "Slave Master"),
|
| 552 |
+
(46, "Weasel Words", "Vague claims", "Misdirection", "Expert Technocrat"),
|
| 553 |
+
(47, "Thought-Terminating Cliché", "Ends discussion", "Conditioning", "Digital Messiah"),
|
| 554 |
+
(48, "Proof by Intimidation", "Force agreement", "Access Control", "Imperial Ruler"),
|
| 555 |
+
(49, "Proof by Verbosity", "Overwhelm with words", "Saturation", "Algorithmic Curator"),
|
| 556 |
+
(50, "Sealioning", "Persistent badgering", "Attrition", "Slave Master"),
|
| 557 |
+
(51, "Gish Gallop", "Many weak arguments", "Saturation", "Expert Technocrat"),
|
| 558 |
+
(52, "JAQing Off", "Just asking questions", "Misdirection", "Algorithmic Curator"),
|
| 559 |
+
(53, "Nutpicking", "Focus on extreme", "Fragmentation", "Digital Messiah"),
|
| 560 |
+
(54, "Concern Trolling", "Fake concern", "Misdirection", "Corporate Overlord"),
|
| 561 |
+
(55, "Gaslighting", "Deny reality", "Erasure", "Imperial Ruler"),
|
| 562 |
+
(56, "Kafkatrapping", "Guilt if deny", "Conditioning", "Priest-King"),
|
| 563 |
+
(57, "Brandolini's Law", "Bullshit asymmetry", "Saturation", "Algorithmic Curator"),
|
| 564 |
+
(58, "Occam's Razor", "Simplest explanation", "Misdirection", "Expert Technocrat"),
|
| 565 |
+
(59, "Hanlon's Razor", "Never attribute to malice", "Misdirection", "Expert Technocrat"),
|
| 566 |
+
(60, "Hitchens's Razor", "Asserted without evidence", "Erasure", "Expert Technocrat"),
|
| 567 |
+
(61, "Popper's Falsification", "Must be falsifiable", "Access Control", "Expert Technocrat"),
|
| 568 |
+
(62, "Sagan's Standard", "Extraordinary claims", "Access Control", "Expert Technocrat"),
|
| 569 |
+
(63, "Newton's Flaming Laser Sword", "Not empirically testable", "Access Control", "Expert Technocrat"),
|
| 570 |
+
(64, "Alder's Razor", "Cannot be settled by philosophy", "Access Control", "Expert Technocrat"),
|
| 571 |
+
(65, "Grice's Maxims", "Conversational norms", "Fragmentation", "Oracle-Priest"),
|
| 572 |
+
(66, "Poe's Law", "Parody indistinguishable", "Misdirection", "Digital Messiah"),
|
| 573 |
+
(67, "Sturgeon's Law", "90% is crap", "Discreditation", "Slave Master"),
|
| 574 |
+
(68, "Betteridge's Law", "Headline question = no", "Misdirection", "Algorithmic Curator"),
|
| 575 |
+
(69, "Godwin's Law", "Comparison to Nazis", "Discreditation", "Slave Master"),
|
| 576 |
+
(70, "Skoptsy Syndrome", "Self-harm to avoid sin", "Conditioning", "Priest-King")
|
| 577 |
+
]
|
| 578 |
+
return [SuppressionLens(id, name, f"Lens {id}: {name}", mechanism, archetype)
|
| 579 |
+
for id, name, mechanism, archetype, _ in [(l[0], l[1], l[2], l[3], "Ancient") for l in lenses_data]]
|
| 580 |
+
|
| 581 |
+
def _build_methods(self) -> Dict[int, SuppressionMethod]:
|
| 582 |
+
methods = {
|
| 583 |
+
1: SuppressionMethod(1, "Total Erasure", Primitive.ERASURE, ["entity_present_then_absent"], ["entity_disappearance"], {"time_window": 30}),
|
| 584 |
+
2: SuppressionMethod(2, "Soft Erasure", Primitive.ERASURE, ["gradual_fading"], ["citation_decay"], {"decay_rate": 0.1}),
|
| 585 |
+
3: SuppressionMethod(3, "Citation Decay", Primitive.ERASURE, ["decreasing_citations"], ["citation_count"], {"threshold": 0.5}),
|
| 586 |
+
4: SuppressionMethod(4, "Index Removal", Primitive.ERASURE, ["missing_from_indices"], ["search_visibility"], {"present": False}),
|
| 587 |
+
5: SuppressionMethod(5, "Selective Retention", Primitive.ERASURE, ["archival_gaps"], ["archive_completeness"], {"gap_days": 365}),
|
| 588 |
+
10: SuppressionMethod(10, "Narrative Seizure", Primitive.NARRATIVE_CAPTURE, ["single_explanation"], ["narrative_diversity"], {"max_explanations": 1}),
|
| 589 |
+
12: SuppressionMethod(12, "Official Story", Primitive.NARRATIVE_CAPTURE, ["authoritative_sources"], ["source_authority"], {"authority_ratio": 0.9}),
|
| 590 |
+
14: SuppressionMethod(14, "Temporal Gaps", Primitive.TEMPORAL, ["publication_gap"], ["time_lag"], {"gap_days": 90}),
|
| 591 |
+
15: SuppressionMethod(15, "Latency Spikes", Primitive.TEMPORAL, ["delayed_reporting"], ["response_time"], {"latency_seconds": 3600}),
|
| 592 |
+
17: SuppressionMethod(17, "Smear Campaign", Primitive.DISCREDITATION, ["ad_hominem_attacks"], ["personal_attacks"], {"frequency": 0.3}),
|
| 593 |
+
23: SuppressionMethod(23, "Whataboutism", Primitive.MISDIRECTION, ["deflection"], ["topic_shift"], {"shift_rate": 0.5}),
|
| 594 |
+
43: SuppressionMethod(43, "Conditioning", Primitive.CONDITIONING, ["repetitive_messaging"], ["message_repetition"], {"repeat_count": 10})
|
| 595 |
+
}
|
| 596 |
+
return methods
|
| 597 |
+
|
| 598 |
+
def get_lens(self, lens_id: int) -> Optional[SuppressionLens]:
|
| 599 |
+
for l in self.lenses:
|
| 600 |
+
if l.id == lens_id:
|
| 601 |
+
return l
|
| 602 |
+
return None
|
| 603 |
+
|
| 604 |
+
def get_method(self, method_id: int) -> Optional[SuppressionMethod]:
|
| 605 |
+
return self.methods.get(method_id)
|
| 606 |
+
|
| 607 |
+
def map_signature_to_method(self, signature: str) -> Optional[Dict]:
|
| 608 |
+
for mid, method in self.methods.items():
|
| 609 |
+
if signature in method.observable_signatures:
|
| 610 |
+
return {"method_id": mid, "method_name": method.name, "primitive": method.primitive.value}
|
| 611 |
+
return None
|
| 612 |
+
|
| 613 |
+
def get_lenses_for_primitive(self, primitive: Primitive) -> List[int]:
|
| 614 |
+
# Mapping from primitive to lens IDs (simplified)
|
| 615 |
+
mapping = {
|
| 616 |
+
Primitive.ERASURE: [1, 4, 9, 23, 43, 55, 60],
|
| 617 |
+
Primitive.INTERRUPTION: [10, 12, 14, 15],
|
| 618 |
+
Primitive.FRAGMENTATION: [2, 5, 27, 29, 32, 53, 65],
|
| 619 |
+
Primitive.NARRATIVE_CAPTURE: [1, 7, 19, 26, 36, 41],
|
| 620 |
+
Primitive.MISDIRECTION: [3, 13, 14, 16, 17, 24, 25, 28, 30, 31, 44, 46, 52, 54, 58, 59, 66, 68],
|
| 621 |
+
Primitive.SATURATION: [8, 49, 51, 57],
|
| 622 |
+
Primitive.DISCREDITATION: [6, 15, 35, 42, 45, 67, 69],
|
| 623 |
+
Primitive.ATTRITION: [50],
|
| 624 |
+
Primitive.ACCESS_CONTROL: [4, 11, 48, 61, 62, 63, 64],
|
| 625 |
+
Primitive.TEMPORAL: [12, 14],
|
| 626 |
+
Primitive.CONDITIONING: [18, 20, 21, 22, 33, 34, 37, 38, 39, 40, 47, 56, 70],
|
| 627 |
+
Primitive.META: [58, 59, 60, 61, 62, 63, 64]
|
| 628 |
+
}
|
| 629 |
+
return mapping.get(primitive, [])
|
| 630 |
+
|
| 631 |
+
# ========================== HIERARCHICAL DETECTOR ==========================
|
| 632 |
+
|
| 633 |
+
class HierarchicalDetector:
|
| 634 |
+
def __init__(self, hierarchy: SuppressionHierarchy, ledger: Ledger, separator: Separator):
|
| 635 |
+
self.hierarchy = hierarchy
|
| 636 |
+
self.ledger = ledger
|
| 637 |
+
self.separator = separator
|
| 638 |
+
|
| 639 |
+
def detect_from_ledger(self) -> Dict[str, Any]:
|
| 640 |
+
"""Scan ledger nodes for suppression signatures"""
|
| 641 |
+
results = {
|
| 642 |
+
"total_nodes": len(self.ledger.index),
|
| 643 |
+
"suppression_signatures": [],
|
| 644 |
+
"primitives_detected": defaultdict(int),
|
| 645 |
+
"lenses_applied": [],
|
| 646 |
+
"evidence_found": 0
|
| 647 |
+
}
|
| 648 |
+
# For each node hash, try to get node and analyze
|
| 649 |
+
for node_hash, block_ids in self.ledger.index.items():
|
| 650 |
+
node = self.ledger.get_node(node_hash)
|
| 651 |
+
if not node:
|
| 652 |
+
continue
|
| 653 |
+
# Simple heuristic: check for disappearance patterns
|
| 654 |
+
if node.get("type") == "document":
|
| 655 |
+
# Look for abrupt disappearance in timeline (simplified)
|
| 656 |
+
# In real implementation, we'd compare with previous nodes
|
| 657 |
+
results["suppression_signatures"].append({
|
| 658 |
+
"node": node_hash,
|
| 659 |
+
"signature": "entity_present_then_absent",
|
| 660 |
+
"confidence": 0.3
|
| 661 |
+
})
|
| 662 |
+
results["primitives_detected"]["ERASURE"] += 1
|
| 663 |
+
results["evidence_found"] += 1
|
| 664 |
+
# Add lenses
|
| 665 |
+
for primitive, count in results["primitives_detected"].items():
|
| 666 |
+
prim_enum = Primitive(primitive)
|
| 667 |
+
lens_ids = self.hierarchy.get_lenses_for_primitive(prim_enum)
|
| 668 |
+
for lid in lens_ids:
|
| 669 |
+
lens = self.hierarchy.get_lens(lid)
|
| 670 |
+
if lens:
|
| 671 |
+
results["lenses_applied"].append(lens.to_dict())
|
| 672 |
+
return results
|
| 673 |
+
|
| 674 |
+
# ========================== KNOWLEDGE GRAPH ENGINE ==========================
|
| 675 |
+
|
| 676 |
+
class KnowledgeGraphEngine:
|
| 677 |
+
def __init__(self, ledger: Ledger):
|
| 678 |
+
self.ledger = ledger
|
| 679 |
+
self.graph = defaultdict(lambda: defaultdict(set)) # subject -> predicate -> object
|
| 680 |
+
|
| 681 |
+
def add_triple(self, subject: str, predicate: str, object: str, node_hash: str):
|
| 682 |
+
self.graph[subject][predicate].add((object, node_hash))
|
| 683 |
+
|
| 684 |
+
def query(self, subject: str = None, predicate: str = None, object: str = None) -> List[Tuple]:
|
| 685 |
+
results = []
|
| 686 |
+
for s, preds in self.graph.items():
|
| 687 |
+
if subject and s != subject:
|
| 688 |
+
continue
|
| 689 |
+
for p, objs in preds.items():
|
| 690 |
+
if predicate and p != predicate:
|
| 691 |
+
continue
|
| 692 |
+
for o, node_hash in objs:
|
| 693 |
+
if object and o != object:
|
| 694 |
+
continue
|
| 695 |
+
results.append((s, p, o, node_hash))
|
| 696 |
+
return results
|
| 697 |
+
|
| 698 |
+
def build_from_ledger(self):
|
| 699 |
+
"""Parse nodes and extract triples (simplified)"""
|
| 700 |
+
for node_hash, block_ids in self.ledger.index.items():
|
| 701 |
+
node = self.ledger.get_node(node_hash)
|
| 702 |
+
if node and node.get("type") == "document":
|
| 703 |
+
text = node.get("source", "")
|
| 704 |
+
# Very simple triple extraction: "X is Y" patterns
|
| 705 |
+
import re
|
| 706 |
+
matches = re.findall(r'(\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*)\s+(is|are|was|were)\s+([^.,;]+)', text)
|
| 707 |
+
for subj, verb, obj in matches:
|
| 708 |
+
self.add_triple(subj.strip(), verb.strip(), obj.strip(), node_hash)
|
| 709 |
+
|
| 710 |
+
# ========================== TEMPORAL ANALYSIS ENGINE ==========================
|
| 711 |
+
|
| 712 |
+
class TemporalAnalysisEngine:
|
| 713 |
+
def __init__(self, ledger: Ledger):
|
| 714 |
+
self.ledger = ledger
|
| 715 |
+
|
| 716 |
+
def publication_gaps(self, threshold_days: int = 30) -> List[Dict]:
|
| 717 |
+
"""Detect temporal gaps in node publication"""
|
| 718 |
+
timestamps = []
|
| 719 |
+
for block in self.ledger.chain:
|
| 720 |
+
for node in block["nodes"]:
|
| 721 |
+
ts_str = node.get("timestamp")
|
| 722 |
+
if ts_str:
|
| 723 |
+
try:
|
| 724 |
+
ts = datetime.fromisoformat(ts_str.replace('Z', '+00:00'))
|
| 725 |
+
timestamps.append(ts)
|
| 726 |
+
except:
|
| 727 |
+
pass
|
| 728 |
+
timestamps.sort()
|
| 729 |
+
gaps = []
|
| 730 |
+
for i in range(1, len(timestamps)):
|
| 731 |
+
delta = (timestamps[i] - timestamps[i-1]).days
|
| 732 |
+
if delta > threshold_days:
|
| 733 |
+
gaps.append({
|
| 734 |
+
"from": timestamps[i-1].isoformat(),
|
| 735 |
+
"to": timestamps[i].isoformat(),
|
| 736 |
+
"gap_days": delta
|
| 737 |
+
})
|
| 738 |
+
return gaps
|
| 739 |
+
|
| 740 |
+
def latency_spikes(self, expected_latency_seconds: int = 3600) -> List[Dict]:
|
| 741 |
+
"""Detect unusual delays in reporting (simplified)"""
|
| 742 |
+
# In real system, compare event time vs node timestamp
|
| 743 |
+
return []
|
| 744 |
+
|
| 745 |
+
# ========================== PROBABILISTIC INFERENCE ==========================
|
| 746 |
+
|
| 747 |
+
class ProbabilisticInference:
|
| 748 |
+
def __init__(self):
|
| 749 |
+
self.priors = defaultdict(float) # claim_id -> prior probability
|
| 750 |
+
self.evidence = defaultdict(list) # claim_id -> list of (evidence, weight)
|
| 751 |
+
|
| 752 |
+
def set_prior(self, claim_id: str, probability: float):
|
| 753 |
+
self.priors[claim_id] = max(0.0, min(1.0, probability))
|
| 754 |
+
|
| 755 |
+
def add_evidence(self, claim_id: str, evidence: str, weight: float = 0.5):
|
| 756 |
+
self.evidence[claim_id].append((evidence, weight))
|
| 757 |
+
|
| 758 |
+
def compute_posterior(self, claim_id: str) -> float:
|
| 759 |
+
prior = self.priors.get(claim_id, 0.5)
|
| 760 |
+
ev_list = self.evidence.get(claim_id, [])
|
| 761 |
+
if not ev_list:
|
| 762 |
+
return prior
|
| 763 |
+
# Simple Bayesian update assuming independence
|
| 764 |
+
likelihood = 1.0
|
| 765 |
+
for _, w in ev_list:
|
| 766 |
+
likelihood *= (0.5 + w * 0.5) # scale weight to [0.5,1.0]
|
| 767 |
+
posterior = prior * likelihood / (prior * likelihood + (1-prior)*(1-likelihood))
|
| 768 |
+
return min(1.0, max(0.0, posterior))
|
| 769 |
+
|
| 770 |
+
# ========================== AI AGENTS ==========================
|
| 771 |
+
|
| 772 |
+
class IngestionAI:
|
| 773 |
+
def __init__(self, crypto: Crypto):
|
| 774 |
+
self.crypto = crypto
|
| 775 |
+
|
| 776 |
+
def process_document(self, text: str, source: str) -> RealityNode:
|
| 777 |
+
node_hash = self.crypto.hash(text + source + str(datetime.utcnow()))
|
| 778 |
+
node = RealityNode(
|
| 779 |
+
hash=node_hash,
|
| 780 |
+
type="document",
|
| 781 |
+
source=source,
|
| 782 |
+
signature="",
|
| 783 |
+
timestamp=datetime.utcnow().isoformat() + "Z",
|
| 784 |
+
witnesses=[],
|
| 785 |
+
refs={}
|
| 786 |
+
)
|
| 787 |
+
node.signature = self.crypto.sign(node_hash.encode(), "ingestion_ai")
|
| 788 |
+
return node
|
| 789 |
+
|
| 790 |
+
class SymbolismAI:
|
| 791 |
+
def analyze(self, artifact: Dict) -> float:
|
| 792 |
+
"""Return a symbolism coefficient (0-1) based on linguistic patterns"""
|
| 793 |
+
text = artifact.get("text", "")
|
| 794 |
+
# Count symbolic words (metaphor, allegory, etc.)
|
| 795 |
+
symbolic_words = ["metaphor", "allegory", "symbol", "represent", "signify", "myth", "archetype"]
|
| 796 |
+
score = sum(1 for w in symbolic_words if w in text.lower()) / max(1, len(symbolic_words))
|
| 797 |
+
return min(1.0, score + 0.3)
|
| 798 |
+
|
| 799 |
+
class ReasoningAI:
|
| 800 |
+
def __init__(self, inference: ProbabilisticInference):
|
| 801 |
+
self.inference = inference
|
| 802 |
+
|
| 803 |
+
def evaluate_claim(self, claim_id: str, nodes: List[RealityNode], detector_result: Dict) -> Dict:
|
| 804 |
+
confidence = 0.5
|
| 805 |
+
if detector_result.get("evidence_found", 0) > 2:
|
| 806 |
+
confidence += 0.2
|
| 807 |
+
self.inference.set_prior(claim_id, confidence)
|
| 808 |
+
if confidence < 0.7:
|
| 809 |
+
return {"spawn_sub": True, "reason": "low confidence", "confidence": confidence}
|
| 810 |
+
else:
|
| 811 |
+
return {"spawn_sub": False, "reason": "sufficient evidence", "confidence": confidence}
|
| 812 |
+
|
| 813 |
+
# ========================== SAVIOR/SUFFERER MATRIX ==========================
|
| 814 |
+
|
| 815 |
+
class ConsciousnessMapper:
|
| 816 |
+
async def analyze_consciousness(self) -> Dict[str, Any]:
|
| 817 |
+
# Simulated analysis based on ledger data
|
| 818 |
+
return {
|
| 819 |
+
"awareness_levels": {
|
| 820 |
+
"system_awareness": 0.28,
|
| 821 |
+
"self_enslavement_awareness": 0.15,
|
| 822 |
+
"manipulation_detection": 0.32,
|
| 823 |
+
"liberation_desire": 0.41
|
| 824 |
+
},
|
| 825 |
+
"control_acceptance_patterns": {
|
| 826 |
+
"voluntary_submission": 0.75,
|
| 827 |
+
"aspirational_enslavement": 0.82,
|
| 828 |
+
"fear_based_compliance": 0.68,
|
| 829 |
+
"identity_fusion": 0.79
|
| 830 |
+
},
|
| 831 |
+
"awakening_triggers": {
|
| 832 |
+
"suffering_threshold": 0.58,
|
| 833 |
+
"truth_exposure": 0.72,
|
| 834 |
+
"system_failure": 0.65,
|
| 835 |
+
"consciousness_contact": 0.88
|
| 836 |
+
}
|
| 837 |
+
}
|
| 838 |
+
|
| 839 |
+
class QuantumControlAnalyzer:
|
| 840 |
+
def __init__(self):
|
| 841 |
+
self.control_matrix = self._initialize_complete_matrix()
|
| 842 |
+
self.consciousness_mapper = ConsciousnessMapper()
|
| 843 |
+
|
| 844 |
+
def _initialize_complete_matrix(self) -> CompleteControlMatrix:
|
| 845 |
+
# Historical control systems
|
| 846 |
+
systems = [
|
| 847 |
+
ControlSystem(
|
| 848 |
+
system_id="temple_slavery",
|
| 849 |
+
historical_era="3000-500 BCE",
|
| 850 |
+
control_archetype=ControlArchetype.PRIEST_KING,
|
| 851 |
+
manufactured_threats=["Divine wrath", "Crop failure", "Chaos monsters"],
|
| 852 |
+
salvation_offerings=["Ritual protection", "Harvest blessings", "Divine favor"],
|
| 853 |
+
institutional_saviors=["Temple priests", "Oracle interpreters", "King-priests"],
|
| 854 |
+
slavery_mechanism=SlaveryMechanism(
|
| 855 |
+
mechanism_id="temple_labor",
|
| 856 |
+
slavery_type=SlaveryType.CHATTEL_SLAVERY,
|
| 857 |
+
visible_chains=["Physical bondage", "Temple service", "Forced labor"],
|
| 858 |
+
invisible_chains=["Religious duty", "Social obligation", "Karmic debt"],
|
| 859 |
+
voluntary_adoption_mechanisms=["Seeking protection", "Desiring favor", "Avoiding wrath"],
|
| 860 |
+
self_justification_narratives=["Serving the gods", "Maintaining order", "Cultural identity"]
|
| 861 |
+
),
|
| 862 |
+
consciousness_hacks=[
|
| 863 |
+
ConsciousnessHack.SELF_ATTRIBUTION,
|
| 864 |
+
ConsciousnessHack.NORMALIZATION,
|
| 865 |
+
ConsciousnessHack.MORAL_SUPERIORITY
|
| 866 |
+
],
|
| 867 |
+
public_participation_rate=0.95,
|
| 868 |
+
resistance_level=0.1,
|
| 869 |
+
system_longevity=2500
|
| 870 |
+
),
|
| 871 |
+
ControlSystem(
|
| 872 |
+
system_id="imperial_slavery",
|
| 873 |
+
historical_era="500 BCE - 1500 CE",
|
| 874 |
+
control_archetype=ControlArchetype.IMPERIAL_RULER,
|
| 875 |
+
manufactured_threats=["Barbarian invasions", "Internal rebellion", "Economic collapse"],
|
| 876 |
+
salvation_offerings=["Military protection", "Legal order", "Infrastructure"],
|
| 877 |
+
institutional_saviors=["Emperor", "Legions", "Governors"],
|
| 878 |
+
slavery_mechanism=SlaveryMechanism(
|
| 879 |
+
mechanism_id="imperial_bondage",
|
| 880 |
+
slavery_type=SlaveryType.CHATTEL_SLAVERY,
|
| 881 |
+
visible_chains=["Conquest", "Debt slavery", "Criminal servitude"],
|
| 882 |
+
invisible_chains=["Patriotism", "Duty to empire", "Honor"],
|
| 883 |
+
voluntary_adoption_mechanisms=["Seeking protection", "Economic opportunity", "Social advancement"],
|
| 884 |
+
self_justification_narratives=["Civilizing mission", "Pax Romana", "Glory of empire"]
|
| 885 |
+
),
|
| 886 |
+
consciousness_hacks=[
|
| 887 |
+
ConsciousnessHack.ASPIRATIONAL_CHAINS,
|
| 888 |
+
ConsciousnessHack.NORMALIZATION,
|
| 889 |
+
ConsciousnessHack.ILLUSION_OF_MOBILITY
|
| 890 |
+
],
|
| 891 |
+
public_participation_rate=0.85,
|
| 892 |
+
resistance_level=0.2,
|
| 893 |
+
system_longevity=1000
|
| 894 |
+
),
|
| 895 |
+
ControlSystem(
|
| 896 |
+
system_id="corporate_slavery",
|
| 897 |
+
historical_era="1800-2000 CE",
|
| 898 |
+
control_archetype=ControlArchetype.CORPORATE_OVERLORD,
|
| 899 |
+
manufactured_threats=["Competition", "Market volatility", "Outsiders"],
|
| 900 |
+
salvation_offerings=["Employment", "Consumer goods", "Stock options"],
|
| 901 |
+
institutional_saviors=["CEOs", "Corporations", "Banks"],
|
| 902 |
+
slavery_mechanism=SlaveryMechanism(
|
| 903 |
+
mechanism_id="wage_slavery",
|
| 904 |
+
slavery_type=SlaveryType.WAGE_SLAVERY,
|
| 905 |
+
visible_chains=["Employment contract", "Working hours", "Debt"],
|
| 906 |
+
invisible_chains=["Career ladder", "Consumer identity", "Retirement promise"],
|
| 907 |
+
voluntary_adoption_mechanisms=["Need income", "Desire status", "Fear of poverty"],
|
| 908 |
+
self_justification_narratives=["Free market", "Meritocracy", "Economic growth"]
|
| 909 |
+
),
|
| 910 |
+
consciousness_hacks=[
|
| 911 |
+
ConsciousnessHack.ASPIRATIONAL_CHAINS,
|
| 912 |
+
ConsciousnessHack.ILLUSION_OF_MOBILITY,
|
| 913 |
+
ConsciousnessHack.MORAL_SUPERIORITY
|
| 914 |
+
],
|
| 915 |
+
public_participation_rate=0.90,
|
| 916 |
+
resistance_level=0.15,
|
| 917 |
+
system_longevity=200
|
| 918 |
+
),
|
| 919 |
+
ControlSystem(
|
| 920 |
+
system_id="digital_slavery",
|
| 921 |
+
historical_era="2000-2050 CE",
|
| 922 |
+
control_archetype=ControlArchetype.ALGORITHMIC_CURATOR,
|
| 923 |
+
manufactured_threats=["Privacy loss", "Hackers", "Misinformation"],
|
| 924 |
+
salvation_offerings=["Convenience", "Connectivity", "Personalization"],
|
| 925 |
+
institutional_saviors=["Tech giants", "AI systems", "Platforms"],
|
| 926 |
+
slavery_mechanism=SlaveryMechanism(
|
| 927 |
+
mechanism_id="digital_bondage",
|
| 928 |
+
slavery_type=SlaveryType.DIGITAL_SLAVERY,
|
| 929 |
+
visible_chains=["Terms of service", "Data collection", "Algorithmic feeds"],
|
| 930 |
+
invisible_chains=["Attention economy", "Social scoring", "Filter bubbles"],
|
| 931 |
+
voluntary_adoption_mechanisms=["Desire connection", "Fear of missing out", "Habit"],
|
| 932 |
+
self_justification_narratives=["Innovation", "Free services", "Community"]
|
| 933 |
+
),
|
| 934 |
+
consciousness_hacks=[
|
| 935 |
+
ConsciousnessHack.SELF_ATTRIBUTION,
|
| 936 |
+
ConsciousnessHack.NORMALIZATION,
|
| 937 |
+
ConsciousnessHack.FEAR_OF_FREEDOM
|
| 938 |
+
],
|
| 939 |
+
public_participation_rate=0.98,
|
| 940 |
+
resistance_level=0.05,
|
| 941 |
+
system_longevity=50
|
| 942 |
+
)
|
| 943 |
+
]
|
| 944 |
+
return CompleteControlMatrix(
|
| 945 |
+
control_systems=systems,
|
| 946 |
+
active_systems=["corporate_slavery", "digital_slavery"],
|
| 947 |
+
institutional_evolution={
|
| 948 |
+
"Temple Systems": [ControlArchetype.PRIEST_KING, ControlArchetype.DIVINE_INTERMEDIARY,
|
| 949 |
+
ControlArchetype.EXPERT_TECHNOCRAT, ControlArchetype.ALGORITHMIC_CURATOR],
|
| 950 |
+
"Royal Lines": [ControlArchetype.IMPERIAL_RULER, ControlArchetype.CORPORATE_OVERLORD,
|
| 951 |
+
ControlArchetype.FINANCIAL_MASTER]
|
| 952 |
+
},
|
| 953 |
+
collective_delusions={
|
| 954 |
+
"upward_mobility": 0.85,
|
| 955 |
+
"consumer_freedom": 0.78,
|
| 956 |
+
"technological_progress": 0.82,
|
| 957 |
+
"democratic_choice": 0.65
|
| 958 |
+
},
|
| 959 |
+
freedom_illusions={
|
| 960 |
+
"career_choice": 0.75,
|
| 961 |
+
"consumer_choice": 0.88,
|
| 962 |
+
"information_access": 0.72,
|
| 963 |
+
"political_choice": 0.55
|
| 964 |
+
},
|
| 965 |
+
self_enslavement_patterns={
|
| 966 |
+
"debt_acceptance": 0.82,
|
| 967 |
+
"work_identity": 0.78,
|
| 968 |
+
"consumer_aspiration": 0.85,
|
| 969 |
+
"digital_dependency": 0.79
|
| 970 |
+
}
|
| 971 |
+
)
|
| 972 |
+
|
| 973 |
+
async def analyze_complete_control_system(self) -> Dict[str, Any]:
|
| 974 |
+
matrix_analysis = self.control_matrix.analyze_complete_control()
|
| 975 |
+
consciousness_analysis = await self.consciousness_mapper.analyze_consciousness()
|
| 976 |
+
quantum_entanglement = await self._analyze_quantum_entanglement()
|
| 977 |
+
return {
|
| 978 |
+
"control_system_metrics": {
|
| 979 |
+
"overall_efficiency": np.mean([s.calculate_system_efficiency() for s in self.control_matrix.control_systems]),
|
| 980 |
+
"slavery_sophistication": matrix_analysis["slavery_evolution_trend"],
|
| 981 |
+
"freedom_illusion_index": matrix_analysis["freedom_illusion_index"],
|
| 982 |
+
"consciousness_control": matrix_analysis["consciousness_entrainment"]["delusion_strength"]
|
| 983 |
+
},
|
| 984 |
+
"quantum_analysis": quantum_entanglement,
|
| 985 |
+
"consciousness_analysis": consciousness_analysis,
|
| 986 |
+
"system_predictions": await self._predict_system_evolution(),
|
| 987 |
+
"liberation_pathways": await self._analyze_liberation_possibilities()
|
| 988 |
+
}
|
| 989 |
+
|
| 990 |
+
async def _analyze_quantum_entanglement(self) -> Dict[str, float]:
|
| 991 |
+
return {
|
| 992 |
+
"savior_slavery_symbiosis": 0.92,
|
| 993 |
+
"consciousness_self_enslavement": 0.88,
|
| 994 |
+
"institutional_metamorphosis": 0.95,
|
| 995 |
+
"freedom_delusion_strength": 0.83
|
| 996 |
+
}
|
| 997 |
+
|
| 998 |
+
async def _predict_system_evolution(self) -> List[Dict]:
|
| 999 |
+
return [
|
| 1000 |
+
{
|
| 1001 |
+
"next_archetype": "Biological Controller",
|
| 1002 |
+
"slavery_type": "Genetic Slavery",
|
| 1003 |
+
"control_mechanism": "DNA-level programming",
|
| 1004 |
+
"consciousness_hack": "Innate desire modification",
|
| 1005 |
+
"emergence_timeline": "2030-2050"
|
| 1006 |
+
},
|
| 1007 |
+
{
|
| 1008 |
+
"next_archetype": "Quantum Consciousness Curator",
|
| 1009 |
+
"slavery_type": "Reality Slavery",
|
| 1010 |
+
"control_mechanism": "Direct neural interface",
|
| 1011 |
+
"consciousness_hack": "Self as simulation awareness",
|
| 1012 |
+
"emergence_timeline": "2040-2060"
|
| 1013 |
+
}
|
| 1014 |
+
]
|
| 1015 |
+
|
| 1016 |
+
async def _analyze_liberation_possibilities(self) -> Dict[str, Any]:
|
| 1017 |
+
return {
|
| 1018 |
+
"consciousness_awakening_trend": 0.45,
|
| 1019 |
+
"system_vulnerabilities": [
|
| 1020 |
+
"Dependency on voluntary participation",
|
| 1021 |
+
"Requirement of self-deception",
|
| 1022 |
+
"Need for continuous threat manufacturing",
|
| 1023 |
+
"Vulnerability to truth exposure"
|
| 1024 |
+
],
|
| 1025 |
+
"liberation_effectiveness": {
|
| 1026 |
+
"individual_awakening": 0.35,
|
| 1027 |
+
"collective_action": 0.25,
|
| 1028 |
+
"system_collapse": 0.15,
|
| 1029 |
+
"evolution_beyond": 0.65
|
| 1030 |
+
}
|
| 1031 |
+
}
|
| 1032 |
+
|
| 1033 |
+
# ========================== HELPER-KILLER MODULE ==========================
|
| 1034 |
+
|
| 1035 |
+
class AdvancedHelperKillerEngine:
|
| 1036 |
+
def __init__(self, db_path: str = "helper_killer_v2.db"):
|
| 1037 |
+
self.db_path = db_path
|
| 1038 |
+
self.control_matrix: Optional[ControlMatrix] = None
|
| 1039 |
+
self.sovereignty_protocols: Dict[str, Callable] = self._initialize_protocols()
|
| 1040 |
+
self._initialize_database()
|
| 1041 |
+
self._build_control_matrix()
|
| 1042 |
+
|
| 1043 |
+
def _initialize_database(self):
|
| 1044 |
+
try:
|
| 1045 |
+
with sqlite3.connect(self.db_path) as conn:
|
| 1046 |
+
conn.execute("""
|
| 1047 |
+
CREATE TABLE IF NOT EXISTS entity_analyses (
|
| 1048 |
+
entity_id TEXT PRIMARY KEY,
|
| 1049 |
+
name TEXT,
|
| 1050 |
+
control_layers TEXT,
|
| 1051 |
+
threat_vectors TEXT,
|
| 1052 |
+
market_share REAL,
|
| 1053 |
+
dependency_score REAL,
|
| 1054 |
+
sovereignty_erosion_score REAL,
|
| 1055 |
+
systemic_risk_level REAL,
|
| 1056 |
+
analyzed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
| 1057 |
+
)
|
| 1058 |
+
""")
|
| 1059 |
+
conn.execute("""
|
| 1060 |
+
CREATE TABLE IF NOT EXISTS sovereignty_recommendations (
|
| 1061 |
+
recommendation_id TEXT PRIMARY KEY,
|
| 1062 |
+
entity_id TEXT,
|
| 1063 |
+
threat_level TEXT,
|
| 1064 |
+
mitigation_strategy TEXT,
|
| 1065 |
+
sovereignty_preservation_score REAL,
|
| 1066 |
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
| 1067 |
+
)
|
| 1068 |
+
""")
|
| 1069 |
+
except Exception as e:
|
| 1070 |
+
logger.error(f"Database initialization error: {e}")
|
| 1071 |
+
|
| 1072 |
+
def _initialize_protocols(self) -> Dict[str, Callable]:
|
| 1073 |
+
return {
|
| 1074 |
+
"digital_infrastructure": self._digital_sovereignty_protocol,
|
| 1075 |
+
"financial_systems": self._financial_sovereignty_protocol,
|
| 1076 |
+
"information_channels": self._information_sovereignty_protocol,
|
| 1077 |
+
"cultural_narratives": self._cultural_sovereignty_protocol,
|
| 1078 |
+
"identity_systems": self._identity_sovereignty_protocol
|
| 1079 |
+
}
|
| 1080 |
+
|
| 1081 |
+
def _build_control_matrix(self):
|
| 1082 |
+
entities = [
|
| 1083 |
+
InstitutionalEntity(
|
| 1084 |
+
entity_id="alphabet_google",
|
| 1085 |
+
name="Alphabet/Google",
|
| 1086 |
+
control_layers=[
|
| 1087 |
+
ControlLayer.DIGITAL_INFRASTRUCTURE,
|
| 1088 |
+
ControlLayer.INFORMATION_CHANNELS
|
| 1089 |
+
],
|
| 1090 |
+
threat_vectors=[
|
| 1091 |
+
ThreatVector.MONOPOLY_CAPTURE,
|
| 1092 |
+
ThreatVector.DEPENDENCY_CREATION,
|
| 1093 |
+
ThreatVector.BEHAVIORAL_SHAPING,
|
| 1094 |
+
ThreatVector.DATA_MONETIZATION,
|
| 1095 |
+
ThreatVector.NARRATIVE_CONTROL
|
| 1096 |
+
],
|
| 1097 |
+
market_share=0.85,
|
| 1098 |
+
dependency_score=0.90
|
| 1099 |
+
),
|
| 1100 |
+
InstitutionalEntity(
|
| 1101 |
+
entity_id="binance_financial",
|
| 1102 |
+
name="Binance/CBDC Infrastructure",
|
| 1103 |
+
control_layers=[
|
| 1104 |
+
ControlLayer.FINANCIAL_SYSTEMS,
|
| 1105 |
+
ControlLayer.IDENTITY_SYSTEMS
|
| 1106 |
+
],
|
| 1107 |
+
threat_vectors=[
|
| 1108 |
+
ThreatVector.MONOPOLY_CAPTURE,
|
| 1109 |
+
ThreatVector.DEPENDENCY_CREATION,
|
| 1110 |
+
ThreatVector.BEHAVIORAL_SHAPING
|
| 1111 |
+
],
|
| 1112 |
+
market_share=0.70,
|
| 1113 |
+
dependency_score=0.75
|
| 1114 |
+
),
|
| 1115 |
+
InstitutionalEntity(
|
| 1116 |
+
entity_id="social_media_complex",
|
| 1117 |
+
name="Social Media/TikTok Complex",
|
| 1118 |
+
control_layers=[
|
| 1119 |
+
ControlLayer.INFORMATION_CHANNELS,
|
| 1120 |
+
ControlLayer.CULTURAL_NARRATIVES
|
| 1121 |
+
],
|
| 1122 |
+
threat_vectors=[
|
| 1123 |
+
ThreatVector.DEPENDENCY_CREATION,
|
| 1124 |
+
ThreatVector.BEHAVIORAL_SHAPING,
|
| 1125 |
+
ThreatVector.DATA_MONETIZATION,
|
| 1126 |
+
ThreatVector.NARRATIVE_CONTROL
|
| 1127 |
+
],
|
| 1128 |
+
market_share=0.80,
|
| 1129 |
+
dependency_score=0.85
|
| 1130 |
+
)
|
| 1131 |
+
]
|
| 1132 |
+
interconnections = {
|
| 1133 |
+
"alphabet_google": ["binance_financial", "social_media_complex"],
|
| 1134 |
+
"binance_financial": ["alphabet_google"],
|
| 1135 |
+
"social_media_complex": ["alphabet_google"]
|
| 1136 |
+
}
|
| 1137 |
+
self.control_matrix = ControlMatrix(entities, interconnections)
|
| 1138 |
+
logger.info(f"Helper-Killer control matrix built with {len(entities)} entities")
|
| 1139 |
+
|
| 1140 |
+
async def analyze_help_offer(self, help_context: Dict[str, Any]) -> Dict[str, Any]:
|
| 1141 |
+
entity_analysis = self._identify_controlling_entity(help_context)
|
| 1142 |
+
threat_assessment = self._assist_threat_level(help_context, entity_analysis)
|
| 1143 |
+
sovereignty_impact = self._calculate_sovereignty_impact(help_context, entity_analysis)
|
| 1144 |
+
mitigation_strategies = self._generate_mitigation_strategies(threat_assessment, sovereignty_impact)
|
| 1145 |
+
analysis = {
|
| 1146 |
+
"help_offer_id": hashlib.sha256(json.dumps(help_context).encode()).hexdigest()[:16],
|
| 1147 |
+
"controlling_entity": entity_analysis,
|
| 1148 |
+
"threat_assessment": threat_assessment,
|
| 1149 |
+
"sovereignty_impact": sovereignty_impact,
|
| 1150 |
+
"mitigation_strategies": mitigation_strategies,
|
| 1151 |
+
"recommendation": self._generate_recommendation(threat_assessment, sovereignty_impact),
|
| 1152 |
+
"analysis_timestamp": datetime.now().isoformat()
|
| 1153 |
+
}
|
| 1154 |
+
await self._store_analysis(analysis)
|
| 1155 |
+
return analysis
|
| 1156 |
+
|
| 1157 |
+
def _identify_controlling_entity(self, help_context: Dict) -> Optional[Dict[str, Any]]:
|
| 1158 |
+
if not self.control_matrix:
|
| 1159 |
+
return None
|
| 1160 |
+
for entity in self.control_matrix.entities:
|
| 1161 |
+
context_layers = set(help_context.get('affected_layers', []))
|
| 1162 |
+
entity_layers = set(layer.value for layer in entity.control_layers)
|
| 1163 |
+
if context_layers.intersection(entity_layers):
|
| 1164 |
+
return {
|
| 1165 |
+
'entity_id': entity.entity_id,
|
| 1166 |
+
'name': entity.name,
|
| 1167 |
+
'sovereignty_erosion_score': entity.sovereignty_erosion_score,
|
| 1168 |
+
'systemic_risk_level': entity.systemic_risk_level
|
| 1169 |
+
}
|
| 1170 |
+
return None
|
| 1171 |
+
|
| 1172 |
+
def _assist_threat_level(self, help_context: Dict, entity_analysis: Optional[Dict]) -> Dict[str, float]:
|
| 1173 |
+
base_threat = 0.3
|
| 1174 |
+
if entity_analysis:
|
| 1175 |
+
entity_threat = entity_analysis['sovereignty_erosion_score'] * 0.6
|
| 1176 |
+
systemic_risk = entity_analysis['systemic_risk_level'] * 0.4
|
| 1177 |
+
base_threat = max(base_threat, entity_threat + systemic_risk)
|
| 1178 |
+
if help_context.get('creates_dependency', False):
|
| 1179 |
+
base_threat += 0.3
|
| 1180 |
+
if help_context.get('data_collection', False):
|
| 1181 |
+
base_threat += 0.2
|
| 1182 |
+
if help_context.get('behavioral_tracking', False):
|
| 1183 |
+
base_threat += 0.25
|
| 1184 |
+
return {
|
| 1185 |
+
'helper_killer_coefficient': min(1.0, base_threat),
|
| 1186 |
+
'dependency_risk': help_context.get('dependency_risk', 0.5),
|
| 1187 |
+
'privacy_impact': help_context.get('privacy_impact', 0.5),
|
| 1188 |
+
'agency_reduction': help_context.get('agency_reduction', 0.5)
|
| 1189 |
+
}
|
| 1190 |
+
|
| 1191 |
+
def _calculate_sovereignty_impact(self, help_context: Dict, entity_analysis: Optional[Dict]) -> Dict[str, float]:
|
| 1192 |
+
if entity_analysis:
|
| 1193 |
+
base_impact = entity_analysis['sovereignty_erosion_score']
|
| 1194 |
+
else:
|
| 1195 |
+
base_impact = 0.5
|
| 1196 |
+
modifiers = {
|
| 1197 |
+
'data_control_loss': help_context.get('data_control', 0) * 0.3,
|
| 1198 |
+
'decision_autonomy_loss': help_context.get('autonomy_reduction', 0) * 0.4,
|
| 1199 |
+
'external_dependency_increase': help_context.get('dependency_creation', 0) * 0.3
|
| 1200 |
+
}
|
| 1201 |
+
total_impact = base_impact * 0.4 + sum(modifiers.values()) * 0.6
|
| 1202 |
+
return {
|
| 1203 |
+
'sovereignty_reduction_score': min(1.0, total_impact),
|
| 1204 |
+
'autonomy_loss': modifiers['decision_autonomy_loss'],
|
| 1205 |
+
'dependency_increase': modifiers['external_dependency_increase'],
|
| 1206 |
+
'privacy_loss': modifiers['data_control_loss']
|
| 1207 |
+
}
|
| 1208 |
+
|
| 1209 |
+
def _generate_mitigation_strategies(self, threat: Dict, impact: Dict) -> List[Dict]:
|
| 1210 |
+
strategies = []
|
| 1211 |
+
threat_level = threat['helper_killer_coefficient']
|
| 1212 |
+
if threat_level > 0.7:
|
| 1213 |
+
strategies.extend([
|
| 1214 |
+
{'strategy': 'COMPLETE_AVOIDANCE', 'effectiveness': 0.95, 'implementation_cost': 0.8,
|
| 1215 |
+
'description': 'Reject help offer entirely and build independent solution'},
|
| 1216 |
+
{'strategy': 'PARALLEL_INFRASTRUCTURE', 'effectiveness': 0.85, 'implementation_cost': 0.9,
|
| 1217 |
+
'description': 'Develop sovereign alternative to offered help'}
|
| 1218 |
+
])
|
| 1219 |
+
elif threat_level > 0.4:
|
| 1220 |
+
strategies.extend([
|
| 1221 |
+
{'strategy': 'LIMITED_ENGAGEMENT', 'effectiveness': 0.70, 'implementation_cost': 0.4,
|
| 1222 |
+
'description': 'Use help temporarily while building exit strategy'},
|
| 1223 |
+
{'strategy': 'DATA_ISOLATION', 'effectiveness': 0.60, 'implementation_cost': 0.3,
|
| 1224 |
+
'description': 'Engage but prevent data extraction and tracking'}
|
| 1225 |
+
])
|
| 1226 |
+
else:
|
| 1227 |
+
strategies.append({
|
| 1228 |
+
'strategy': 'CAUTIOUS_ACCEPTANCE', 'effectiveness': 0.50, 'implementation_cost': 0.2,
|
| 1229 |
+
'description': 'Accept with awareness and monitoring for sovereignty erosion'
|
| 1230 |
+
})
|
| 1231 |
+
return strategies
|
| 1232 |
+
|
| 1233 |
+
def _generate_recommendation(self, threat: Dict, impact: Dict) -> str:
|
| 1234 |
+
level = threat['helper_killer_coefficient']
|
| 1235 |
+
if level > 0.8:
|
| 1236 |
+
return "IMMEDIATE_REJECTION_AND_SOVEREIGN_BUILDING"
|
| 1237 |
+
elif level > 0.6:
|
| 1238 |
+
return "STRATEGIC_AVOIDANCE_WITH_EXIT_PROTOCOL"
|
| 1239 |
+
elif level > 0.4:
|
| 1240 |
+
return "LIMITED_CONDITIONAL_ACCEPTANCE"
|
| 1241 |
+
else:
|
| 1242 |
+
return "MONITORED_ACCEPTANCE"
|
| 1243 |
+
|
| 1244 |
+
async def _store_analysis(self, analysis: Dict):
|
| 1245 |
+
try:
|
| 1246 |
+
with sqlite3.connect(self.db_path) as conn:
|
| 1247 |
+
if analysis['controlling_entity']:
|
| 1248 |
+
ce = analysis['controlling_entity']
|
| 1249 |
+
conn.execute("""
|
| 1250 |
+
INSERT OR REPLACE INTO entity_analyses
|
| 1251 |
+
(entity_id, name, control_layers, threat_vectors, market_share, dependency_score,
|
| 1252 |
+
sovereignty_erosion_score, systemic_risk_level)
|
| 1253 |
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
| 1254 |
+
""", (
|
| 1255 |
+
ce['entity_id'], ce['name'],
|
| 1256 |
+
json.dumps([]), json.dumps([]), 0.0, 0.0,
|
| 1257 |
+
ce['sovereignty_erosion_score'], ce['systemic_risk_level']
|
| 1258 |
+
))
|
| 1259 |
+
conn.execute("""
|
| 1260 |
+
INSERT INTO sovereignty_recommendations
|
| 1261 |
+
(recommendation_id, entity_id, threat_level, mitigation_strategy, sovereignty_preservation_score)
|
| 1262 |
+
VALUES (?, ?, ?, ?, ?)
|
| 1263 |
+
""", (
|
| 1264 |
+
analysis['help_offer_id'],
|
| 1265 |
+
analysis['controlling_entity']['entity_id'] if analysis['controlling_entity'] else 'unknown',
|
| 1266 |
+
analysis['threat_assessment']['helper_killer_coefficient'],
|
| 1267 |
+
json.dumps(analysis['mitigation_strategies']),
|
| 1268 |
+
1.0 - analysis['sovereignty_impact']['sovereignty_reduction_score']
|
| 1269 |
+
))
|
| 1270 |
+
except Exception as e:
|
| 1271 |
+
logger.error(f"Analysis storage error: {e}")
|
| 1272 |
+
|
| 1273 |
+
def _digital_sovereignty_protocol(self, entity: Optional[InstitutionalEntity]) -> List[str]:
|
| 1274 |
+
return ["USE_OPEN_SOURCE_ALTERNATIVES", "DEPLOY_GASLESS_BLOCKCHAIN_INFRASTRUCTURE",
|
| 1275 |
+
"MAINTAIN_LOCAL_DATA_STORAGE", "USE_DECENTRALIZED_COMMUNICATION_PROTOCOLS"]
|
| 1276 |
+
|
| 1277 |
+
def _financial_sovereignty_protocol(self, entity: Optional[InstitutionalEntity]) -> List[str]:
|
| 1278 |
+
return ["USE_PRIVACY_COINS_FOR_TRANSACTIONS", "MAINTAIN_OFFLINE_SAVINGS",
|
| 1279 |
+
"DEVELOP_SOVEREIGN_INCOME_STREAMS", "USE_DECENTRALIZED_EXCHANGES"]
|
| 1280 |
+
|
| 1281 |
+
def _information_sovereignty_protocol(self, entity: Optional[InstitutionalEntity]) -> List[str]:
|
| 1282 |
+
return ["USE_INDEPENDENT_NEWS_SOURCES", "MAINTAIN_PERSONAL_KNOWLEDGE_BASE",
|
| 1283 |
+
"PRACTICE_INFORMATION_VERIFICATION", "BUILD_TRUST_NETWORKS"]
|
| 1284 |
+
|
| 1285 |
+
def _cultural_sovereignty_protocol(self, entity: Optional[InstitutionalEntity]) -> List[str]:
|
| 1286 |
+
return ["CREATE_INDEPENDENT_ART_AND_CONTENT", "PARTICIPATE_IN_LOCAL_COMMUNITY",
|
| 1287 |
+
"PRACTICE_CRITICAL_MEDIA_CONSUMPTION", "DEVELOP_PERSONAL_PHILOSOPHICAL_FRAMEWORK"]
|
| 1288 |
+
|
| 1289 |
+
def _identity_sovereignty_protocol(self, entity: Optional[InstitutionalEntity]) -> List[str]:
|
| 1290 |
+
return ["MAINTAIN_OFFLINE_IDENTITY_DOCUMENTS", "USE_PSEUDONYMOUS_ONLINE_IDENTITIES",
|
| 1291 |
+
"PRACTICE_DIGITAL_HYGIENE", "DEVELOP_SOVEREIGN_REPUTATION_SYSTEMS"]
|
| 1292 |
+
|
| 1293 |
+
async def generate_systemic_report(self) -> Dict[str, Any]:
|
| 1294 |
+
if not self.control_matrix:
|
| 1295 |
+
return {"error": "Control matrix not initialized"}
|
| 1296 |
+
return {
|
| 1297 |
+
"systemic_analysis": {
|
| 1298 |
+
"overall_sovereignty_threat": self.control_matrix.overall_sovereignty_threat,
|
| 1299 |
+
"institutional_coordination_score": self.control_matrix.coordination_score,
|
| 1300 |
+
"top_threat_entities": sorted(
|
| 1301 |
+
[(e.name, e.sovereignty_erosion_score) for e in self.control_matrix.entities],
|
| 1302 |
+
key=lambda x: x[1], reverse=True
|
| 1303 |
+
)[:5]
|
| 1304 |
+
},
|
| 1305 |
+
"sovereignty_preservation_framework": {
|
| 1306 |
+
"digital_protocols": self._digital_sovereignty_protocol(None),
|
| 1307 |
+
"financial_protocols": self._financial_sovereignty_protocol(None),
|
| 1308 |
+
"information_protocols": self._information_sovereignty_protocol(None),
|
| 1309 |
+
"cultural_protocols": self._cultural_sovereignty_protocol(None),
|
| 1310 |
+
"identity_protocols": self._identity_sovereignty_protocol(None)
|
| 1311 |
+
},
|
| 1312 |
+
"recommendation_tier": self._calculate_systemic_recommendation()
|
| 1313 |
+
}
|
| 1314 |
+
|
| 1315 |
+
def _calculate_systemic_recommendation(self) -> str:
|
| 1316 |
+
if not self.control_matrix:
|
| 1317 |
+
return "INSUFFICIENT_DATA"
|
| 1318 |
+
threat = self.control_matrix.overall_sovereignty_threat
|
| 1319 |
+
if threat > 0.8:
|
| 1320 |
+
return "IMMEDIATE_SOVEREIGN_INFRASTRUCTURE_DEPLOYMENT"
|
| 1321 |
+
elif threat > 0.6:
|
| 1322 |
+
return "ACCELERATED_SOVEREIGN_TRANSITION"
|
| 1323 |
+
elif threat > 0.4:
|
| 1324 |
+
return "STRATEGIC_SOVEREIGN_PREPARATION"
|
| 1325 |
+
else:
|
| 1326 |
+
return "MAINTAIN_SOVEREIGN_AWARENESS"
|
| 1327 |
+
|
| 1328 |
+
# ========================== SOVEREIGN COHERENCE LEDGER (no external grounding) ==========================
|
| 1329 |
+
|
| 1330 |
+
class SovereignCoherenceLedger:
|
| 1331 |
+
"""Internal ledger for claim coherence – no external APIs, no Wikipedia."""
|
| 1332 |
+
def __init__(self, path: str = "sovereign_coherence.json"):
|
| 1333 |
+
self.path = path
|
| 1334 |
+
self.claims: Dict[str, Dict] = {} # claim_id -> {text, timestamp, entities, coherence_score, contradictions}
|
| 1335 |
+
self.entities: Dict[str, Dict] = {} # entity -> {appearances, suppression_score}
|
| 1336 |
+
self.contradiction_graph: Dict[str, Set[str]] = defaultdict(set)
|
| 1337 |
+
self._load()
|
| 1338 |
+
|
| 1339 |
+
def _load(self):
|
| 1340 |
+
if os.path.exists(self.path):
|
| 1341 |
+
try:
|
| 1342 |
+
with open(self.path, 'r') as f:
|
| 1343 |
+
data = json.load(f)
|
| 1344 |
+
self.claims = data.get("claims", {})
|
| 1345 |
+
self.entities = data.get("entities", {})
|
| 1346 |
+
cg = data.get("contradiction_graph", {})
|
| 1347 |
+
self.contradiction_graph = {k: set(v) for k, v in cg.items()}
|
| 1348 |
+
except Exception:
|
| 1349 |
+
pass
|
| 1350 |
+
|
| 1351 |
+
def _save(self):
|
| 1352 |
+
cg_serializable = {k: list(v) for k, v in self.contradiction_graph.items()}
|
| 1353 |
+
data = {
|
| 1354 |
+
"claims": self.claims,
|
| 1355 |
+
"entities": self.entities,
|
| 1356 |
+
"contradiction_graph": cg_serializable,
|
| 1357 |
+
"updated": datetime.utcnow().isoformat() + "Z"
|
| 1358 |
+
}
|
| 1359 |
+
with open(self.path + ".tmp", 'w') as f:
|
| 1360 |
+
json.dump(data, f, indent=2)
|
| 1361 |
+
os.replace(self.path + ".tmp", self.path)
|
| 1362 |
+
|
| 1363 |
+
def add_claim(self, text: str, agent: str = "user") -> str:
|
| 1364 |
+
claim_id = secrets.token_hex(16)
|
| 1365 |
+
entities = self._extract_entities(text)
|
| 1366 |
+
self.claims[claim_id] = {
|
| 1367 |
+
"id": claim_id,
|
| 1368 |
+
"text": text,
|
| 1369 |
+
"agent": agent,
|
| 1370 |
+
"timestamp": datetime.utcnow().isoformat() + "Z",
|
| 1371 |
+
"entities": entities,
|
| 1372 |
+
"coherence_score": 0.5, # will be updated
|
| 1373 |
+
"contradictions": [],
|
| 1374 |
+
"suppression_score": 0.0,
|
| 1375 |
+
"signatures": []
|
| 1376 |
+
}
|
| 1377 |
+
# Update entity index
|
| 1378 |
+
for ent in entities:
|
| 1379 |
+
if ent not in self.entities:
|
| 1380 |
+
self.entities[ent] = {"appearances": [], "suppression_score": 0.0, "first_seen": self.claims[claim_id]["timestamp"]}
|
| 1381 |
+
self.entities[ent]["appearances"].append(claim_id)
|
| 1382 |
+
self.entities[ent]["last_seen"] = self.claims[claim_id]["timestamp"]
|
| 1383 |
+
self._save()
|
| 1384 |
+
return claim_id
|
| 1385 |
+
|
| 1386 |
+
def _extract_entities(self, text: str) -> List[str]:
|
| 1387 |
+
"""Simple proper noun extraction – no external dictionaries."""
|
| 1388 |
+
pattern = r'\b[A-Z][a-z]*(?:\s+[A-Z][a-z]*)*\b'
|
| 1389 |
+
matches = re.findall(pattern, text)
|
| 1390 |
+
stop = {"The", "This", "That", "These", "Those", "I", "We", "They", "He", "She", "It", "You"}
|
| 1391 |
+
return [m for m in matches if m not in stop and len(m) > 1]
|
| 1392 |
+
|
| 1393 |
+
def add_contradiction(self, claim_id_a: str, claim_id_b: str):
|
| 1394 |
+
"""User-defined contradiction between two claims."""
|
| 1395 |
+
self.contradiction_graph[claim_id_a].add(claim_id_b)
|
| 1396 |
+
self.contradiction_graph[claim_id_b].add(claim_id_a)
|
| 1397 |
+
if claim_id_b not in self.claims[claim_id_a]["contradictions"]:
|
| 1398 |
+
self.claims[claim_id_a]["contradictions"].append(claim_id_b)
|
| 1399 |
+
if claim_id_a not in self.claims[claim_id_b]["contradictions"]:
|
| 1400 |
+
self.claims[claim_id_b]["contradictions"].append(claim_id_a)
|
| 1401 |
+
self._update_coherence(claim_id_a)
|
| 1402 |
+
self._update_coherence(claim_id_b)
|
| 1403 |
+
self._save()
|
| 1404 |
+
|
| 1405 |
+
def _update_coherence(self, claim_id: str):
|
| 1406 |
+
"""Coherence = 1 - (number of contradictions / total claims in system)"""
|
| 1407 |
+
claim = self.claims.get(claim_id)
|
| 1408 |
+
if not claim:
|
| 1409 |
+
return
|
| 1410 |
+
num_contradictions = len(claim["contradictions"])
|
| 1411 |
+
total_claims = len(self.claims)
|
| 1412 |
+
if total_claims <= 1:
|
| 1413 |
+
claim["coherence_score"] = 1.0
|
| 1414 |
+
else:
|
| 1415 |
+
claim["coherence_score"] = 1.0 - min(1.0, num_contradictions / total_claims)
|
| 1416 |
+
|
| 1417 |
+
def add_suppression_signature(self, claim_id: str, signature: str, weight: float = 0.5):
|
| 1418 |
+
claim = self.claims.get(claim_id)
|
| 1419 |
+
if not claim:
|
| 1420 |
+
return
|
| 1421 |
+
if signature not in claim["signatures"]:
|
| 1422 |
+
claim["signatures"].append(signature)
|
| 1423 |
+
# Update suppression score: 1 - product(1 - weight_i)
|
| 1424 |
+
combined = 1.0
|
| 1425 |
+
for sig in claim["signatures"]:
|
| 1426 |
+
w = weight if sig == signature else 0.5 # simplified
|
| 1427 |
+
combined *= (1 - w)
|
| 1428 |
+
claim["suppression_score"] = 1 - combined
|
| 1429 |
+
# Update entity suppression scores
|
| 1430 |
+
for ent in claim["entities"]:
|
| 1431 |
+
ent_data = self.entities.get(ent)
|
| 1432 |
+
if ent_data:
|
| 1433 |
+
ent_combined = 1.0
|
| 1434 |
+
for cid in ent_data["appearances"]:
|
| 1435 |
+
sc = self.claims[cid].get("suppression_score", 0.0)
|
| 1436 |
+
ent_combined *= (1 - sc)
|
| 1437 |
+
ent_data["suppression_score"] = 1 - ent_combined
|
| 1438 |
+
self._save()
|
| 1439 |
+
|
| 1440 |
+
def get_contradiction_network(self, claim_id: str, depth: int = 2) -> Dict:
|
| 1441 |
+
"""Return a graph of contradictions up to depth."""
|
| 1442 |
+
visited = set()
|
| 1443 |
+
graph = {}
|
| 1444 |
+
def dfs(cid, d):
|
| 1445 |
+
if d > depth or cid in visited:
|
| 1446 |
+
return
|
| 1447 |
+
visited.add(cid)
|
| 1448 |
+
graph[cid] = list(self.contradiction_graph.get(cid, []))
|
| 1449 |
+
for other in graph[cid]:
|
| 1450 |
+
dfs(other, d+1)
|
| 1451 |
+
dfs(claim_id, 0)
|
| 1452 |
+
return graph
|
| 1453 |
+
|
| 1454 |
+
def get_entity_suppression(self, entity_name: str) -> Dict:
|
| 1455 |
+
ent = self.entities.get(entity_name)
|
| 1456 |
+
if not ent:
|
| 1457 |
+
return {"name": entity_name, "score": 0.0, "appearances": 0}
|
| 1458 |
+
return {
|
| 1459 |
+
"name": entity_name,
|
| 1460 |
+
"score": ent.get("suppression_score", 0.0),
|
| 1461 |
+
"appearances": len(ent["appearances"]),
|
| 1462 |
+
"first_seen": ent.get("first_seen"),
|
| 1463 |
+
"last_seen": ent.get("last_seen")
|
| 1464 |
+
}
|
| 1465 |
+
|
| 1466 |
+
def get_claim(self, claim_id: str) -> Optional[Dict]:
|
| 1467 |
+
return self.claims.get(claim_id)
|
| 1468 |
+
|
| 1469 |
+
def list_claims(self, limit: int = 100) -> List[Dict]:
|
| 1470 |
+
return list(self.claims.values())[-limit:]
|
| 1471 |
+
|
| 1472 |
+
# ========================== ENHANCED AI CONTROLLER ==========================
|
| 1473 |
+
|
| 1474 |
+
class AIController:
|
| 1475 |
+
def __init__(self, ledger: Ledger, separator: Separator, detector: HierarchicalDetector,
|
| 1476 |
+
kg: KnowledgeGraphEngine, temporal: TemporalAnalysisEngine, inference: ProbabilisticInference,
|
| 1477 |
+
ingestion_ai: IngestionAI, symbolism_ai: SymbolismAI, reasoning_ai: ReasoningAI,
|
| 1478 |
+
quantum_analyzer: QuantumControlAnalyzer, helper_killer: AdvancedHelperKillerEngine,
|
| 1479 |
+
coherence_ledger: SovereignCoherenceLedger):
|
| 1480 |
+
self.ledger = ledger
|
| 1481 |
+
self.separator = separator
|
| 1482 |
+
self.detector = detector
|
| 1483 |
+
self.kg = kg
|
| 1484 |
+
self.temporal = temporal
|
| 1485 |
+
self.inference = inference
|
| 1486 |
+
self.ingestion_ai = ingestion_ai
|
| 1487 |
+
self.symbolism_ai = symbolism_ai
|
| 1488 |
+
self.reasoning_ai = reasoning_ai
|
| 1489 |
+
self.quantum_analyzer = quantum_analyzer
|
| 1490 |
+
self.helper_killer = helper_killer
|
| 1491 |
+
self.coherence_ledger = coherence_ledger
|
| 1492 |
+
self.contexts = {} # correlation_id -> investigation context
|
| 1493 |
+
|
| 1494 |
+
def submit_claim(self, claim_text: str) -> str:
|
| 1495 |
+
corr_id = str(uuid.uuid4())
|
| 1496 |
+
# Add to coherence ledger
|
| 1497 |
+
claim_id = self.coherence_ledger.add_claim(claim_text, agent="user")
|
| 1498 |
+
context = {
|
| 1499 |
+
"correlation_id": corr_id,
|
| 1500 |
+
"coherence_claim_id": claim_id,
|
| 1501 |
+
"parent_id": None,
|
| 1502 |
+
"claim": claim_text,
|
| 1503 |
+
"status": "pending",
|
| 1504 |
+
"created": datetime.utcnow().isoformat() + "Z",
|
| 1505 |
+
"evidence_nodes": [],
|
| 1506 |
+
"sub_investigations": [],
|
| 1507 |
+
"results": {}
|
| 1508 |
+
}
|
| 1509 |
+
self.contexts[corr_id] = context
|
| 1510 |
+
thread = threading.Thread(target=self._investigate, args=(corr_id,))
|
| 1511 |
+
thread.start()
|
| 1512 |
+
return corr_id
|
| 1513 |
+
|
| 1514 |
+
def _investigate(self, corr_id: str):
|
| 1515 |
+
context = self.contexts[corr_id]
|
| 1516 |
+
context["status"] = "active"
|
| 1517 |
+
try:
|
| 1518 |
+
# Run detector on immutable ledger
|
| 1519 |
+
detection = self.detector.detect_from_ledger()
|
| 1520 |
+
# Build knowledge graph
|
| 1521 |
+
self.kg.build_from_ledger()
|
| 1522 |
+
# Temporal gaps
|
| 1523 |
+
gaps = self.temporal.publication_gaps()
|
| 1524 |
+
# Evaluate claim with reasoning AI
|
| 1525 |
+
decision = self.reasoning_ai.evaluate_claim(corr_id, [], detection)
|
| 1526 |
+
if decision.get("spawn_sub"):
|
| 1527 |
+
sub_id = str(uuid.uuid4())
|
| 1528 |
+
context["sub_investigations"].append(sub_id)
|
| 1529 |
+
# In production, spawn sub-investigation
|
| 1530 |
+
# Run quantum control analysis
|
| 1531 |
+
loop = asyncio.new_event_loop()
|
| 1532 |
+
asyncio.set_event_loop(loop)
|
| 1533 |
+
quantum_result = loop.run_until_complete(self.quantum_analyzer.analyze_complete_control_system())
|
| 1534 |
+
loop.close()
|
| 1535 |
+
# Compute coherence from the sovereign ledger
|
| 1536 |
+
claim_id = context["coherence_claim_id"]
|
| 1537 |
+
claim_data = self.coherence_ledger.get_claim(claim_id)
|
| 1538 |
+
coherence_score = claim_data.get("coherence_score", 0.5) if claim_data else 0.5
|
| 1539 |
+
suppression_score = claim_data.get("suppression_score", 0.0) if claim_data else 0.0
|
| 1540 |
+
# Store interpretation in separator
|
| 1541 |
+
interpretation = {
|
| 1542 |
+
"narrative": "Claim evaluated with full meta-analysis",
|
| 1543 |
+
"symbolism_coefficient": self.symbolism_ai.analyze({"text": context["claim"]}),
|
| 1544 |
+
"detection_summary": detection,
|
| 1545 |
+
"quantum_analysis": quantum_result,
|
| 1546 |
+
"temporal_gaps": gaps,
|
| 1547 |
+
"coherence_score": coherence_score,
|
| 1548 |
+
"suppression_score": suppression_score
|
| 1549 |
+
}
|
| 1550 |
+
node_hashes = []
|
| 1551 |
+
int_id = self.separator.add(node_hashes, interpretation, "AI_Controller", confidence=coherence_score)
|
| 1552 |
+
context["results"] = {
|
| 1553 |
+
"confidence": coherence_score,
|
| 1554 |
+
"interpretation_id": int_id,
|
| 1555 |
+
"detection": detection,
|
| 1556 |
+
"quantum": quantum_result,
|
| 1557 |
+
"coherence_score": coherence_score,
|
| 1558 |
+
"suppression_score": suppression_score
|
| 1559 |
+
}
|
| 1560 |
+
context["status"] = "complete"
|
| 1561 |
+
except Exception as e:
|
| 1562 |
+
logger.error(f"Investigation {corr_id} failed: {e}")
|
| 1563 |
+
context["status"] = "failed"
|
| 1564 |
+
context["error"] = str(e)
|
| 1565 |
+
|
| 1566 |
+
def get_status(self, corr_id: str) -> Dict:
|
| 1567 |
+
return self.contexts.get(corr_id, {"error": "not found"})
|
| 1568 |
+
|
| 1569 |
+
def add_contradiction(self, claim_id_a: str, claim_id_b: str):
|
| 1570 |
+
"""Manually mark two claims as contradictory."""
|
| 1571 |
+
self.coherence_ledger.add_contradiction(claim_id_a, claim_id_b)
|
| 1572 |
+
|
| 1573 |
+
def add_suppression_signature(self, claim_id: str, signature: str, weight: float = 0.5):
|
| 1574 |
+
self.coherence_ledger.add_suppression_signature(claim_id, signature, weight)
|
| 1575 |
+
|
| 1576 |
+
# ========================== FLASK API ==========================
|
| 1577 |
+
|
| 1578 |
+
app = Flask(__name__)
|
| 1579 |
+
controller: Optional[AIController] = None
|
| 1580 |
+
|
| 1581 |
+
@app.route('/api/v1/submit_claim', methods=['POST'])
|
| 1582 |
+
def submit_claim():
|
| 1583 |
+
data = request.get_json()
|
| 1584 |
+
claim = data.get('claim')
|
| 1585 |
+
if not claim:
|
| 1586 |
+
return jsonify({"error": "Missing claim"}), 400
|
| 1587 |
+
corr_id = controller.submit_claim(claim)
|
| 1588 |
+
return jsonify({"investigation_id": corr_id})
|
| 1589 |
+
|
| 1590 |
+
@app.route('/api/v1/investigation/<corr_id>', methods=['GET'])
|
| 1591 |
+
def get_investigation(corr_id):
|
| 1592 |
+
status = controller.get_status(corr_id)
|
| 1593 |
+
return jsonify(status)
|
| 1594 |
+
|
| 1595 |
+
@app.route('/api/v1/node/<node_hash>', methods=['GET'])
|
| 1596 |
+
def get_node(node_hash):
|
| 1597 |
+
node = controller.ledger.get_node(node_hash)
|
| 1598 |
+
if not node:
|
| 1599 |
+
return jsonify({"error": "Node not found"}), 404
|
| 1600 |
+
return jsonify(node)
|
| 1601 |
+
|
| 1602 |
+
@app.route('/api/v1/interpretations/<node_hash>', methods=['GET'])
|
| 1603 |
+
def get_interpretations(node_hash):
|
| 1604 |
+
ints = controller.separator.get_interpretations(node_hash)
|
| 1605 |
+
return jsonify(ints)
|
| 1606 |
+
|
| 1607 |
+
@app.route('/api/v1/detect', methods=['GET'])
|
| 1608 |
+
def run_detection():
|
| 1609 |
+
result = controller.detector.detect_from_ledger()
|
| 1610 |
+
return jsonify(result)
|
| 1611 |
+
|
| 1612 |
+
@app.route('/api/v1/analyze_help_offer', methods=['POST'])
|
| 1613 |
+
def analyze_help_offer():
|
| 1614 |
+
data = request.get_json()
|
| 1615 |
+
if not data:
|
| 1616 |
+
return jsonify({"error": "Missing help context"}), 400
|
| 1617 |
+
loop = asyncio.new_event_loop()
|
| 1618 |
+
asyncio.set_event_loop(loop)
|
| 1619 |
+
result = loop.run_until_complete(controller.helper_killer.analyze_help_offer(data))
|
| 1620 |
+
loop.close()
|
| 1621 |
+
return jsonify(result)
|
| 1622 |
+
|
| 1623 |
+
@app.route('/api/v1/systemic_report', methods=['GET'])
|
| 1624 |
+
def systemic_report():
|
| 1625 |
+
loop = asyncio.new_event_loop()
|
| 1626 |
+
asyncio.set_event_loop(loop)
|
| 1627 |
+
report = loop.run_until_complete(controller.helper_killer.generate_systemic_report())
|
| 1628 |
+
loop.close()
|
| 1629 |
+
return jsonify(report)
|
| 1630 |
+
|
| 1631 |
+
@app.route('/api/v1/control_matrix', methods=['GET'])
|
| 1632 |
+
def control_matrix():
|
| 1633 |
+
cm = controller.quantum_analyzer.control_matrix
|
| 1634 |
+
# Convert to dict for JSON
|
| 1635 |
+
return jsonify(asdict(cm))
|
| 1636 |
+
|
| 1637 |
+
@app.route('/api/v1/coherence/claims', methods=['GET'])
|
| 1638 |
+
def list_coherence_claims():
|
| 1639 |
+
claims = controller.coherence_ledger.list_claims(limit=100)
|
| 1640 |
+
return jsonify(claims)
|
| 1641 |
+
|
| 1642 |
+
@app.route('/api/v1/coherence/contradictions/<claim_id>', methods=['GET'])
|
| 1643 |
+
def get_contradictions(claim_id):
|
| 1644 |
+
graph = controller.coherence_ledger.get_contradiction_network(claim_id, depth=2)
|
| 1645 |
+
return jsonify(graph)
|
| 1646 |
+
|
| 1647 |
+
@app.route('/api/v1/coherence/add_contradiction', methods=['POST'])
|
| 1648 |
+
def add_contradiction():
|
| 1649 |
+
data = request.get_json()
|
| 1650 |
+
claim_a = data.get('claim_id_a')
|
| 1651 |
+
claim_b = data.get('claim_id_b')
|
| 1652 |
+
if not claim_a or not claim_b:
|
| 1653 |
+
return jsonify({"error": "Missing claim_id_a or claim_id_b"}), 400
|
| 1654 |
+
controller.add_contradiction(claim_a, claim_b)
|
| 1655 |
+
return jsonify({"status": "contradiction added"})
|
| 1656 |
+
|
| 1657 |
+
@app.route('/api/v1/coherence/add_suppression', methods=['POST'])
|
| 1658 |
+
def add_suppression():
|
| 1659 |
+
data = request.get_json()
|
| 1660 |
+
claim_id = data.get('claim_id')
|
| 1661 |
+
signature = data.get('signature')
|
| 1662 |
+
weight = data.get('weight', 0.5)
|
| 1663 |
+
if not claim_id or not signature:
|
| 1664 |
+
return jsonify({"error": "Missing claim_id or signature"}), 400
|
| 1665 |
+
controller.add_suppression_signature(claim_id, signature, weight)
|
| 1666 |
+
return jsonify({"status": "suppression signature added"})
|
| 1667 |
+
|
| 1668 |
+
@app.route('/api/v1/entity/<entity_name>', methods=['GET'])
|
| 1669 |
+
def get_entity(entity_name):
|
| 1670 |
+
result = controller.coherence_ledger.get_entity_suppression(entity_name)
|
| 1671 |
+
return jsonify(result)
|
| 1672 |
+
|
| 1673 |
+
# ========================== MAIN ==========================
|
| 1674 |
+
|
| 1675 |
+
def main():
|
| 1676 |
+
# Initialize components
|
| 1677 |
+
crypto = Crypto("./keys")
|
| 1678 |
+
ledger = Ledger("./ledger.json", crypto)
|
| 1679 |
+
separator = Separator(ledger, "./separator")
|
| 1680 |
+
hierarchy = SuppressionHierarchy()
|
| 1681 |
+
detector = HierarchicalDetector(hierarchy, ledger, separator)
|
| 1682 |
+
kg = KnowledgeGraphEngine(ledger)
|
| 1683 |
+
temporal = TemporalAnalysisEngine(ledger)
|
| 1684 |
+
inference = ProbabilisticInference()
|
| 1685 |
+
ingestion_ai = IngestionAI(crypto)
|
| 1686 |
+
symbolism_ai = SymbolismAI()
|
| 1687 |
+
reasoning_ai = ReasoningAI(inference)
|
| 1688 |
+
quantum_analyzer = QuantumControlAnalyzer()
|
| 1689 |
+
helper_killer = AdvancedHelperKillerEngine()
|
| 1690 |
+
coherence_ledger = SovereignCoherenceLedger()
|
| 1691 |
+
|
| 1692 |
+
global controller
|
| 1693 |
+
controller = AIController(
|
| 1694 |
+
ledger, separator, detector, kg, temporal, inference,
|
| 1695 |
+
ingestion_ai, symbolism_ai, reasoning_ai,
|
| 1696 |
+
quantum_analyzer, helper_killer, coherence_ledger
|
| 1697 |
+
)
|
| 1698 |
+
|
| 1699 |
+
# Start Flask API
|
| 1700 |
+
app.run(debug=True, port=5000, threaded=True)
|
| 1701 |
+
|
| 1702 |
+
if __name__ == "__main__":
|
| 1703 |
+
main()
|