diff --git a/.carve/config.edn b/.carve/config.edn index a9f9df1e9d..00978140eb 100644 --- a/.carve/config.edn +++ b/.carve/config.edn @@ -1,6 +1,6 @@ {;; Only lint production namespaces as most dev ;; namespaces are unused - :paths ["src/main" "src/electron" "src/test" "src/rtc_e2e_test"] + :paths ["src/main" "src/electron" "src/test"] :api-namespaces [;; Ignore b/c too many false positives frontend.db ;; Used for debugging diff --git a/bb.edn b/bb.edn index 54397764ff..408137fb46 100644 --- a/bb.edn +++ b/bb.edn @@ -164,9 +164,6 @@ dev:lint-and-test logseq.tasks.dev/lint-and-test - dev:rtc-e2e-test - logseq.tasks.dev/rtc-e2e-test - dev:gen-malli-kondo-config logseq.tasks.dev/gen-malli-kondo-config diff --git a/deps.edn b/deps.edn index 5a096f6c95..5d16fd962a 100644 --- a/deps.edn +++ b/deps.edn @@ -68,10 +68,6 @@ cider/cider-nrepl {:mvn/version "0.55.1"}} :main-opts ["-m" "shadow.cljs.devtools.cli"]} - :rtc-e2e-test {:extra-paths ["src/rtc_e2e_test"] - :extra-deps {cider/cider-nrepl {:mvn/version "0.50.2"}} - :main-opts ["-m" "shadow.cljs.devtools.cli"]} - :bench {:extra-paths ["src/bench/"] :extra-deps {olical/cljs-test-runner {:mvn/version "3.8.0"} fipp/fipp {:mvn/version "0.6.26"}} diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 5f8098362f..0000000000 --- a/karma.conf.js +++ /dev/null @@ -1,19 +0,0 @@ -module.exports = function (config) { - config.set({ - browsers: ['Chrome'], - // The directory where the output file lives - basePath: 'static/rtc-e2e-test', - // The file itself - files: ['main.js'], - frameworks: ['cljs-test'], - plugins: ['karma-cljs-test', 'karma-chrome-launcher'], - colors: true, - logLevel: config.LOG_INFO, - client: { - args: ["shadow.test.karma.init"], - singleRun: true, - testvar: config.testvar, - seed: config.seed - } - }) -}; diff --git a/scripts/src/logseq/tasks/dev.clj b/scripts/src/logseq/tasks/dev.clj index 73e28135ef..bfbbeac0db 100644 --- a/scripts/src/logseq/tasks/dev.clj +++ b/scripts/src/logseq/tasks/dev.clj @@ -26,17 +26,6 @@ (dev-lint/dev) (test "-e" "long" "-e" "fix-me")) -(defn rtc-e2e-test - "Run karma rtc-e2e-test" - [& [skip-compile?]] - (let [seed (hash (rand)) - r0 (when-not skip-compile? (shell (str "clj -M:rtc-e2e-test compile rtc-e2e-test"))) - c1 (async/go (shell (str "npx karma start --testvar=client1 --single-run --seed=" seed))) - c2 (async/go (shell (str "npx karma start --testvar=client2 --single-run --seed=" seed)))] - (when (and r0 (not= 0 (:exit r0))) - (throw (ex-info "compile failed" {:r r0}))) - (prn :exit-code :client1 (:exit (async/ canceler (volatile! {})) diff --git a/src/main/frontend/worker/rtc/const.cljs b/src/main/frontend/worker/rtc/const.cljs index 3cecfa4aec..cebdec684e 100644 --- a/src/main/frontend/worker/rtc/const.cljs +++ b/src/main/frontend/worker/rtc/const.cljs @@ -4,9 +4,6 @@ [logseq.db.frontend.kv-entity :as kv-entity] [logseq.db.frontend.property :as db-property])) -(goog-define RTC-E2E-TEST* false) -(def RTC-E2E-TEST RTC-E2E-TEST*) - (defkeywords :rtc/ignore-attr-when-init-upload {:doc "keyword option for RTC. ignore this *attr* when initial uploading graph. Default false"} diff --git a/src/main/frontend/worker/rtc/full_upload_download_graph.cljs b/src/main/frontend/worker/rtc/full_upload_download_graph.cljs index 1246976499..daca00425c 100644 --- a/src/main/frontend/worker/rtc/full_upload_download_graph.cljs +++ b/src/main/frontend/worker/rtc/full_upload_download_graph.cljs @@ -8,7 +8,6 @@ [frontend.common.thread-api :as thread-api] [frontend.worker-common.util :as worker-util] [frontend.worker.crypt :as crypt] - [frontend.worker.db-listener :as db-listener] [frontend.worker.db-metadata :as worker-db-metadata] [frontend.worker.rtc.client-op :as client-op] [frontend.worker.rtc.const :as rtc-const] @@ -20,8 +19,6 @@ [lambdaisland.glogi :as log] [logseq.db :as ldb] [logseq.db.frontend.malli-schema :as db-malli-schema] - [logseq.db.frontend.schema :as db-schema] - [logseq.db.sqlite.create-graph :as sqlite-create-graph] [logseq.db.sqlite.util :as sqlite-util] [logseq.outliner.pipeline :as outliner-pipeline] [malli.core :as ma] @@ -161,8 +158,7 @@ (client-op/remove-local-tx repo) (client-op/add-all-exists-asset-as-ops repo) (crypt/store-graph-keys-jwk repo aes-key-jwk) - (when-not rtc-const/RTC-E2E-TEST - (c.m/ (into [] (frequencies (map last refs-tx)))))) - ) - - - ) + )) diff --git a/src/main/frontend/worker/rtc/log_and_state.cljs b/src/main/frontend/worker/rtc/log_and_state.cljs index a7320a730a..58ed54a4f3 100644 --- a/src/main/frontend/worker/rtc/log_and_state.cljs +++ b/src/main/frontend/worker/rtc/log_and_state.cljs @@ -9,10 +9,6 @@ (def ^:private *rtc-log (atom nil)) -(def rtc-log-flow - "used by rtc-e2e-test" - (m/watch *rtc-log)) - (def ^:private rtc-log-type-schema (vec (concat diff --git a/src/main/frontend/worker/rtc/remote_update.cljs b/src/main/frontend/worker/rtc/remote_update.cljs index 510634a5ff..c4db081284 100644 --- a/src/main/frontend/worker/rtc/remote_update.cljs +++ b/src/main/frontend/worker/rtc/remote_update.cljs @@ -618,8 +618,7 @@ so need to pull earlier remote-data from websocket."}) (js/console.groupCollapsed "rtc/apply-remote-ops-log") (batch-tx/with-batch-tx-mode conn {:rtc-tx? true :persist-op? false - :gen-undo-ops? false - :frontend.worker.pipeline/skip-store-conn rtc-const/RTC-E2E-TEST} + :gen-undo-ops? false} (worker-util/profile :ensure-refed-blocks-exist (ensure-refed-blocks-exist repo conn refed-blocks)) (worker-util/profile :apply-remote-update-page-ops (apply-remote-update-page-ops repo conn update-page-ops)) (worker-util/profile :apply-remote-move-ops (apply-remote-move-ops repo conn sorted-move-ops)) diff --git a/src/rtc_e2e_test/basic_edits_test.cljs b/src/rtc_e2e_test/basic_edits_test.cljs deleted file mode 100644 index 9f8ed4d14a..0000000000 --- a/src/rtc_e2e_test/basic_edits_test.cljs +++ /dev/null @@ -1,28 +0,0 @@ -(ns basic-edits-test - (:require [client-steps] - [cljs.test :as t :refer [deftest]] - [const] - [fixture] - [helper] - [missionary.core :as m])) - -(t/use-fixtures :once - fixture/install-some-consts - fixture/install-example-db-fixture - fixture/clear-test-remote-graphs-fixture - fixture/upload-example-graph-fixture - fixture/build-conn-by-download-example-graph-fixture) - -(deftest basic-edits-test - (t/async - done - (js/Promise. - (if const/is-client1? - (m/sp - (doseq [task client-steps/client1-steps] - (m/? task)) - (done)) - (m/sp - (doseq [task client-steps/client2-steps] - (m/? task)) - (done)))))) diff --git a/src/rtc_e2e_test/client_steps.cljs b/src/rtc_e2e_test/client_steps.cljs deleted file mode 100644 index 7c8ce841c4..0000000000 --- a/src/rtc_e2e_test/client_steps.cljs +++ /dev/null @@ -1,264 +0,0 @@ -(ns client-steps - (:require [cljs.test :as t :refer [is]] - [const] - [datascript.core :as d] - [frontend.worker.rtc.client-op :as client-op] - [frontend.worker.rtc.core :as rtc-core] - [helper] - [frontend.common.missionary :as c.m] - [logseq.db :as ldb] - [missionary.core :as m])) - -(def ^:private step0 - {:client1 - (m/sp - (let [conn (helper/get-downloaded-test-conn) - tx-data (const/tx-data-map :create-page)] - (helper/transact! conn tx-data) - (is (= - #{[:update-page const/page1-uuid] - [:update const/page1-uuid - [[:block/title "[\"~#'\",\"basic-edits-test\"]" true] - [:block/created-at "[\"~#'\",1724836490809]" true] - [:block/updated-at "[\"~#'\",1724836490809]" true] - [:block/type "[\"~#'\",\"page\"]" true]]] - [:move const/block1-uuid] - [:update const/block1-uuid - [[:block/updated-at "[\"~#'\",1724836490810]" true] - [:block/created-at "[\"~#'\",1724836490810]" true] - [:block/title "[\"~#'\",\"block1\"]" true]]]} - (set (map helper/simplify-client-op (client-op/get-all-block-ops const/downloaded-test-repo))))))) - :client2 nil}) - -(def ^:private step1 - "client1: start rtc, wait page1, client1->remote - client2: start rtc, wait page1, remote->client2" - {:client1 - (m/sp - (let [r (m/? (rtc-core/new-task--rtc-start false))] - (is (nil? r)) - (m/? (helper/new-task--wait-all-client-ops-sent)))) - :client2 - (m/sp - (let [r (m/? (rtc-core/new-task--rtc-start false))] - (is (nil? r))) - (m/? - (c.m/backoff - {} - (m/sp - (let [conn (helper/get-downloaded-test-conn) - page1 (d/pull @conn '[*] [:block/uuid const/page1-uuid]) - block1 (d/pull @conn '[*] [:block/uuid const/block1-uuid])] - (when-not (:block/uuid page1) - (throw (ex-info "wait page1 synced" {:missionary/retry true}))) - (is - (= {:block/title "basic-edits-test" - :block/name "basic-edits-test" - :block/type "page"} - (select-keys page1 [:block/title :block/name :block/type]))) - (is - (= {:block/title "block1" - :block/order "a0" - :block/parent {:db/id (:db/id page1)}} - (select-keys block1 [:block/title :block/order :block/parent]))))))))}) - -(def ^:private step2 - "client1: insert 500 blocks, wait for changes to sync to remote - client2: wait for blocks to sync from remote" - {:client1 - (m/sp - (let [conn (helper/get-downloaded-test-conn)] - (helper/transact! conn (const/tx-data-map :insert-500-blocks)) - (m/? (helper/new-task--wait-all-client-ops-sent)))) - :client2 - (c.m/backoff - {} - (m/sp - (let [conn (helper/get-downloaded-test-conn) - page (d/pull @conn '[*] [:block/uuid const/page2-uuid])] - (when-not (:block/uuid page) - (throw (ex-info "wait page to be synced" {:missionary/retry true}))) - (let [blocks (ldb/sort-by-order (ldb/get-page-blocks @conn (:db/id page)))] - (is (= 500 (count blocks))) - (is (= (map #(str "x" %) (range 500)) - (map :block/title blocks)))))))}) - -(def ^:private step3 - "client1: - 1. add #task properties to block1 (`const/block1-uuid`) - 2. wait to be synced - 3. toggle block1 status to TODO - 4. wait to be synced - 5. toggle block1 status to DOING - 6. wait to be synced - client2: - 1. wait the block&its properties to be synced" - {:client1 - (m/sp - (let [conn (helper/get-downloaded-test-conn) - tx-data1 (const/tx-data-map :step3-add-task-properties-to-block1) - tx-data2 (const/tx-data-map :step3-toggle-status-TODO) - tx-data3 (const/tx-data-map :step3-toggle-status-DOING)] - (helper/transact! conn tx-data1) - (m/? (helper/new-task--wait-all-client-ops-sent)) - (helper/transact! conn tx-data2) - (m/? (helper/new-task--wait-all-client-ops-sent)) - (helper/transact! conn tx-data3) - (m/? (helper/new-task--wait-all-client-ops-sent)))) - :client2 - (c.m/backoff - {} - (m/sp - (let [conn (helper/get-downloaded-test-conn) - block1 (d/pull @conn - [{:block/tags [:db/ident]} - {:logseq.property/status [:db/ident]} - {:logseq.property/deadline [:block/journal-day]}] - [:block/uuid const/block1-uuid])] - (when-not (= :logseq.property/status.doing (:db/ident (:logseq.property/status block1))) - (throw (ex-info "wait block1's task properties to be synced" {:missionary/retry true}))) - (is (= {:block/tags [{:db/ident :logseq.class/Task}], - :logseq.property/status {:db/ident :logseq.property/status.doing} - :logseq.property/deadline {:block/journal-day 20240907}} - block1)))))}) -(def ^:private step4 - "client1: - - client2: -" - {:client1 - (m/sp nil) - :client2 - (m/sp nil)}) - -(def ^:private step5 - "client1: - - insert some blocks in page2 - - wait to be synced - - wait a signal from client2 - - send a signal to client2 - - stop rtc - - move some blocks - - start rtc - - wait to be synced - - wait client2's message, which contains the result of client2's block tree, - and compare them with blocks in client1 - client2: - - wait inserted blocks synced - - send a signal to client1 - - wait a signal from client1 - - stop rtc - - move some blocks - - start rtc - - wait to be synced - - send a message to client1 contains client2's block tree to client1" - {:client1 - (m/sp - (let [conn (helper/get-downloaded-test-conn) - tx-data1 (const/tx-data-map :move-blocks-concurrently-1) - tx-data2 (const/tx-data-map :move-blocks-concurrently-client1)] - (helper/transact! conn tx-data1) - (m/? (helper/new-task--wait-all-client-ops-sent)) - (m/? (helper/new-task--client1-sync-barrier-2->1 "move-blocks-concurrently-signal")) - (m/? helper/new-task--stop-rtc) - (helper/transact! conn tx-data2) - (is (nil? (m/? (rtc-core/new-task--rtc-start false)))) - (m/? (helper/new-task--wait-all-client-ops-sent)) - (m/? (helper/new-task--client1-sync-barrier-2->1 "step5")) - (let [message (m/? (helper/new-task--wait-message-from-other-client - (fn [message] (= "move-blocks-concurrently-page-blocks" (:id message))) - :retry-message "move-blocks-concurrently-page-blocks")) - client2-page-blocks (:page-blocks message) - client1-page-blocks (ldb/get-page-blocks @conn (:db/id (d/entity @conn [:block/uuid const/page3-uuid])) - :pull-keys '[:block/uuid :block/title :block/order - {:block/parent [:block/uuid]}])] - (is (= (set client1-page-blocks) (set client2-page-blocks)))))) - :client2 - (m/sp - (let [conn (helper/get-downloaded-test-conn)] - (m/? - (c.m/backoff - (take 4 c.m/delays) - (m/sp - (let [page3 (d/pull @conn '[*] [:block/uuid const/page3-uuid]) - page3-blocks (some->> (:db/id page3) - (ldb/get-page-blocks @conn))] - (when-not (:block/uuid page3) - (throw (ex-info "wait page3 synced" {:missionary/retry true}))) - (is (= 6 (count page3-blocks))))))) - (m/? (helper/new-task--client2-sync-barrier-2->1 "move-blocks-concurrently-signal")) - (m/? helper/new-task--stop-rtc) - (helper/transact! conn (const/tx-data-map :move-blocks-concurrently-client2)) - (is (nil? (m/? (rtc-core/new-task--rtc-start false)))) - (m/? (helper/new-task--wait-all-client-ops-sent)) - (m/? (helper/new-task--client2-sync-barrier-2->1 "step5")) - (m/? (helper/new-task--send-message-to-other-client - {:id "move-blocks-concurrently-page-blocks" - :page-blocks (ldb/get-page-blocks @conn (:db/id (d/entity @conn [:block/uuid const/page3-uuid])) - :pull-keys '[:block/uuid :block/title :block/order - {:block/parent [:block/uuid]}])}))))}) - -(def ^:private step6 - "Delete blocks test-1 -client1: -- insert some blocks -- wait to be synced -- stop rtc -- delete blocks -- start rtc -- wait to be synced - -client2: -- wait blocks from client1 -- wait delete-blocks changes synced from client1 -- check block-tree" - {:client1 - (m/sp - (let [conn (helper/get-downloaded-test-conn) - tx-data1 (const/tx-data-map :step6-delete-blocks-client1-1) - tx-data2 (const/tx-data-map :step6-delete-blocks-client1-2)] - (helper/transact! conn tx-data1) - (m/? (helper/new-task--wait-all-client-ops-sent)) - (m/? (helper/new-task--client1-sync-barrier-1->2 "step6")) - (m/? helper/new-task--stop-rtc) - (helper/transact! conn tx-data2) - (let [r (m/? (rtc-core/new-task--rtc-start false))] - (is (nil? r)) - (m/? (helper/new-task--wait-all-client-ops-sent))))) - :client2 - (m/sp - (let [conn (helper/get-downloaded-test-conn)] - (m/? (helper/new-task--client2-sync-barrier-1->2 "step6")) - (m/? - (c.m/backoff - {} - (m/sp - (let [page (d/pull @conn '[*] [:block/uuid const/step6-page-uuid]) - page-blocks (when-let [page-id (:db/id page)] - (ldb/get-page-blocks @conn page-id - :pull-keys '[:block/uuid {:block/parent [:block/uuid]}]))] - (when-not (= 1 (count page-blocks)) - (throw (ex-info "wait delete-blocks changes synced" - {:missionary/retry true - :page-blocks page-blocks}))) - (is (= {:block/uuid const/step6-block3-uuid - :block/parent {:block/uuid const/step6-page-uuid}} - (select-keys (first page-blocks) [:block/uuid :block/parent])))))))))}) - -(defn- wrap-print-step-info - [steps client] - (map-indexed - (fn [idx step] - (m/sp - (helper/log "start step" idx) - (some-> (get step client) m/?) - (helper/log "end step" idx))) - steps)) - -(def ^:private all-steps [step0 step1 step2 step3 step4 step5 step6]) - -(def client1-steps - (wrap-print-step-info all-steps :client1)) - -(def client2-steps - (wrap-print-step-info all-steps :client2)) diff --git a/src/rtc_e2e_test/const.cljs b/src/rtc_e2e_test/const.cljs deleted file mode 100644 index 7102e5c3ae..0000000000 --- a/src/rtc_e2e_test/const.cljs +++ /dev/null @@ -1,229 +0,0 @@ -(ns const - "Consts for rtc e2e tests" - (:require [logseq.db.common.order :as db-order])) - -(assert (exists? js/__karma__)) -(def seed js/__karma__.config.seed) -(def testvar js/__karma__.config.testvar) -(prn :karma-config :seed seed :testvar testvar) - -(def is-client1? (= "client1" testvar)) - -(def test-token "TEST-TOKEN") -(def test-graph-name (str "TEST-REPO-" seed)) -(def test-repo (str "logseq_db_TEST-REPO-" seed)) - -(def downloaded-test-graph-name "TEST-REPO-downloaded") -(def downloaded-test-repo "logseq_db_TEST-REPO-downloaded") - -;;; tests data -(def message-page-uuid #uuid "a3da426a-4202-4a79-8e97-13f4862b0270") - -(def page1-uuid #uuid "c051d36f-98b3-4afb-b52a-d5a06bd8591d") -(def page2-uuid #uuid "91d3e320-d2a6-47ae-96a7-8a366ab96cbb") -(def page3-uuid #uuid "9a846640-2b63-4298-9ad6-8ca6c1285016") - -(def block1-uuid #uuid "aa6d5e60-5d3a-4468-812f-bd60dc9639fb") - -;;; ----- move-blocks-concurrently case ----- -(def block2-uuid #uuid "a78e19fc-7e9a-4f61-8988-0e9a649bc875") -(def block3-uuid #uuid "226166d8-1380-4d7a-9fe1-f98e2d583259") -(def block4-uuid #uuid "fb8f05d2-9d91-492e-81e2-8a0b65f09d8c") -(def block5-uuid #uuid "f3c48e62-1726-4492-b42a-a36f4de7b32f") -(def block6-uuid #uuid "23f51a53-db85-465a-9f18-6ca94e59f56c") -(def block7-uuid #uuid "83f99937-fe0a-4d33-81ce-7fe5837baad3") -;;; ----- delete-blocks case --------- -(def step6-page-uuid #uuid "e22dafa5-b3b4-405d-b93d-470caa420e10") -(def step6-block1-uuid #uuid "776acd4a-d011-4985-bfc2-14ee7bbd6a28") -(def step6-block2-uuid #uuid "ba3998c2-8059-4f9e-9e76-2760d2f14512") -(def step6-block3-uuid #uuid "f9ce5393-370a-43dd-a721-aaa5ef83d3ff") -(def step6-block4-uuid #uuid "db00bb0d-2bef-49e7-96ed-b4882cdf5686") -(def step6-block5-uuid #uuid "d34e8a9c-5e87-4511-b982-2bf2ebc82607") - -(def ^:large-vars/data-var tx-data-map - {:create-page - [{:db/id "page" - :block/name "basic-edits-test" - :block/title "basic-edits-test" - :block/uuid page1-uuid - :block/created-at 1724836490809 - :block/updated-at 1724836490809 - :block/type "page"} - {:block/uuid block1-uuid - :block/updated-at 1724836490810 - :block/created-at 1724836490810 - :block/title "block1" - :block/parent "page" - :block/order "a0" - :block/page "page"}] - :insert-500-blocks - (cons {:db/id "page" - :block/uuid page2-uuid - :block/name "insert-500-blocks" - :block/title "insert-500-blocks" - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/type "page"} - (map (fn [i order] - {:block/uuid (random-uuid) - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title (str "x" i) - :block/parent "page" - :block/order order - :block/page "page"}) - (range 500) (db-order/gen-n-keys 500 "a0" "a1"))) - :step3-add-task-properties-to-block1 - [{:db/id "id-0907" - :block/uuid #uuid "00000001-2024-0907-0000-000000000000" - :block/updated-at 1725455235108 - :block/created-at 1725455235108 - :block/journal-day 20240907 - :block/title "Sep 7th, 2024" - :block/name "sep 7th, 2024" - :block/type "journal"} - {:block/uuid block1-uuid - :block/updated-at 1725454876718 - :block/tags :logseq.class/Task - :logseq.property/status :logseq.property/status.done - :logseq.property/deadline "id-0907"}] - :step3-toggle-status-TODO - [{:block/uuid block1-uuid - :logseq.property/status :logseq.property/status.todo}] - :step3-toggle-status-DOING - [{:block/uuid block1-uuid - :logseq.property/status :logseq.property/status.doing}] - :move-blocks-concurrently-1 - [{:db/id "page" - :block/uuid page3-uuid - :block/name "move-blocks-concurrently" - :block/title "move-blocks-concurrently" - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/type "page"} - {:block/uuid block2-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x1" - :block/parent "page" - :block/order "a0" - :block/page "page"} - {:block/uuid block3-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x2" - :block/parent "page" - :block/order "a1" - :block/page "page"} - {:block/uuid block4-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x3" - :block/parent "page" - :block/order "a2" - :block/page "page"} - {:block/uuid block5-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x4" - :block/parent "page" - :block/order "a3" - :block/page "page"} - {:block/uuid block6-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x5" - :block/parent "page" - :block/order "a4" - :block/page "page"} - {:block/uuid block7-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x6" - :block/parent "page" - :block/order "a5" - :block/page "page"}] - :move-blocks-concurrently-client1 - [{:block/uuid block6-uuid - :block/parent [:block/uuid block3-uuid] - :block/order "a0"} - {:block/uuid block5-uuid - :block/parent [:block/uuid block6-uuid] - :block/order "a0"} - {:block/uuid block4-uuid - :block/parent [:block/uuid block2-uuid] - :block/order "a0"} - {:block/uuid block7-uuid - :block/parent [:block/uuid page3-uuid] - :block/order (db-order/gen-key "a0" "a1")}] - :move-blocks-concurrently-client2 - [{:block/uuid block2-uuid - :block/order "a2V"} - {:block/uuid block5-uuid - :block/parent [:block/uuid block3-uuid] - :block/order "a0"} - {:block/uuid block6-uuid - :block/parent [:block/uuid block5-uuid] - :block/order "a0"} - {:block/uuid block4-uuid - :block/parent [:block/uuid block7-uuid] - :block/order "a0"}] - :step6-delete-blocks-client1-1 - ;; - 1 - ;; - 2 - ;; - 3 - ;; - 4 - ;; - 5 - [{:db/id "page" - :block/uuid step6-page-uuid - :block/name "step6-delete-blocks" - :block/title "step6-delete-blocks" - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/type "page"} - {:db/id "b1" - :block/uuid step6-block1-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x1" - :block/parent "page" - :block/order "a0" - :block/page "page"} - {:db/id "b2" - :block/uuid step6-block2-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x2" - :block/parent "b1" - :block/order "a0" - :block/page "page"} - {:db/id "b3" - :block/uuid step6-block3-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x3" - :block/parent "page" - :block/order "a1" - :block/page "page"} - {:db/id "b4" - :block/uuid step6-block4-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x4" - :block/parent "b3" - :block/order "a0" - :block/page "page"} - {:db/id "b5" - :block/uuid step6-block5-uuid - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/title "x5" - :block/parent "b4" - :block/order "a0" - :block/page "page"}] - :step6-delete-blocks-client1-2 - ;; only block3 left - [[:db/retractEntity [:block/uuid step6-block1-uuid]] - [:db/retractEntity [:block/uuid step6-block2-uuid]] - [:db/retractEntity [:block/uuid step6-block4-uuid]] - [:db/retractEntity [:block/uuid step6-block5-uuid]]]}) diff --git a/src/rtc_e2e_test/example.cljs b/src/rtc_e2e_test/example.cljs deleted file mode 100644 index 6a1af2b4e5..0000000000 --- a/src/rtc_e2e_test/example.cljs +++ /dev/null @@ -1,8 +0,0 @@ -(ns example - (:require [datascript.transit :as dt])) - -;; (datascript.transit/write-transit-str db) -(def example-db-transit - "[\"~#datascript/DB\",[\"^ \",\"~:schema\",[\"^ \",\"~i32\",\"~:logseq.property.journal/title-format\",\"~i64\",\"~:logseq.class/Query\",\"~:logseq.property.view/type.table\",[\"^ \",\"~:db/ident\",\"^6\"],\"~:file/created-at\",[\"^ \"],\"~i1\",\"~:logseq.kv/db-type\",\"~i33\",\"~:logseq.property/status\",\"~i65\",\"~:logseq.class/Advanced-Query\",\"~:logseq.property.fsrs/state\",[\"^ \",\"~:db/index\",true,\"~:db/cardinality\",\"~:db.cardinality/one\",\"^7\",\"^>\"],\"~:logseq.kv/graph-initial-schema-version\",[\"^ \",\"^7\",\"^B\"],\"~:block/tx-id\",[\"^ \"],\"~i2\",\"~:logseq.kv/schema-version\",\"~i34\",\"~:logseq.property/status.backlog\",\"~i66\",\"~:logseq.class/Card\",\"~:logseq.property.pdf/file-path\",[\"^ \",\"^?\",true,\"~:db/valueType\",\"~:db.type/ref\",\"^@\",\"^A\",\"^7\",\"^I\"],\"~:logseq.property.table/sorting\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^L\"],\"~i3\",\"^B\",\"~i35\",\"~:logseq.property/status.todo\",\"~i67\",\"~:logseq.class/Cards\",\"~:logseq.property/public\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^Q\"],\"~i4\",\"~:logseq.kv/graph-created-at\",\"~i36\",\"~:logseq.property/status.doing\",\"~:logseq.property/priority.low\",[\"^ \",\"^7\",\"^U\"],\"~:file/content\",[\"^ \"],\"~:logseq.property/priority.high\",[\"^ \",\"^7\",\"^W\"],\"~i5\",\"~:logseq.property/empty-placeholder\",\"~i37\",\"~:logseq.property/status.in-review\",\"~:logseq.property/priority.urgent\",[\"^ \",\"^7\",\"^[\"],\"~:logseq.property/hl-color\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^10\"],\"~:logseq.property.table/sized-columns\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^11\"],\"~:block/alias\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"~:db.cardinality/many\",\"^7\",\"^12\"],\"~i6\",\"~:logseq.class/Root\",\"~i38\",\"~:logseq.property/status.done\",\"~:kv/value\",[\"^ \"],\"~i7\",\"~:logseq.property/built-in?\",\"~i39\",\"~:logseq.property/status.canceled\",\"~:logseq.property.linked-references/includes\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^13\",\"^7\",\"^1;\"],\"~:block/link\",[\"^ \",\"^J\",\"^K\",\"^?\",true],\"~:logseq.property.view/type\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^1=\"],\"~:logseq.property/heading\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^1>\"],\"~i8\",\"^12\",\"~i40\",\"~:logseq.property/priority\",\"~:block/uuid\",[\"^ \",\"~:db/unique\",\"~:db.unique/identity\"],\"~:logseq.property.table/hidden-columns\",[\"^ \",\"^?\",true,\"^@\",\"^13\",\"^7\",\"^1D\"],\"~i9\",\"~:block/tags\",\"~i41\",\"^U\",\"~:block/updated-at\",[\"^ \",\"^?\",true],\"~:asset/uuid\",[\"^ \",\"^1B\",\"^1C\"],\"~i10\",\"~:logseq.property.class/extends\",\"~i42\",\"~:logseq.property/priority.medium\",\"~:logseq.property.view/type.list\",[\"^ \",\"^7\",\"^1M\"],\"^1L\",[\"^ \",\"^7\",\"^1L\"],\"~i11\",\"~:logseq.property.class/properties\",\"~:file/size\",[\"^ \"],\"~i43\",\"^W\",\"~:block/refs\",[\"^ \",\"^J\",\"^K\",\"^@\",\"^13\"],\"^H\",[\"^ \",\"^7\",\"^H\"],\"^1@\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^1@\"],\"~i12\",\"~:logseq.property.class/hide-from-node\",\"~i44\",\"^[\",\"^T\",[\"^ \",\"^7\",\"^T\"],\"^D\",[\"^ \",\"^7\",\"^D\"],\"~:logseq.property.pdf/hl-page\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^1V\"],\"~:logseq.property/hl-type\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^1W\"],\"~i13\",\"~:logseq.property/query\",\"~i45\",\"~:logseq.property/deadline\",\"~:block/closed-value-property\",[\"^ \",\"^J\",\"^K\",\"^@\",\"^13\"],\"^Z\",[\"^ \",\"^7\",\"^Z\"],\"~i14\",\"~:logseq.property/page-tags\",\"~:file/last-modified-at\",[\"^ \"],\"~i46\",\"~:logseq.property/icon\",\"^16\",[\"^ \",\"^7\",\"^16\"],\"^1O\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^13\",\"^7\",\"^1O\"],\"^1:\",[\"^ \",\"^7\",\"^1:\"],\"~i15\",\"~:logseq.property/background-color\",\"~i47\",\"^Q\",\"~:block/created-at\",[\"^ \",\"^?\",true],\"^22\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^13\",\"^7\",\"^22\"],\"^N\",[\"^ \",\"^7\",\"^N\"],\"~:logseq.class/Task\",[\"^ \",\"^7\",\"^2:\"],\"~:block/collapsed?\",[\"^ \"],\"~:logseq.property.tldraw/page\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^2<\"],\"~i16\",\"~:logseq.property/background-image\",\"~i48\",\"~:logseq.property/exclude-from-graph-view\",\"~:logseq.property/value\",[\"^ \"],\"^18\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^18\"],\"~:block/schema\",[\"^ \"],\"~i17\",\"^1>\",\"~i49\",\"~:logseq.property/description\",\"^1T\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^1T\"],\"~:logseq.property.linked-references/excludes\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^13\",\"^7\",\"^2F\"],\"~:logseq.property/ls-type\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^2G\"],\"^P\",[\"^ \",\"^7\",\"^P\"],\"~:logseq.property/view-for\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^2H\"],\"~i18\",\"~:logseq.property/created-from-property\",\"^1Y\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^1Y\"],\"~i50\",\"^1=\",\"^27\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^27\"],\"~:block/journal-day\",[\"^ \",\"^?\",true],\"~i19\",\"^2G\",\"^14\",[\"^ \",\"^7\",\"^14\"],\"~i51\",\"^6\",\"~:block/format\",[\"^ \"],\"^X\",[\"^ \",\"^7\",\"^X\"],\"~i20\",\"^1W\",\"~i52\",\"^1M\",\"^1E\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^13\",\"^7\",\"^1E\"],\"~:block/title\",[\"^ \",\"^?\",true],\"~:logseq.property.tldraw/shape\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^2S\"],\"~:asset/meta\",[\"^ \"],\"^1[\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^1[\"],\"~i21\",\"^10\",\"~i53\",\"^L\",\"^2J\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^2J\"],\"^25\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^25\"],\"~i22\",\"^1V\",\"~i54\",\"~:logseq.property.table/filters\",\"^R\",[\"^ \",\"^7\",\"^R\"],\"~i23\",\"~:logseq.property.pdf/hl-stamp\",\"~i55\",\"^1D\",\"~:logseq.property/order-list-type\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^31\"],\"^2@\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^2@\"],\"~i24\",\"~:logseq.property.pdf/hl-value\",\"~i56\",\"~:logseq.property.table/ordered-columns\",\"^2>\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^2>\"],\"^7\",[\"^ \",\"^1B\",\"^1C\"],\"~:property/schema.classes\",[\"^ \",\"^J\",\"^K\",\"^@\",\"^13\"],\"^2E\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^2E\"],\"~:block/parent\",[\"^ \",\"^J\",\"^K\",\"^?\",true],\"~i25\",\"~:logseq.property.pdf/file\",\"~i57\",\"^11\",\"~:block/type\",[\"^ \",\"^?\",true],\"~:logseq.class/Journal\",[\"^ \",\"^7\",\"^3=\"],\"~i26\",\"^I\",\"~i58\",\"^2H\",\"^33\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^33\"],\"^5\",[\"^ \",\"^7\",\"^5\"],\"~i27\",\"^31\",\"~i59\",\"~:logseq.property.asset/remote-metadata\",\"^3B\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^3B\"],\"^2[\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^2[\"],\"~:block/order\",[\"^ \",\"^?\",true],\"^;\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^;\"],\"~:logseq.property.fsrs/due\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^3D\"],\"~i28\",\"^1;\",\"~i60\",\"^3D\",\"~:block/page\",[\"^ \",\"^J\",\"^K\",\"^?\",true],\"~:block/name\",[\"^ \",\"^?\",true],\"^35\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^35\"],\"~:file/path\",[\"^ \",\"^1B\",\"^1C\"],\"~i29\",\"^2F\",\"~i61\",\"^>\",\"^F\",[\"^ \",\"^7\",\"^F\"],\"^1J\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^1J\"],\"~i30\",\"^2<\",\"~i62\",\"^2:\",\"^3:\",[\"^ \",\"^?\",true,\"^J\",\"^K\",\"^@\",\"^A\",\"^7\",\"^3:\"],\"^3\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^3\"],\"^=\",[\"^ \",\"^7\",\"^=\"],\"~i31\",\"^2S\",\"~i63\",\"^3=\",\"^9\",[\"^ \",\"^7\",\"^9\"],\"^2Y\",[\"^ \",\"^?\",true,\"^@\",\"^A\",\"^7\",\"^2Y\"]],\"~:datoms\",[\"~#list\",[[\"~#datascript/Datom\",[1,\"^7\",\"^9\",536870913]],[\"^3R\",[1,\"^17\",\"db\",536870913]],[\"^3R\",[2,\"^7\",\"^D\",536870913]],[\"^3R\",[2,\"^17\",25,536870913]],[\"^3R\",[3,\"^7\",\"^B\",536870913]],[\"^3R\",[3,\"^17\",25,536870913]],[\"^3R\",[4,\"^7\",\"^R\",536870913]],[\"^3R\",[4,\"^17\",1727187033523,536870913]],[\"^3R\",[5,\"^7\",\"^X\",536870913]],[\"^3R\",[6,\"^29\",1727187033526,536870913]],[\"^3R\",[6,\"^2O\",\"~:markdown\",536870913]],[\"^3R\",[6,\"^3H\",\"root tag\",536870913]],[\"^3R\",[6,\"^2R\",\"Root Tag\",536870913]],[\"^3R\",[6,\"^3<\",\"class\",536870913]],[\"^3R\",[6,\"^1G\",1727187033526,536870913]],[\"^3R\",[6,\"^1A\",\"~u00000002-2737-8382-7000-000000000000\",536870913]],[\"^3R\",[6,\"^7\",\"^14\",536870913]],[\"^3R\",[6,\"^18\",true,536870913]],[\"^3R\",[7,\"^29\",1727187033523,536870913]],[\"^3R\",[7,\"^2O\",\"^3S\",536870913]],[\"^3R\",[7,\"^3H\",\"built-in?\",536870913]],[\"^3R\",[7,\"^3C\",\"bNP\",536870913]],[\"^3R\",[7,\"^2B\",[\"^ \",\"~:type\",\"~:checkbox\",\"~:hide?\",true],536870913]],[\"^3R\",[7,\"^2R\",\"built-in?\",536870913]],[\"^3R\",[7,\"^3<\",\"property\",536870913]],[\"^3R\",[7,\"^1G\",1727187033523,536870913]],[\"^3R\",[7,\"^1A\",\"~u00000002-1125-9581-6000-000000000000\",536870913]],[\"^3R\",[7,\"^@\",\"^A\",536870913]],[\"^3R\",[7,\"^7\",\"^18\",536870913]],[\"^3R\",[7,\"^?\",true,536870913]],[\"^3R\",[7,\"^18\",true,536870913]],[\"^3R\",[8,\"^29\",1727187033524,536870913]],[\"^3R\",[8,\"^2O\",\"^3S\",536870913]],[\"^3R\",[8,\"^3H\",\"alias\",536870913]],[\"^3R\",[8,\"^3C\",\"bNQ\",536870913]],[\"^3R\",[8,\"^2B\",[\"^ \",\"^3T\",\"~:page\",\"~:view-context\",\"^3W\",\"~:public?\",true],536870913]],[\"^3R\",[8,\"^2R\",\"Alias\",536870913]],[\"^3R\",[8,\"^3<\",\"property\",536870913]],[\"^3R\",[8,\"^1G\",1727187033524,536870913]],[\"^3R\",[8,\"^1A\",\"~u00000002-2112-6446-9900-000000000000\",536870913]],[\"^3R\",[8,\"^@\",\"^13\",536870913]],[\"^3R\",[8,\"^7\",\"^12\",536870913]],[\"^3R\",[8,\"^?\",true,536870913]],[\"^3R\",[8,\"^J\",\"^K\",536870913]],[\"^3R\",[8,\"^18\",true,536870913]],[\"^3R\",[9,\"^29\",1727187033524,536870913]],[\"^3R\",[9,\"^2O\",\"^3S\",536870913]],[\"^3R\",[9,\"^3H\",\"tags\",536870913]],[\"^3R\",[9,\"^3C\",\"bNR\",536870913]],[\"^3R\",[9,\"^2B\",[\"^ \",\"^3T\",\"~:class\",\"^3Y\",true],536870913]],[\"^3R\",[9,\"^2R\",\"Tags\",536870913]],[\"^3R\",[9,\"^3<\",\"property\",536870913]],[\"^3R\",[9,\"^1G\",1727187033524,536870913]],[\"^3R\",[9,\"^1A\",\"~u00000002-1814-9483-4000-000000000000\",536870913]],[\"^3R\",[9,\"^@\",\"^13\",536870913]],[\"^3R\",[9,\"^7\",\"^1E\",536870913]],[\"^3R\",[9,\"^?\",true,536870913]],[\"^3R\",[9,\"^J\",\"^K\",536870913]],[\"^3R\",[9,\"^18\",true,536870913]],[\"^3R\",[9,\"^36\",6,536870913]],[\"^3R\",[10,\"^29\",1727187033524,536870913]],[\"^3R\",[10,\"^2O\",\"^3S\",536870913]],[\"^3R\",[10,\"^3H\",\"parent\",536870913]],[\"^3R\",[10,\"^3C\",\"bNS\",536870913]],[\"^3R\",[10,\"^2B\",[\"^ \",\"^3T\",\"~:node\",\"^3Y\",true,\"^3X\",\"^3W\"],536870913]],[\"^3R\",[10,\"^2R\",\"Parent\",536870913]],[\"^3R\",[10,\"^3<\",\"property\",536870913]],[\"^3R\",[10,\"^1G\",1727187033524,536870913]],[\"^3R\",[10,\"^1A\",\"~u00000002-1779-8450-9000-000000000000\",536870913]],[\"^3R\",[10,\"^@\",\"^A\",536870913]],[\"^3R\",[10,\"^7\",\"^1J\",536870913]],[\"^3R\",[10,\"^?\",true,536870913]],[\"^3R\",[10,\"^J\",\"^K\",536870913]],[\"^3R\",[10,\"^18\",true,536870913]],[\"^3R\",[11,\"^29\",1727187033524,536870913]],[\"^3R\",[11,\"^2O\",\"^3S\",536870913]],[\"^3R\",[11,\"^3H\",\"tag properties\",536870913]],[\"^3R\",[11,\"^3C\",\"bNT\",536870913]],[\"^3R\",[11,\"^2B\",[\"^ \",\"^3T\",\"~:property\",\"^3Y\",true,\"^3X\",\"~:never\"],536870913]],[\"^3R\",[11,\"^2R\",\"Tag Properties\",536870913]],[\"^3R\",[11,\"^3<\",\"property\",536870913]],[\"^3R\",[11,\"^1G\",1727187033524,536870913]],[\"^3R\",[11,\"^1A\",\"~u00000002-2123-7120-5000-000000000000\",536870913]],[\"^3R\",[11,\"^@\",\"^13\",536870913]],[\"^3R\",[11,\"^7\",\"^1O\",536870913]],[\"^3R\",[11,\"^?\",true,536870913]],[\"^3R\",[11,\"^J\",\"^K\",536870913]],[\"^3R\",[11,\"^18\",true,536870913]],[\"^3R\",[12,\"^29\",1727187033524,536870913]],[\"^3R\",[12,\"^2O\",\"^3S\",536870913]],[\"^3R\",[12,\"^3H\",\"hide from node\",536870913]],[\"^3R\",[12,\"^3C\",\"bNU\",536870913]],[\"^3R\",[12,\"^2B\",[\"^ \",\"^3T\",\"^3U\",\"^3Y\",true,\"^3X\",\"^3Z\"],536870913]],[\"^3R\",[12,\"^2R\",\"Hide from Node\",536870913]],[\"^3R\",[12,\"^3<\",\"property\",536870913]],[\"^3R\",[12,\"^1G\",1727187033524,536870913]],[\"^3R\",[12,\"^1A\",\"~u00000002-2610-3727-0000-000000000000\",536870913]],[\"^3R\",[12,\"^@\",\"^A\",536870913]],[\"^3R\",[12,\"^7\",\"^1T\",536870913]],[\"^3R\",[12,\"^?\",true,536870913]],[\"^3R\",[12,\"^18\",true,536870913]],[\"^3R\",[13,\"^29\",1727187033524,536870913]],[\"^3R\",[13,\"^2O\",\"^3S\",536870913]],[\"^3R\",[13,\"^3H\",\"query\",536870913]],[\"^3R\",[13,\"^3C\",\"bNV\",536870913]],[\"^3R\",[13,\"^2B\",[\"^ \",\"^3T\",\"~:default\",\"^3Y\",true,\"^3X\",\"~:block\"],536870913]],[\"^3R\",[13,\"^2R\",\"Query\",536870913]],[\"^3R\",[13,\"^3<\",\"property\",536870913]],[\"^3R\",[13,\"^1G\",1727187033524,536870913]],[\"^3R\",[13,\"^1A\",\"~u00000002-9741-4126-0000-000000000000\",536870913]],[\"^3R\",[13,\"^@\",\"^A\",536870913]],[\"^3R\",[13,\"^7\",\"^1Y\",536870913]],[\"^3R\",[13,\"^?\",true,536870913]],[\"^3R\",[13,\"^J\",\"^K\",536870913]],[\"^3R\",[13,\"^18\",true,536870913]],[\"^3R\",[14,\"^29\",1727187033524,536870913]],[\"^3R\",[14,\"^2O\",\"^3S\",536870913]],[\"^3R\",[14,\"^3H\",\"page tags\",536870913]],[\"^3R\",[14,\"^3C\",\"bNW\",536870913]],[\"^3R\",[14,\"^2B\",[\"^ \",\"^3T\",\"^3W\",\"^3Y\",true,\"^3X\",\"^3W\"],536870913]],[\"^3R\",[14,\"^2R\",\"Page Tags\",536870913]],[\"^3R\",[14,\"^3<\",\"property\",536870913]],[\"^3R\",[14,\"^1G\",1727187033524,536870913]],[\"^3R\",[14,\"^1A\",\"~u00000002-2133-5311-8500-000000000000\",536870913]],[\"^3R\",[14,\"^@\",\"^13\",536870913]],[\"^3R\",[14,\"^7\",\"^22\",536870913]],[\"^3R\",[14,\"^?\",true,536870913]],[\"^3R\",[14,\"^J\",\"^K\",536870913]],[\"^3R\",[14,\"^18\",true,536870913]],[\"^3R\",[15,\"^29\",1727187033524,536870913]],[\"^3R\",[15,\"^2O\",\"^3S\",536870913]],[\"^3R\",[15,\"^3H\",\"background-color\",536870913]],[\"^3R\",[15,\"^3C\",\"bNX\",536870913]],[\"^3R\",[15,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3V\",true],536870913]],[\"^3R\",[15,\"^2R\",\"background-color\",536870913]],[\"^3R\",[15,\"^3<\",\"property\",536870913]],[\"^3R\",[15,\"^1G\",1727187033524,536870913]],[\"^3R\",[15,\"^1A\",\"~u00000002-5191-2660-6000-000000000000\",536870913]],[\"^3R\",[15,\"^@\",\"^A\",536870913]],[\"^3R\",[15,\"^7\",\"^27\",536870913]],[\"^3R\",[15,\"^?\",true,536870913]],[\"^3R\",[15,\"^J\",\"^K\",536870913]],[\"^3R\",[15,\"^18\",true,536870913]],[\"^3R\",[16,\"^29\",1727187033524,536870913]],[\"^3R\",[16,\"^2O\",\"^3S\",536870913]],[\"^3R\",[16,\"^3H\",\"background-image\",536870913]],[\"^3R\",[16,\"^3C\",\"bNY\",536870913]],[\"^3R\",[16,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3X\",\"^43\",\"^3Y\",true],536870913]],[\"^3R\",[16,\"^2R\",\"background-image\",536870913]],[\"^3R\",[16,\"^3<\",\"property\",536870913]],[\"^3R\",[16,\"^1G\",1727187033524,536870913]],[\"^3R\",[16,\"^1A\",\"~u00000002-2513-1712-8000-000000000000\",536870913]],[\"^3R\",[16,\"^@\",\"^A\",536870913]],[\"^3R\",[16,\"^7\",\"^2>\",536870913]],[\"^3R\",[16,\"^?\",true,536870913]],[\"^3R\",[16,\"^J\",\"^K\",536870913]],[\"^3R\",[16,\"^18\",true,536870913]],[\"^3R\",[17,\"^29\",1727187033524,536870913]],[\"^3R\",[17,\"^2O\",\"^3S\",536870913]],[\"^3R\",[17,\"^3H\",\"heading\",536870913]],[\"^3R\",[17,\"^3C\",\"bNZ\",536870913]],[\"^3R\",[17,\"^2B\",[\"^ \",\"^3T\",\"~:any\",\"^3V\",true],536870913]],[\"^3R\",[17,\"^2R\",\"heading\",536870913]],[\"^3R\",[17,\"^3<\",\"property\",536870913]],[\"^3R\",[17,\"^1G\",1727187033524,536870913]],[\"^3R\",[17,\"^1A\",\"~u00000002-1858-7494-1500-000000000000\",536870913]],[\"^3R\",[17,\"^@\",\"^A\",536870913]],[\"^3R\",[17,\"^7\",\"^1>\",536870913]],[\"^3R\",[17,\"^?\",true,536870913]],[\"^3R\",[17,\"^18\",true,536870913]],[\"^3R\",[18,\"^29\",1727187033524,536870913]],[\"^3R\",[18,\"^2O\",\"^3S\",536870913]],[\"^3R\",[18,\"^3H\",\"created-from-property\",536870913]],[\"^3R\",[18,\"^3C\",\"bNa\",536870913]],[\"^3R\",[18,\"^2B\",[\"^ \",\"^3T\",\"~:entity\",\"^3V\",true],536870913]],[\"^3R\",[18,\"^2R\",\"created-from-property\",536870913]],[\"^3R\",[18,\"^3<\",\"property\",536870913]],[\"^3R\",[18,\"^1G\",1727187033524,536870913]],[\"^3R\",[18,\"^1A\",\"~u00000002-8618-9226-7000-000000000000\",536870913]],[\"^3R\",[18,\"^@\",\"^A\",536870913]],[\"^3R\",[18,\"^7\",\"^2J\",536870913]],[\"^3R\",[18,\"^?\",true,536870913]],[\"^3R\",[18,\"^J\",\"^K\",536870913]],[\"^3R\",[18,\"^18\",true,536870913]],[\"^3R\",[19,\"^29\",1727187033524,536870913]],[\"^3R\",[19,\"^2O\",\"^3S\",536870913]],[\"^3R\",[19,\"^3H\",\"ls-type\",536870913]],[\"^3R\",[19,\"^3C\",\"bNb\",536870913]],[\"^3R\",[19,\"^2B\",[\"^ \",\"^3T\",\"~:keyword\",\"^3V\",true],536870913]],[\"^3R\",[19,\"^2R\",\"ls-type\",536870913]],[\"^3R\",[19,\"^3<\",\"property\",536870913]],[\"^3R\",[19,\"^1G\",1727187033524,536870913]],[\"^3R\",[19,\"^1A\",\"~u00000002-3269-7934-5000-000000000000\",536870913]],[\"^3R\",[19,\"^@\",\"^A\",536870913]],[\"^3R\",[19,\"^7\",\"^2G\",536870913]],[\"^3R\",[19,\"^?\",true,536870913]],[\"^3R\",[19,\"^18\",true,536870913]],[\"^3R\",[20,\"^29\",1727187033524,536870913]],[\"^3R\",[20,\"^2O\",\"^3S\",536870913]],[\"^3R\",[20,\"^3H\",\"hl-type\",536870913]],[\"^3R\",[20,\"^3C\",\"bNc\",536870913]],[\"^3R\",[20,\"^2B\",[\"^ \",\"^3T\",\"^46\",\"^3V\",true],536870913]],[\"^3R\",[20,\"^2R\",\"hl-type\",536870913]],[\"^3R\",[20,\"^3<\",\"property\",536870913]],[\"^3R\",[20,\"^1G\",1727187033524,536870913]],[\"^3R\",[20,\"^1A\",\"~u00000002-2083-0223-8000-000000000000\",536870913]],[\"^3R\",[20,\"^@\",\"^A\",536870913]],[\"^3R\",[20,\"^7\",\"^1W\",536870913]],[\"^3R\",[20,\"^?\",true,536870913]],[\"^3R\",[20,\"^18\",true,536870913]],[\"^3R\",[21,\"^29\",1727187033524,536870913]],[\"^3R\",[21,\"^2O\",\"^3S\",536870913]],[\"^3R\",[21,\"^3H\",\"hl-color\",536870913]],[\"^3R\",[21,\"^3C\",\"bNd\",536870913]],[\"^3R\",[21,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3V\",true],536870913]],[\"^3R\",[21,\"^2R\",\"hl-color\",536870913]],[\"^3R\",[21,\"^3<\",\"property\",536870913]],[\"^3R\",[21,\"^1G\",1727187033524,536870913]],[\"^3R\",[21,\"^1A\",\"~u00000002-2137-2691-4700-000000000000\",536870913]],[\"^3R\",[21,\"^@\",\"^A\",536870913]],[\"^3R\",[21,\"^7\",\"^10\",536870913]],[\"^3R\",[21,\"^?\",true,536870913]],[\"^3R\",[21,\"^J\",\"^K\",536870913]],[\"^3R\",[21,\"^18\",true,536870913]],[\"^3R\",[22,\"^29\",1727187033524,536870913]],[\"^3R\",[22,\"^2O\",\"^3S\",536870913]],[\"^3R\",[22,\"^3H\",\"hl-page\",536870913]],[\"^3R\",[22,\"^3C\",\"bNe\",536870913]],[\"^3R\",[22,\"^2B\",[\"^ \",\"^3T\",\"~:number\",\"^3V\",true],536870913]],[\"^3R\",[22,\"^2R\",\"hl-page\",536870913]],[\"^3R\",[22,\"^3<\",\"property\",536870913]],[\"^3R\",[22,\"^1G\",1727187033524,536870913]],[\"^3R\",[22,\"^1A\",\"~u00000002-7532-8459-6000-000000000000\",536870913]],[\"^3R\",[22,\"^@\",\"^A\",536870913]],[\"^3R\",[22,\"^7\",\"^1V\",536870913]],[\"^3R\",[22,\"^?\",true,536870913]],[\"^3R\",[22,\"^J\",\"^K\",536870913]],[\"^3R\",[22,\"^18\",true,536870913]],[\"^3R\",[23,\"^29\",1727187033524,536870913]],[\"^3R\",[23,\"^2O\",\"^3S\",536870913]],[\"^3R\",[23,\"^3H\",\"hl-stamp\",536870913]],[\"^3R\",[23,\"^3C\",\"bNf\",536870913]],[\"^3R\",[23,\"^2B\",[\"^ \",\"^3T\",\"^47\",\"^3V\",true],536870913]],[\"^3R\",[23,\"^2R\",\"hl-stamp\",536870913]],[\"^3R\",[23,\"^3<\",\"property\",536870913]],[\"^3R\",[23,\"^1G\",1727187033524,536870913]],[\"^3R\",[23,\"^1A\",\"~u00000002-1293-4649-2300-000000000000\",536870913]],[\"^3R\",[23,\"^@\",\"^A\",536870913]],[\"^3R\",[23,\"^7\",\"^2[\",536870913]],[\"^3R\",[23,\"^?\",true,536870913]],[\"^3R\",[23,\"^J\",\"^K\",536870913]],[\"^3R\",[23,\"^18\",true,536870913]],[\"^3R\",[24,\"^29\",1727187033524,536870913]],[\"^3R\",[24,\"^2O\",\"^3S\",536870913]],[\"^3R\",[24,\"^3H\",\"hl-value\",536870913]],[\"^3R\",[24,\"^3C\",\"bNg\",536870913]],[\"^3R\",[24,\"^2B\",[\"^ \",\"^3T\",\"~:map\",\"^3V\",true],536870913]],[\"^3R\",[24,\"^2R\",\"hl-value\",536870913]],[\"^3R\",[24,\"^3<\",\"property\",536870913]],[\"^3R\",[24,\"^1G\",1727187033524,536870913]],[\"^3R\",[24,\"^1A\",\"~u00000002-5458-2940-2000-000000000000\",536870913]],[\"^3R\",[24,\"^@\",\"^A\",536870913]],[\"^3R\",[24,\"^7\",\"^33\",536870913]],[\"^3R\",[24,\"^?\",true,536870913]],[\"^3R\",[24,\"^18\",true,536870913]],[\"^3R\",[25,\"^29\",1727187033525,536870913]],[\"^3R\",[25,\"^2O\",\"^3S\",536870913]],[\"^3R\",[25,\"^3H\",\"file\",536870913]],[\"^3R\",[25,\"^3C\",\"bNh\",536870913]],[\"^3R\",[25,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3V\",true,\"^3Y\",true,\"^3X\",\"^3W\"],536870913]],[\"^3R\",[25,\"^2R\",\"file\",536870913]],[\"^3R\",[25,\"^3<\",\"property\",536870913]],[\"^3R\",[25,\"^1G\",1727187033525,536870913]],[\"^3R\",[25,\"^1A\",\"~u00000002-1681-6464-3400-000000000000\",536870913]],[\"^3R\",[25,\"^@\",\"^A\",536870913]],[\"^3R\",[25,\"^7\",\"^3:\",536870913]],[\"^3R\",[25,\"^?\",true,536870913]],[\"^3R\",[25,\"^J\",\"^K\",536870913]],[\"^3R\",[25,\"^18\",true,536870913]],[\"^3R\",[26,\"^29\",1727187033525,536870913]],[\"^3R\",[26,\"^2O\",\"^3S\",536870913]],[\"^3R\",[26,\"^3H\",\"file-path\",536870913]],[\"^3R\",[26,\"^3C\",\"bNi\",536870913]],[\"^3R\",[26,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3V\",true,\"^3Y\",true,\"^3X\",\"^3W\"],536870913]],[\"^3R\",[26,\"^2R\",\"file-path\",536870913]],[\"^3R\",[26,\"^3<\",\"property\",536870913]],[\"^3R\",[26,\"^1G\",1727187033525,536870913]],[\"^3R\",[26,\"^1A\",\"~u00000002-5663-3568-2000-000000000000\",536870913]],[\"^3R\",[26,\"^@\",\"^A\",536870913]],[\"^3R\",[26,\"^7\",\"^I\",536870913]],[\"^3R\",[26,\"^?\",true,536870913]],[\"^3R\",[26,\"^J\",\"^K\",536870913]],[\"^3R\",[26,\"^18\",true,536870913]],[\"^3R\",[27,\"^29\",1727187033525,536870913]],[\"^3R\",[27,\"^2O\",\"^3S\",536870913]],[\"^3R\",[27,\"^3H\",\"logseq.order-list-type\",536870913]],[\"^3R\",[27,\"^3C\",\"bNj\",536870913]],[\"^3R\",[27,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3V\",true],536870913]],[\"^3R\",[27,\"^2R\",\"logseq.order-list-type\",536870913]],[\"^3R\",[27,\"^3<\",\"property\",536870913]],[\"^3R\",[27,\"^1G\",1727187033525,536870913]],[\"^3R\",[27,\"^1A\",\"~u00000002-6078-1711-1000-000000000000\",536870913]],[\"^3R\",[27,\"^@\",\"^A\",536870913]],[\"^3R\",[27,\"^7\",\"^31\",536870913]],[\"^3R\",[27,\"^?\",true,536870913]],[\"^3R\",[27,\"^J\",\"^K\",536870913]],[\"^3R\",[27,\"^18\",true,536870913]],[\"^3R\",[28,\"^29\",1727187033525,536870913]],[\"^3R\",[28,\"^2O\",\"^3S\",536870913]],[\"^3R\",[28,\"^3H\",\"includes\",536870913]],[\"^3R\",[28,\"^3C\",\"bNk\",536870913]],[\"^3R\",[28,\"^2B\",[\"^ \",\"^3T\",\"^3[\",\"^3V\",true],536870913]],[\"^3R\",[28,\"^2R\",\"includes\",536870913]],[\"^3R\",[28,\"^3<\",\"property\",536870913]],[\"^3R\",[28,\"^1G\",1727187033525,536870913]],[\"^3R\",[28,\"^1A\",\"~u00000002-1680-5777-0300-000000000000\",536870913]],[\"^3R\",[28,\"^@\",\"^13\",536870913]],[\"^3R\",[28,\"^7\",\"^1;\",536870913]],[\"^3R\",[28,\"^?\",true,536870913]],[\"^3R\",[28,\"^J\",\"^K\",536870913]],[\"^3R\",[28,\"^18\",true,536870913]],[\"^3R\",[29,\"^29\",1727187033525,536870913]],[\"^3R\",[29,\"^2O\",\"^3S\",536870913]],[\"^3R\",[29,\"^3H\",\"excludes\",536870913]],[\"^3R\",[29,\"^3C\",\"bNl\",536870913]],[\"^3R\",[29,\"^2B\",[\"^ \",\"^3T\",\"^3[\",\"^3V\",true],536870913]],[\"^3R\",[29,\"^2R\",\"excludes\",536870913]],[\"^3R\",[29,\"^3<\",\"property\",536870913]],[\"^3R\",[29,\"^1G\",1727187033525,536870913]],[\"^3R\",[29,\"^1A\",\"~u00000002-2426-7588-9000-000000000000\",536870913]],[\"^3R\",[29,\"^@\",\"^13\",536870913]],[\"^3R\",[29,\"^7\",\"^2F\",536870913]],[\"^3R\",[29,\"^?\",true,536870913]],[\"^3R\",[29,\"^J\",\"^K\",536870913]],[\"^3R\",[29,\"^18\",true,536870913]],[\"^3R\",[30,\"^29\",1727187033525,536870913]],[\"^3R\",[30,\"^2O\",\"^3S\",536870913]],[\"^3R\",[30,\"^3H\",\"logseq.tldraw.page\",536870913]],[\"^3R\",[30,\"^3C\",\"bNm\",536870913]],[\"^3R\",[30,\"^2B\",[\"^ \",\"^3T\",\"^48\",\"^3V\",true],536870913]],[\"^3R\",[30,\"^2R\",\"logseq.tldraw.page\",536870913]],[\"^3R\",[30,\"^3<\",\"property\",536870913]],[\"^3R\",[30,\"^1G\",1727187033525,536870913]],[\"^3R\",[30,\"^1A\",\"~u00000002-3546-2145-7000-000000000000\",536870913]],[\"^3R\",[30,\"^@\",\"^A\",536870913]],[\"^3R\",[30,\"^7\",\"^2<\",536870913]],[\"^3R\",[30,\"^?\",true,536870913]],[\"^3R\",[30,\"^18\",true,536870913]],[\"^3R\",[31,\"^29\",1727187033525,536870913]],[\"^3R\",[31,\"^2O\",\"^3S\",536870913]],[\"^3R\",[31,\"^3H\",\"logseq.tldraw.shape\",536870913]],[\"^3R\",[31,\"^3C\",\"bNn\",536870913]],[\"^3R\",[31,\"^2B\",[\"^ \",\"^3T\",\"^48\",\"^3V\",true],536870913]],[\"^3R\",[31,\"^2R\",\"logseq.tldraw.shape\",536870913]],[\"^3R\",[31,\"^3<\",\"property\",536870913]],[\"^3R\",[31,\"^1G\",1727187033525,536870913]],[\"^3R\",[31,\"^1A\",\"~u00000002-1313-2454-2000-000000000000\",536870913]],[\"^3R\",[31,\"^@\",\"^A\",536870913]],[\"^3R\",[31,\"^7\",\"^2S\",536870913]],[\"^3R\",[31,\"^?\",true,536870913]],[\"^3R\",[31,\"^18\",true,536870913]],[\"^3R\",[32,\"^29\",1727187033525,536870913]],[\"^3R\",[32,\"^2O\",\"^3S\",536870913]],[\"^3R\",[32,\"^3H\",\"title format\",536870913]],[\"^3R\",[32,\"^3C\",\"bNo\",536870913]],[\"^3R\",[32,\"^2B\",[\"^ \",\"^3T\",\"~:string\",\"^3Y\",false],536870913]],[\"^3R\",[32,\"^2R\",\"Title Format\",536870913]],[\"^3R\",[32,\"^3<\",\"property\",536870913]],[\"^3R\",[32,\"^1G\",1727187033525,536870913]],[\"^3R\",[32,\"^1A\",\"~u00000002-1536-4979-5400-000000000000\",536870913]],[\"^3R\",[32,\"^@\",\"^A\",536870913]],[\"^3R\",[32,\"^7\",\"^3\",536870913]],[\"^3R\",[32,\"^?\",true,536870913]],[\"^3R\",[32,\"^18\",true,536870913]],[\"^3R\",[33,\"^29\",1727187033525,536870913]],[\"^3R\",[33,\"^2O\",\"^3S\",536870913]],[\"^3R\",[33,\"^3H\",\"status\",536870913]],[\"^3R\",[33,\"^3C\",\"bNp\",536870913]],[\"^3R\",[33,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3Y\",true,\"~:position\",\"~:block-left\"],536870913]],[\"^3R\",[33,\"^2R\",\"Status\",536870913]],[\"^3R\",[33,\"^3<\",\"property\",536870913]],[\"^3R\",[33,\"^1G\",1727187033525,536870913]],[\"^3R\",[33,\"^1A\",\"~u00000002-1399-1718-0300-000000000000\",536870913]],[\"^3R\",[33,\"^@\",\"^A\",536870913]],[\"^3R\",[33,\"^7\",\"^;\",536870913]],[\"^3R\",[33,\"^?\",true,536870913]],[\"^3R\",[33,\"^J\",\"^K\",536870913]],[\"^3R\",[33,\"^18\",true,536870913]],[\"^3R\",[34,\"^20\",33,536870913]],[\"^3R\",[34,\"^29\",1727187033525,536870913]],[\"^3R\",[34,\"^2O\",\"^3S\",536870913]],[\"^3R\",[34,\"^3C\",\"bNq\",536870913]],[\"^3R\",[34,\"^3G\",33,536870913]],[\"^3R\",[34,\"^38\",33,536870913]],[\"^3R\",[34,\"^2R\",\"Backlog\",536870913]],[\"^3R\",[34,\"^3<\",\"closed value\",536870913]],[\"^3R\",[34,\"^1G\",1727187033525,536870913]],[\"^3R\",[34,\"^1A\",\"~u00000002-1797-5174-0500-000000000000\",536870913]],[\"^3R\",[34,\"^7\",\"^F\",536870913]],[\"^3R\",[34,\"^18\",true,536870913]],[\"^3R\",[34,\"^2J\",33,536870913]],[\"^3R\",[34,\"^25\",[\"^ \",\"^3T\",\"~:tabler-icon\",\"~:id\",\"Backlog\"],536870913]],[\"^3R\",[35,\"^20\",33,536870913]],[\"^3R\",[35,\"^29\",1727187033525,536870913]],[\"^3R\",[35,\"^2O\",\"^3S\",536870913]],[\"^3R\",[35,\"^3C\",\"bNr\",536870913]],[\"^3R\",[35,\"^3G\",33,536870913]],[\"^3R\",[35,\"^38\",33,536870913]],[\"^3R\",[35,\"^2R\",\"Todo\",536870913]],[\"^3R\",[35,\"^3<\",\"closed value\",536870913]],[\"^3R\",[35,\"^1G\",1727187033525,536870913]],[\"^3R\",[35,\"^1A\",\"~u00000002-1776-1920-4900-000000000000\",536870913]],[\"^3R\",[35,\"^7\",\"^N\",536870913]],[\"^3R\",[35,\"^18\",true,536870913]],[\"^3R\",[35,\"^2J\",33,536870913]],[\"^3R\",[35,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"Todo\"],536870913]],[\"^3R\",[36,\"^20\",33,536870913]],[\"^3R\",[36,\"^29\",1727187033525,536870913]],[\"^3R\",[36,\"^2O\",\"^3S\",536870913]],[\"^3R\",[36,\"^3C\",\"bNs\",536870913]],[\"^3R\",[36,\"^3G\",33,536870913]],[\"^3R\",[36,\"^38\",33,536870913]],[\"^3R\",[36,\"^2R\",\"Doing\",536870913]],[\"^3R\",[36,\"^3<\",\"closed value\",536870913]],[\"^3R\",[36,\"^1G\",1727187033525,536870913]],[\"^3R\",[36,\"^1A\",\"~u00000002-5524-7947-6000-000000000000\",536870913]],[\"^3R\",[36,\"^7\",\"^T\",536870913]],[\"^3R\",[36,\"^18\",true,536870913]],[\"^3R\",[36,\"^2J\",33,536870913]],[\"^3R\",[36,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"InProgress50\"],536870913]],[\"^3R\",[37,\"^20\",33,536870913]],[\"^3R\",[37,\"^29\",1727187033525,536870913]],[\"^3R\",[37,\"^2O\",\"^3S\",536870913]],[\"^3R\",[37,\"^3C\",\"bNt\",536870913]],[\"^3R\",[37,\"^3G\",33,536870913]],[\"^3R\",[37,\"^38\",33,536870913]],[\"^3R\",[37,\"^2R\",\"In Review\",536870913]],[\"^3R\",[37,\"^3<\",\"closed value\",536870913]],[\"^3R\",[37,\"^1G\",1727187033525,536870913]],[\"^3R\",[37,\"^1A\",\"~u00000002-3550-9421-0000-000000000000\",536870913]],[\"^3R\",[37,\"^7\",\"^Z\",536870913]],[\"^3R\",[37,\"^18\",true,536870913]],[\"^3R\",[37,\"^2J\",33,536870913]],[\"^3R\",[37,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"InReview\"],536870913]],[\"^3R\",[38,\"^20\",33,536870913]],[\"^3R\",[38,\"^29\",1727187033525,536870913]],[\"^3R\",[38,\"^2O\",\"^3S\",536870913]],[\"^3R\",[38,\"^3C\",\"bNu\",536870913]],[\"^3R\",[38,\"^3G\",33,536870913]],[\"^3R\",[38,\"^38\",33,536870913]],[\"^3R\",[38,\"^2R\",\"Done\",536870913]],[\"^3R\",[38,\"^3<\",\"closed value\",536870913]],[\"^3R\",[38,\"^1G\",1727187033525,536870913]],[\"^3R\",[38,\"^1A\",\"~u00000002-1430-0577-4000-000000000000\",536870913]],[\"^3R\",[38,\"^7\",\"^16\",536870913]],[\"^3R\",[38,\"^18\",true,536870913]],[\"^3R\",[38,\"^2J\",33,536870913]],[\"^3R\",[38,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"Done\"],536870913]],[\"^3R\",[39,\"^20\",33,536870913]],[\"^3R\",[39,\"^29\",1727187033525,536870913]],[\"^3R\",[39,\"^2O\",\"^3S\",536870913]],[\"^3R\",[39,\"^3C\",\"bNv\",536870913]],[\"^3R\",[39,\"^3G\",33,536870913]],[\"^3R\",[39,\"^38\",33,536870913]],[\"^3R\",[39,\"^2R\",\"Canceled\",536870913]],[\"^3R\",[39,\"^3<\",\"closed value\",536870913]],[\"^3R\",[39,\"^1G\",1727187033525,536870913]],[\"^3R\",[39,\"^1A\",\"~u00000002-1217-7438-9000-000000000000\",536870913]],[\"^3R\",[39,\"^7\",\"^1:\",536870913]],[\"^3R\",[39,\"^18\",true,536870913]],[\"^3R\",[39,\"^2J\",33,536870913]],[\"^3R\",[39,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"Cancelled\"],536870913]],[\"^3R\",[40,\"^29\",1727187033525,536870913]],[\"^3R\",[40,\"^2O\",\"^3S\",536870913]],[\"^3R\",[40,\"^3H\",\"priority\",536870913]],[\"^3R\",[40,\"^3C\",\"bNw\",536870913]],[\"^3R\",[40,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3Y\",true,\"^4:\",\"^4;\"],536870913]],[\"^3R\",[40,\"^2R\",\"Priority\",536870913]],[\"^3R\",[40,\"^3<\",\"property\",536870913]],[\"^3R\",[40,\"^1G\",1727187033525,536870913]],[\"^3R\",[40,\"^1A\",\"~u00000002-1714-7859-9500-000000000000\",536870913]],[\"^3R\",[40,\"^@\",\"^A\",536870913]],[\"^3R\",[40,\"^7\",\"^1@\",536870913]],[\"^3R\",[40,\"^?\",true,536870913]],[\"^3R\",[40,\"^J\",\"^K\",536870913]],[\"^3R\",[40,\"^18\",true,536870913]],[\"^3R\",[41,\"^20\",40,536870913]],[\"^3R\",[41,\"^29\",1727187033525,536870913]],[\"^3R\",[41,\"^2O\",\"^3S\",536870913]],[\"^3R\",[41,\"^3C\",\"bNx\",536870913]],[\"^3R\",[41,\"^3G\",40,536870913]],[\"^3R\",[41,\"^38\",40,536870913]],[\"^3R\",[41,\"^2R\",\"Low\",536870913]],[\"^3R\",[41,\"^3<\",\"closed value\",536870913]],[\"^3R\",[41,\"^1G\",1727187033525,536870913]],[\"^3R\",[41,\"^1A\",\"~u00000002-8891-7452-4000-000000000000\",536870913]],[\"^3R\",[41,\"^7\",\"^U\",536870913]],[\"^3R\",[41,\"^18\",true,536870913]],[\"^3R\",[41,\"^2J\",40,536870913]],[\"^3R\",[41,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"priorityLvlLow\"],536870913]],[\"^3R\",[42,\"^20\",40,536870913]],[\"^3R\",[42,\"^29\",1727187033525,536870913]],[\"^3R\",[42,\"^2O\",\"^3S\",536870913]],[\"^3R\",[42,\"^3C\",\"bNy\",536870913]],[\"^3R\",[42,\"^3G\",40,536870913]],[\"^3R\",[42,\"^38\",40,536870913]],[\"^3R\",[42,\"^2R\",\"Medium\",536870913]],[\"^3R\",[42,\"^3<\",\"closed value\",536870913]],[\"^3R\",[42,\"^1G\",1727187033525,536870913]],[\"^3R\",[42,\"^1A\",\"~u00000002-4650-7295-0000-000000000000\",536870913]],[\"^3R\",[42,\"^7\",\"^1L\",536870913]],[\"^3R\",[42,\"^18\",true,536870913]],[\"^3R\",[42,\"^2J\",40,536870913]],[\"^3R\",[42,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"priorityLvlMedium\"],536870913]],[\"^3R\",[43,\"^20\",40,536870913]],[\"^3R\",[43,\"^29\",1727187033525,536870913]],[\"^3R\",[43,\"^2O\",\"^3S\",536870913]],[\"^3R\",[43,\"^3C\",\"bNz\",536870913]],[\"^3R\",[43,\"^3G\",40,536870913]],[\"^3R\",[43,\"^38\",40,536870913]],[\"^3R\",[43,\"^2R\",\"High\",536870913]],[\"^3R\",[43,\"^3<\",\"closed value\",536870913]],[\"^3R\",[43,\"^1G\",1727187033525,536870913]],[\"^3R\",[43,\"^1A\",\"~u00000002-1281-2351-0000-000000000000\",536870913]],[\"^3R\",[43,\"^7\",\"^W\",536870913]],[\"^3R\",[43,\"^18\",true,536870913]],[\"^3R\",[43,\"^2J\",40,536870913]],[\"^3R\",[43,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"priorityLvlHigh\"],536870913]],[\"^3R\",[44,\"^20\",40,536870913]],[\"^3R\",[44,\"^29\",1727187033525,536870913]],[\"^3R\",[44,\"^2O\",\"^3S\",536870913]],[\"^3R\",[44,\"^3C\",\"bO0\",536870913]],[\"^3R\",[44,\"^3G\",40,536870913]],[\"^3R\",[44,\"^38\",40,536870913]],[\"^3R\",[44,\"^2R\",\"Urgent\",536870913]],[\"^3R\",[44,\"^3<\",\"closed value\",536870913]],[\"^3R\",[44,\"^1G\",1727187033525,536870913]],[\"^3R\",[44,\"^1A\",\"~u00000002-4458-8138-1000-000000000000\",536870913]],[\"^3R\",[44,\"^7\",\"^[\",536870913]],[\"^3R\",[44,\"^18\",true,536870913]],[\"^3R\",[44,\"^2J\",40,536870913]],[\"^3R\",[44,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"priorityLvlUrgent\"],536870913]],[\"^3R\",[45,\"^29\",1727187033525,536870913]],[\"^3R\",[45,\"^2O\",\"^3S\",536870913]],[\"^3R\",[45,\"^3H\",\"deadline\",536870913]],[\"^3R\",[45,\"^3C\",\"bO1\",536870913]],[\"^3R\",[45,\"^2B\",[\"^ \",\"^3T\",\"~:date\",\"^3Y\",true,\"^4:\",\"~:block-below\"],536870913]],[\"^3R\",[45,\"^2R\",\"Deadline\",536870913]],[\"^3R\",[45,\"^3<\",\"property\",536870913]],[\"^3R\",[45,\"^1G\",1727187033525,536870913]],[\"^3R\",[45,\"^1A\",\"~u00000002-2149-5604-4000-000000000000\",536870913]],[\"^3R\",[45,\"^@\",\"^A\",536870913]],[\"^3R\",[45,\"^7\",\"^1[\",536870913]],[\"^3R\",[45,\"^?\",true,536870913]],[\"^3R\",[45,\"^J\",\"^K\",536870913]],[\"^3R\",[45,\"^18\",true,536870913]],[\"^3R\",[46,\"^29\",1727187033526,536870913]],[\"^3R\",[46,\"^2O\",\"^3S\",536870913]],[\"^3R\",[46,\"^3H\",\"icon\",536870913]],[\"^3R\",[46,\"^3C\",\"bO2\",536870913]],[\"^3R\",[46,\"^2B\",[\"^ \",\"^3T\",\"^48\"],536870913]],[\"^3R\",[46,\"^2R\",\"Icon\",536870913]],[\"^3R\",[46,\"^3<\",\"property\",536870913]],[\"^3R\",[46,\"^1G\",1727187033526,536870913]],[\"^3R\",[46,\"^1A\",\"~u00000002-5891-2328-5000-000000000000\",536870913]],[\"^3R\",[46,\"^@\",\"^A\",536870913]],[\"^3R\",[46,\"^7\",\"^25\",536870913]],[\"^3R\",[46,\"^?\",true,536870913]],[\"^3R\",[46,\"^18\",true,536870913]],[\"^3R\",[47,\"^29\",1727187033526,536870913]],[\"^3R\",[47,\"^2O\",\"^3S\",536870913]],[\"^3R\",[47,\"^3H\",\"public\",536870913]],[\"^3R\",[47,\"^3C\",\"bO3\",536870913]],[\"^3R\",[47,\"^2B\",[\"^ \",\"^3T\",\"^3U\",\"^3V\",true,\"^3X\",\"^3W\",\"^3Y\",true],536870913]],[\"^3R\",[47,\"^2R\",\"public\",536870913]],[\"^3R\",[47,\"^3<\",\"property\",536870913]],[\"^3R\",[47,\"^1G\",1727187033526,536870913]],[\"^3R\",[47,\"^1A\",\"~u00000002-1705-3327-6500-000000000000\",536870913]],[\"^3R\",[47,\"^@\",\"^A\",536870913]],[\"^3R\",[47,\"^7\",\"^Q\",536870913]],[\"^3R\",[47,\"^?\",true,536870913]],[\"^3R\",[47,\"^18\",true,536870913]],[\"^3R\",[48,\"^29\",1727187033526,536870913]],[\"^3R\",[48,\"^2O\",\"^3S\",536870913]],[\"^3R\",[48,\"^3H\",\"exclude-from-graph-view\",536870913]],[\"^3R\",[48,\"^3C\",\"bO4\",536870913]],[\"^3R\",[48,\"^2B\",[\"^ \",\"^3T\",\"^3U\",\"^3V\",true,\"^3X\",\"^3W\",\"^3Y\",true],536870913]],[\"^3R\",[48,\"^2R\",\"exclude-from-graph-view\",536870913]],[\"^3R\",[48,\"^3<\",\"property\",536870913]],[\"^3R\",[48,\"^1G\",1727187033526,536870913]],[\"^3R\",[48,\"^1A\",\"~u00000002-4524-3306-5000-000000000000\",536870913]],[\"^3R\",[48,\"^@\",\"^A\",536870913]],[\"^3R\",[48,\"^7\",\"^2@\",536870913]],[\"^3R\",[48,\"^?\",true,536870913]],[\"^3R\",[48,\"^18\",true,536870913]],[\"^3R\",[49,\"^29\",1727187033526,536870913]],[\"^3R\",[49,\"^2O\",\"^3S\",536870913]],[\"^3R\",[49,\"^3H\",\"description\",536870913]],[\"^3R\",[49,\"^3C\",\"bO5\",536870913]],[\"^3R\",[49,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3Y\",true],536870913]],[\"^3R\",[49,\"^2R\",\"Description\",536870913]],[\"^3R\",[49,\"^3<\",\"property\",536870913]],[\"^3R\",[49,\"^1G\",1727187033526,536870913]],[\"^3R\",[49,\"^1A\",\"~u00000002-3362-3620-0000-000000000000\",536870913]],[\"^3R\",[49,\"^@\",\"^A\",536870913]],[\"^3R\",[49,\"^7\",\"^2E\",536870913]],[\"^3R\",[49,\"^?\",true,536870913]],[\"^3R\",[49,\"^J\",\"^K\",536870913]],[\"^3R\",[49,\"^18\",true,536870913]],[\"^3R\",[50,\"^29\",1727187033526,536870913]],[\"^3R\",[50,\"^2O\",\"^3S\",536870913]],[\"^3R\",[50,\"^3H\",\"view type\",536870913]],[\"^3R\",[50,\"^3C\",\"bO6\",536870913]],[\"^3R\",[50,\"^2B\",[\"^ \",\"^3T\",\"^42\",\"^3Y\",false,\"^3V\",true],536870913]],[\"^3R\",[50,\"^2R\",\"View Type\",536870913]],[\"^3R\",[50,\"^3<\",\"property\",536870913]],[\"^3R\",[50,\"^1G\",1727187033526,536870913]],[\"^3R\",[50,\"^1A\",\"~u00000002-2182-3760-7000-000000000000\",536870913]],[\"^3R\",[50,\"^@\",\"^A\",536870913]],[\"^3R\",[50,\"^7\",\"^1=\",536870913]],[\"^3R\",[50,\"^?\",true,536870913]],[\"^3R\",[50,\"^J\",\"^K\",536870913]],[\"^3R\",[50,\"^18\",true,536870913]],[\"^3R\",[51,\"^20\",50,536870913]],[\"^3R\",[51,\"^29\",1727187033526,536870913]],[\"^3R\",[51,\"^2O\",\"^3S\",536870913]],[\"^3R\",[51,\"^3C\",\"bO7\",536870913]],[\"^3R\",[51,\"^3G\",50,536870913]],[\"^3R\",[51,\"^38\",50,536870913]],[\"^3R\",[51,\"^2R\",\"Table View\",536870913]],[\"^3R\",[51,\"^3<\",\"closed value\",536870913]],[\"^3R\",[51,\"^1G\",1727187033526,536870913]],[\"^3R\",[51,\"^1A\",\"~u00000002-1942-5424-0000-000000000000\",536870913]],[\"^3R\",[51,\"^7\",\"^6\",536870913]],[\"^3R\",[51,\"^18\",true,536870913]],[\"^3R\",[51,\"^2J\",50,536870913]],[\"^3R\",[52,\"^20\",50,536870913]],[\"^3R\",[52,\"^29\",1727187033526,536870913]],[\"^3R\",[52,\"^2O\",\"^3S\",536870913]],[\"^3R\",[52,\"^3C\",\"bO8\",536870913]],[\"^3R\",[52,\"^3G\",50,536870913]],[\"^3R\",[52,\"^38\",50,536870913]],[\"^3R\",[52,\"^2R\",\"List View\",536870913]],[\"^3R\",[52,\"^3<\",\"closed value\",536870913]],[\"^3R\",[52,\"^1G\",1727187033526,536870913]],[\"^3R\",[52,\"^1A\",\"~u00000002-1164-8285-0200-000000000000\",536870913]],[\"^3R\",[52,\"^7\",\"^1M\",536870913]],[\"^3R\",[52,\"^18\",true,536870913]],[\"^3R\",[52,\"^2J\",50,536870913]],[\"^3R\",[53,\"^29\",1727187033526,536870913]],[\"^3R\",[53,\"^2O\",\"^3S\",536870913]],[\"^3R\",[53,\"^3H\",\"sorting\",536870913]],[\"^3R\",[53,\"^3C\",\"bO9\",536870913]],[\"^3R\",[53,\"^2B\",[\"^ \",\"^3T\",\"~:coll\",\"^3V\",true,\"^3Y\",false],536870913]],[\"^3R\",[53,\"^2R\",\"sorting\",536870913]],[\"^3R\",[53,\"^3<\",\"property\",536870913]],[\"^3R\",[53,\"^1G\",1727187033526,536870913]],[\"^3R\",[53,\"^1A\",\"~u00000002-2081-0259-4000-000000000000\",536870913]],[\"^3R\",[53,\"^@\",\"^A\",536870913]],[\"^3R\",[53,\"^7\",\"^L\",536870913]],[\"^3R\",[53,\"^?\",true,536870913]],[\"^3R\",[53,\"^18\",true,536870913]],[\"^3R\",[54,\"^29\",1727187033526,536870913]],[\"^3R\",[54,\"^2O\",\"^3S\",536870913]],[\"^3R\",[54,\"^3H\",\"filters\",536870913]],[\"^3R\",[54,\"^3C\",\"bOA\",536870913]],[\"^3R\",[54,\"^2B\",[\"^ \",\"^3T\",\"^4@\",\"^3V\",true,\"^3Y\",false],536870913]],[\"^3R\",[54,\"^2R\",\"filters\",536870913]],[\"^3R\",[54,\"^3<\",\"property\",536870913]],[\"^3R\",[54,\"^1G\",1727187033526,536870913]],[\"^3R\",[54,\"^1A\",\"~u00000002-1702-3936-3300-000000000000\",536870913]],[\"^3R\",[54,\"^@\",\"^A\",536870913]],[\"^3R\",[54,\"^7\",\"^2Y\",536870913]],[\"^3R\",[54,\"^?\",true,536870913]],[\"^3R\",[54,\"^18\",true,536870913]],[\"^3R\",[55,\"^29\",1727187033526,536870913]],[\"^3R\",[55,\"^2O\",\"^3S\",536870913]],[\"^3R\",[55,\"^3H\",\"hidden-columns\",536870913]],[\"^3R\",[55,\"^3C\",\"bOB\",536870913]],[\"^3R\",[55,\"^2B\",[\"^ \",\"^3T\",\"^46\",\"^3V\",true,\"^3Y\",false],536870913]],[\"^3R\",[55,\"^2R\",\"hidden-columns\",536870913]],[\"^3R\",[55,\"^3<\",\"property\",536870913]],[\"^3R\",[55,\"^1G\",1727187033526,536870913]],[\"^3R\",[55,\"^1A\",\"~u00000002-9750-5719-2000-000000000000\",536870913]],[\"^3R\",[55,\"^@\",\"^13\",536870913]],[\"^3R\",[55,\"^7\",\"^1D\",536870913]],[\"^3R\",[55,\"^?\",true,536870913]],[\"^3R\",[55,\"^18\",true,536870913]],[\"^3R\",[56,\"^29\",1727187033526,536870913]],[\"^3R\",[56,\"^2O\",\"^3S\",536870913]],[\"^3R\",[56,\"^3H\",\"ordered-columns\",536870913]],[\"^3R\",[56,\"^3C\",\"bOC\",536870913]],[\"^3R\",[56,\"^2B\",[\"^ \",\"^3T\",\"^4@\",\"^3V\",true,\"^3Y\",false],536870913]],[\"^3R\",[56,\"^2R\",\"ordered-columns\",536870913]],[\"^3R\",[56,\"^3<\",\"property\",536870913]],[\"^3R\",[56,\"^1G\",1727187033526,536870913]],[\"^3R\",[56,\"^1A\",\"~u00000002-1485-5871-0000-000000000000\",536870913]],[\"^3R\",[56,\"^@\",\"^A\",536870913]],[\"^3R\",[56,\"^7\",\"^35\",536870913]],[\"^3R\",[56,\"^?\",true,536870913]],[\"^3R\",[56,\"^18\",true,536870913]],[\"^3R\",[57,\"^29\",1727187033526,536870913]],[\"^3R\",[57,\"^2O\",\"^3S\",536870913]],[\"^3R\",[57,\"^3H\",\"sized-columns\",536870913]],[\"^3R\",[57,\"^3C\",\"bOD\",536870913]],[\"^3R\",[57,\"^2B\",[\"^ \",\"^3T\",\"^48\",\"^3V\",true,\"^3Y\",false],536870913]],[\"^3R\",[57,\"^2R\",\"sized-columns\",536870913]],[\"^3R\",[57,\"^3<\",\"property\",536870913]],[\"^3R\",[57,\"^1G\",1727187033526,536870913]],[\"^3R\",[57,\"^1A\",\"~u00000002-1675-5105-5500-000000000000\",536870913]],[\"^3R\",[57,\"^@\",\"^A\",536870913]],[\"^3R\",[57,\"^7\",\"^11\",536870913]],[\"^3R\",[57,\"^?\",true,536870913]],[\"^3R\",[57,\"^18\",true,536870913]],[\"^3R\",[58,\"^29\",1727187033526,536870913]],[\"^3R\",[58,\"^2O\",\"^3S\",536870913]],[\"^3R\",[58,\"^3H\",\"view-for\",536870913]],[\"^3R\",[58,\"^3C\",\"bOE\",536870913]],[\"^3R\",[58,\"^2B\",[\"^ \",\"^3T\",\"^3[\",\"^3V\",true,\"^3Y\",false],536870913]],[\"^3R\",[58,\"^2R\",\"view-for\",536870913]],[\"^3R\",[58,\"^3<\",\"property\",536870913]],[\"^3R\",[58,\"^1G\",1727187033526,536870913]],[\"^3R\",[58,\"^1A\",\"~u00000002-3627-4319-0000-000000000000\",536870913]],[\"^3R\",[58,\"^@\",\"^A\",536870913]],[\"^3R\",[58,\"^7\",\"^2H\",536870913]],[\"^3R\",[58,\"^?\",true,536870913]],[\"^3R\",[58,\"^J\",\"^K\",536870913]],[\"^3R\",[58,\"^18\",true,536870913]],[\"^3R\",[59,\"^29\",1727187033526,536870913]],[\"^3R\",[59,\"^2O\",\"^3S\",536870913]],[\"^3R\",[59,\"^3H\",\"remote-metadata\",536870913]],[\"^3R\",[59,\"^3C\",\"bOF\",536870913]],[\"^3R\",[59,\"^2B\",[\"^ \",\"^3T\",\"^48\",\"^3V\",true,\"^3Y\",false],536870913]],[\"^3R\",[59,\"^2R\",\"remote-metadata\",536870913]],[\"^3R\",[59,\"^3<\",\"property\",536870913]],[\"^3R\",[59,\"^1G\",1727187033526,536870913]],[\"^3R\",[59,\"^1A\",\"~u00000002-9907-5046-9000-000000000000\",536870913]],[\"^3R\",[59,\"^@\",\"^A\",536870913]],[\"^3R\",[59,\"^7\",\"^3B\",536870913]],[\"^3R\",[59,\"^?\",true,536870913]],[\"^3R\",[59,\"^18\",true,536870913]],[\"^3R\",[60,\"^29\",1727187033526,536870913]],[\"^3R\",[60,\"^2O\",\"^3S\",536870913]],[\"^3R\",[60,\"^3H\",\"due\",536870913]],[\"^3R\",[60,\"^3C\",\"bOG\",536870913]],[\"^3R\",[60,\"^2B\",[\"^ \",\"^3T\",\"~:datetime\",\"^3V\",false,\"^3Y\",false],536870913]],[\"^3R\",[60,\"^2R\",\"Due\",536870913]],[\"^3R\",[60,\"^3<\",\"property\",536870913]],[\"^3R\",[60,\"^1G\",1727187033526,536870913]],[\"^3R\",[60,\"^1A\",\"~u00000002-1089-0805-4900-000000000000\",536870913]],[\"^3R\",[60,\"^@\",\"^A\",536870913]],[\"^3R\",[60,\"^7\",\"^3D\",536870913]],[\"^3R\",[60,\"^?\",true,536870913]],[\"^3R\",[60,\"^18\",true,536870913]],[\"^3R\",[61,\"^29\",1727187033526,536870913]],[\"^3R\",[61,\"^2O\",\"^3S\",536870913]],[\"^3R\",[61,\"^3H\",\"state\",536870913]],[\"^3R\",[61,\"^3C\",\"bOH\",536870913]],[\"^3R\",[61,\"^2B\",[\"^ \",\"^3T\",\"^48\",\"^3V\",false,\"^3Y\",false],536870913]],[\"^3R\",[61,\"^2R\",\"State\",536870913]],[\"^3R\",[61,\"^3<\",\"property\",536870913]],[\"^3R\",[61,\"^1G\",1727187033526,536870913]],[\"^3R\",[61,\"^1A\",\"~u00000002-1165-1650-8700-000000000000\",536870913]],[\"^3R\",[61,\"^@\",\"^A\",536870913]],[\"^3R\",[61,\"^7\",\"^>\",536870913]],[\"^3R\",[61,\"^?\",true,536870913]],[\"^3R\",[61,\"^18\",true,536870913]],[\"^3R\",[62,\"^29\",1727187033526,536870913]],[\"^3R\",[62,\"^2O\",\"^3S\",536870913]],[\"^3R\",[62,\"^3H\",\"task\",536870913]],[\"^3R\",[62,\"^2R\",\"Task\",536870913]],[\"^3R\",[62,\"^3<\",\"class\",536870913]],[\"^3R\",[62,\"^1G\",1727187033526,536870913]],[\"^3R\",[62,\"^1A\",\"~u00000002-1282-1814-5700-000000000000\",536870913]],[\"^3R\",[62,\"^7\",\"^2:\",536870913]],[\"^3R\",[62,\"^18\",true,536870913]],[\"^3R\",[62,\"^1J\",6,536870913]],[\"^3R\",[62,\"^1O\",33,536870913]],[\"^3R\",[62,\"^1O\",40,536870913]],[\"^3R\",[62,\"^1O\",45,536870913]],[\"^3R\",[63,\"^29\",1727187033527,536870913]],[\"^3R\",[63,\"^2O\",\"^3S\",536870913]],[\"^3R\",[63,\"^3H\",\"journal\",536870913]],[\"^3R\",[63,\"^2R\",\"Journal\",536870913]],[\"^3R\",[63,\"^3<\",\"class\",536870913]],[\"^3R\",[63,\"^1G\",1727187033527,536870913]],[\"^3R\",[63,\"^1A\",\"~u00000002-1979-7410-8100-000000000000\",536870913]],[\"^3R\",[63,\"^7\",\"^3=\",536870913]],[\"^3R\",[63,\"^18\",true,536870913]],[\"^3R\",[63,\"^1J\",6,536870913]],[\"^3R\",[63,\"^3\",\"MMM do, yyyy\",536870913]],[\"^3R\",[64,\"^29\",1727187033527,536870913]],[\"^3R\",[64,\"^2O\",\"^3S\",536870913]],[\"^3R\",[64,\"^3H\",\"query\",536870913]],[\"^3R\",[64,\"^2R\",\"Query\",536870913]],[\"^3R\",[64,\"^3<\",\"class\",536870913]],[\"^3R\",[64,\"^1G\",1727187033527,536870913]],[\"^3R\",[64,\"^1A\",\"~u00000002-2324-8016-6000-000000000000\",536870913]],[\"^3R\",[64,\"^7\",\"^5\",536870913]],[\"^3R\",[64,\"^18\",true,536870913]],[\"^3R\",[64,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"search\"],536870913]],[\"^3R\",[64,\"^1J\",6,536870913]],[\"^3R\",[64,\"^1O\",13,536870913]],[\"^3R\",[65,\"^29\",1727187033527,536870913]],[\"^3R\",[65,\"^2O\",\"^3S\",536870913]],[\"^3R\",[65,\"^3H\",\"advanced query\",536870913]],[\"^3R\",[65,\"^2R\",\"Advanced query\",536870913]],[\"^3R\",[65,\"^3<\",\"class\",536870913]],[\"^3R\",[65,\"^1G\",1727187033527,536870913]],[\"^3R\",[65,\"^1A\",\"~u00000002-1141-5857-5800-000000000000\",536870913]],[\"^3R\",[65,\"^7\",\"^=\",536870913]],[\"^3R\",[65,\"^18\",true,536870913]],[\"^3R\",[65,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"search\"],536870913]],[\"^3R\",[65,\"^1J\",64,536870913]],[\"^3R\",[66,\"^29\",1727187033527,536870913]],[\"^3R\",[66,\"^2O\",\"^3S\",536870913]],[\"^3R\",[66,\"^3H\",\"card\",536870913]],[\"^3R\",[66,\"^2R\",\"Card\",536870913]],[\"^3R\",[66,\"^3<\",\"class\",536870913]],[\"^3R\",[66,\"^1G\",1727187033527,536870913]],[\"^3R\",[66,\"^1A\",\"~u00000002-1358-2811-0900-000000000000\",536870913]],[\"^3R\",[66,\"^7\",\"^H\",536870913]],[\"^3R\",[66,\"^18\",true,536870913]],[\"^3R\",[66,\"^1J\",6,536870913]],[\"^3R\",[66,\"^1O\",60,536870913]],[\"^3R\",[66,\"^1O\",61,536870913]],[\"^3R\",[67,\"^29\",1727187033527,536870913]],[\"^3R\",[67,\"^2O\",\"^3S\",536870913]],[\"^3R\",[67,\"^3H\",\"cards\",536870913]],[\"^3R\",[67,\"^2R\",\"Cards\",536870913]],[\"^3R\",[67,\"^3<\",\"class\",536870913]],[\"^3R\",[67,\"^1G\",1727187033527,536870913]],[\"^3R\",[67,\"^1A\",\"~u00000002-1284-2651-6700-000000000000\",536870913]],[\"^3R\",[67,\"^7\",\"^P\",536870913]],[\"^3R\",[67,\"^18\",true,536870913]],[\"^3R\",[67,\"^25\",[\"^ \",\"^3T\",\"^4<\",\"^4=\",\"search\"],536870913]],[\"^3R\",[67,\"^1J\",64,536870913]],[\"^3R\",[68,\"^1A\",\"~u66f2c859-0e01-4f36-81c2-db5c0eb86adf\",536870913]],[\"^3R\",[68,\"^V\",\"{:meta/version 1\\n\\n ;; Set the preferred format.\\n ;; This is _only_ for file graphs.\\n ;; Available options:\\n ;; - Markdown (default)\\n ;; - Org\\n ;; :preferred-format \\\"Markdown\\\"\\n\\n ;; Set the preferred workflow style.\\n ;; This is _only_ for file graphs.\\n ;; Available options:\\n ;; - :now for NOW/LATER style (default)\\n ;; - :todo for TODO/DOING style\\n ;; Exclude directories/files.\\n ;; This is _only_ for file graphs.\\n ;; Example usage:\\n ;; :hidden [\\\"/archived\\\" \\\"/test.md\\\" \\\"../assets/archived\\\"]\\n ;; Define the default journal page template.\\n ;; Enter the template name between the quotes.\\n :default-templates\\n {:journals \\\"\\\"}\\n\\n ;; Set a custom date format for the journal page title.\\n ;; This is _only_ for file graphs.\\n ;; Default value: \\\"MMM do, yyyy\\\"\\n ;; e.g., \\\"Jan 19th, 2038\\\"\\n ;; Example usage e.g., \\\"Tue 19th, Jan 2038\\\"\\n ;; :journal/page-title-format \\\"EEE do, MMM yyyy\\\"\\n\\n ;; Specify the journal filename format using a valid date format string.\\n ;; !Warning:\\n ;; This configuration is not retroactive and affects only new journals.\\n ;; To show old journal files in the app, manually rename the files in the\\n ;; journal directory to match the new format.\\n ;; Default value: \\\"yyyy_MM_dd\\\"\\n ;; :journal/file-name-format \\\"yyyy_MM_dd\\\"\\n\\n ;; Enable tooltip preview on hover.\\n ;; Default value: true\\n :ui/enable-tooltip? true\\n\\n ;; Display brackets [[]] around page references.\\n ;; Default value: true\\n ;; :ui/show-brackets? true\\n\\n ;; Display all lines of a block when referencing ((block)).\\n ;; Default value: false\\n :ui/show-full-blocks? false\\n\\n ;; Automatically expand block references when zooming in.\\n ;; Default value: true\\n :ui/auto-expand-block-refs? true\\n\\n ;; Hide empty block properties\\n ;; This is _only_ for DB graphs.\\n ;; Default value: false\\n ;; :ui/hide-empty-properties? false\\n\\n ;; Disable accent marks when searching.\\n ;; After changing this setting, rebuild the search index by pressing (^C ^S).\\n ;; Default value: true\\n :feature/enable-search-remove-accents? true\\n\\n ;; Enable journals.\\n ;; Default value: true\\n ;; :feature/enable-journals? true\\n\\n ;; Enable flashcards.\\n ;; Default value: true\\n ;; :feature/enable-flashcards? true\\n\\n ;; Enable whiteboards.\\n ;; Default value: true\\n ;; :feature/enable-whiteboards? true\\n\\n ;; Disable the journal's built-in 'Scheduled tasks and deadlines' query.\\n ;; Default value: false\\n ;; :feature/disable-scheduled-and-deadline-query? false\\n\\n ;; Specify the number of days displayed in the future for\\n ;; the 'scheduled tasks and deadlines' query.\\n ;; Example usage:\\n ;; Display all scheduled and deadline blocks for the next 14 days:\\n ;; :scheduled/future-days 14\\n ;; Default value: 7\\n ;; :scheduled/future-days 7\\n\\n ;; Specify the first day of the week.\\n ;; Available options:\\n ;; - integer from 0 to 6 (Monday to Sunday)\\n ;; Default value: 6 (Sunday)\\n :start-of-week 6\\n\\n ;; Specify a custom CSS import.\\n ;; This option takes precedence over the local `logseq/custom.css` file.\\n ;; Example usage:\\n ;; :custom-css-url \\\"@import url('https://cdn.jsdelivr.net/gh/dracula/logseq@master/custom.css');\\\"\\n\\n ;; Specify a custom JS import.\\n ;; This option takes precedence over the local `logseq/custom.js` file.\\n ;; Example usage:\\n ;; :custom-js-url \\\"https://cdn.logseq.com/custom.js\\\"\\n\\n ;; Set bullet indentation when exporting\\n ;; Available options:\\n ;; - `:eight-spaces` as eight spaces\\n ;; - `:four-spaces` as four spaces\\n ;; - `:two-spaces` as two spaces\\n ;; - `:tab` as a tab character (default)\\n ;; :export/bullet-indentation :tab\\n\\n ;; Publish all pages within the Graph\\n ;; Regardless of whether individual pages have been marked as public.\\n ;; Default value: false\\n ;; :publishing/all-pages-public? false\\n\\n ;; Define the default home page and sidebar status.\\n ;; If unspecified, the journal page will be loaded on startup and the right sidebar will stay hidden.\\n ;; The `:page` value represents the name of the page displayed at startup.\\n ;; Available options for `:sidebar` are:\\n ;; - \\\"Contents\\\" to display the Contents page in the right sidebar.\\n ;; - A specific page name to display in the right sidebar.\\n ;; - An array of multiple pages, e.g., [\\\"Contents\\\" \\\"Page A\\\" \\\"Page B\\\"].\\n ;; If `:sidebar` remains unset, the right sidebar will stay hidden.\\n ;; Examples:\\n ;; 1. Set \\\"Changelog\\\" as the home page and display \\\"Contents\\\" in the right sidebar:\\n ;; :default-home {:page \\\"Changelog\\\", :sidebar \\\"Contents\\\"}\\n ;; 2. Set \\\"Jun 3rd, 2021\\\" as the home page without the right sidebar:\\n ;; :default-home {:page \\\"Jun 3rd, 2021\\\"}\\n ;; 3. Set \\\"home\\\" as the home page and display multiple pages in the right sidebar:\\n ;; :default-home {:page \\\"home\\\", :sidebar [\\\"Page A\\\" \\\"Page B\\\"]}\\n\\n ;; Set the default location for storing notes.\\n ;; Default value: \\\"pages\\\"\\n ;; :pages-directory \\\"pages\\\"\\n\\n ;; Set the default location for storing journals.\\n ;; Default value: \\\"journals\\\"\\n ;; :journals-directory \\\"journals\\\"\\n\\n ;; Set the default location for storing whiteboards.\\n ;; Default value: \\\"whiteboards\\\"\\n ;; :whiteboards-directory \\\"whiteboards\\\"\\n\\n ;; Enabling this option converts\\n ;; This is _only_ for file graphs.\\n ;; [[Grant Ideas]] to [[file:./grant_ideas.org][Grant Ideas]] for org-mode.\\n ;; For more information, visit https://github.com/logseq/logseq/issues/672\\n ;; :org-mode/insert-file-link? false\\n\\n ;; Configure custom shortcuts.\\n ;; Syntax:\\n ;; 1. + indicates simultaneous key presses, e.g., `Ctrl+Shift+a`.\\n ;; 2. A space between keys represents key chords, e.g., `t s` means\\n ;; pressing `t` followed by `s`.\\n ;; 3. mod refers to `Ctrl` for Windows/Linux and `Command` for Mac.\\n ;; 4. Use false to disable a specific shortcut.\\n ;; 5. You can define multiple bindings for a single action, e.g., [\\\"ctrl+j\\\" \\\"down\\\"].\\n ;; The full list of configurable shortcuts is available at:\\n ;; https://github.com/logseq/logseq/blob/master/src/main/frontend/modules/shortcut/config.cljs\\n ;; Example:\\n ;; :shortcuts\\n ;; {:editor/new-block \\\"enter\\\"\\n ;; :editor/new-line \\\"shift+enter\\\"\\n ;; :editor/insert-link \\\"mod+shift+k\\\"\\n ;; :editor/highlight false\\n ;; :ui/toggle-settings \\\"t s\\\"\\n ;; :editor/up [\\\"ctrl+k\\\" \\\"up\\\"]\\n ;; :editor/down [\\\"ctrl+j\\\" \\\"down\\\"]\\n ;; :editor/left [\\\"ctrl+h\\\" \\\"left\\\"]\\n ;; :editor/right [\\\"ctrl+l\\\" \\\"right\\\"]}\\n :shortcuts {}\\n\\n ;; Configure the behavior of pressing Enter in document mode.\\n ;; if set to true, pressing Enter will create a new block.\\n ;; Default value: false\\n :shortcut/doc-mode-enter-for-new-block? false\\n\\n ;; Block content larger than `block/title-max-length` will not be searchable\\n ;; or editable for performance.\\n ;; Default value: 10000\\n :block/title-max-length 10000\\n\\n ;; Display command documentation on hover.\\n ;; Default value: true\\n :ui/show-command-doc? true\\n\\n ;; Display empty bullet points.\\n ;; Default value: false\\n :ui/show-empty-bullets? false\\n\\n ;; Pre-defined :view function to use with advanced queries.\\n :query/views\\n {:pprint\\n (fn [r] [:pre.code (pprint r)])}\\n\\n ;; Advanced queries `:result-transform` function.\\n ;; Transform the query result before displaying it.\\n ;; Example usage for DB graphs:\\n;; :query/result-transforms\\n;; {:sort-by-priority\\n;; (fn [result] (sort-by (fn [h] (get h :logseq.property/priority \\\"Z\\\")) result))}\\n\\n;; Queries will be displayed at the bottom of today's journal page.\\n;; Example usage:\\n;; :default-queries\\n;; {:journals []}\\n\\n ;; Add custom commands to the command palette\\n ;; Example usage:\\n ;; :commands\\n ;; [\\n ;; [\\\"js\\\" \\\"Javascript\\\"]\\n ;; [\\\"md\\\" \\\"Markdown\\\"]\\n ;; ]\\n :commands []\\n\\n ;; Enable collapsing blocks with titles but no children.\\n ;; By default, only blocks with children can be collapsed.\\n ;; Setting `:outliner/block-title-collapse-enabled?` to true allows collapsing\\n ;; blocks with titles (multiple lines) and content. For example:\\n ;; - block title\\n ;; block content\\n ;; Default value: false\\n :outliner/block-title-collapse-enabled? false\\n\\n ;; Macros replace texts and will make you more productive.\\n ;; Example usage:\\n ;; Change the :macros value below to:\\n ;; {\\\"poem\\\" \\\"Rose is $1, violet's $2. Life's ordered: Org assists you.\\\"}\\n ;; input \\\"{{poem red,blue}}\\\"\\n ;; becomes\\n ;; Rose is red, violet's blue. Life's ordered: Org assists you.\\n :macros {}\\n\\n ;; Configure the default expansion level for linked references.\\n ;; For example, consider the following block hierarchy:\\n ;; - a [[page]] (level 1)\\n ;; - b (level 2)\\n ;; - c (level 3)\\n ;; - d (level 4)\\n ;;\\n ;; With the default value of level 2, block b will be collapsed.\\n ;; If the level's value is set to 3, block c will be collapsed.\\n ;; Default value: 2\\n :ref/default-open-blocks-level 2\\n\\n ;; Configure the threshold for linked references before collapsing.\\n ;; Default value: 100\\n :ref/linked-references-collapsed-threshold 50\\n\\n ;; Graph view configuration.\\n ;; Example usage:\\n ;; :graph/settings\\n ;; {:orphan-pages? true ; Default value: true\\n ;; :builtin-pages? false ; Default value: false\\n ;; :excluded-pages? false ; Default value: false\\n ;; :journal? false} ; Default value: false\\n\\n ;; Graph view configuration.\\n ;; Example usage:\\n ;; :graph/forcesettings\\n ;; {:link-dist 180 ; Default value: 180\\n ;; :charge-strength -600 ; Default value: -600\\n ;; :charge-range 600} ; Default value: 600\\n\\n\\n ;; Favorites to list on the left sidebar\\n ;; This is _only_ for file graphs.\\n ;; Set flashcards interval.\\n ;; Expected value:\\n ;; - Float between 0 and 1\\n ;; higher values result in faster changes to the next review interval.\\n ;; Default value: 0.5\\n ;; :srs/learning-fraction 0.5\\n\\n ;; Set the initial interval after the first successful review of a card.\\n ;; Default value: 4\\n ;; :srs/initial-interval 4\\n\\n ;; Hide specific block properties.\\n ;; Example usage:\\n ;; :block-hidden-properties #{:public :icon}\\n\\n ;; Create a page for all properties.\\n ;; This is _only_ for file graphs.\\n ;; Default value: true\\n;; Properties to exclude from having property pages\\n ;; This is _only_ for file graphs.\\n ;; Example usage:\\n ;; :property-pages/excludelist #{:duration :author}\\n\\n ;; By default, property value separated by commas will not be treated as\\n ;; page references. You can add properties to enable it.\\n ;; This is _only_ for file graphs.\\n ;; Example usage:\\n ;; :property/separated-by-commas #{:alias :tags}\\n\\n ;; Properties that are ignored when parsing property values for references\\n ;; This is _only_ for file graphs.\\n ;; Example usage:\\n ;; :ignored-page-references-keywords #{:author :website}\\n\\n ;; logbook configuration.\\n ;; :logbook/settings\\n ;; {:with-second-support? false ;limit logbook to minutes, seconds will be eliminated\\n ;; :enabled-in-all-blocks true ;display logbook in all blocks after timetracking\\n ;; :enabled-in-timestamped-blocks false ;don't display logbook at all\\n ;; }\\n\\n ;; Mobile photo upload configuration.\\n ;; :mobile/photo\\n ;; {:allow-editing? true\\n ;; :quality 80}\\n\\n ;; Mobile features options\\n ;; Gestures\\n ;; Example usage:\\n ;; :mobile\\n ;; {:gestures/disabled-in-block-with-tags [\\\"kanban\\\"]}\\n\\n ;; Extra CodeMirror options\\n ;; See https://codemirror.net/5/doc/manual.html#config for possible options\\n ;; Example usage:\\n ;; :editor/extra-codemirror-options\\n ;; {:lineWrapping false ; Default value: false\\n ;; :lineNumbers true ; Default value: true\\n ;; :readOnly false} ; Default value: false\\n\\n ;; Enable logical outdenting\\n ;; Default value: false\\n ;; :editor/logical-outdenting? false\\n\\n ;; Prefer pasting the file when text and a file are in the clipboard.\\n ;; Default value: false\\n ;; :editor/preferred-pasting-file? false\\n\\n ;; Quick capture templates for receiving content from other apps.\\n ;; Each template contains three elements {time}, {text} and {url}, which can be auto-expanded\\n ;; by receiving content from other apps. Note: the {} cannot be omitted.\\n ;; - {time}: capture time\\n ;; - {date}: capture date using current date format, use `[[{date}]]` to get a page reference\\n ;; - {text}: text that users selected before sharing.\\n ;; - {url}: URL or assets path for media files stored in Logseq.\\n ;; You can also reorder them or use only one or two of them in the template.\\n ;; You can also insert or format any text in the template, as shown in the following examples.\\n ;; :quick-capture-templates\\n ;; {:text \\\"[[quick capture]] **{time}**: {text} from {url}\\\"\\n ;; :media \\\"[[quick capture]] **{time}**: {url}\\\"}\\n\\n ;; Quick capture options.\\n ;; - insert-today? Insert the capture at the end of today's journal page (boolean).\\n ;; - redirect-page? Redirect to the quick capture page after capturing (boolean).\\n ;; - default-page The default page to capture to if insert-today? is false (string).\\n ;; :quick-capture-options\\n ;; {:insert-today? false ;; Default value: true\\n ;; :redirect-page? false ;; Default value: false\\n ;; :default-page \\\"quick capture\\\"} ;; Default page: \\\"quick capture\\\"\\n\\n ;; File sync options\\n ;; Ignore these files when syncing, regexp is supported.\\n ;; :file-sync/ignore-files []\\n\\n ;; Configure the Enter key behavior for\\n ;; context-aware editing with DWIM (Do What I Mean).\\n ;; context-aware Enter key behavior implies that pressing Enter will\\n ;; have different outcomes based on the context.\\n ;; For instance, pressing Enter within a list generates a new list item,\\n ;; whereas pressing Enter in a block reference opens the referenced block.\\n ;; :dwim/settings\\n ;; {:admonition&src? true ;; Default value: true\\n ;; :markup? false ;; Default value: false\\n ;; :block-ref? true ;; Default value: true\\n ;; :page-ref? true ;; Default value: true\\n ;; :properties? true ;; Default value: true\\n ;; :list? false} ;; Default value: false\\n\\n ;; Configure the escaping method for special characters in page titles.\\n ;; This is _only_ for file graphs.\\n ;; Warning:\\n ;; This is a dangerous operation. To modify the setting,\\n ;; you'll need to manually rename all affected files and\\n ;; re-index them on all clients after synchronization.\\n ;; Incorrect handling may result in messy page titles.\\n ;; Available options:\\n ;; - :triple-lowbar (default)\\n ;; ;use triple underscore `___` for slash `/` in page title\\n ;; ;use Percent-encoding for other invalid characters\\n}\\n\",536870913]],[\"^3R\",[68,\"^8\",\"~m1727187033523\",536870913]],[\"^3R\",[68,\"^23\",\"~m1727187033523\",536870913]],[\"^3R\",[68,\"^3I\",\"logseq/config.edn\",536870913]],[\"^3R\",[69,\"^1A\",\"~u66f2c859-fb71-49ad-b56f-b177b647ed89\",536870913]],[\"^3R\",[69,\"^V\",\"\",536870913]],[\"^3R\",[69,\"^8\",\"~m1727187033523\",536870913]],[\"^3R\",[69,\"^23\",\"~m1727187033523\",536870913]],[\"^3R\",[69,\"^3I\",\"logseq/custom.css\",536870913]],[\"^3R\",[70,\"^1A\",\"~u66f2c859-a95c-4b95-96dc-339b7181e86e\",536870913]],[\"^3R\",[70,\"^V\",\"\",536870913]],[\"^3R\",[70,\"^8\",\"~m1727187033523\",536870913]],[\"^3R\",[70,\"^23\",\"~m1727187033523\",536870913]],[\"^3R\",[70,\"^3I\",\"logseq/custom.js\",536870913]],[\"^3R\",[71,\"^29\",1727187033527,536870913]],[\"^3R\",[71,\"^2O\",\"^3S\",536870913]],[\"^3R\",[71,\"^3H\",\"contents\",536870913]],[\"^3R\",[71,\"^2R\",\"Contents\",536870913]],[\"^3R\",[71,\"^3<\",\"page\",536870913]],[\"^3R\",[71,\"^1G\",1727187033527,536870913]],[\"^3R\",[71,\"^1A\",\"~u66f2c859-d18d-433a-bd24-ab24995cfae1\",536870913]],[\"^3R\",[71,\"^18\",true,536870913]],[\"^3R\",[72,\"^29\",1727187033588,536870914]],[\"^3R\",[72,\"^2O\",\"^3S\",536870914]],[\"^3R\",[72,\"^3H\",\"$$$views\",536870914]],[\"^3R\",[72,\"^2R\",\"$$$views\",536870914]],[\"^3R\",[72,\"^3<\",\"hidden\",536870914]],[\"^3R\",[72,\"^1G\",1727187033588,536870914]],[\"^3R\",[72,\"^1A\",\"~u66f2c859-f1f7-40da-8854-604ef354f7ff\",536870914]],[\"^3R\",[73,\"^29\",1727187033588,536870914]],[\"^3R\",[73,\"^2O\",\"^3S\",536870914]],[\"^3R\",[73,\"^3C\",\"bOI\",536870914]],[\"^3R\",[73,\"^3G\",72,536870914]],[\"^3R\",[73,\"^38\",72,536870914]],[\"^3R\",[73,\"^2R\",\"All Pages Default View\",536870914]],[\"^3R\",[73,\"^1G\",1727187033588,536870914]],[\"^3R\",[73,\"^1A\",\"~u66f2c859-9076-4a30-a788-533c01d02f85\",536870914]],[\"^3R\",[73,\"^18\",true,536870914]],[\"^3R\",[73,\"^2H\",72,536870914]],[\"^3R\",[74,\"^29\",1727187033721,536870915]],[\"^3R\",[74,\"^2O\",\"^3S\",536870915]],[\"^3R\",[74,\"^2L\",20240924,536870915]],[\"^3R\",[74,\"^3H\",\"sep 24th, 2024\",536870915]],[\"^3R\",[74,\"^37\",9,536870918]],[\"^3R\",[74,\"^37\",63,536870918]],[\"^3R\",[74,\"^1R\",9,536870917]],[\"^3R\",[74,\"^1R\",63,536870917]],[\"^3R\",[74,\"^1E\",63,536870915]],[\"^3R\",[74,\"^2R\",\"Sep 24th, 2024\",536870915]],[\"^3R\",[74,\"^C\",536870917,536870918]],[\"^3R\",[74,\"^3<\",\"journal\",536870915]],[\"^3R\",[74,\"^1G\",1727187033721,536870915]],[\"^3R\",[74,\"^1A\",\"~u00000001-2024-0924-0000-000000000000\",536870915]],[\"^3R\",[75,\"^29\",1727187033722,536870915]],[\"^3R\",[75,\"^2O\",\"^3S\",536870915]],[\"^3R\",[75,\"^3C\",\"a0\",536870915]],[\"^3R\",[75,\"^3G\",74,536870915]],[\"^3R\",[75,\"^38\",74,536870915]],[\"^3R\",[75,\"^37\",74,536870918]],[\"^3R\",[75,\"^2R\",\"\",536870915]],[\"^3R\",[75,\"^C\",536870917,536870918]],[\"^3R\",[75,\"^1G\",1727187033722,536870915]],[\"^3R\",[75,\"^1A\",\"~u66f2c859-8d26-4147-b6dc-a7f93fbd3989\",536870915]]]]]]") - -(def example-db (dt/read-transit-str example-db-transit)) diff --git a/src/rtc_e2e_test/fixture.cljs b/src/rtc_e2e_test/fixture.cljs deleted file mode 100644 index a029d06e47..0000000000 --- a/src/rtc_e2e_test/fixture.cljs +++ /dev/null @@ -1,82 +0,0 @@ -(ns fixture - (:require [cljs.test :as t] - [const] - [datascript.core :as d] - [example] - [frontend.common.missionary :as c.m] - [frontend.worker.rtc.client-op :as client-op] - [frontend.worker.rtc.db-listener] - [frontend.worker.state :as worker-state] - [helper] - [missionary.core :as m])) - -(def graph-schema-version "0") - -(defn- transact-graph-schema-version - [conn] - (d/transact! conn [{:db/ident :logseq.kv/schema-version - :kv/value graph-schema-version}])) - -(def install-some-consts - {:before - (fn [] - (reset! worker-state/*rtc-ws-url "wss://ws-dev.logseq.com/rtc-sync?token=%s"))}) - -(def install-example-db-fixture - {:before - (fn [] - (prn :test-repo const/test-repo) - (swap! worker-state/*client-ops-conns assoc const/test-repo (d/create-conn client-op/schema-in-db)) - (let [conn (d/conn-from-db example/example-db)] - (transact-graph-schema-version conn) - (swap! worker-state/*datascript-conns assoc const/test-repo conn))) - :after - (fn [] - (swap! worker-state/*datascript-conns dissoc const/test-repo) - (swap! worker-state/*client-ops-conns dissoc const/test-repo))}) - -(def clear-test-remote-graphs-fixture - {:before - #(when const/is-client1? - (t/async - done - (c.m/run-task-throw - :clear-test-remote-graphs - (m/sp - (m/? helper/new-task--clear-all-test-remote-graphs) - (done)))))}) - -(def upload-example-graph-fixture - {:before - #(when const/is-client1? - (t/async - done - (c.m/run-task-throw - :upload-example-graph-fixture - (m/sp - (swap! worker-state/*datascript-conns dissoc const/downloaded-test-repo) - (swap! worker-state/*client-ops-conns assoc - const/downloaded-test-repo (d/create-conn client-op/schema-in-db)) - (let [{:keys [graph-uuid]} (m/? helper/new-task--upload-example-graph)] - (assert (some? graph-uuid)) - (m/? (helper/new-task--wait-creating-graph graph-uuid)) - (println :uploaded-graph graph-uuid)) - (done)))))}) - -(def build-conn-by-download-example-graph-fixture - {:before - #(t/async - done - (c.m/run-task-throw - :build-conn-by-download-example-graph-fixture - (m/sp - (swap! worker-state/*datascript-conns dissoc const/downloaded-test-repo) - (swap! worker-state/*client-ops-conns assoc - const/downloaded-test-repo (d/create-conn client-op/schema-in-db)) - (let [graph-uuid (m/? helper/new-task--get-remote-example-graph-uuid)] - (assert (some? graph-uuid)) - (m/? (helper/new-task--download-graph graph-uuid const/downloaded-test-graph-name))) - (done)))) - :after - #(do (swap! worker-state/*datascript-conns dissoc const/downloaded-test-repo) - (swap! worker-state/*client-ops-conns dissoc const/downloaded-test-repo))}) diff --git a/src/rtc_e2e_test/helper.cljs b/src/rtc_e2e_test/helper.cljs deleted file mode 100644 index 03192cd2a6..0000000000 --- a/src/rtc_e2e_test/helper.cljs +++ /dev/null @@ -1,208 +0,0 @@ -(ns helper - (:require [cljs.test :as t :refer [is]] - [const] - [datascript.core :as d] - [datascript.transit :as dt] - [fixture] - [frontend.common.missionary :as c.m] - [frontend.worker.rtc.client-op :as client-op] - [frontend.worker.rtc.core :as rtc.core] - [frontend.worker.rtc.log-and-state :as rtc-log-and-state] - [frontend.worker.state :as worker-state] - [logseq.db :as ldb] - [logseq.db.common.order :as db-order] - [logseq.outliner.batch-tx :as batch-tx] - [meander.epsilon :as me] - [missionary.core :as m])) - -(defn log - [& objs] - (apply println (if const/is-client1? "[client1]" "[client2]") objs)) - -(def new-task--upload-example-graph - (rtc.core/new-task--upload-graph const/test-token const/test-repo const/test-graph-name)) - -(defn new-task--wait-creating-graph - [graph-uuid] - (c.m/backoff - {} - (m/sp - (let [graphs (m/? (rtc.core/new-task--get-graphs const/test-token)) - graph (some (fn [graph] (when (= graph-uuid (:graph-uuid graph)) graph)) graphs)] - (when-not graph - (throw (ex-info "graph not exist" {:graph-uuid graph-uuid}))) - (log "waiting for graph " graph-uuid " finish creating") - (when (= "creating" (:graph-status graph)) - (throw (ex-info "wait creating-graph" {:missionary/retry true}))))))) - -(def new-task--clear-all-test-remote-graphs - (m/sp - (let [graphs (m/? (rtc.core/new-task--get-graphs const/test-token)) - test-graphs (filter (fn [graph] - (not= "deleting" (:graph-status graph))) - graphs)] - (doseq [graph test-graphs] - (m/? (rtc.core/new-task--delete-graph const/test-token (:graph-uuid graph) fixture/graph-schema-version)) - (log :deleted-graph (:graph-name graph) (:graph-uuid graph)))))) - -(def new-task--get-remote-example-graph-uuid - (c.m/backoff - {} - (m/sp - (let [graphs (m/? (rtc.core/new-task--get-graphs const/test-token)) - graph - (some (fn [graph] - (when (= const/test-graph-name (:graph-name graph)) - graph)) - graphs)] - (when (= "deleting" (:graph-status graph)) - (throw (ex-info "example graph status is \"deleting\", check server's background-upload-graph log" - {:graph-name (:graph-name graph) - :graph-uuid (:graph-uuid graph)}))) - (when-not graph - (throw (ex-info "wait remote-example-graph" {:missionary/retry true - :graphs graphs}))) - (when (= "creating" (:graph-status graph)) - (throw (ex-info "wait remote-example-graph (creating)" {:missionary/retry true - :graphs graphs}))) - (:graph-uuid graph))))) - -(defn new-task--download-graph - [graph-uuid graph-name] - (m/sp - (let [download-info-uuid (m/? (rtc.core/new-task--request-download-graph - const/test-token graph-uuid fixture/graph-schema-version)) - result (m/? (rtc.core/new-task--wait-download-info-ready - const/test-token download-info-uuid graph-uuid fixture/graph-schema-version 60000)) - {:keys [_download-info-uuid - download-info-s3-url - _download-info-tx-instant - _download-info-t - _download-info-created-at]} result] - (when (= result :timeout) - (throw (ex-info "wait download-info-ready timeout" {}))) - (m/? (rtc.core/new-task--download-graph-from-s3 - graph-uuid graph-name download-info-s3-url))))) - -(defn get-downloaded-test-conn - [] - {:post [(some? %)]} - (worker-state/get-datascript-conn const/downloaded-test-repo)) - -(defn simplify-client-op - [client-op] - #_:clj-kondo/ignore - (me/find - client-op - [?op-type _ {:block-uuid ?block-uuid :av-coll [[!a !v _ !add] ...]}] - [?op-type ?block-uuid (map vector !a !v !add)] - - [?op-type _ {:block-uuid ?block-uuid}] - [?op-type ?block-uuid])) - -(defn new-task--wait-all-client-ops-sent - [& {:keys [timeout] :or {timeout 10000}}] - (m/sp - (let [r (m/? (m/timeout - (m/reduce (fn [_ v] - (when (and (= :rtc.log/push-local-update (:type v)) - (empty? (client-op/get-all-block-ops const/downloaded-test-repo))) - (is (nil? (:ex-data v))) - (reduced v))) - rtc-log-and-state/rtc-log-flow) - timeout :timeout))] - (is (not= :timeout r))))) - -(defn new-task--send-message-to-other-client - [message] - (m/sp - (let [conn (get-downloaded-test-conn) - message-page-id (:db/id (ldb/get-page @conn const/message-page-uuid)) - sorted-blocks (when message-page-id - (ldb/sort-by-order (ldb/get-page-blocks @conn message-page-id))) - min-order (db-order/gen-key nil (:block/order (first sorted-blocks))) - tx-data [{:db/id "page" - :block/uuid const/message-page-uuid - :block/name "message-page" - :block/title "message-page" - :block/created-at 1725024677501 - :block/updated-at 1725024677501 - :block/type "page"} - {:block/uuid (random-uuid) - :block/parent "page" - :block/order min-order - :block/title (dt/write-transit-str message) - :block/page "page" - :block/updated-at 1724836490810 - :block/created-at 1724836490810}]] - (batch-tx/with-batch-tx-mode conn {:e2e-test const/downloaded-test-repo :frontend.worker.pipeline/skip-store-conn true} - (d/transact! conn tx-data)) - (m/? (new-task--wait-all-client-ops-sent)) - (log :sent-message message)))) - -(defn new-task--wait-message-from-other-client - "Return a task that return message from other client" - [block-title-pred-fn & {:keys [retry-message retry-count] :or {retry-count 4}}] - (c.m/backoff - {:delay-seq (take retry-count c.m/delays)} - (m/sp - (let [conn (get-downloaded-test-conn) - message-page-id (:db/id (ldb/get-page @conn const/message-page-uuid)) - first-block (when message-page-id - (first (ldb/sort-by-order (ldb/get-page-blocks @conn message-page-id)))) - first-block-title (some->> (:block/title first-block) dt/read-transit-str)] - (when-not (and (some? first-block-title) - (block-title-pred-fn first-block-title)) - (throw (ex-info (str "wait message from other client " retry-message) {:missionary/retry true}))) - first-block-title)))) - -(defn new-task--client1-sync-barrier-1->2 - [message] - (m/sp - (m/? (new-task--send-message-to-other-client (str message "-client1"))) - (m/? (new-task--wait-message-from-other-client #(= (str message "-client2") %))) - (log "sync-barrier-1->2" message))) - -(defn new-task--client2-sync-barrier-1->2 - [message] - (m/sp - (m/? (new-task--wait-message-from-other-client #(= (str message "-client1") %))) - (m/? (new-task--send-message-to-other-client (str message "-client2"))) - (log "sync-barrier-1->2" message))) - -(defn new-task--client1-sync-barrier-2->1 - [message] - (m/sp - (m/? (new-task--wait-message-from-other-client #(= (str message "-client2") %))) - (m/? (new-task--send-message-to-other-client (str message "-client1"))) - (log "sync-barrier-2->1" message))) - -(defn new-task--client2-sync-barrier-2->1 - [message] - (m/sp - (m/? (new-task--send-message-to-other-client (str message "-client2"))) - (m/? (new-task--wait-message-from-other-client #(= (str message "-client1") %))) - (log "sync-barrier-2->1" message))) - -(defn transact! - [conn tx-data] - {:pre [(seq tx-data)]} - (batch-tx/with-batch-tx-mode conn {:e2e-test const/downloaded-test-repo :frontend.worker.pipeline/skip-store-conn true} - (d/transact! conn tx-data))) - -(def new-task--stop-rtc - (m/sp - (rtc.core/rtc-stop) - (let [r (m/? - (m/timeout - (m/reduce - (fn [_ v] - (when (= :rtc.log/cancelled (:type v)) - (log :debug-stop-rtc v) - (reduced v))) - rtc-log-and-state/rtc-log-flow) - 3000 - :timeout))] - (is (not= :timeout r)) - ;; sleep 0.1s to ensure *rtc-lock released - (m/? (m/sleep 100)))))